1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu lập trình cấu trúc

21 772 4
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 410 KB

Nội dung

Tài liệu lập trình cấu trúc

Trang 1

MỤC LỤC:

Tóm tắt trang 2 Giới thiệu trang 2

Lập trình cấu trúc là gì trang 2 Lập trình cấu trúc trong ngữ cảnh công nghệ phần mềm

trang 3 Lập trình cấu trúc theo quan điểm của TRIZ trang 6

Khắc phục sự phức tạp để đạt độ tin cậy ổn định trang 6

Cấu trúc lệnh(cấu trúc điều khiển) trang 6

Đơn giản hóa các hệ thống trang 8 Lược bỏ bớt câu lệnh goto trang 9 Ứng dụng TRIZ trong phương pháp Top – Down trang 11

Ứng dụng TRIZ trong phương pháp Bottom – Up trang 17

Lập trình cấu trúc được xem như là một xu hướng trang 21 Kết luận trang 22

Page | 1

Trang 2

f Nguyên tắc 16 (Nguyên tắc giải tác động thiếu hoặc thừa): Nếu như khó nhận được 100% hiệu ứng, kết quả cần thiết nên nhận ít hơn hoặc nhiều hơn một chút Lúc đó bài toán

có thể trở nên đơn giản và dễ giải hơn một cách đáng kể

I.GIỚI THIỆU:

I.1 LẬP TRÌNH CẤU TRÚC LÀ GÌ:

Lập trình cấu trúc là một tập con của lập trình thủ tục Trong một chương trình máy tính, các

khối chức năng có thể được thực hiện không chỉ theo trình tự mà còn có thể theo các tình huống

và lặp lại nhiều lần Phương pháp lập trình cấu trúc được dựa trên các mô hình toán học của Bohm và Guiseppe, theo đó, một chương trình máy tính có thể được viết dựa trên ba cấu trúc: trình tự, quyết định và vòng lặp.Trình tự nghĩa là các câu lệnh được thực hiện theo trình tự nhất định: trên xuống.Quyết định là sự qui định sẽ thực hiện chương trình như thế nào phụ thuộc vào

sự thoả mãn các điều kiện nhất định

Vòng lặp thể hiện sự thực hiện có tính lặp một số đoạn lệnh của chương trình khi các điều kiện nào đó vẫn được thỏa mãn.Thông qua các cấu trúc trên, mã chương trình trở nên sáng sủa và dễ đọc

Phương pháp lập trình thủ tục hay lập trình cấu trúc thường đi đôi với phương pháp phân tích

trên xuống (top-down) Theo phương pháp này, người thiết kế hệ thống chia các chức năng

(hàm) chính của hệ thống thành các chức năng nhỏ hơn, đến lượt mình, các chức năng nhỏ này

Trang 3

lại được chia tiếp thành các chức năng nhỏ hơn nữa cho đến khi được các khối (hàm) chương trình đủ nhỏ Việc phân tích này được thể hiện trực quan theo sơ đồ khối.

I.2 LẬP TRÌNH CẤU TRÚC TRONG NGỮ CẢNH CÔNG NGHỆ PHẦN MỀM

Gần cuối những năm 1960 khi phạm vi phát triển phần mềm ngày càng được mở rộng, lúc đó môn khoa học công nghệ phần mềm cũng ra đời Các ngôn ngữ lập rình như COBOL và

FORTRAN hầu như được sử dụng cho các ứng dụng kinh tế và khoa học Để làm cho những chương trình này đạt được hiệu quả cả về thời gian và không gian bộ nhớ, thì thường sử dụng những câu lệnh Goto để xây dựng nên những quy trình phức tạp cho dù bị bị cho là những chương trình phức tạp, rắc rối

E.Dijkstra đã cho thấy được nguy hại của những câu lệnh Goto được sử dụng trong một chương trình đó là dễ dàng để hiểu và đã ủng hộ cho lập trình cấu trúc vì có thể loại bỏ đi được những lệnh Goto và thay vào đó sử dụng 3 khái niệm điều khiển cơ bản bao gồm (Sequencing,

Selection và Loop) Với những hàm lập trình – người lập trình được khuyến khích để thiết kế/viết code cho những mô hình của chương trình bước từng bước theo phong cách từ trên xuốngdưới

