THIET KE CHUONG TRINH Nội dung 8.1 Thiết kế chương trình là gì? 8.2 Các phương pháp thiết kế chương trình 8.3 Thiết kế hướng đối tượng 8.4 Một số điểm lưu ý khi mã hoá chương trình 101 8.1 Thiết kế chương trình là gì ? | " Là thiết kế chỉ tiết cầu trúc bên trong của phần mềm: thiết kế tính năng từng môđun và giao diện tương ứng. Thực tế bao gồm 2 nhiệm vụ cơ bản: ~. Thiết kế giải thuật nhằm thực hiện chức nang ma médun dam - nin Thiét ké cầu trúc dữ liệu: các dữ liệu dùng cho môđun, đáp ứng yêu câu xử lý, s. Đầu vào là các đặc tả của giai đoạn phân tích và thiết kế hệ thống.
ø - Đầu ra là các mô tả giải thuật. Thường người ta hay dùng. ký pháp do hoa. Tuy nhién khong bắt buộc có thể dùng ngôn ngữ diễn tả giải thuật: giả mã, sơ đồ khói hay PDL (ngôn ngữ mô tả chương trình).2 Các phương pháp thiết kế chương trình Có nhiều kỹ thuật thiết kế chương trình; —._ Hướng tiên trình (process) : Kỹ thuật thiết ké cầu trúc điêu khiên.
Hướng cấu trúc dữ liệu (data): Kỹ thuật thiết ké cầu trúc dữ liệu. Hướng sự vật/ đôi tượng (object): Kỹ thuật thiết kế hướng đôi tượng. oO đây chúng ta tập trung vào phương pháp thiết kế cấu trúc hoá và sử dụng kỹ thuật thiết kế hướng tiền trình- dựa vào các cầu trúc điều khiển.1 Thiết kế cấu trúc hỏa Nguyên tắc thiết kế cầu trúc hoá có nguồn gốc từ kỹ thuật lập trình cấu trúc mà bản chất là dựa vào các cầu trúc điều khiển cơ bản: tuần tự, re nhánh và lặp. Lý thuyết đã chứng minh rằng mọi chương trình đều có thể xây dựng được chỉ dựa vào 3 cầu trúc cơ bản trên.
Thiết kế cầu trúc hoá tỏ rõ những ưu diễm: — Tinh d6c lap của môdun: chỉ quan tâm vào-ra. — Làm cho chương trình dễ hiểu. Dễ theo dõi chương trình thực hiện. ; ~ Hé phitc tap sé dé hiéu nho tiếp cận phân cấp.
102 Một vẫn dé quan trọng trong thiết kế cầu trúc là không được sử dụng cầu trúc nào khác ngoài 3 cầu trúc trên. Thí dụ, một số người có thói quen sử dung GOTO. Vay GOTO 1a gi va loai b6 GOTO ra sao? Ngudi ta cho ra GOTO ding để chuyên điều khiển (nhày) đến một nhân nhất định. GOTO phá vỡ tính cầu trúc của lập trình cấu trúc hóa và không thể quản lý được.
GOTO có thể loại bỏ được. Tuy nhiên, để tạo điều kiện cho người lập trình không bị quá gò bó vào tính có câu trúc, người ta vẫn cho phép dùng GOTO song rất hạn chế. Thí dụ dưới đây minh hoạ 1 chương trình Spagetti và chương trình sau khi loại bỏ GOTO. Start: Get (Time-on, Time -off, Time, Setting, Temp , Switch) if Switch = o ff goto off if Switch = on goto on goto Cn tnd off: if Heating-status = on goto Sw-off goto loop on: if Heating-status = off goto Sw-on goto loop Cntrid: if Time = Time-ong oto on if Time = T ime-off goto off if Time < Time-ong oto Start if Time > T ime-off goto Start if Temp > Setting then g otooff if Temp < Setting thengotoon Sw-off: Heating -status := off goto Switch Sw-on: Heating -status := on Switch; Switch-heating loop: goto Start Chuong trinh duge cầu trúc hoá 103 loop — The Get statement finds values for the given variables from the system's — environment.
-Get (Time-on, Time-off, Time, Setting, Temp, Switch) ; case Switch of when On => if Heating-status = offthen Switch-heating ; Heating-status := on ; end if ; when Off => if Heating-status =on then Swich-heating ; Heating-status := off ; end if; when Controlled => if Time >= Time-on and Time <= Time-off then if Temp > Setting and Heating-status = on then Swich-heating; Heating-status = off; elsif Temp < Setting and Heating-status = off then Switch-heating; Heating-status := on ; end if; end if ; end case ; end loop ; 8.2 Sơ đồ cấu Irúc hóa Nassi. „_ Lưu đồ Nassi do hãng IBM đề xuất đề mô tả giải thuật theo hướng thiết kê cầu trúc. Lưu đồ này dùng 4 ký pháp cơ bản: tuân tự (nôi), rẽ nhánh (if.elsse), ré nhieu nhanh và lặp. Lưu đồ PAD do hãng Hitachi đề xuất.
Nó cũng sử dụng 4 thành phần tương tự như trong lưu đô Nassi, song có thêm 1 trục chính theo chiều thăng đứng. Các lưu đồ này được minh hoạ trong trang bên dưới. 104 a- Concatenation (Nối) b- selectfon (chọn) Xử lí Cond Y N z E Xử lí Xửtlí Xử lí c- case (Rẽ nhiều nhánh) đ- repetition (lặp) TH Cond Cond TT2 TT3 Treatment Treat- Treat 3 Treatment} = ment1 Treat Ment 2 Luu dé PAD ciia Hitachi a- concatemtion b- selection Mai | Treatment Treatment axis [4 Cond Treatment Treatinent c- case d- repetition Ề TTT7 Treatt ö ¢ M mee Treat2 WHILE UNTIL 1 \ Cond Treatment |] Cond al Treatment ụ TT3 } Treat3 { i haa 8.3 Phương pháp Giắcsơn (Jackson) Phương pháp Giắcsơn được sử dụng để miêu tả các câu trúc phân cập và được sử dụng trong, nhiều lĩnh vực khác nhau. Phương pháp cũng sử dụng các câu trúc điều khiển cơ bản như các phương pháp trên.
105 A* Bo Ký pháp rẽ nhánh Ký pháp lặp Thí dụ 8.4 Phương pháp Wany (Warnier) Hệ thống quản lý nhàn sự Đăng nhập Xử lí Dang xuất Thêm Thay đồi Hiện thông tin Xoá nhân viên thông tin nhân viên 4§D biểu diễn các chức năng của l HT nhân sự' 8.3 Thiết kế hướng đối tượng Thiết kế hướng đôi tượng là 1 xu hướng phát triển gần đây. Nó dựa trên khái niệm căn bản là đôi tượng (ObjeL ) và lớp( Class) cùng các tính chất cơ bản của chúng. Việc phát triên theo hướng đối tượng thường gan liền với một mô hình hướng đổi tượng và ngôn ngữ cài đặt hướng đối tượng. Ngày nay UML cing vai Rational Rose là một công cụ hỗ trợ cho phát triển hướng đối tượng.
Các ngôn ngữ cài đặt có thê là C++ hay ngôn ngữ hướng đối tượng, khác. Khái niệm hướng đối tượng * Doi tượng là những thực thẻ trong hệ thông phân mềm. biểu diễn các thẻ hiện trong thể giới thực "hay là các thực thẻ của hệ thông. *- Lớp các thực thể là các mẫu của đối tượng và dùng đề tạo các đối tượng.
* Lớp đối tượng có thể thừa kế các tính chất và các dịch vụ (services) từ các lớp khác. #* Một đối tượng là một thực thể có một trạng thái và xác lập một tập tác thao tác trên trạng thái đó. Trạng thái được biểu diễn như một tập các thuộc tính. Các thao tác liên kết với đối tượng và cung cấp các dịch vụ cho.
các đôi tượng khác cái sẽ yêu cầu các dịch vụ đề thực hiện các tính toán khi được yêu câu. Doi tượng được tạo ra phù hợp với định nghĩa cúa lớp. Việc định nghĩa lớp đổi tượng phục vụ cho việc tạo ra các đối tượng của lớp đó. Nó bao gòm việc khai báo các thuộc tính và các dịch vụ của lớp đó.
Employee name: string address: string dateOfBirth: Date em ployeeNo: integer socialSecurilyNo: string department: Dept manager: Employee salary: integer status: (current, left, retired} taxC ode: integer join () leave () retire () changeDetails () Truyền thông giữa các đối tượng + Nhìn chung, các đối tượng giao tiếp với nhau theo cơ chế truyền thông điệp. + Thông điệp gồm: —_ Tên của dịch vụ được yêu cầu bởi doi tượng gọi. — Bản sao các thông tin được yêu cầu đề thực hiện dịch vụ và tên của đối tượng chứa kết quả của dịch vụ. 107 — Trong thực tế, thông điệp được cài đặt theo cơ chế gọi thủ tục.
— Name = tên thủ tục. — Information = danh sách tham sô. Thí dụ Call a method associated with a buffer // object that returns the next value // inthe buffer v=circularBuffer.Get () ; // Call the method associated with a // thermostat object that sets the // temperature to be maintained thermostat.sefTemp (20) ; Interacting objects o1: C1 o4: C4 state 01 siate o4 ops1() ƒ ops4 () ẤN | o5:C5 state 05 ops5() Khái quát hóa và kế thừa ` » Các đôi tượng là các thành viên của lớp định nghĩa cho kiểu các thuộc tính và các phép toán. Các lớp có thẻ sắp xếp theo kiến trúc phân cấp, có 1 lớp cao nhất là super-class.
Đó là lớp khái quát nhất của 1 hay nhiều các lớp con khác (sub-elasses) 108 *_ Một lớp con kế thừa các thuộc tính và các thao tác của lớp cha và có thể có thêm các thuộc tính và các phương thức mới riêng của mình. * Su khái quát hóa trong UML được cải đặt như kế thừa trong các ,"gôn ngữ lập trình hướng đối tượng. Một cấu trúc phân cấp Employee — Manager Program mer budgetsC ontrolled Bugle ca dateAppointed 0< 410006501 Project Dept. Strategic Manager Manager Manager Projects dept responsibilities 2.
Sự thay đôi bên trong đối tượng không ảnh hưởng ‹ đến người dùng. ~ Mọi tác động đến đối tượng đêu thông qua cơ chế truyền thông điệp. Cải đặt Ấn trong lập trình hướng đối tượng- OOP (Object ~ Oriented programning) * Hai nhiém vu trong lap trình: —_ Người tạo các lớp đôi tượng. — Người lập trình khách.
s Hai nguyên nhân thực hién an trong OOP: —. Cho phép khách truy nhập và sử dụng các mục tương ứng. Một số lớp bị ân và không nhất thiết khách phải biết va truy nhập tới. Cho phép nhà thiết kế thay đổi.
định nghĩa lại mà không ảnh hưởng đến ứng dụng Employee name: string address: string dateOfBirth: Date employeeNo: integer socialSecurityNo: string department: Dept manager: Employee salary: integer Status: {current, left, retired} taxC ode: integer join () leave () retire () changeDetails () Chú ý: —. Các ngôn ngữ lập trình khác nhau có cách cài đặt khác nhau. — Một số phương thức chỉ dành cho 1 số người như bạn bè (friend), một số khác dùng chung (public) và một số khác dùng riêng (private, static, public, protected). 3 Kế thừa (Inheritance) Tai sir dung trong OOP Đề mã hóa các lớp thi chi phí là khá lớn.
Việc tái sử dụng các lớp sẽ giảm chỉ phí và đó là một đặc trưng quan trọng trong, OOP. Cách tốt nhất đề tái sử dụng một lớp: tái sử dụng trực tiếp như là các trường hợp riêng (boundary) nhằm giải quyết van đề. Thứ hai là dùng các biến đối tượng lớp. dé xây dựng các lớp mới (đối tượng trong các lớp mới).
Nguyên tắc cầu thành cũng gọi là tụ hep (aggregation). Nguyên tắc này thể hiện quan hé “has-a relationship”. 110 *_ Thứ ba là thể hiện nguyên tắc kế thừa. + Các lớp cơ sở => các lớp kê thừa.
Đa hình trong OOP + Khi xây dựng các lớp kế thừa trong OOP, có thể là: các lớp kế thừa định nghĩa cùng 1 hành vi (function) như lớp cơ sở và do vậy trình biên dịch không thẻ xác định được sử dụng hành vi của lớp nào.