Bài giảng Kỹ thuật lập trình - Bài 5: Thiết kế chương trình cung cấp cho người học các kiến thức: Nguyên tắc chung thiết kế chương trình, thiết kế giải thuật, thiết kế giải thuật. Mời các bạn cùng tham khảo nội dung chi tiết.
Trịnh Thành Trung (ThS) trungtt@soict.hust.edu.vn Bài THIẾT KẾ CHƯƠNG TRÌNH Nội dung Nguyên tắc chung Thiết kế giải thuật Thiết kế liệu Nguyên tắc chung Trong thiết kế chương trình Phẩm chất chương trình tốt ▪ Phẩm chất chương trình tốt ▫ Cấu trúc tốt ▫ Logic chương trình + biểu thức diễn đạt theo cách thông thường ▫ Tên dùng chương trình có tính chất miêu tả ▫ Chú thích hợp lý ▫ Tơn trọng chiến lược divide/conquer/association ▪ Làm để tạo chương trình có phẩm chất tốt ▫ Thiết kế top-down ▫ Tinh chỉnh bước Nguyên tắc chung Đơn giản ▪ Thể giải thuật vốn có, đừng kỳ bí ▪ Lựa chọn cấu trúc liệu cho việc viết giải thuật NNLT cụ thể đơn giản ▪ Tìm cách đơn giản hóa biểu thức ▪ Thay biểu thức lặp lặp lại CT tương ứng Nguyên tắc chung Trực tiếp ▪ Sử dụng thư viện lúc ▪ Tránh việc kiểm tra điều kiện không cần thiết Rõ ràng ▪ Dùng cặp dấu đánh dấu khối lệnh để tránh nhập nhằng ▪ Đặt tên biến, hàm, cho tránh nhầm lẫn ▪ Không chắp vá đoạn mã khó hiểu mà nên viết lại Nguyên tắc chung Cấu trúc tốt ▪ Tơn trọng tính cấu trúc chương trình theo mơ thức lập trình: ▫ Module: hàm/ thủ tục ▫ Hướng đối tượng: lớp ▫ Hướng thành phần: thành phần ▫ Hướng dịch vụ: dịch vụ ▪ Viết kiểm thử dựa cấu trúc phân cấp chương trình ▪ Tránh hồn tồn việc dùng goto Nếu cần nên viết giải thuật giả ngữ, viết NNLT cụ thể Thiết kế giải thuật Algorithms Thiết kế giải thuật ▪ Chia toán thành nhiều toán nhỏ ▪ Tìm giải pháp cho tốn nhỏ ▪ Gộp giải pháp cho toán nhỏ thành giải pháp tổng thể cho toán ban đầu Đơn giản hóa tốn cách trừu tượng hóa: làm thay làm ▫ Ví dụ: hàm mức trừu tượng ▸ Hàm xếp mảng số nguyên ▸ Hàm nhập vào / xuất ký tự: getchar() , putchar() ▸ Hàm toán học : sin(x), sqrt(x) Thiết kế từ lên Bottom-up design ▪ Bottom-up design ▫ Thiết kế chi tiết phần ▫ Thiết kế chi tiết phần khác … ▫ Lặp lại hết ▪ Bottom-up design in programming ▫ Viết phần CT cách chi tiết hết ▫ Viết phần CT cách chi tiết hết … ▫ Lặp lại hết Tinh chỉnh In dịng có lề o Hồn thiện WriteLine() void WriteLine(const char *line, int lineLen, int numWords) { for (i = 0; i < lineLen; i++) { if () else { } } } Tinh chỉnh In dịng có lề void WriteLine(const char *line, int lineLen, int numWords) { int extraSpaces, spacesToInsert, i, j; /* Tính số khoảng trống dư thừa cho dòng */ extraSpaces = MAX_LINE_LEN - lineLen; for (i = 0; i < lineLen; i++) { if (line[i] != ' ') putchar(line[i]); else { /* Tính số khoảng trống cần thêm */ spacesToInsert = extraSpaces / (numWords - 1); Số lượng khoảng trống /* In space, cộng thêm spaces phụ */ for (j = 1; j MAX_LINE_LEN) { lineLen, numWords); &lineLen, &numWords); AddWord(word, line, &lineLen); numWords++; } return 0; } Thiết kế liệu Data structure Thiết kế liệu ▪ Cần thiết kế cấu trúc liệu cho phép thực thao tác sau: ▫ Create: Tạo liệu ▫ Add: Thêm liệu thành phần ▫ Search: Tìm kiếm liệu thành phần ▫ Free: Hủy cấu trúc liệu Thiết kế liệu ▪ Ví dụ: Bài tốn cho liệu mẫu sau: ▫ (tên sinh viên, điểm) ▸ (“john smith”, 84) ▸ (“jane doe”, 93) ▸ (“bill clinton”, 81) ▸… ▫ (tên cầu thủ, vị trí chơi sân) ▸ (“Ruth”, 3) ▸ (“Gehrig”, 4) ▸ (“Mantle”, 7) ▸… ▫ (tên biến, giá trị) ▸ (“maxLength”, 2000) ▸ (“i”, 7) ▸ (“j”, -10) ▸… Thanks! Any questions? Email me at trungtt@soict.hust.edu.vn Presentation template by SlidesCarnival ... viết giải thuật giả ngữ, viết NNLT cụ thể Thiết kế giải thuật Algorithms Thiết kế giải thuật ▪ Chia toán thành nhiều toán nhỏ ▪ Tìm giải pháp cho tốn nhỏ ▪ Gộp giải pháp cho toán nhỏ thành giải... trúc tốt ▪ Tơn trọng tính cấu trúc chương trình theo mơ thức lập trình: ▫ Module: hàm/ thủ tục ▫ Hướng đối tượng: lớp ▫ Hướng thành phần: thành phần ▫ Hướng dịch vụ: dịch vụ ▪ Viết kiểm thử dựa cấu... xuống Top-down design ▪ Top-down design ▫ Thiết kế toàn sản phẩm cách sơ bộ, tổng thể ▫ Tinh chỉnh hoàn thiện ▪ Top-down design in programming ▫ Phác họa hàm main() (bằng lệnh giả ngữ - pseudocode)