Nhiều người lập trình ở thời điểm này đã phản đối ý kiến của Dijkstra, cho rằng: “việc viết những chương trình mà chỉ cần có 3 construct điều khiển thì không dễ chút nào và cho rằng lệnh goto vẫn cần thiết trong nhiều trường hợp” Dijkstra đã đưa ra bằng chứng cho thấy rằng bất cứ chương trình nào đều có thể được viết chỉ với 3 construct kiểm soát trên (ông đưa ra dẫn chứng lệnh goto có thể được viết với Selection trong khi nhảy ngược trở lại với các vòng lặp (Loops).Trong lúc thí nghiệm, một vài construct điển khiển khác nữa được đề xuất thêm, bao gồm lựa chọn nhiều tuyến đường đi, lặp có điều kiện, ngắt vòng lặp, và xử lý ngoại lệ Vì thế đề xuất lập trình cấu trúc đã được đồng ý

Nó được hiểu trong lập trình cấu trúc rằng một quy trình mà có một đầu vào và một đầu ra nên được tinh chế từng bước một bằng cách sử dụng 3 construct điều khiển cơ bản và những

construct điều khiển khác được biểu diễn trong hình 1 và 2 dưới đây

Page | 3

Trang 4

Hình 1: 3 construct điều khiển cơ bản

Hình 2: 4 construct điều khiển phụ

Hình 3 và 4 dưới đây là ví dụ minh họa của một đoạn chương trình viết bằng 3 cách khác nhau

và 4 cách khác nhau

Trang 5

Hình 3: đoạn chương trình được viết theo 3 cách khác nhau.

Hình 4: đoạn chương trình được viết theo 4 cách khác nhau.

Để phân biệt được các đối số, các trường hợp đơn giản được minh họa ở hình 3 và 4 bằng cách

so sánh những biểu đồ luồng được vẽ theo 4 cách khác nhau: Goto (hình a), lập trình cấu trúc cơ bản được viết theo phương pháp copy (hình b1) và phương pháp biến điều khiển (hình b2), và các construct phụ (hình c)

II LẬP TRÌNH CẤU TRÚC THEO QUAN ĐIỂM CỦA TRIZ

Page | 5

Trang 6

Bây giờ, chúng ta sẽ xem lập trình cấu trúc theo cách nhìn của TRIZ.

II.1 Cần khắc phục sự phức tạp để đạt được sự tin cậy, ổn định:

Từ quan điểm của TRIZ về sự phát triển của các hệ thống kỹ thuật, chúng ta có thể rõ ràng thấy những sự cần thiết của công nghệ phần mềm và lập trình cấu trúc Giống như bât cứ hệ thống kỹ thuật khác, hệ thống phần mềm phát triển một cách nhanh chóng, ngày càng rộng lớn và mạnh

mẽ hơn trong các chức năng của chúng – đồng nghĩa với độ phức tạp cao hơn Để phát triển các

hệ thống phần mềm xa hơn – thì cần phát triển một vài phương thức để làm sao cho các hệ thống

đó trở nên đơn giản và dễ dàng kiểm soát, điều khiển Bởi vì sự quan tâm của khách hàng, người dùng đó chính là: hiệu suất -> độ tin cậy -> tiện lợi -> giá thành

II.2 Cấu trúc lệnh (cấu trúc điều khiển):

Một chương trình máy tính về bản chất là một bản mã hóa thuật tóan Thuật tóan được coi là dãy hữu hạn các thao tác sơ cấp trên tập đối tượng vào (Input) nhằm thu được kết quả ra (Output) Các thao tác trong một ngôn ngữ lập trình cụ thể được điều khiển bởi các lệnh hay các cấu trúc điều khiển, còn các đối tượng chịu thao tác thì được mô tả và biểu diễn thông qua các cấu trúc dữ liệu

Trong các ngôn ngữ lập trình cấu trúc, những cấu trúc lệnh sau được sửdụng để xây dựngchương trình Dĩ nhiên, chúng ta sẽ không bàn tới cấu trúc nhảy không điều kiện goto mặc dù ngôn ngữ lập trình cấu trúc nào cũng trang bị cấu trúc lệnh goto

Trang 8

II.3 Đơn giản hóa các hệ thống bằng cách sử dụng cấu trúc phân cấp, có thứ bậc:

Một hệ thống phần mềm hay một mô hình phần mềm có thể được xem như là một hệ thống trongnghĩa chung của nó trong TRIZ Một hệ thống là toàn bộ các thành phần làm việc cùng nhau để thi hành một chức năng nào đó, nó tạo ra những giá trị xuất ra nhờ sử dụng những giá trị nhập vào (output – input) Khái niệm cấu trúc phân cấp của hệ thống là một trong những kiến thức cơ bản trong TRIZ Nó được phát biểu trong nguyên tắc 7 (Nguyên tắc chứa trong):

- Đặt một đối tượng hay hệ thống trong đối tượng hay hệ thống khác

- Đặt một vài đối tượng hay vài hệ thống bên trong những đối tượng hay hệ thống khác.Nguyên tắc này đóng vai trò quan trọng trong thế giới phần mềm, ở đó việc xây dựng cấu trúc của các hệ thống phần mềm thì phổ biến và dễ dàng Khuyến khích phát triển một hệ thống phần mềm theo cấu trúc phân cấp từ cao xuống thấp

Bên cạnh đó TRIZ còn đưa ra những nguyên tắc để đơn giản hóa bất cứ hệ thống nào khi nó trở nên phức tạp Chẳng hạn như nguyên tắc 6 (vạn năng), nguyên tắc 1 (chia nhỏ) và nguyên tắc 2 (tách khỏi)

Nguyên tắc 6 phát biểu rằng:

- Một đối tượng hay một hệ thống có thể thực hiện được nhiều chức năng khác nhau, do

đó không cần sự tham gia của đối tượng hay hệ thống khác

Ý tưởng của nguyên tắc vạn năng này để đơn giản hóa các hệ thống phức tạp tuy nhiên nó có đôichút sự khác biệt nhưng không đáng kể: “đưa ra những chức năng cơ bản – đã chuẩn hóa và sử dụng chúng mọi nơi trong một diện rộng của ứng dụng”

Trang 9

Nguyên tắc 1 (Chia nhỏ) phát biểu rằng:

- Chia một đối tượng thành các phần độc lập

- Làm cho đối tượng đó trở nên tháo lắp được

- Tăng mức độ phân nhỏ của đối tượng

Nguyên tắc này thường được áp dụng đối với những ứng dụng, hệ thống phần mềm khó làm trọngói, nguyên khối, một lần Hay nói cách khác nó giúp chúng ta phân nhỏ một đối tượng, vấn đề thành các phần nhỏ hơn cho dễ quản lý, dễ thực hiện

II.4 Lược bỏ bớt những câu lệnh goto:

Kỹ thuật lược bỏ trong TRIZ có thể áp dụng để đơn giản các ứng dụng, hệ thống phức tạp Tronglập trình cấu trúc có thể xem xét đến việc bỏ bớt một số lệnh Goto Khi một thành phần của hệ thống bị hư hay không còn cần thiết nữa thì nó có thể được loại bỏ đi Chúng ta có thể dựa vào việc trả lời những câu hỏi sau để quyết định có nên loại bỏ một thành phần nào đó hay không trong ứng dụng:

Thành phần bị loại bỏ đó có bất cứ chức năng nào có ích trong ứng dụng (hệ thống) hay không?

Nếu có, tính năng hữu dụng đó có thể được thi hành trong phạm vi đối tượng nào hay là toàn bộ ứng dụng ?

Trước khi đề xuất thay thế lệnh goto bằng những construct kiểm soát trong lập trình cấu trúc, chúng ta có thể thấy câu lệnh goto có những chức năng có ích trong việc tạo quy trình kiểm soát việc nhảy đến bất cứ vị trí nào mà chúng ta muốn trong chương trình Lập trình cấu trúc lúc đầu

đề nghị rằng thay thế những câu lệnh goto đó bằng 3 construct điều khiển cơ bản Nhưng nhiều người lại phản đối rằng 3 construct điều khiển cơ bản đó không đủ tiện lợi và mạnh mẽ để thay thế cho những câu lệnh goto này Và vấn đề tranh luận về việc nên loại bỏ lệnh goto đã được chấp thuận sau khi những construct điều khiển cơ bản được thêm vào (được minh họa ở hình 2)

Vì vậy, theo nguyên tắc 2 (tách khỏi) của TRIZ thì rõ ràng những lệnh goto nên được loại bỏ Bởi vì lệnh goto thường làm cho quy trình trở nên phức tạp, làm cho việc viết các ứng dụng trở nên khó hiểu, không rõ ràng

Những câu lệnh goto nên được loại bỏ, bằng cách thay thế chúng bằng các construct điều khiển điều này đảm bảo việc lồng các khối lệnh được thực hiện đúng cách

Ở hình 3a là trường hợp điển hình của sử dụng lệnh goto phải bị cấm sử dụng trong lập trình cấu trúc Trong trường hợp này, các khối luồng, nhánh của 2 câu lệnh Selection, đang chồng lên nhau và vi phạm cấu trúc cây phân cấp Xem hình 5 dưới đây:

Page | 9

Trang 10

Hình 5: ví dụ skewed nesting các khối quy trình bị cấm trong lập trình cấu trúc

Để ý ở đây rằng cấu trúc cây phân cấp của các khối lệnh được nhận ra một cách dễ dàng hơn cấu trúc chồng lên nhau hay kiểu cấu trúc trong mạng phân cấp Các ngôn ngữ lập trình hiện đại được thiết kế sau này không có các lệnh Goto và có những giới hạn về mặt cú pháp của các construct điều khiển để ngăn cấp các skewed structures Vì thế mà những người lập trình ngày nay có thể sử dụng những quy tắc của lập trình cấu trúc mà không cần phải để ý tới nó

Theo cách này, lập trình cấu trúc khuyến khích hay đảm bảo cấu trúc cây phân cấp của các khối quy trình trong mỗi mô hình chương trình Việc gọi các quy trình của thủ tục con và các hàm là các phương thức cho phép chồng các luồng thủ tục Vì thế mà chúng ta có thể nói sự phân chia thành các module phần mềm là chiến lược để tạo ra sự đơn giản bên trong những module đó và dùng để hoán đổi giữa các module một cách linh hoạt

II.5 Ứng dụng TRIZ trong phương pháp Top – Down:

Quá trình phân tích bài tóan được thực hiện từ trên xuống dưới Từ vấn đề chung nhất đến vấn đề

cụ thể nhất Từ mức trừu tượng mang tính chất tổng quan tới mức đơn giản nhất là đơn vị

Trang 11

Quá trình phân rã bài tóan được thực hiện theo từng mức khác nhau Mức thấp nhất được gọi là mức tổng quan (level 0), mức tổng quan cho phép ta nhìn tổng thể hệ thống thông qua các chức năng của nó, nói cách khác mức 0 sẽ trả lời thay cho câu hỏi “Hệ thống có thể thực hiện được những gì?” Mức tiếp theo là mức các chức năng chính Ở mức này, những chức năng cụ thể được mô tả Một hệ thống có thể đựơc phân tích thành nhiều mức khác nhau, mức thấp được phép sử dụng các dịch vụ của mức cao Quá trình phân tích tiếp tục phân rã hệ thống theo từng chức năng phụ cho tới khi nào nhận được mức các đơn thể, khi đó chúng ta tiến hành cài đặt hệ thống.

Chúng ta sẽ làm rõ hơn từng mức của quá trình Top-Down thông qua bài tóan sau: Cho hai số nguyên có biểu diễn nhị phân là a = (a1, a2, , an), b = (b1, b2, , bn); a1, b1 = 0, 1, i = 1,2, n Hãy xây dựng tập các thao tác trên hai số nguyên đó

F5-Thương 2 số nguyên: a/b;

F6-Phần dư 2 số nguyên: a%b;

F7-Ước số chung lớn nhất của 2 số nguyên

Mức 1: Mức các chức năng chính: mỗi chức năng cần mô tả đầy đủ thông tin vào (Input), thông

tin ra (Output), định dạng (Format) và các hành động (Actions)

Chức năng F1: Chuyển đổi a, b thành các số hệ nhị phân.

Input: a: integer

Output: a = (a1,a2, ,an); (*khai triển cơ số b bất kỳ*)Format: Binary(a)

Page | 11

Trang 13

<Khai triển nhị phân của tổng là (sn, sn-1, s1s0)>

Trang 14

Chức năng F5: Thương hai số nguyên a,b:

}

