Bài giảng Phân tích Thiết kế hệ thống - Bài 7: Thiết kế chương trình - Đào Nam Anh

7.1 Có cấu trúc hay không cấu trúc 7.2 Thiết kế cấu trúc 7.3 Lập lược đồ chương trình Giới thiệu Các kết quả thu được qua các giai đoạn phân tích, thiết kế tổng thể và thiết kế chi tiết (về giao diện, và cơ sở dữ liệu) dù là khá phong phú nhưng vẫn còn là chưa đủ để có thể chuyển sang lập trình được. Các yếu tố còn thiếu là: 1. Các chức năng xuất hiện trong các mô hình luồng dữ liệu (DFD) chỉ là các chức năng logic (thuộc lĩnh vực bài toán) mà chưa có các chức năng phù trợ cần thiết như là các chức năng đối thoại với người dùng, xử lý lỗi, xử lý đầu vào, đầu ra, tra cứu CSDL và các chức năng điều hành liên kết các chức năng khác. 2. Các liên quan giữa các chức năng trong DFD chỉ là các chuyển giao dữ liệu mà không phải là chuyển giao điều khiển (tức là chuyển giao sự thực hiện khi thi hành). Một đặc trưng không thể thiếu trong một chương trình là đặc trưng điều khiển (sự tuần tự, chọn, lặp và đặc biệt là lời gọi giữa các chương trình con). Đặc trưng này chưa hề có trong các DFD.

