Công cụ thiết kế chương trình
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| structure chart/ˈstrʌktʃə tʃɑːt/ | Biểu đồ cấu trúc |
| state-transition diagram/steɪt trænˈsɪʃn ˈdaɪəɡræm/ | biểu đồ chuyển trạng thái |
| pseudocode/ˈsuːdəʊkəʊd/ | Giả mã |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | Phân rã |
| subroutines/ˈsʌbruːtiːnz/ | hàm con |
| parameters/pəˈræmɪtəz/ | tham số |
| top-down design/tɒp daʊn dɪˈzaɪn/ | thiết kế từ trên xuống |
| states/steɪts/ | trạng thái |
Năm phần mềm trở thành kỹ thuật
- Vào tháng 10 năm 1968, năm mươi lập trình viên hàng đầu thế giới gặp nhau tại Garmisch, Đức để thảo luận về lý do các chương trình lớn đang thất bại: trễ hạn, vượt ngân sách, không đáng tin cậy. Họ đã tạo ra một cụm từ cho những gì đang thiếu hụt: kỹ thuật phần mềm.
- Lời phàn nàn rất đơn giản. Nhà xây dựng vẽ trước khi thi công. Kỹ sư tính toán trước khi cắt. Các lập trình viên đang gõ code trước khi ai đó vẽ ra chương trình sẽ như thế nào.
- Những bản vẽ ra đời từ thập kỷ này chính là thứ bạn sẽ sử dụng trong giai đoạn thiết kế: biểu đồ cấu trúc, cho thấy chương trình được chia nhỏ thành những phần nào, và biểu đồ chuyển trạng thái, cho thấy cách nó vận hành.
- Bài học này hướng dẫn cách đọc chúng, cách xây dựng chúng, và cách biến biểu đồ cấu trúc thành mã giả.
Thiết kế quyết định điều gì
- Phân tích nói cái gì chương trình phải làm. Thiết kế quyết định làm thế nào: cấu trúc dữ liệu, thuật toán, các mô-đun và giao diện.
- Giai đoạn thiết kế tạo ra các bản vẽ mà lập trình viên có thể viết code dựa vào: biểu đồ luồng cho logic của một thuật toán, mã giả cho cùng nội dung dưới dạng văn bản, biểu đồ cấu trúc cho các mô-đun, và biểu đồ chuyển trạng thái cho hành vi.
- Mỗi công cụ trả lời một câu hỏi khác nhau, và đề thi hỏi cái nào phù hợp.
Logic của một thuật toán, được vẽ trước khi viết code
Phòng thí nghiệm quy trình phần mềm
Phân loại các ví dụ phát triển theo giai đoạn hoặc công cụ chúng thuộc về.
Biểu đồ cấu trúc
- Một biểu đồ cấu trúc thể hiện sự phân rã theo cấp bậc của một chương trình thành các mô-đun, các hàm con và các tham số truyền giữa chúng. Thiết kế từ trên xuống này chia một vấn đề lớn thành các vấn đề nhỏ hơn, mỗi vấn đề trở thành một mô-đun.
- Mỗi mô-đun là một hình chữ nhật. Một đường nối gọi hàm ở trên với mô-đun được gọi ở dưới. Các mô-đun cùng cấp được gọi từ trái sang phải.
- Các mũi tên nhỏ bên cạnh các đường mang dữ liệu: một tham số được truyền xuống vào mô-đun, một kết quả được trả lên cho gọi hàm. Một hình thoi đánh dấu sự lựa chọn, một mũi tên cong là vòng lặp.