Trang 15

Chức năng F6: Modul 2 số nguyên a,b.

Trang 16

}Như vậy ở trong phương pháp Top-Down này đã vận dụng nguyên tắc 1 (hay còn gọi là nguyên tắc phân nhỏ) trong TRIZ, chia nhỏ một bài tóan lớn, vấn đề lớn thành những vấn đề nhỏ hơn, đơn giản hơn

Để ý rằng ở đây, sau khi phân rã bài tóan ở mức 1, chúng ta chỉ cần xây dựng hai phép tóan cộng

và phép tính nhân các số nhị phân của a và b Vì hiệu hai số của a và b chính là tổng số của (a,-b).Tương tự như vậy, tích hai số a và b được biểu diễn bằng tổng của một vài lần phép nhân một bit nhị phân của a với b Phép tìm USCLN cũng tương tự như vậy

Đối với các hệ thống lớn thì quá trình còn được mô tả tiếp tục cho tới khi nhận được mức đơn vị chương trình Trong ví dụ đơn giản này, mức đơn vị chương trình xuất hiện ngay tại mức 1 nên chúng ta không cần phân rã tiếp nữa mà dừng lại để cài đặt hệ thống

II.6 Ứng dụng TRIZ trong phương pháp Bottom – Up:

Theo phương pháp này, chúng ta sẽ đi từ cái chung, từ các đối tượng thành phần ở mức cao tới các đối tượng thành phần ở mức thấp, từ mức đơn vị chương trình tới mức tổng thể, từ những đơn vị đã biết lắp đặt thành những đơn vị mới

