IV.1. Khái niệm về đơn thể
Ý tưởng cơ bản của lập trình cấu trúc là phân rãỵ vấn đề lớn thành các vấn đề nhỏ hơn cho đến khi nhận được các vấn đề tương đối đơn giản, mỗi vấn đề này được giải quyết bởi một đơn thể chương trình (module). Mỗi đơn thể cĩ các tính chất như sau :
a) Tính đơn thuần
• Chỉ giải quyết những đối tượng dữ liệu cĩ liên hệ với nhau trong phạm vi của vấn đề. • Cĩ một lối vào và một lối ra, bên trong chỉ dùng những cấu trúc điều khiển chuẩn. • Hoạt động chỉ phụ thuộc vào dữ liệu đưa vào chứ khơng phụ thuộc vào tình trạng
trước đĩ của nĩ. Mỗi đơn thể là một hàm dữ liệu vào, kết quả tiên đốn được.
b) Tính chuyên biệt
• Chỉ thực hiện một chức năng, nhiệm vụ nhất định.
• Khơng quá dài hoặc quá ngắn (lý tưởng là mỗi đơn thể cĩ từ 60 đến 70 dịng lệnh vừa nằm trọn trong một trang A4).
• Chỉ được khởi động bằng cách gọi.
c) Tính độc lập
• Là một đơn vị biên dịch. Cĩ thể viết và chạy thử độc lập.
Các ngơn ngữ lập trình bậc cao như Pascal (kỹ thuật dùng Unit), C, C++ (include các tệp chương trình ) và hầu hệ các cơng cụ lập trình thường gặp hiện nay đều cho phép lập trình theo đơn thể.
IV.2. Mối liên hệ giữa các đơn thể
Các đơn thể nối kết với nhau thành chương trình, tổ chức phân cấp dạng cây (tree). D B C G F E A
Hình 2.5. Mối liên hệ giữa các đơn thể
IV.2.1.Phân loại đơn thể
Cĩ 4 loại đơn thể :
a) Đơn thể điều khiển
Đơn thể điều khiển (Director Module) cĩ chức năng gọi các đơn thể khác xử lý.
b) Đơn thể xử lý
Đơn thể xử lý (Pcocessing Module) chuyên trách một nhiệm vụ nào đĩ trên vùng dữ liệu độc lập. Đơn thể xử lý được đơn thể điều khiển gọi tới và sau khi thực hiện xong chức năng, đơn thể xử lý trả quyền điều khiển trở lại cho đơn thể điều khiển.
c) Đơn thể vào/ra
Đơn thể vào/ra (IO Module) chuyên trách vào/ra dữ liệu, cĩ sự kiểm tra và xử lý sai sĩt. Đơn thể cũng do đơn thể điều khiển gọi tới giống như hoạt động của đơn thể xử lý.
d) Đơn thể chương trình con
(Subroutine Module) nhằm giải quyết một nhiệm vụ trọn vẹn nhưng cĩ quan hệ với các đơn thể khác. Đơn thể chương trình con được gọi thực hiện nhiều lần trong chương trình.
IV.2.2. Tổ chức một chương trình cĩ cấu trúc đơn thể
Cấu trúc chương trình gồm : - Cấu trúc nội tại của các đơn thể. - Mối liên hệ giữa các đơn thể.
Các đơn thể được tổ chức phân cấp dạng cây nhưng phải thỏa mãn tính cục bộ
tham chiếu (locality of Reference) : chỉ cĩ đơn thể mức cao hơn (cha) mới cĩ quyền
tham chiếu (gọi) đến đơn thể mức thấp hơn kề đĩ (con).
Những cấu trúc cây thỏa mãn tính cục bộ tham chiếu được gọi là cấu trúc cây
thuần túy (Pure tree Structure). Ví dụ 9 :
Hình 2.6. Cấu trúc cây thuần túy
− D chỉ phục vụ B, chỉ cĩ B mới cĩ quyền điều khiển D, C khơng thể gọi D.
− Giữa B và D chỉ cĩ một đường tương tác duy nhất là trao đổi tham biến. A C B E D
a) Đặc điểm của cấu trúc cây thuần túy
− Mỗi đơn thể chỉ được quyền điều khiển đơn thể con trực tiếp, giảm được tính phức tạp của chương trình.
− Các nhánh hồn tồn tách biệt nhau nên cĩ tính tương tác tối thiểu.
Ngoại lệ : Nếu một cơng việc nào đĩ cần thực hiện nhiều lần, nhiều chỗ trong
chương trình thì nên tổ chức thành một đơn thể chương trình con và vẽ riêng, khơng vẽ vào cấu trúc cây.
Như vậy, các đơn thể chương trình con chỉ đĩng vai trị thư viện, một sự mở rộng của ngơn ngữ lập trình. Trường hợp đơn thể chương trình con phức tạp thì cĩ thể tổ chức theo cấu trúc cây thuần túy.
Như vậy tồn bộ chương trình là một tập hợp các cấu trúc cây thuần túy.
Ví dụ 10 :
Hình 2.7. Cấu trúc cây thuần túy của chương trình và chương trình con
Các đơn thể chương trình con A C B E F F3 F1 F2 G1 G D
b) Thử nghiệm chương trình trên cấu trúc cây thuần túy
Quá trình thử nghiệm một chương trình :
− Thử nghiệm các đơn thể chương trình con trước.
− Thử nghiệm các đơn thể trong chương trình chính, từ dưới lên và riêng từng nhánh.
Cần phân biệt :
− Các đơn thể xử lý phụ thuộc vào ngữ cảnh (context) nào, là con của đơn thể nào ?
− Các đơn thể chương trình con độc lập với ngữ cảnh.
Để thử nghiệm chương trình cho trong hình vẽ trong ví dụ ở trên :
− Thử F và G trước (sau khi đã thử F1, F2, F3 và G1).
− Thử D và E rồi thử B.
− Thử C.
− Thử cả chương trình.