Cấp bậc trên các đường, dữ liệu trên các mũi tên
Biểu đồ cấu trúc hiển thị:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Biểu đồ cấu trúc là sự phân cấp thành các mô-đun, với tham số đi xuống và kết quả đi lên.
Chia nhỏ một bài toán thành các mô-đun từ trên xuống dưới được gọi là:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Thiết kế từ trên xuống dưới tạo ra một giải pháp phân mô-đun.
Ví dụ minh họa: đọc các signature từ biểu đồ
CalculatePay
/ | \
GetEmployee CalculateBonus CalculateTax
returns: takes: sales takes: gross
employeeID returns: bonus returns: tax
GetEmployeenhận được không gì và trả về ID nhân viên:FUNCTION GetEmployee() RETURNS INTEGER.CalculateBonusnhận số doanh số xuống và gửi tiền thưởng trở lên:FUNCTION CalculateBonus(Sales : REAL) RETURNS REAL.CalculateTaxnhận lương cơ bản và trả về thuế. Mọi mũi tên trên biểu đồ đều là tham số hoặc giá trị trả về trong header; một header có tham số mà biểu đồ không hiển thị là sai.
Trên biểu đồ cấu trúc, một mũi tên nhỏ chỉ xuống từ nơi gọi vào một mô-đun cho thấy một ____ đang được truyền vào.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Mũi tên xuống là tham số đi vào; mũi tên lên là kết quả trả về. Kết hợp chúng tạo thành header của mô-đun.
Ví dụ minh họa: xây dựng biểu đồ cấu trúc
- Một chương trình đọc điểm của học sinh, tính điểm trung bình và xuất loại grade. Vẽ một biểu đồ cấu trúc.
- Mô-đun trên cùng:
ProcessStudent. Bên dưới nó, từ trái sang phải:ReadMarks, trả về mảng điểm;CalculateAverage, nhận mảng điểm xuống và trả về điểm trung bình;OutputGrade, nhận điểm trung bình xuống và trả về không gì. - Ba yếu tố được điểm: cấp bậc với nhiệm vụ chính ở trên, các nhiệm vụ phụ theo thứ tự chạy, và các tham số có tên trên các mũi tên đúng hướng. Một mũi tên không nhãn tối đa chỉ được nửa điểm.
Từ biểu đồ cấu trúc sang mã giả
- Mô-đun trên cùng trở thành chương trình chính; mỗi hình chữ nhật bên dưới trở thành thủ tục hoặc hàm mà header của nó được đọc từ các mũi tên; chương trình chính gọi chúng theo thứ tự từ trái sang phải.
PROCEDURE ProcessStudent()
DECLARE Marks : ARRAY[1:10] OF INTEGER
DECLARE Average : REAL
Marks ← ReadMarks()
Average ← CalculateAverage(Marks)
CALL OutputGrade(Average)
ENDPROCEDURE
- Giá trị trả về nghĩa là một
FUNCTION … RETURNS; một mô-đun không trả về gì là mộtPROCEDURE. Danh sách tham số chính xác là các mũi tên hướng xuống.
Sắp xếp các bước thiết kế một chương trình với biểu đồ cấu trúc theo thứ tự.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Từ trên xuống: nhiệm vụ, nhiệm vụ phụ, luồng dữ liệu, headers, các lời gọi. Biểu đồ hoàn tất trước dòng code đầu tiên.
Một mô-đun mà các mũi tên biểu đồ cấu trúc cho thấy giá trị được trả lên trên nên được viết dưới dạng HÀM.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Giá trị trả về khiến nó trở thành HÀM … TRẢ VỀ. MộtProcedure không trả về gì cả.
Biểu đồ chuyển trạng thái
- Một biểu đồ chuyển trạng thái ghi lại hành vi của hệ thống: các trạng thái mà nó có thể ở và các sự kiện đẩy nó từ trạng thái này sang trạng thái khác.
- Mỗi trạng thái là một hình tròn hoặc hộp bo góc; mỗi chuyển tiếp là một mũi tên được gắn nhãn với sự kiện gây ra nó, đôi khi kèm theo hành động thực hiện. Một marker chỉ ra trạng thái bắt đầu.
- Nó phù hợp với các hệ thống chờ đợi sự kiện và phản hồi: máy bán hàng tự động, đèn giao thông, khóa cửa, giao diện người dùng.