pdf39 trang | Chia sẻ: candy98 | Lượt xem: 643 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Phân tích Thiết kế hệ thống - Bài 7: Thiết kế chương trình - Đào Nam Anh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 Phân tích và thiết kế hệ thống System Analysis & Design Bài giảng 7: THIẾT KẾ CHƢƠNG TRÌNH TS Đào Nam Anh 2 Tham khảo • Systems Analysis and Design, Alan Dennis and Barbara Haley Wixom Fred Niederman John Wiley & Sons, Inc. • Dao Nam Anh, "Systems Analysis And Design", Course Book, University of Power, 201 3 Nội dung Chương 7. Thiết kế chương trình 7.1 Có cấu trúc hay không cấu trúc 7.2 Thiết kế cấu trúc 7.3 Lập lược đồ chương trình 4 Giới thiệu Các kết quả thu được qua các giai đoạn phân tích, thiết kế tổng thể và thiết kế chi tiết (về giao diện, và cơ sở dữ liệu) dù là khá phong phú nhưng vẫn còn là chưa đủ để có thể chuyển sang lập trình được. 5 Giới thiệu Các yếu tố còn thiếu là: 1. Các chức năng xuất hiện trong các mô hình luồng dữ liệu (DFD) chỉ là các chức năng logic (thuộc lĩnh vực bài toán) mà chưa có các chức năng phù trợ cần thiết như là các chức năng đối thoại với người dùng, xử lý lỗi, xử lý đầu vào, đầu ra, tra cứu CSDL và các chức năng điều hành liên kết các chức năng khác. 2. Các liên quan giữa các chức năng trong DFD chỉ là các chuyển giao dữ liệu mà không phải là chuyển giao điều khiển (tức là chuyển giao sự thực hiện khi thi hành). Một đặc trưng không thể thiếu trong một chương trình là đặc trưng điều khiển (sự tuần tự, chọn, lặp và đặc biệt là lời gọi giữa các chương trình con). Đặc trưng này chưa hề có trong các DFD. 6 Giới thiệu • Vì các thiếu sót này mà các DFD thu được từ giai đoạn phân tích còn phải được biến đổi, bổ sung thêm chi tiết thì mới trở thành đầu vào thực sự cho việc lập trình được. Vì vậy phải có thêm một giai đoạn thiết kế chi tiết, đó là thiết kế chương trình. Đây cũng chỉ là một giai đoạn của thiết kế, nhằm đưa ra các quyết định về cài đặt, chứ chưa phải là cài đặt, chưa phải là lập trình thực sự. 7 Giới thiệu • Kết quả của việc thiết kế chương trình là các lược đồ chương trình (cấu trúc các module), với đặc tả nội dung của từng module trong lược đồ chương trình, và các mẫu chương trình thử nghiệm. • Thiết kế chương trình theo hướng nào để hiệu quả? Liên quan đế câu hỏi này là thiết kế có cấu trúc hay không cấu trúc. Dưới đây là phân tích về sự lựa chọn hướng thiết kế cấu trúc và các phương pháp thiết kế. 8 Có cấu trúc hay không cấu trúc • Lập trình có cấu trúc là một kỹ thuật tiêu chuẩn được sử dụng để phát triển phần mềm. Lập trình cấu trúc được phát minh để giải quyết những thiếu sót của chương trình không có cấu trúc, dạng thường xuyên sử dụng câu lệnh GO TO để di chuyển từ chỗ này sang chỗ khác của chương trình. Sử dụng GO TO, người ta có thể chuyển về trước, về sau, hoặc bất cứ nơi nào trong chương trình. 9 Có cấu trúc hay không cấu trúc • Trong chương trình có sử dụng GO TO, các kết nối giữa các bộ phận của trở nên khá lộn xộn. Sự lộn xộn và đôi khi phức tạp của các mối liên kết giữa các bộ phận của chương trình giống như mỳ spaghetti. Loại của chương trình này khó hiểu và khó gỡ lỗi. Lập trình không cấu được xem như là một chiến lược kém hiệu quả. 10 Có cấu trúc hay không cấu trúc • Lập trình có cấu trúc là sử dụng các cấu trúc điều khiển (lựa chọn IF-THEN, SELECT CASE và vòng lặp) mà không không sử dụng lệnh GO TO, • Nguyên tắc thực hiện tuần tự có nghĩa là các lệnh phải được thực hiện theo thứ tự mà chúng xuất hiện. • Nguyên tắc lựa chọn có nghĩa là tùy theo điều kiện mà thực hiện lệnh tại nhánh THEN hoặc nhánh ELSE. Lựa chọn SELECT CASE cho phép chia làm nhiều hướng thực hiện tùy theo điều kiện. • Vòng lặp là REPEAT-UNTIL hoặc WHILE-END hoặc FOR-DO-END. 11 Có cấu trúc hay không cấu trúc • 12 Thiết kế cấu trúc • Phần này sẽ giới thiệu một số phương pháp thiết kế cấu trúc bằng cách chia nhỏ một chương trình thành các phần con được gọi là các module. Mỗi module là một bộ độc lập các mã lệnh. Module cũng được gọi là thủ tục, hoặc chương trình con. Ưu điểm của lập trình module là khả năng viết và kiểm tra mỗi module độc lập và trong một số trường hợp có thể tái sử dụng module trong các chương trình khác. Một chương trình bao gồm nhiều module. Ngoài ra, một module chính có thể gọi các module khác. 13 Thiết kế cấu trúc Các phương pháp sau đây dùng để thiết kế một chương trình bao gồm các module. • Thiết kế từ trên xuống (top-down) hoặc • Thiết kế từ dưới lên (bottom-up) • Thiết kế mịn dần 14 Thiết kế cấu trúc Thiết kế từ trên xuống • Một lập trình phương pháp đã được chứng minh là hiệu quả nhất được gọi là phân rã từ trên xuống. Phân rã từ trên xuống là quá trình chia nhỏ các thủ tục lớn thành các vào các phận nhỏ hơn (module) và cứ chia nhỏ tiếp đến khi đã đạt tới mức chi tiết thấp nhất. • Sử dụng phương pháp này, một vấn đề phức tạp được tách thành các phần đơn giản, có thể được lập trình dễ dàng. Trong mỗi giai đoạn, các mã lệnh hoặc các thủ tục có thể được kiểm tra các lỗi logic, sửa chữa hoặc thay đổi mà không ảnh hưởng tới các chương trình con khác. Kết quả sẽ là một chương trình với các module đáp ứng yêu cầu “có thể được sửa đổi một cách dễ dàng". 15 Thiết kế cấu trúc Thiết kế từ trên xuống • Chiến lược lập trình này tập trung vào phát triển một kiến trúc chương trình trước khi viết lệnh. Kết quả là một sơ đồ trông giống như một sơ đồ tổ chức với các module chính tại các module trên và nối xuống dưới các module cấp dưới. Biểu đồ cho các module liên quan đến nhau nhưng không mô tả chi tiết chương trình trong mỗi module. Biểu đồ cấu trúc này được gọi là Tổ chức Chương trình Cấu trúc (Hierarchical Program Organisation - HIPO) 16 Thiết kế cấu trúc Thiết kế từ trên xuống • Các nhiệm vụ đưa ra ở trên có thể được mô tả trong một biểu đồ phân cấp (HIPO) 17 Thiết kế cấu trúc Thiết kế từ trên xuống • Xác định và biểu diễn mối quan hệ giữa các module trong bài toán này cho phép lập trình viên tập trung vào tổ chức tổng thể và logic của chương trình mà không bị sa lầy trong các chi tiết. Một khi cấu trúc tổng thể của chương trình được hoàn thiện, có thể tiến hành mã hóa chi tiết của từng module. 18 Thiết kế cấu trúc 7.2.2 Thiết kế từ dƣới lên • Trong chiến lược thiết kế từ dưới lên, ta lấy các chương trình đã có sẵn để tạo nên các module bậc cao hơn. Như vậy là sử dụng các thiết kế hiện có để tạo ra một chương trình có hiệu quả tốt hơn 19 Thiết kế cấu trúc 7.2.2 Thiết kế từ dƣới lên 20 Thiết kế cấu trúc 7.2.3 Thiết kế mịn dần • Thiết kế từng bước mịn dần là một chiến lược thiết kế từ trên xuống. Chương trình được phát triển bằng cách liên tục làm tăng dần mức độ chi tiết của các thủ tục. • Trong mỗi bước làm mịn, một số các lệnh của các chương trình này được phân tách thành các lệnh chi tiết hơn. • Quá trình mịn dần kết thúc khi tất cả các mã lệnh được thể hiện trong các thư viện lệnh có sẵn hoặc có trong ngôn ngữ lập trình. Mỗi bước làm mịn là các quyết định thiết kế. Điều quan trọng là lập trình viên phải biết các tiêu chí cơ bản của dự án. 21 Lập lƣợc đồ chƣơng trình • Lược đồ chương trình còn gọi là lược đồ cấu trúc là một biểu diễn dưới dạng đồ thị của một tập hợp các module cùng với các giao diện giữa các module đó, bao gồm sự chuyển giao điều khiển và chuyển giao dữ liệu 22 Lập lƣợc đồ chƣơng trình Module chương trình • Định nghĩa: trong định nghĩa lược đồ cấu trúc thì module được hiểu là một chương trình con hoặc một cụm câu lệnh nằm trong chương trình hay trong một số ngôn ngữ lập trình có các UNIT, CLASS, OBJECT thì đây thực chất là các nhóm module chương trình tập hợp xung quanh một cấu trúc dữ liệu. 23 Lập lƣợc đồ chƣơng trình Module chương trình Các thuộc tính cơ bản của module: • Thông tin vào, ra: thông tin nhận được từ chương trình gọi nó hoặc thông tin trả lại cho chương trình gọi nó. • Chức năng hàm biến đổi từ đầu vào thành đầu ra. • Phương thức để thực hiện chức năng trên. • Dữ liệu cục bộ: các bộ nhớ hay cấu trúc dữ liệu dùng riêng cho module. 24 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình – Biểu diễn các module • Module được biểu diễn bằng một hình chữ nhật trên có ghi nhãn là tên module. Trường hợp module được định nghĩa sẵn trong hệ thống hay trong thư viện chương trình thì các cạnh bên được vẽ nét đôi. Tên module Module có sẵn 25 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình – Kết nối các module • Các module có thể được kết nối với nhau bằng các lời gọi, diễn tả bởi một đường liên kết có hướng. • Module A gọi module B với các dữ liệu đầu vào. • Module B thực hiện và trả lại kết quả cho module A A B 26 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình – Kết nối các module Module A gọi lặp module E và F A E F 27 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình – Kết nối các module Thứ tự thực hiện từ trái sang phải A E FB C D 28 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình Thông tin trao đổi giữa các module • Các thông tin được gửi kèm với lời gọi (các tham số) và thông tin trả về sau khi thực hiện lời gọi được thể hiện bằng các mũi tên nhỏ vẽ dọc theo cung biểu diễn cho lời gọi, có kèm theo tên của thông tin. Một ví dụ tính lương: Tính lương Tính phụ cấp Lên bảng lương Tính lương chính Ngày công Lương chính Loại phụ cấp Phụ cấp Lương phụ Lương chính 29 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình Chất lƣợng của Lƣợc đồ chƣơng trình • Ta chưa nên xem xét lược đồ chương trình mới được lập là phiên bản cuối cùng mà chỉ coi đây là phác thảo thiết kế module. Ta cần tiếp tục tinh chỉnh nó bằng cách gộp, tách hay san sẻ lại nhiệm vụ giữa các module để đạt được các tiêu chuẩn về chất lượng sau 30 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình • Sự tƣơng liên. Sự tương liên là mức độ ảnh hưởng lẫn nhau giữa các module. Một lược đồ chương trình tốt thì sự tương liên càng phải lỏng, càng phải đơn giản. 31 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình Các loại tương liên: • Tương liên về nội dung: ví dụ một module làm thay đổi nội dung (các lệnh) của module khác, rẽ nhánh sang một module khác hay sử dụng dữ liệu của module được gọi. Cần loại bỏ tương liên này. • Tương liên về điều khiển: là trường hợp một module này chuyển điều khiển cho một module khác. Tương liên điều khiển vi phạm nguyên tắc che giấu thông tin. Vì vậy tương liên điều khiển cũng nên tránh. • Tương liên về dữ liệu: đó là trường hợp hai module trao đổi dữ liệu cho nhau. Sự trao đổi dữ liệu càng đơn giản càng tốt. 32 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình • Sự cố kết. Là sự gắn bó giữa các phần bên trong của một module. Module càng cố kết thì chức năng của nó càng dễ thấy, logic do đó dễ phát hiện lỗi, dễ bảo trì. 33 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình • Hình thái. Phạm vi điều khiển của một module là phần lược đồ chương trình bao gồm module đó và những module phụ thuộc (được gọi) trực tiếp hay gián tiếp từ nó. Phạm vi ảnh hưởng của một quyết định là mọi module nằm trong lược đồ chương trình, và chịu ảnh hưởng của quyết định đó. Một lược đồ chương trình tốt thì về mặt hình thái: Các quyết định có miền ảnh hưởng càng hẹp càng tốt. Mỗi phạm vi ảnh hưởng nằm trong phạm vi điều khiển tương ứng. 34 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình • Module A gọi module B, C. Khi đó phạm vi ảnh hưởng của A là B và C. A B C 35 Lập lƣợc đồ chƣơng trình Công cụ để diễn tả Lược đồ chương trình • Khi B có quyết định Q, các module A, E, F có sử dụng quyết định Q. • Vậy miền ảnh hưởng của quyết định Q chính là A, E, F O E F A D B C 36 Lập lƣợc đồ chƣơng trình Đặc tả các module Sau khi lập được lược đồ chương trình cho mỗi hệ thống con, ta phải đặc tả mỗi module trong đó, tức là miêu tả rõ nội dung của module. Đặc tả một module ta cần nêu rõ: • Thông tin đầu vào (Input), thông tin đầu ra (Output) • Các thao tác thực hiện trong chương trình: các đối thoại với người dùng, các xử lý lỗi, tra cứu CSDL, các xử lý, ... • Các dữ liệu cục bộ của module 37 Lập lƣợc đồ chƣơng trình Đóng gói thành module tải Kết hợp các module hợp thành một module tải thì tiết kiệm bộ nhớ nhưng chi phí thời gian tải chương trình sẽ nhiều hơn. Vì vậy chúng ta cần cắt lược đồ chương trình thành các module tải hợp lý. Thiết kế module tải phải căn cứ vào các yếu tố như: • Kích cỡ bộ nhớ, • Kích cỡ các module, • Tần suất lần gọi module, • Trong module tải, các module phải gắn kết với nhau. 38 TÓM TẮT Chương 7. Thiết kế chương trình 7.1 Có cấu trúc hay không cấu trúc 7.2 Thiết kế cấu trúc 7.3 Lập lược đồ chương trình 39 Questions https://sites.google.com/site/daonamanhedu/teaching/softw areanalysisanddesign
Tài liệu liên quan