Bài giảng Kỹ thuật lập trình - Chương 10: Lập trình hướng đối tượng - Lê Thành Sách

Nội dung
n Kiểu dữ liệu trong C - Ôn lại
n Các khái niệm cơ bản
n Con trỏ this
n Tổng hợp các thuật ngữ (I)
n Tính khả kiến
n Thiết kế lớp
n Hàm khởi tạo và hàm huỷ
n Định nghĩa lại toán tử
n Thành viên có tính “static”
n Thành viên có tính “const”
n Tổng hợp các thuật ngữ (II)
n Quan hệ bạn bè (friendship)
n Tổ chức mã nguồn cho lớp
n Biễu diễn lớp bằng sơ đồ
n Tổng kết 
pdf 117 trang xuanthi 27/12/2022 1520
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 10: Lập trình hướng đối tượng - Lê Thành Sách", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_chuong_10_lap_trinh_huong_doi_t.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 10: Lập trình hướng đối tượng - Lê Thành Sách

  1. Hàm khởi tạo (constructor) n Các loại hàm khởi tạo n Khởi tạo mặc nhiên a) Chỉ có hiệu lực khi không mô tả tường minh bất kỳ hàm khởi tạo nào. b) Không có thông số à khi tạo đối tượng không truyền bất cứ đối số nào. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 46 © 2017
  2. Hàm khởi tạo (constructor) n Các loại hàm khởi tạo n Khởi tạo copy (copy constructor): n Có prototype là một trong các dạng sau: MyClass( const MyClass& other ); MyClass( MyClass& other ); MyClass( volatile const MyClass& other ); MyClass( volatile MyClass& other ); ( Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 48 © 2017
  3. Hàm khởi tạo (constructor) n Các loại hàm khởi tạo n Khởi tạo copy (copy constructor): n Hàm copy contructor này có thể được gọi khi: c) Truyền đối tượng bằng trị vào hàm Ví dụ: void foo(MyClass x){ } // MyClass a; foo(a); //Hàm copy constructor sẽ được gọi để tạo ”x” từ “a” d) Hàm trả về giá trị Ví dụ: MyClass a = bar(); //Với bar() là hàm trả về đối tượng kiểu MyClass Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 50 © 2017
  4. Hàm huỷ (destructor) n Đặc điểm cú pháp: n Không có kiểu trả về n Tên hàm có dạng: ~Class. Ở đó, Class là tên lớp n Không có thông số n Nếu, cho phép kế thừa thì nên có thêm từ khoá “virtual” đứng ở đầu – xem phần kế thừa. n Đặc điểm ngữ nghĩa: n Chỉ được gọi 1 và chỉ 1 lần duy nhất – chính là lúc cần huỷ đối tượng. Cụ thể, là khi nào? a) Khi ra khỏi tầm vực (kể cả kết thúc hàm) à huỷ các đối tượng trong tầm vực vừa ra. b) Khi người lập trình chủ động gọi delete. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 52 © 2017
  5. Hàm khởi tạo & Hàm huỷ n Công dụng: n Thường gặp I: Đơn giản n Hàm khởi tạo: khởi gán các biến, đưa đối tượng về trạng thái ban đầu nào đó n Hàm huỷ: không cần n Thường gặp II: n Một biến thành viên có kiểu con trỏ, cần được cấp phát động n Hàm khởi tạo: gọi đến “new” để xin bộ nhớ, và khởi động giá trị n Hàm huỷ: gọi đến “delete” để giải phóng bộ nhớ. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 54 © 2017
  6. Hàm khởi tạo & hàm huỷ: Minh hoạ n Yêu cầu: n Xây dựng một lớp hỗ trợ tính toán với ma trận, cụ thể: n Cho phép dễ dàng tạo ra đối tượng biễu diễn ma trận à hàm khởi tạo n Cho phép các hàm cho phép xử lý ma trận dễ dàng. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 56 © 2017
  7. Hàm khởi tạo & hàm huỷ: Minh hoạ n Phân tích: n Các hàm thành viên khác: n Hàm “print” để kiểm tra n Hàm chuyển dữ liệu ma trận thành một chuỗi. n Hàm lấy giá trị tại vị trí hàng và cột truyền vào n Các toán tử: (xem thêm phần operator overloading) n Phép gán copy (copy assignment): kiểm tra self-assignment, cấp phát bộ nhớ cho ma trận mới và copy dữ liệu từ đối tượng truyền vào. n Thành viên được cấp phát động à BẮT BUỘC phải định nghĩa lại hàm này theo ý trên. n Các phép toán khác cho ma trận: +, -, *, / (inverse) n Các phép toán khác giữa ma trận và các số vô hướng. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 58 © 2017
  8. Hàm khởi tạo & hàm huỷ: Minh hoạ class Matrix{ public: Matrix(){ this->m_nrows = 0; this->m_ncols = 0; Tạo ma trận rỗng. this->m_data_ptr = NULL; } Matrix(int nrows, int ncols){ this->m_nrows = nrows; Cho phép đặc tả this->m_ncols = ncols; số hàng và số this->m_data_ptr = new double[nrows*ncols](); cột khi tạo ma } trận //Xem slide sau // }; Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 60 © 2017
  9. Hàm khởi tạo & hàm huỷ: Minh hoạ class Matrix{ public: Matrix(int nrows, int ncols, double* data_ptr, int count){ this->m_nrows = nrows; this->m_ncols = ncols; this->m_data_ptr = new double[nrows*ncols](); int size = nrows*ncols; Cho phép COPY size = (size m_data_ptr truyền vào std::memcpy(this->m_data_ptr, data_ptr, size*sizeof(double)); } //Xem slide sau // }; Số phần tử thực sự được copy là số nhỏ nhất giữa số phần tử của ma trận và giá trị biến count. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 62 © 2017
  10. Hàm khởi tạo & hàm huỷ: Minh hoạ class Matrix{ public: void print(){ if(this->m_data_ptr == NULL){ cout m_nrows; ++rows){ for(int cols=0; cols m_ncols; ++cols){ int index = this->m_ncols*rows + cols; cout m_data_ptr[index] << string(' ', 2); }//cols cout << endl; }//rows }//print //Xem slide sau // }; Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 64 © 2017
  11. Hàm khởi tạo & hàm huỷ: Bài tập n Hiện thực đầy đủ các phương thức cho ma trận như đã gợi ý ở các slide trước. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 66 © 2017
  12. Định nghĩa lại các toán tử (operator overloading) n Trong số đó, toán tử ”=“ (toán tử gán) là đặc biệt chú ý. n Thường gặp: n Nếu một biến thành viên được cấp phát động, thì : n Cần phải định nghĩa lại toán tử gán n và cần phải định nghĩa lại hàm khởi tạo copy. n Xem ví dụ về ma trận: hàm khởi tạo copy được định nghĩa lại để nó không dùng chung bộ nhớ với đối tượng khác! Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 68 © 2017
  13. Định nghĩa lại các toán tử: Minh hoạ Matrix& operator=(const Matrix& right){ cout free data on this double data[] = {1,2,3,4,5,6,7}; if(this->m_data_ptr != NULL){ Matrix m1(2,3, data, 7); delete this->m_data_ptr; } m1.print(); //(2)->check if the right does not have data if(right.m_data_ptr == NULL){ this->m_data_ptr = NULL; // Xem slide trước this->m_nrows= 0; this->m_ncols= 0; return *this; Matrix m5; } m5 = m1; Phép gán //(3)->allocate and copy data this->m_nrows = right.m_nrows; m5.print(); this->m_ncols = right.m_ncols; int size = right.m_nrows*right.m_ncols; this->m_data_ptr = new double[size]; return 0; //copy from right.m_data_ptr to this->m_data_ptr } std::memcpy(this->m_data_ptr, right.m_data_ptr, size*sizeof(double)); } Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 70 © 2017
  14. Định nghĩa lại các toán tử: Minh hoạ Sử dụng toán tử cộng giữa 2 ma trận int main(int argc, char argv) { double data[] = {1,2,3,4,5,6,7}; Matrix m1(2,3, data, 7); m1.print(); Matrix m2(2,3,data, 6); m2.print(); Matrix m3 = m1 + m2; Phép cộng m3.print(); return 0; } Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 72 © 2017
  15. Thành viên có tính “static” n Phương thức có tính “static”: n Phương thức dạng này không kết hợp với bất kỳ đối tượng cụ thể nào. n Tức là, trong phương thức dạng này, con trỏ “this” không có giá trị - vì nó không gắn với bất kỳ đối tượng nào. n Cũng có nghĩa, dùng con trỏ “this” ở hàm dạng này sẽ có lỗi. n Do đó, n Phương thức ”static” không thể gọi các phương thức “non- static” trực tiếp. Nếu muốn, nó phải tạo đối tượng và gọi phương thức trên đối tượng. n Phương thức “static” có thể: n Truy xuất thuộc tính có tính “static” n Gọi các phương thức có tính “static” khác. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 74 © 2017
  16. Thành viên có tính “static” n Phương thức có tính “static”: n Ví dụ thực tế: Giảng viên có thể gửi thông điệp n Hoặc, đến cả nhóm sinh viên n “C++: Đối tượng” giảng viên KHÔNG CẦN lấy tham chiếu đến “đối tượng” sinh viên, vì nó (đối tượng) không gửi thông điệp đến sinh viên cụ thể. n “Đối tượng” giảng viên dùng tên lớp (ví dụ, lớp Student) để chuyển thông điệp, thông điệp có tầm ảnh hưởng là lớp (nhóm) sinh viên. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 76 © 2017
  17. Thành viên có tính “static”: Minh hoạ (I) Class Matrix{ public: static int width; static int precision; Phạm vi của lớp Matrix // Các thành viên khác xem các slide trước }; int Matrix::width = 10; int Matrix::precision = 3; Khai báo một biến có tính static, có hai bước: (1) Khai báo bên trong lớp, dùng từ khoá static (2) Khởi động bên ngoài phạm vi lớp, dùng tên đầy đủ, sử dụng tiếp đầu ngữ: Matrix::, không dùng từ khoá static Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 78 © 2017
  18. Thành viên có tính “static”: Minh hoạ (I) int main(){ Matrix m1; Matrix::width = 15; Matrix::precision = 5; Matrix m2; cout << Matrix::width << endl; cout << Matrix::precision << endl; return 0; } Bộ biên dịch sẽ “warning” khi truy xuất thành viên có tính “static” như trong slide trước. Vì thực ra, các thành viên này không gắn trực tiếp vào đối tượng. Do đó, hãy dùng cách viết như trong slide này. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 80 © 2017
  19. Thành viên có tính “static”: Minh hoạ (II) n Với ứng dụng liên quan Matrix: n Giả sử cần cung cấp phương thức để chuyển vị ma trận. Có thể có thiết kế như sau: n (1) Bên gọi (caller) gọi “T()” trên đối tượng ”m”, nghĩa là, m.T(). Hàm “T()” có chuyển vị ma trận đang giữa bởi “m”, rồi trả về chính “m” sau khi chuyển vị. (“m” bị thay đổi) n è Cách này không dùng “static” n (2) Bên gọi (caller) gọi “T()” trên đối tượng ”m”, nghĩa là, m.T(). Hàm “T()” sẽ tạo một ma trận trung giang copy từ “m”, chuyển vị ma trận trung gian và trả về ma trận trung gian. (“m” không bị thay đổi) n è Cách này không dùng “static” Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 82 © 2017
  20. Thành viên có tính “static”: Minh hoạ (II) class Matrix{ public: Matrix T(){ //chuyển vị tại đây, dùng đối tượng “*this" return *this; } static Matrix T(const Matrix mt){ Matrix rs = mt; //Chuyển vị dùng đối tượng “rs” return rs; } //Các thành viên khác }; Hàm có tính static, được khai báo và hiện thực theo ví dụ Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 84 © 2017
  21. Thành viên có tính “static”: Bài tập n Hiện thực các hàm chuyển vị cho ma trận dùng “static” và “non-static” theo gợi ý. n Hiện thực các setter và getter cho các thuộc tính static là width và precision. Lưu ý, tính khả kiến của width và precision là private. n Chỉnh lại hàm print ở các slide trước để có dùng width và precision trong định dạng đầu ra. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 86 © 2017
  22. Thành viên có tính “const” n Phương thức có tính “const”: n Phương thức dạng này sẽ không thể thay đổi bất kỳ biến thành viên nào của lớp n Nghĩa là, phương thức chỉ đọc giá trị của các biến thành viên n Ngoại lệ, n Phương thức dạng này có thể thay đổi biến thành viên nếu biến đó khai báo tường minh với từ khoá mutable – xem phần minh hoạ. n Ứng dụng: n Trong một dự án có nhiều người tham gia, hạn chế truy xuất bằng cách dùng const như thế này sẽ tăng tính toàn vẹn dữ liệu, đảm bảo dữ liệu luôn luôn trong trạng thái đúng. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 88 © 2017
  23. Thành viên có tính “const”: Minh hoạ (I) class ClassX{ private: int nonconst_value; const int const_value; int mutable mutable_value; public: ClassX(int value): Cách khởi gán trên (không phải const_value(value), bên trong) hàm khởi tạo, chú ý nonconst_value(100), dùng dấu hai chấm “:” và dùng mutable_value(200){ dấu phẩy “,” để ngăn cách các } phần khởi động int process() const{ int rs; rs = const_value + nonconst_value; //const_value = 100; //nonconst_value = 100; mutable_value = 100; rs += mutable_value; return rs; Trường Đại Học}Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 90 ©}; 2017
  24. Thành viên có tính “const”: Minh hoạ (I) class ClassX{ private: int nonconst_value; const int const_value; int mutable mutable_value; public: ClassX(int value): const_value(value), nonconst_value(100), mutable_value(200){ Từ khoá const cho biết là } Phương thức có tính hằng. int process() const{ int rs; rs = const_value + nonconst_value; //const_value = 100; //nonconst_value = 100; Dù phương thức có tính hằng, mutable_value = 100; nhưng vẫn có thể thay đổi rs += mutable_value; biến thành viên có tính return rs; “mutable” – xem dòng khai báo cho biến. Trường Đại Học}Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 92 ©}; 2017
  25. Thuật ngữ (II) n Tổng kết các khái niệm quan trọng: Tiếng việt Tiếng Anh Chú thích Lớp class Xem như một kiểu dữ liệu Đối tượng Object, instance Xem như một biến Thuộc tính; Attribute; Biến thành viên; Member variable; Trường dữ liệu; Data field; Thành viên dữ liệu Data member Dữ liệu + Phương thức được gói lại thành đối tượng Phương thức; Method; (gói dữ liệu và địa chỉ hàm) Hàm thành viên; Function member; Hành xử; Behavior; Hành động operation Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 94 © 2017
  26. Thuật ngữ (II) n Tổng kết các khái niệm quan trọng: Tiếng việt Tiếng Anh Chú thích từ khoá “this” this this: có kiểu là địa chỉ. this: chứa địa chỉ đến byte đầu tiên của vùng nhớ của đối tượng. this: chỉ được nhìn thấy bên trong các hàm thành viên. è this->data_member; this->foo(); với: data_member: thuộc tính foo(): một phương thức của đối tượng. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 96 © 2017
  27. Quan hệ bạn bè (friendship) n Giả sử lớp ClassA và ClassB là hai lớp độc lập, không có quan hệ thừa kế (sẽ trình bày sau) n Các phương thức thành viên của ClassA không thể truy cập các thành viên (biến & hàm) có tính private và protected của ClassB và ngược lại. n Trong dự án có một số lớp cần cho các lớp khác truy xuất các thành viên (biến & hàm) có tính private và protected của nó. Vì lý do: n Code cho đơn giản. n Tránh gọi hàm nhiều lần à chạy nhanh hơn. n Các lớp này được thiết kế cẩn thận và nằm trong cùng dự án nên vẫn có thể kiểm soát sự toàn vẹn dữ liệu được. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 98 © 2017
  28. Quan hệ bạn bè (friendship): Minh hoạ (I) n Hàm friend: n Với lớp Matrix ở các slide trước, hãy bổ sung code để cho phép người lập trình có thể thực hiện các phép toán sau: n Cho phép người lập trình nhập và xuất ma trận bằng các toán tử: > n Cộng/trừ/nhân/chia một số vô hướng (số thực, double) với ma trận, như ví dụ sau. Ý nghĩa của các phép toán này là thực hiện phép toán đó giữa số vô hướng với từng phần tử của ma trận double data[] = {1,2,3,4,5,6}; Matrix m1(2,3, data, 6); Matrix m2, m3, m4; m2 = 3.5 + m1; m3 = 3.5 - m1; m4 = 3.5 * m1; Trường Đại Học Bách Khoam5 Tp.HCM= 3.5 / m1; Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 100 © 2017
  29. Quan hệ bạn bè (friendship): Minh hoạ (I) class Matrix{ public: friend ostream &operator >( istream &input, Matrix& matrix); friend Matrix operator+(double value, const Matrix& matrix); friend Matrix operator-(double value, const Matrix& matrix); friend Matrix operator*(double value, const Matrix& matrix); friend Matrix operator*(double value, const Matrix& matrix); // Các hàm thành viên khác, xem các slide trước. private: double *m_data_ptr; int m_nrows, m_ncols; }; Khai báo hàm (toán tử) friend Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 102 © 2017
  30. Quan hệ bạn bè (friendship): Minh hoạ (I) Matrix operator+(double value, const Matrix& matrix){ Matrix rs = matrix; //Cộng các phần tử của rs với value, gán lại vào rs. return rs; } Matrix operator-(double value, const Matrix& matrix){ Matrix rs = matrix; //Trừ value cho các phần tử của rs, gán lại vào rs. return rs; } Định nghĩa toán tử + và – Các toán tử * và / tương tự. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 104 © 2017
  31. Quan hệ bạn bè (friendship): Minh hoạ (I) Class DataProcessor; //Khai báo trước cho lớp DataProcessor class Matrix{ public: friend class DataProcessor; friend ostream &operator >( istream &input, Matrix& matrix); friend Matrix operator+(double value, const Matrix& matrix); // Các hàm thành viên khác, xem các slide trước. private: double *m_data_ptr; int m_nrows, m_ncols; }; Khai báo lớp friend Chú ý cả dòng khai báo trước cho lớp DataProcessor à để danh hiệu DataProcessor được biết là một lớp Trường Đại Học BáchLớpKhoa DataProcessor: Tp.HCM không có gì đặc biệt khi kết hợp vói friend Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 106 © 2017
  32. Tổ chức mã nguồn: Minh hoạ #ifndef DATE_H #define DATE_H Date.h class Date{ Date.h: public: Chứa phần mô tả (khai báo) int getDay(void); cho lớp void setDay(int newDay); int getMonth(void); void setMonth(int newMonth); int getYear(void); void setYear(int newYear); int compareTo(const Date& aDate); int distanceTo(const Date& aDate); Date(); Date(const Date& oldDate); void date(int day, int month, int year); private: int day; int month; int year; Trường}; Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 108 © #endif2017
  33. Tổ chức mã nguồn: Minh hoạ int Date::compareTo(const Date& aDate){ // TODO : implement } int Date::distanceTo(const Date& aDate){ Date.cpp - PART II // TODO : implement } Date::Date(){ } Date::Date(const Date& oldDate){ day = oldDate.day; month = oldDate.month; year = oldDate.year; } Date::Date(int day, int month, int year){ // TODO : implement } Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 110 © 2017
  34. Biễu diễn lớp bằng sơ đồ Các hàm thành viên, mỗi hàm có 3 cột • Cột trái: thông tin bổ sung, ví dụ: setter/getter, constructor • Cột tên hàm và danh sách thông số • Cột kiểu trả về Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 112 © 2017
  35. Tổng kết n Hướng đối tượng là một phương pháp để phát triển ứng dụng có nhiều ưu điểm: n Dễ cho thiết kế, viết mã, bảo trì và nâng cấp n Dễ cho quản lý dự án khi quy mô của nó lớn n Nhược điểm: n Khó hiểu lúc bắt đầu n Điểm quan trọng trong phần vừa qua: n (1) Quan điểm về đối tượng: n Đối tượng có tính chủ động. n Nó chứa dữ liệu riêng n Nó có thể đón nhận thông điệp (gọi hàm) từ các đối tượng khác. n (2) Thời gian sống của đối tượng: Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 114 © 2017
  36. Tổng kết n Điểm quan trọng trong phần vừa qua: n (6) Phương pháp lập trình hướng đối tượng có tính trừu tượng hoá cao (abstraction). n Hãy dùng tính khả kiến để che đi các phương thức hỗ trợ nội bộ và che đi dữ liệu nội bộ trong lớp. n Hãy chỉ chia sẽ ra bên ngoài những phương thức chọn lọc thực sự phù hợp với lớp đang được thiết kế. n à Người bắt đầu học về lập trình hướng đối tượng gặp khó khăn trong nguyên tắc thiết này à luyện tập dần dần. n (7) Biểu diễn các lớp bằng sơ đồ giúp việc nắm bắt toàn bộ dự án dễ dàng hơn. n Người bắt đầu có thể chưa quen. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 116 © 2017