Nếu như phương pháp Top – Down ở trên là phương pháp phân rã vấn đề một cách có hệ thống

từ trên xuống, được ứng dụng chủ yếu trong quá trình phân tích, thiết kế hệ thống thì phương pháp Bottom – Up thường được sử dụng cho quá trình cài đặt hệ thống Trong ví dụ ở phần 2.5 chúng ta sẽ không thể xây dựng được chương trình một cách hòan chỉnh nếu như ta chưa xây dựng được các hàm Binary(a), Addition(a,b), Subtraction(a,b), Multial(a,b), Division(a,b), Modulation(a,b), USCLN(a,b) Chương trình sau đây sẽ thể hiện quá trình cài đặt theo nguyên lýBottom – Up:

void Init(int *a, int *b){

printf(“\n Nhap a=”); scanf((“%d”, a);

Trang 17

printf(“\n Nhap b=”); scanf((“%d”, b);

Trang 20

Cách cài đặt một vấn đề được thực hiện từ mức đơn vị chương trình(hàm, thủ tục) đến mức lắp ghép các đơn vị chương trình thành một hệ thống hòan thiện là nội dung chính của nguyên lý Bottom – Up này.

II.7 Lập trình cấu trúc được xem như là một xu hướng:

Đề xuất lập trình cấu trúc đã đem đến một tác động mạnh vào cộng đồng phần mềm tại thời điểm

đó, bởi vì nó cấm sử dụng câu lệnh Goto thứ mà được nghĩ là không còn cần thiết trong lập trình.Nhưng đề xuất lúc đầu của 3 construct điều khiển cơ bản không đủ để thay thế cho lệnh Goto Vậy nó đóng vai trò gì trong công nghệ phần mềm? Đây là câu hỏi khiến chúng ta liên hệ tới quytắc sáng tạo TRIZ cụ thể là quy tắc 16: (nguyên tắc giải tác động “thiếu” hoặc “thừa”)

- Nếu như khó nhận được 100% hiệu ứng, kết quả cần thiết, nên nhận ít hơn hoặc nhiều hơn một chút Lúc đó bài toán có thể trở nên đơn giản và dễ giải hơn một cách đáng kể

Bây giờ chúng ta có thể xem toàn bộ cộng đồng phần mềm như là một hệ thống và vẽ biểu đồ hoạt động của nó bằng hình 6 dưới đây Trước khi có đề xuất lập trình cấu trúc, mọi người trong công đồng phần mềm dùng câu lệnh goto sẽ không bị giới hạn (bị cấm) Dijkstra đã chọn một chiến lược táo bạo trong việc đề xuất loại bỏ câu lệnh Goto bằng cách chỉ cho phép sử dụng 3 construct cơ bản Trong hình 6 cho thấy ban đầu có sự dao động trong suốt quá trình tranh luận

về vấn đề loại bỏ Goto và mất ít năm để chúng đạt tới mức đọ cân bằng của việc sử dụng các construct điều khiển (được thể hiện bằng đường cong a trong hình 6) Chúng ta có thể hình dung rằng xu hướng lập trình cấu trúc bây giờ có thể có những chiến lược khác nhau chẳng hạn như

“ôn hòa và chậm rãi” và “chỉ vượt quá mức một chút” được thể hiện bởi đương cong c và b tronghình 6 Một kế hoạch táo bạo luôn có phần thưởng xứng đáng đó là vấn đề đó đã trở nên được biết đến rộng rải, mặc dù vẫn còn đó những khuyết điểm cần phải khắc phục

Ngày đăng: 18/09/2012, 14:04

HÌNH ẢNH LIÊN QUAN

Hình 1: 3 construct điều khiển cơ bản - Tài liệu lập trình cấu trúc
Hình 1 3 construct điều khiển cơ bản (Trang 4)
Hình 4: đoạn chương trình được viết theo 4 cách khác nhau. - Tài liệu lập trình cấu trúc
Hình 4 đoạn chương trình được viết theo 4 cách khác nhau (Trang 5)
Hình 3: đoạn chương trình được viết theo 3 cách khác nhau. - Tài liệu lập trình cấu trúc
Hình 3 đoạn chương trình được viết theo 3 cách khác nhau (Trang 5)
Hình 5: ví dụ skewed nesting các khối quy trình bị cấm trong lập trình cấu trúc - Tài liệu lập trình cấu trúc
Hình 5 ví dụ skewed nesting các khối quy trình bị cấm trong lập trình cấu trúc (Trang 10)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w