Lập trình hướng đối tượng - Chương 1: Các khái niệm cơ bản trong Lập trình hướng đối tượng
1. Lịch sử phát triển của các ngôn ngữ lập
trình
2. Đối tượng và các khái niệm liên quan
3. Khái niệm thực hiện ẩn (hidden
implementation) trong LTHDT
4. Khái niệm tái sử dụng trong LTHDT
5. Khái niệm kế thừa trong LTHDT
6. Khái niệm đa hình trong lập trình hướng
đối tượng
tượng mới và các tương tác giữa các đối tượng này với các đối tượng đã có trong hệ thống. Bước 5. Tái sử dụng đối tượng (Object reuse). Đây là một trong những thử nghiệm quan trọng của các đối tượng và lớp trong thiết kế phần mềm. Chúng ta cần phải sử dụng lại các lớp và các đối tượng trong phần mềm (thông qua tính kế thừa và tương tác giữa các đối tượng) H.Q. Thắng - C.T. Dũng BM CNPM 52 9. Phân tích và thiết kế hướng đối tượng Một số đặc điểm cần lưu ý khi phát triển các lớp 1. Chúng ta cần phân biệt rõ việc tạo ra lớp, sau đó mới nghĩa tới việc phát triển và hoàn thiện lớp trong quá trình giải quyết bài toán 2. Việc phát hiện ra các lớp cần thiết cho chương trình là một trong những nhiệm vụ chính của thiết kế hệ thống, nếu chúng ta đã có những lớp này (trong một thư viện lớp nào đó chẳng hạn) thì công việc sẽ dễ dàng hơn 3. Khi phân tích hay phát triển các lớp không nên tập trung vào để biết tất cả về một lớp, chúng ta sẽ biết tất cả các thuộc tính này khi phát triển hệ thống (learns as you go) 27 H.Q. Thắng - C.T. Dũng BM CNPM 53 9. Phân tích và thiết kế hướng đối tượng Một số đặc điểm cần lưu ý khi phát triển các lớp (tiếp) 4. Khi tiến hành lập trình cần tuân thủ theo các thiết kế đã làm. Không nên băn khoăn rằng chúng ta sẽ không sử dụng phương pháp lập trình truyền thống và cảm thấy choáng ngợp trước số lượng lớn các đối tượng. 5. Luôn luôn giữ nguyên tắc: mọi vấn đề cần giải quyết theo phương án đơn giản nhất, không nên phức tạp hóa. Sử dụng nguyên lý của Occam Razor: Lớp đơn giản nhất bao giờ cũng là lớp tốt nhất, hãy bắt đầu bằng những cái đơn giản và chúng ta sẽ kết thúc bằng những hệ thống phức tạp H.Q. Thắng - C.T. Dũng BM CNPM 54 10. Extreme programming Các tư tưởng của Extreme Programming (XP) rất thú vị và rất cơ bản. XP chứa đựng cả những quan điểm về phương pháp và kỹ thuật lập trình và có rất nhiều những chỉ dẫn ở trong đó. Một số những chỉ dẫn mang tính chất xuyên suốt và có thể trở thành các phương pháp lập trình. Trong XP hai tư tưởng quan trọng nhất là: Viết kiểm thử trước (write tests first) Lập trình theo cặp (pair programming) 28 H.Q. Thắng - C.T. Dũng BM CNPM 55 10. Extreme programming Viết kiểm thử trước Kiểm thử (testing) thông thường luôn được thực hiện ở giai đoạn cuối cùng trong quá trình phát triển phần mềm. Trong XP quan điểm này được thay đổi hoàn toàn. Kiểm thử được coi trọng là một công việc hàng đầu, có trọng số quan trong ít nhất là bằng với lập trình và trên thực tế trong XP quan niệm rằng chúng ta phải viết kiểm thử trước khi chúng ta tiến hành lập trình. Theo quan điểm này chúng ta phải đảm bảo kiểm thử phải được thực hiện thành công tại mọi thời điểm trong khi tích hợp chương trình. H.Q. Thắng - C.T. Dũng BM CNPM 56 10. Extreme programming Viết kiểm thử trước có hai hiệu ứng quan trọng: Thứ nhất: thúc đẩy việc xác định rõ ràng hơn giao diện của các lớp. Quan điểm này của XP đã chỉ ra khi viết các kiểm thử chúng ta đã chỉ ra rõ ràng hơn, đầy đủ hơn giao diện của các lớp (ở đấy có thể sử dụng các công cụ như các biểu đồ UML, các thẻ CRC, ... Thứ hai: Chúng ta có khả năng thực hiện kiểm thử mỗi khi chúng ta compile phần mềm. Lịch sử phát triển của các NNLT đã qua triển như thế: Assembly kiểm tra cú pháp (syntax), trong lập trình hướng thủ tục đã thực hiện kiểm tra các ngữ nghĩa (semantic) điều đó giúp chúng ta loại bỏ lỗi. Các ngôn ngữ LTHDT kiểm tra ngữ nghĩa của các phần mềm ở mức độ cao hơn nũa và tiến tới có thể định nghĩa các trường hợp kiểm thử để kiểm tra khi compile phần mềm. 29 H.Q. Thắng - C.T. Dũng BM CNPM 57 10. Extreme programming Lập trình theo cặp Pair programming Tư tưởng lập trình theo cặp phủ nhận các tư tưởng cá nhân chủ nghĩa (individualism). Trong tư tưởng lập trình theo cặp này công việc viết mã được tổ chức theo hai người: một người thực hiện lập trình và người kia thì suy nghĩ về nó, cách tiến hành nó. Người suy nghĩ về chương trình có thể nghĩ được rộng hơn và nhìn thấy xa hơn, chỉ không chỉ gói gọn trong vấn đề hiện tại, còn người viết mã thì quan tâm thực hiện những vấn đề hiện tại để viết mã tốt. Khi mã code bị tắc đơn giản là họ có thể đổi chỗ cho nhau và như thế có thể là một cách giải quyết vấn đề tắc nghẽn của viết mã. H.Q. Thắng - C.T. Dũng BM CNPM 58 11. Một số lý do để ngôn ngữ C++ thông dụng Một trong những nguyên nhân C++ trở thành phổ biên là nó đã chuyển ngôn ngữ lập trình C thành ngôn ngữ lập trình hướng đối tượng. C++ là ngôn ngữ kế thừa và mở rộng từ ngôn ngữ C, trên thực tế không đưa vào các mô hình lập trình mới. Tất cả các chương trình đã có sẵn của C sẽ chạy được trong C++ C++ có những đặc tính phát triển tốt hơn ngôn ngữ C: TRong C++ có đặc tính tham chiếu của các biến (references) cho phép quản lý địa chỉ của các biến hay lấy ra giá trị của các biến ở các địa chỉ tương ứng. Quản lý tên hàm và biển đã được mở rông thông qua cơ chế chồng hàm function overloading, 30 H.Q. Thắng - C.T. Dũng BM CNPM 59 11. Một số lý do để ngôn ngữ C++ thông dụng Tư tưởng phân vùng các biến namespaces cho phép quản lý các biến được tốt hơn. Tính hiệu quả Các phần mềm xây dựng trở nên dễ hiểu hơn Hiệu quả sử dụng của các thư viện Khả năng sử dụng lại mã thông qua templates Quản lý lỗi Cho phép xây dựng các phần mềm lớn hơn H.Q. Thắng - C.T. Dũng BM CNPM 60 Tính khả chuyển cao: "Viết một lần, chạy bất cứ đâu" Cơ bản cú pháp khá giống C++ Độ an toàn cao: Trong Java, khái niệm con trỏ (pointer) được thay bằng tham chiếu đối tượng. Người lập trình không có quyền can thiệp trực tiếp lên các địa chỉ phần cứng. Hỗ trợ quản lý bộ nhớ. (Garbage collector) Bộ thư viện chất lượng tốt, đầy đủ và liên tục cập nhật Miễn phí - Ngôn ngữ của giới "nghiên cứu" Tốc độ chấp nhận được (80% so với C++) Cho phép xây dựng các ứng dụng ở quy mô lớn (Enterprise features) – J2SEE JAVA 31 H.Q. Thắng - C.T. Dũng BM CNPM 61 13. Quá trình dịch một mã nguồn phần mềm Mọi ngôn ngữ lập trình đều được xây dựng theo một cú pháp với các từ khoá dễ hiểu cho người sử dụng. Vì thế để chuyển từ những mã nguồn của ngôn ngữ lập trình sang ngôn ngữ mã máy (machine instructions) cần tới chương trình dịch (translators). Thông thường chương trình dịch được chia làm hai loại: thông dịch (interpreters) và biên dịch (compilers). Interpreters: Thông dịch dịch các mã nguồn thành các công việc và máy tính (CPU) sẽ thực hiện ngay những lệnh này. Ưu điểm: Khả năng sửa lỗi tức thì (vì mã nguồn có sẵn khi gặp lỗi) Thích hợp cho những công cụ phát triển phần mềm nhanh Nhược điểm: Cần nhiều tài nguyên của máy tính hơn H.Q. Thắng - C.T. Dũng BM CNPM 62 13. Quá trình dịch một mã nguồn phần mềm Biên dịch dịch trực tiếp các mã nguồn thành các ngôn ngữ mã máy. Kết quả là chúng ta thu được một tệp chứa các mã máy. Thông thường quá trình biên dịch thực hiện qua một số bước và thường phức tạp hơn so với thông dịch. Một số biên dịch dịch các thư viện thành các chương trình riêng biệt sau đó có một công cụ liên kết (linker) liên kết những chương trình riêng biệt này thành chương trình thực hiện được. Quá trình này được gọi là biên dịch độc lập. Biên dịch độc lập thể hiện nhiều ưu điểm: Cho phép khả năng tạo các thư viện Trợ giúp cho việc sửa và gỡ rối các lỗi (khi thực hiện biên dich từng chương trình nhỏ) 32 H.Q. Thắng - C.T. Dũng BM CNPM 63 14. Các đặc điểm của quá trình biên dich độc lập Các công cụ biên dịch tự động đóng vai trò rất quan trọng trong quá trình phát triển các phần mềm lớn. Thông thường chúng ta thường chia các phần mềm lớn thành các thành phần nhỏ hơn. Trong C, C++, Java đấy là các hàm (function). Khi xây dựng hàm chúng ta chú ý tới các yếu tố sau: Tên hàm Đối số của hàm Kiểu dữ liệu trả về của hàm H.Q. Thắng - C.T. Dũng BM CNPM 64 14. Các đặc điểm của quá trình biên dich độc lập Như thế việc đầu tiên là chúng ta phải khai báo và định nghĩa các biến và các hàm. Khai bao hàm (Function declaration syntax) Trong C/C++ chúng ta có thể khai báo hàm như sau: int func1(int,int); Định nghĩa hàm (Function definitions int func1(int length, int width) { .. } Khai báo biến (Variable declaration syntax): int a; Khai báo các thư viện sử dụng (Including headers) 33 H.Q. Thắng - C.T. Dũng BM CNPM 65 14. Các đặc điểm của quá trình biên dich độc lập C/C++ sử dụng các header file. Header file chứa các giao diện (khai báo về các biến các hằng số và các hàm sử dụng trong thự viện tương ứng. Thông thường các header file có phần mở rộng của tên là .h (headerfile.h) Khi chúng ta muốn sử dụng thư viện nào thì gọi tên thư viên đó bằng cách trong phần mềm của mình chúng ta sẽ đưa vào từ khóa: #include Một số thư viện chuẩn thông dụng của C++ iostream.h cstdlib.h conio.h H.Q. Thắng - C.T. Dũng BM CNPM 66 Với C++ 34 H.Q. Thắng - C.T. Dũng BM CNPM 67 H.Q. Thắng - C.T. Dũng BM CNPM 68 Với Java Vừa biên dịch, vừa thông dịch Biên dịch từ mã nguồn mã Bytecode (mã máy của máy ảo Virtual Machine) Thông dịch từng lệnh trong mã ByteCode mã lệnh máy trong máy tính chương trình được dịch. 35 H.Q. Thắng - C.T. Dũng BM CNPM 69 H.Q. Thắng - C.T. Dũng BM CNPM 70 15. Ví dụ, câu hỏi, bài tập Các câu hỏi tuần 1: 1. Khái niệm đối tượng và các tính chất của đối tượng 2. Các khái niệm liên quan: thực hiện ẩn, khởi tạo, giải phóng đối tượng 3. Phân tích thiết kế hướng đối tượng 4. Khái niệm UML, CRC 5. Khái niệm Extreme programming 6. Quy trình dịch một mã nguồn phần mềm và các khái niệm liên quan 36 H.Q. Thắng - C.T. Dũng BM CNPM 71 15. Ví dụ, câu hỏi, bài tập Bài tập tuần 1: (1) Làm quen với một công cụ lập trình (C++, VC, Java, C#) (2) Viết chương trình nhập mảng các số nguyên, sắp xếp (theo các giải thuật khác nhau) và tìm kiếm (theo các giải thuật khác nhau) một số nhập vào từ bàn phím và đếm xem số này xuất hiện bao nhiêu lần trong mảng
File đính kèm:
- lap_trinh_huong_doi_tuong_chuong_1_cac_khai_niem_co_ban_tron.pdf