Mọi trạng thái, mọi sự kiện, mọi mũi tên
Biểu đồ chuyển trạng thái hiển thị:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Trạng thái là hình tròn; chuyển tiếp là các mũi tên có nhãn sự kiện. Lý tưởng cho máy bán hàng tự động, khóa, đèn giao thông.
Biểu đồ chuyển trạng thái hiển thị điều gì? Chọn tất cả các đáp án đúng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Các trạng thái, chuyển tiếp có nhãn và dấu hiệu bắt đầu. Thời gian không phải là một phần của biểu đồ.
Ví dụ minh họa: đọc biểu đồ khóa cửa
- Khóa mở với mã 2, 5, 9. Bắt đầu ở trạng thái Khóa. Nhấn 2 chuyển sang Một chữ số đúng; nhấn 5 từ đó chuyển sang Hai chữ số đúng; nhấn 9 từ đó chuyển sang Mở khóa.
- Phím bất kỳ nào khác từ bất kỳ trạng thái chờ nào đều quay về Khóa: sơ đồ cũng hiển thị các mũi tên đó, và một sơ đồ bỏ qua chúng sẽ bị thiếu sót. Điều gì xảy ra nếu nhấn 2 trong khi Mở khóa? Nếu không có mũi tên nào chỉ ra, thiết kế chưa quyết định.
- Đó chính là mục đích của sơ đồ: mọi trạng thái phải chỉ rõ những gì xảy ra trên mỗi sự kiện, nên các chuyển đổi bị thiếu được tìm thấy trên giấy chứ không phải bởi khách hàng.
Biểu đồ chuyển trạng thái giúp dễ dàng nhận ra các chuyển tiếp bị thiếu hoặc không được xử lý, vì mọi trạng thái và các sự kiện giữa chúng đều được bố trí rõ ràng.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Nhìn thấy mọi trạng thái và sự kiện tiết lộ các trường hợp bạn chưa xử lý — ví dụ: một đồng xu thứ hai bất ngờ xuất hiện trong máy bán hàng tự động.
Chọn công cụ
- Để minh họa cách một chương trình được chia thành các mô-đun và những gì được truyền giữa chúng: một biểu đồ cấu trúc.
- Để minh họa cách một hệ thống hoạt động theo thời gian trước các sự kiện, đặc biệt là máy móc hoặc giao diện có các chế độ: một sơ đồ chuyển trạng thái.
- Để minh họa logic từng bước của một thuật toán: biểu đồ luồng hoặc mã giả. Hãy nêu loại và giải thích tại sao.
Gắn mỗi công cụ thiết kế với những gì nó hiển thị.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Mỗi công cụ xem xét thiết kế theo cách khác nhau — cấu trúc (mô-đun), hành vi (trạng thái), luồng (biểu đồ lưu đồ) hoặc các bước (pseudocode).
Bộ điều khiển đèn giao thông phải phản hồi với bộ hẹn giờ và nút bấm cho người đi bộ. Công cụ thiết kế nào ghi lại hành vi của nó tốt nhất?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Đỏ, đỏ-vàng, xanh lá, vàng là các trạng thái; bộ hẹn giờ và nút bấm là các sự kiện. Biểu đồ cấu trúc sẽ hiển thị các mô-đun, không phải hành vi.
Điểm số dễ mất
- Biểu đồ cấu trúc không phải là biểu đồ luồng. Nó thể hiện phân cấp và tham số, không phải thứ tự các quyết định bên trong một mô-đun.
- Gán nhãn cho mỗi mũi tên bằng tên của tham số hoặc kết quả và chỉ hướng đúng. Một mũi tên trỏ trơn tru không mang lại thông tin gì.
- Trạng thái là một điều kiện mà hệ thống đang ở, đang chờ; sự kiện là điều gì đó xảy ra với nó. "Nhấn 5" là một sự kiện, không phải trạng thái.
- Các tiêu đề mã giả phải khớp với biểu đồ: cùng tham số, cùng giá trị trả về, cùng thứ tự gọi.
Bạn đã nắm vững
- một biểu đồ cấu trúc thể hiện sự phân rã từ trên xuống dưới thành các mô-đun, với các tham số được truyền xuống và các kết quả được trả lên trên các mũi tên có gắn nhãn
- đọc các tiêu đề mã giả từ nó: các mũi tên đi xuống là danh sách tham số, một mũi tên đi lên tạo thành một
FUNCTION … RETURNS, và mô-đun chính gọi từ trái sang phải - một sơ đồ chuyển trạng thái thể hiện các trạng thái và các sự kiện di chuyển giữa chúng, và làm lộ rõ các chuyển đổi mà ai cũng chưa quyết định
- phân rã → biểu đồ cấu trúc; hành vi → sơ đồ chuyển trạng thái; logic của một thuật toán → biểu đồ luồng hoặc mã giả