Phần 1: Giới thiệu
Phần 2: Các khái niệm cơ bản
Phần 3: Lớp và đối tượng
Phần 4: Kỹ thuật thừa kế và tính đa hình
Phần 5: Thiết kế chương trình hướng đối tượng
Phần 6: Khuôn mẫu (template)
Phần 7: Luồng nhập xuất
Phần 8: Cacù mẫu thiết kế hướng đối tượng
25 trang |
Chia sẻ: Mr Hưng | Lượt xem: 885 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Lập trình hướng đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGTrần Sơn Hảitransonhai@gmail.com*Lập Trình Hướng Đối TượngSlide *Tóm tắt nội dung môn họcPhần 1: Giới thiệuPhần 2: Các khái niệm cơ bảnPhần 3: Lớp và đối tượng Phần 4: Kỹ thuật thừa kế và tính đa hìnhPhần 5: Thiết kế chương trình hướng đối tượng Phần 6: Khuôn mẫu (template) Phần 7: Luồng nhập xuấtPhần 8: Cacù mẫu thiết kế hướng đối tượng*Lập Trình Hướng Đối TượngSlide *Tài liệu tham khảoStroustrup, Bjarne. The C++ Programming Language, 3rd Ed.Dietel & Dietel. C++ How to Program, 3rd Ed. 2003Eckel, Bruce. Thinking in C++, 2nd Ed. Vol 1. Vol.2.Nguyễn Thanh Thủy , Lập trình hướng đối tượng với C++. NXB Khoa học kỹ thuật.Gamma: Design Patterns. Addison-Wesley, 1998.LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGChương 1: Giới thiệu*Lập Trình Hướng Đối TượngSlide *C++ và CSự mở rộng thứ nhất của C++ so với CHàm xuất/nhập chuẩnTham chiếuChồng hàm, Tham số có giá trị ngầm địnhToán tử cấp phát và giải phóng vùng nhớ độngSự mở rông thứ hai của C++ so với C là hỗ trợ lập trình hướng đối tượng*Lập Trình Hướng Đối TượngSlide *Hàm cin/cout/cerr#include void main() { int n; double d; char s[100]; cout > n >> d >> s; cout > arrget(a,1); // cin >> a[1];Ví dụ 3: void swap1(int x, int y) { int t = x; x = y; y = t; }void swap2(int *x, int *y) { int *t = x; x = y; y = t; }void swap3(int &x, int &y) { int t = x; x = y; y = t; }*Lập Trình Hướng Đối TượngSlide *Chồng hàm (Functions overloading )int abs(int i);long labs(long l);double fabs(double d);int abs(int i);long abs(long l);double abs(double d);int abs(int i) { return abs(i);}long abs(long l) { return labs(l);}double abs(double d) { return fabs(d);}void test_abs() { int i = abs(10); // abs(int ) long l = abs(-10l); // abs(long ) double = abs(0.1l); // abs(double )}*Lập Trình Hướng Đối TượngSlide *Tham số ngầm định trong lời gọi hàmvoid inc(int &a, int b = 1) { a = a + b;}int x = 5, y = 10;inc(x, 10); // x = x + 10inc(y); // y = y + 1Chuù yù:Caùc tham soá coù giaù trò ngaàm ñònh phaûi ñaët cuoái danh saùch tham soá, ñeå traùnh nhaàm laãn caùc giaù trò.Caùc giaù trò ngaàm ñònh cuûa tham soá chæ ñöôïc khai baùo trong khuoân maãu haøm*Lập Trình Hướng Đối TượngSlide *Toán tử quản lý bộ nhớ độngToán tử cấp phát bộ nhớ động newint *x;x = new int; // x = (int*)malloc(sizeof(int));char *y;y = new char[100]; // y = (char*)malloc(100);Toán tử giải phóng vùng nhớ động deletedelete x; // free(x);delete y; // free(y);*Lập Trình Hướng Đối TượngSlide *ConstNên khai báo hằng đối với:Các đối tượng mà ta không định sửa đổiconst double PI = 3.14;const Date openDate(18,8,2003);Các tham số của hàm mà ta không định cho hàm đó sửa đổivoid printHeight(const LargeObj &LO){ cout Như vậy, phương pháp này không thích hợp cho dự án phần mềm lớn *Lập Trình Hướng Đối TượngSlide *Lập trình hướng đối tượngLập trình hướng đối tượng đặt trọng tâm vào đối tượng, yếu tố quan trọng trong quá trình phát triển chương trình và không cho phép dữ liệu biến động tự do trong hệ thống- Dữ liệu được gắn chặt với các hàm thành các vùng riêng mà chỉ có các hàm đó tác động lên và cấm các hàm bên ngoài truy nhập tới một cách tùy tiện- Lập trình hướng đối tượng cho phép chúng ta phân tích bài toán thành các thực thể được gọi là các đối tượng và sau đó xây dựng các dữ liệu cùng các hàm xung quanh các đối tượng đó- Các đối tượng có thể tác động, trao đổi thông tin với nhau thông qua cơ chế thông báo *Lập Trình Hướng Đối TượngSlide *Các đặc điểm quan trọng của OOCác lớp đối tượng - ClassesĐóng gói – EncapsulationThừa kế - InheritanceĐa hình - PolymorphismÑoái töôïng = döõ lieäu + phöông thöùc*Lập Trình Hướng Đối TượngSlide *Một số ngôn ngữ lập trình hướng đối tượngC#C++Common Lisp Object SystemEiffelFortranJavaObjective-COCamlObject PascalPerlPHPPythonRubySimulaSleepSmalltalkADAVisual FoxPro *Lập Trình Hướng Đối TượngSlide *Trừu tượng hóaLà cách nhìn đơn giản hóa về một đối tượng mà trong đó chỉ bao gồm những đặc điểm được quan tâm và bỏ qua những chi tiết không cầm thiết*Lập Trình Hướng Đối TượngSlide *Tính đóng góiTách rời các khía cạnh giao diện với bên ngoài của đối tượng với chi tiết cài đặt bên trong. Tính đóng gói ngăn chặn khả năng một chương trình trở nên quá phụ thuộc lẫn nhau dẫn tới hậu quả một sự thay đổi nhỏ có thể ảnh hưởng lớn đến toàn bộ hệ thống. Trong tiếp cận O.O. khả năng kết hợp dữ liệu và hành vi trong một thực thể duy nhất giúp cho tính đóng gói rõ ràng hơn và hiệu quả hơn.*Lập Trình Hướng Đối TượngSlide *Kết hợp dữ liệu và hành viTrong cách tiếp cận thủ tục cổ điển, hệ thống được xây dựng trên hai sơ đồ phân cấp chằng chịt: sơ đồ phân cấp dữ liệu và sơ đồ phân cấp thủ tục, trong đó sự liên hệ giữa một loại dữ liệu và các thủ tục xử lý dữ liệu rất mờ nhạt, dẫn đến khó khăn trong việc sửa chữa, nâng cấp trong tương lai. Cách tiếp cận O.O. loại bỏ những nhược điểm kể trên bằng cách kết hợp dữ liệu và phần thủ tục xử lý dữ liệu vào trong một thực thể duy nhất, hệ thống trở thành một sơ đồ phân cấp duy nhất các lớp đối tượng.*Lập Trình Hướng Đối TượngSlide *Đối tượng và lớpTa định nghĩa một đối tượng là một "cái gì đó" có ý nghĩa cho vấn đề ta quan tâm. Đối tượng phục vụ hai mục đích: Giúp hiểu rõ thế giới thực và cung cấp cơ sở cho việc cài đặt trong máy. Mỗi đối tượng có một nét nhận dạng để phân biệt nó với các đối tượng khác. Nét nhận dạng mang ý nghĩa các đối tượng được phân biệt với nhau do sự tồn tại vốn có của chúng chứ không phải các tính chất mà chúng có.*Lập Trình Hướng Đối TượngSlide *Đối tượng và lớpCác đối tượng có các đặc tính tương tự nhau được gom chung lại thành lớp đối tượng. Ví dụ Người là một lớp đối tượng. Một lớp đối tượng được đặc trưng bằng các thuộc tính, và các hoạt động (hành vi).Một thuộc tính (attribute) là một giá trị dữ liệu cho mỗi đối tượng trong lớp. Tên, Tuổi, Cân nặng là các thuộc tính của Người.Một thao tác (operation) là một hàm hay một phép biến đổi có thể áp dụng vào hay áp dụng bởi các đối tượng trong lớp. *Lập Trình Hướng Đối TượngSlide *Đối tượng và lớpCùng một thao tác có thể được áp dụng cho nhiều lớp đối tượng khác nhau, một thao tác như vậy được gọi là có tính đa dạng (polymorphism). Mỗi thao tác trên mỗi lớp đối tượng cụ thể tương ứng với một cài đặt cụ thể khác nhau. Một cài đặt như vậy được gọi là một phương thức (method).Một đối tượng cụ thể thuộc một lớp được gọi là một thể hiện (instance) của lớp đó. Joe Smith, 25 tuổi, nặng 58kg, là một thể hiện của lớp người. *Lập Trình Hướng Đối TượngSlide *Sơ đồ đối tượngTa dùng sơ đồ đối tượng để mô tả các lớp đối tượng. Sơ đồ đối tượng bao gồm sơ đồ lớp và sơ đồ thể hiện.Sơ đồ lớp mô tả các lớp đối tượng trong hệ thống, một lớp đối tượng được diễn tả bằng một hình chữ nhật có 3 phần: phần đầu chỉ tên lớp, phần thứ hai mô tả các thuộc tính và phần thứ ba mô tả các thao tác của các đối tượng trong lớp đó. *Lập Trình Hướng Đối TượngSlide *Sơ đồ lớp và sơ đồ thể hiệnSinh viênHọ tênNăm sinhMã sốĐiểm TBĐi họcĐi thiPhân loại(Sinh viên)Nguyễn Văn A19840610234T9.2Tên lớpThuộc tínhPhương thứcSơ đồ lớpSơ đồ thể hiện*Lập Trình Hướng Đối TượngSlide *Một số thuật ngữ hướng đối tượngOOM (Object Oriented Methodology): Phương pháp luận hướng đối tượngOOA (Object Oriented Analysis): Phân tích hướng đối tượng.OOD: Object Oriented Design (Thiết kế hướng đối tượng).OOP: Object Oriented Programming (lập trình hướng đối tượng).Inheritance: Kế thừaPolymorphism: Đa hìnhEncapsulation: Tính đóng gói.
Các file đính kèm theo tài liệu này:
- 1_oop_introduction_3025.ppt