© 2004, HOÀNG MINH SƠN Chương Chương 1: Mở ₫ầu 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 start() 1100101100100010000010 1100101100100010000010 stop() 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 1010011000110010010010 B*u; 1010011000110010010010 y = A*x + 1100101100100010000010+ d*u; 1100101100100010000010 x = C*x LQGController 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 stop() 1010011000110010010010 1100101100100010000010 1100101100100010000010 8/18/2005 Nội dung giảng © 2004, HỒNG MINH SƠN 1.1 1.2 1.3 1.4 1.5 Giới thiệu nội dung môn học Giới thiệu chung kỹ thuật lập trình Phương pháp luận Qui trình phát triển phần mềm Sơ lược ngơn ngữ C/C++ Chương 1: Mở đầu © 2005 - HMS 1.1 Nội dung môn học Các kỹ thuật lập trình bản, thực ngơn ngữ lập trình C C++: — — — — Lập trình có cấu trúc Lập trình hướng ₫ối tượng Lập trình thời gian thực Lập trình tổng qt © 2004, HOÀNG MINH SƠN Tại chọn C/C++: — Hai ngơn ngữ lập trình tiêu biểu nhất, ₫ủ cho thực kỹ thuật lập trình quan trọng — Hai ngơn ngữ lập trình quan trọng ₫ối với kỹ sư ₫iện/kỹ sư ₫iều khiển Chương 1: Mở đầu © 2005 - HMS Quan ₫iểm môn học Đề cao kiến thức bản, tảng: — Thiên tư phương pháp lập trình — Tạo khả dễ thích ứng với ứng dụng khác — Tạo khả dễ thích ứng với ngơn ngữ lập trình khác (Java, Visual Basic, C#, MATLAB…) — Nhấn mạnh tính chun nghiệp lập trình: hiệu + chất lượng © 2004, HỒNG MINH SƠN Những nội dung khơng có chương trình: — — — — — Lập trình hệ thống (low-level system programming) Lập trình ₫ồ họa Lập trình giao tiếp với cổng vào/ra (nối tiếp, song song) Lập trình sở liệu Lập trình thành phần, lập trình phân tán (mạng, Internet) Chương 1: Mở đầu © 2005 - HMS Phương pháp học tập Cách thứ nhất: Nghe giảng làm thử liệu thảo luận luyện tập ₫ọc tài © 2004, HỒNG MINH SƠN Cách thứ hai: Đọc tài liệu làm thử nghe giảng thảo luận luyện tập Nguyên tắc bản: Chủ ₫ộng học thường xuyên! Những ₫iều không nên làm: — — — — Chép nhiều lớp Học thuộc lịng, học chay Mong ₫ợi nhiều vào ơn tập Dựa dẫm vào tập mẫu sách Chương 1: Mở đầu © 2005 - HMS Cơng cụ học tập Máy tính PC Cơng cụ lập trình: Visual C++ 6.0 (Visual Studio 6.0), Visual C++ NET, Borland C++ Builder © 2004, HOÀNG MINH SƠN Nền ứng dụng: Win32 Console Application Tài liệu tham khảo: Stanley B Lippman, Josée Lajoie: C++ Primer 3rd Edition Addison-Wesley 1998 Bjarne Stroustrup: The C++ Programming Language 3rd Edition Addison-Wesley 1997 David Musser,…:C++ Programming with Standard Template Library 2nd Edition, Addison-Wesley 1998 Bruce Eckel: Thinking in C++ www.bruceeckel.com, 2003 Chương 1: Mở đầu © 2005 - HMS 1.2 Tổng quan kỹ thuật lập trình © 2004, HỒNG MINH SƠN Kỹ thuật lập trình gì: Kỹ thuật thực thi giải pháp phần mềm (cấu trúc liệu + giải thuật) dựa tảng phương pháp luận (methodology) nhiều ngơn ngữ lập trình phù hợp với yêu cầu ₫ặc thù ứng dụng Kỹ thuật lập trình = Tư tưởng thiết kế + Kỹ thuật mã hóa = Cấu trúc liệu + Giải thuật + Ngơn ngữ lập trình Kỹ thuật lập trình ≠ Phương pháp phân tích & thiết kế (A&D) Chương 1: Mở đầu © 2005 - HMS Thế lập trình? Viết hàm tính giai thừa! Viết chương trình in 100 số nguyên tố ₫ầu tiên! © 2004, HỒNG MINH SƠN Viết chương trình tính giai thừa 100! Viết chương trình in N số ngun tố ₫ầu tiên! Lập trình giải tốn: "Vừa gà vừa chó, ba mươi sáu con, bó lại cho trịn, trăm chân chẵn" Lập trình giải tốn: "Vừa gà vừa chó, vừa vặn X con, bó lại cho trịn, ₫ủ Y chân chẵn" KHƠNG PHẢI LÀ LẬP TRÌNH! Chương 1: Mở đầu ĐÂY LÀ LẬP TRÌNH! © 2005 - HMS Thế lập trình tốt? Giải ₫úng ₫ề bài, ₫ược khách hàng chấp nhận Tin cậy — Chương trình chạy ₫úng — Chạy lỗi (số lượng lỗi ít, cường ₫ộ lỗi thấp) — Mức ₫ộ lỗi nhẹ Hiệu suất — Chương trình nhỏ gọn, sử dụng nhớ — Tốc ₫ộ nhanh, sử dụng thời gian CPU © 2004, HỒNG MINH SƠN Hiệu quả: — — — — — Thời gian lập trình ngắn, Khả bảo trì dễ dàng Giá trị sử dụng lại lớn Sử dụng ₫ơn giản, thân thiện Nhiều chức tiện ích Chương 1: Mở đầu © 2005 - HMS Ví dụ minh họa: Tính giai thừa Viết chương trình hay xây dựng hàm? — Hàm tính giai thừa số nguyên int factorial(int N); Giải thuật: — Phương pháp ₫ệ quy (recursive) © 2004, HOÀNG MINH SƠN if (N > 1) return N*factorial(N-1); return 1; — Phương pháp lặp (iterative) int kq = 1; while (N > 1) kq *= N ; return kq; Chương 1: Mở đầu ☺„to iterate is human, to recurse is devine!“ © 2005 - HMS 10 Thiết kế hệ thống (System Design) © 2004, HỒNG MINH SƠN Dựa mơ hình hệ thống, xây dựng mơ hình chi tiết phục vụ sẵn sàng mã hóa/cài ₫ặt Bao gồm: — Thiết kế cấu trúc (structured design): chương trình, kiểu liệu, ₫ối tượng, quan hệ cấu trúc ₫ối tượng kiểu) — Thiết kế tương tác (interaction design): quan hệ tương tác ₫ối tượng — Thiết kế hành vi (behaviour design): kiện, trạng thái, phép toán, phản ứng — Thiết kế chức (funtional design): tiến trình hành ₫ộng, hàm, thủ tục) Kết quả: Mơ hình thiết kế (các vẽ lời văn mô tả) Trả lời câu hỏi: Làm nào? Chương 1: Mở đầu © 2005 - HMS 33 Các bước khác Mã hóa/cài ₫ặt (Coding/Implementation): Thể mơ hình thiết kế với ngơn ngữ lập trình cụ thể Thử nghiệm (Testing, Verification): Chạy thử, phân tích kiểm chứng: © 2004, HỒNG MINH SƠN — Thử ₫ơn vị (Unit Test) — Thử tích hợp (Integration Test) Gỡ rối (Debugging): Tìm sửa lỗi chương trình chạy (các lỗi logic) Xây dựng tài liệu (Documenting): Xây dựng tài liệu phát triển, tài liệu hướng dẫn sử dụng Đào tạo, chuyển giao Bảo trì, bảo dưỡng Chương 1: Mở đầu © 2005 - HMS 34 Chu trình cổ ₫iển: “Waterfall Model” Nghiên cứu Nghiên cứu khả thi khả thi Phân tích Phân tích yêu cầu yêu cầu Thiết kế Thiết kế Mã hóa Mã hóa Thử nghiệm Thử nghiệm đơn vị đơn vị Thử nghiệm Thử nghiệm tích hợp tích hợp © 2004, HỒNG MINH SƠN Đào tạo Đào tạo Chương 1: Mở đầu Chuyển giao Chuyển giao Bảo trì Bảo trì © 2005 - HMS 35 © 2004, HOÀNG MINH SƠN Xu nay: Song song lặp Chương 1: Mở đầu © 2005 - HMS 36 Lập trình gì, nằm ₫âu? © 2004, HỒNG MINH SƠN Lập trình > Mã hóa Lập trình ≈ Tư tưởng thiết kế + Mã hóa + Thử nghiệm + Gỡ rối Chương 1: Mở đầu © 2005 - HMS 37 Các bước phát triển chương trình Mã nguồn Biên dịch Mã đích © 2004, HỒNG MINH SƠN Liên kết Chương 1: Mở đầu Thư viện CT chạy Nạp chạy © 2005 - HMS 38 Mơi trường/công cụ phát triển IDE (Integrated Development Environment) — Hỗ trợ tồn bước phát triển chương trình — Ví dụ: MS Visual C++, Borland C++ (Builder), Keil-C © 2004, HỒNG MINH SƠN Các cơng cụ tiêu biểu — — — — — — Trình soạn thảo (Editor) Trình biên dịch (Compiler) Trình liên kết (Linker) Trình nạp (Loader) Trình gỡ rối (Debugger) Trình quản lý dự án (Project Manager) Chương 1: Mở đầu © 2005 - HMS 39 © 2004, HỒNG MINH SƠN Mơi trường phát triển Chương 1: Mở đầu © 2005 - HMS 1.5 Sơ lược C/C++ Lược sử ngơn ngữ C Tiến hóa từ hai ngơn ngữ lập trình — BCPL B: Các ngôn ngữ “phi kiểu” Dennis Ritchie (Bell Laboratories, AT&T) — Bổ sung kiểu hóa liệu yếu tố khác Ngôn ngữ phát triển hệ ₫iều hành UNIX Không phụ thuộc phần cứng © 2004, HỒNG MINH SƠN — Tính khả chuyển 1989: ANSI chuẩn hóa (ANSI-C) 1990: Cơng bố chuẩn ANSI ISO — ANSI/ISO 9899: 1990 Chương 1: Mở đầu © 2005 - HMS 41 Lược sử ngơn ngữ C++ Mở rộng, tiến hóa từ C Bjarne Stroustrup (Bell Laboratories) — — — — — Đầu năm 1980: “C with classes” 1984: Tên C++ 1987: “The C++ Programming Language” 1st Edition 1997: “The C++ Programming Language” 3rd Edition Chuẩn hóa quốc tế: ANSI/ISO 1996 © 2004, HỒNG MINH SƠN Bổ sung ₫ặc tính hỗ trợ: — Lập trình hướng ₫ối tượng — Lập trình tổng qt — Lập trình tốn học, Ngơn ngữ “lai” Chương 1: Mở đầu © 2005 - HMS 42 Tại chọn C/C++ Đáp ứng yêu cầu: — — — — — Gần gũi với phần cứng Hiệu suất cao Tương ₫ối thân thiện với người lập trình Khả chuyển Chuẩn hóa quốc tế (tương lai vững chắc) Thế mạnh tuyệt ₫ối ANSI-C: © 2004, HỒNG MINH SƠN — Phổ biến cho hầu hết vi xử lý, vi ₫iều khiển, DSP — Phổ biến cho “mỗi người lập trình” giới Thế mạnh tuyệt ₫ối ANSI/ISO C++: — Lập trình hướng ₫ối tượng — Lập trình tổng qt (template) — Lập trình tốn học (dữ liệu trừu tượng nạp chồng toán tử) Chương 1: Mở đầu © 2005 - HMS 43 Visual C++, NET & C# Visual C++: — Môi trường/công cụ lập trình C++ Microsoft — Mở rộng số yếu tố — Thư viện lập trình Windows: Microsoft Foundation Classes (MFC), Active Template Library (ATL) — Các thư viện chung: GUI, graphics, networking, multithreading, … © 2004, HỒNG MINH SƠN NET (“dot net”) — Kiến trúc tảng phần mềm lập trình phân tán — Hướng tới ứng dụng Web, phân tán nhiều chủng loại thiết bị khác — Các ứng dụng nhiều ngôn ngữ khác giao tiếp cách ₫ơn giản chung — Phương pháp luận: Lập trình thành phần Chương 1: Mở đầu © 2005 - HMS 44 Visual C++, NET & C# C# Anders Hejlsberg Scott Wiltamuth (Microsoft) Thiết kế riêng cho NET Nguồn gốc từ C, C++ Java Điều khiển theo kiện, hồn tồn hướng ₫ối tượng, ngơn ngữ lập trình hiển thị — Integrated Development Environment (IDE) — Tương tác ngơn ngữ © 2004, HỒNG MINH SƠN — — — — Chương 1: Mở đầu © 2005 - HMS 45 Chúng ta ₫ã học ₫ược gì? © 2004, HỒNG MINH SƠN Biết ₫ược phải học, học ₫ể làm phải học Hàng loạt khái niệm xung quanh kỹ thuật lập trình qui trình cơng nghệ phần mềm Tổng quan kỹ thuật lập trình Lược sử ngơn ngữ C/C++, mạnh chúng so với ngôn ngữ khác Chương 1: Mở đầu © 2005 - HMS 46 Chủ ₫ề tiếp theo: C/C++ sở © 2004, HỒNG MINH SƠN Tổ chức chương trình/bộ nhớ Dữ liệu biến Toán tử, biểu thức câu lệnh Điều khiển chương trình: vịng lặp, rẽ nhánh Mảng trỏ Cấu trúc Chương 1: Mở đầu © 2005 - HMS 47 ... www.bruceeckel.com, 2003 Chương 1: Mở đầu © 2005 - HMS 1.2 Tổng quan kỹ thuật lập trình © 2004, HỒNG MINH SƠN Kỹ thuật lập trình gì: Kỹ thuật thực thi giải pháp phần mềm (cấu trúc liệu + giải thuật) dựa tảng... nhiều ngơn ngữ lập trình phù hợp với yêu cầu ₫ặc thù ứng dụng Kỹ thuật lập trình = Tư tưởng thiết kế + Kỹ thuật mã hóa = Cấu trúc liệu + Giải thuật + Ngơn ngữ lập trình Kỹ thuật lập trình ≠ Phương... Chương 1: Mở đầu © 2005 - HMS 1.1 Nội dung môn học Các kỹ thuật lập trình bản, thực ngơn ngữ lập trình C C++: — — — — Lập trình có cấu trúc Lập trình hướng ₫ối tượng Lập trình thời gian thực Lập trình