Thừa kế lập trình hướng đối tượng

80 483 0
Thừa kế lập trình hướng đối tượng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

Lập trình hướng đối tượng – Thừa kế 1 Chương 3 THỪA KẾ THỪA KẾ Lập trình hướng đối tượng – Thừa kế 2 Nội dung chính  Tại sao phải thừa kế ? Tại sao phải thừa kế ?  Các thuật ngữ Các thuật ngữ  Thừa kế trong C++ Thừa kế trong C++  Phạm vi truy cập trong các kiểu thừa kế Phạm vi truy cập trong các kiểu thừa kế  Đơn thừa kế và đa thừa kế Đơn thừa kế và đa thừa kế  Sự tương hợp kiểu giữa lớp cơ sở và lớp dẫn xuất Sự tương hợp kiểu giữa lớp cơ sở và lớp dẫn xuất  Định nghĩa các hàm thành viên cho các lớp dẫn Định nghĩa các hàm thành viên cho các lớp dẫn xuất xuất  … … Lập trình hướng đối tượng – Thừa kế 3 Tài liệu đọc Lập trình hướng đối tượng – Thừa kế 4 Tại sao phải thừa kế ? L pớ L pớ Các đ i t ngố ượ Tính dùng l i b ng th a kạ ằ ừ ế Làm th nào đ xây d ng l p m i: Bàn làm vi c và Bàn ăn t i?ế ể ự ớ ớ ệ ố class dining table class desk Bàn và Ghế Lập trình hướng đối tượng – Thừa kế 5 Xây dựng lớp mới từ lớp đã có Furniture Table Lounge Chair Sofa Dining Table Desk Chair class dining table: public table class desk: public table class table: public furniture Lập trình hướng đối tượng – Thừa kế 6 Một ví dụ khác (1) Rectangle Triangle Polygon class Polygon class Polygon { { private: private: int width, length; int width, length; public: public: void set(int w, int l); void set(int w, int l); } } class Rectangle{ class Rectangle{ private: private: int width, length; int width, length; public: public: void set(int w, int l); void set(int w, int l); int area(); int area(); } } class Triangle{ class Triangle{ private: private: int width, length; int width, length; public: public: void set(int w, int l); void set(int w, int l); int area(); int area(); } } Lập trình hướng đối tượng – Thừa kế 7 Một ví dụ khác (2) Rectangle Triangle Polygon class Polygon class Polygon { { protected: protected: int width, length; int width, length; public: public: void set(int w, int l); void set(int w, int l); } } class Rectangle : public Polygon class Rectangle : public Polygon { { public: public: int area(); int area(); } } class Rectangle{ class Rectangle{ protected: protected: int width, length; int width, length; public: public: void set(int w, int l); void set(int w, int l); int area(); int area(); } } Lập trình hướng đối tượng – Thừa kế 8 Một ví dụ khác (3) Rectangle Triangle Polygon class Polygon class Polygon { { protected: protected: int width, length; int width, length; public: public: void set(int w, int l); void set(int w, int l); } } class Triangle : public Polygon class Triangle : public Polygon { { public: int area(); public: int area(); } } class Triangle{ class Triangle{ protected: protected: int width, length; int width, length; public: public: void set(int w, int l); void set(int w, int l); int area(); int area(); } } Lập trình hướng đối tượng – Thừa kế 9 Thừa kế để  Tạo ra mối quan hệ phân cấp giữa các lớp Tạo ra mối quan hệ phân cấp giữa các lớp  Khả năng dùng lại phần mềm  Phát triển (mở rộng) các lớp đã có mà không cần Phát triển (mở rộng) các lớp đã có mà không cần phải sửa hoặc biên dịch lại chúng phải sửa hoặc biên dịch lại chúng  Có thể dùng lại code, do đó tiết kiệm thời gian  Giảm lỗi vì không cần biên dịch lại những lớp đã Giảm lỗi vì không cần biên dịch lại những lớp đã có có  Che giấu thông tin Che giấu thông tin  Các lớp mới không cần biết bên trong các phương thức của lớp đã có  Nhưng nó vẫn có thể sử dụng chúng  Có thể mở rộng code đã có (không cần viết lại) Có thể mở rộng code đã có (không cần viết lại) Lập trình hướng đối tượng – Thừa kế 10 Các thuật ngữ  Lớp cơ sở (trong C++)/Lớp cha (trong Java) Lớp cơ sở (trong C++)/Lớp cha (trong Java)  Lớp đã có mà các lớp mới có thể thừa kế từ nó  Lớp dẫn xuất (trong C++)/Lớp con (trong Java) Lớp dẫn xuất (trong C++)/Lớp con (trong Java)  Lớp mới được tạo ra bằng thừa kế từ lớp đã có  Lớp cơ sở được gọi là tổng quát hóa của lớp dẫn Lớp cơ sở được gọi là tổng quát hóa của lớp dẫn xuất xuất  Lớp dẫn xuất được gọi là chuyên biệt hóa của lớp Lớp dẫn xuất được gọi là chuyên biệt hóa của lớp cơ sở cơ sở  Một lớp dẫn xuất có thể là lớp cơ sở của các lớp Một lớp dẫn xuất có thể là lớp cơ sở của các lớp dẫn xuất khác: hình thành phân cấp lớp dẫn xuất khác: hình thành phân cấp lớp [...]... nó một lớp dẫn xuất được thừa kế một cách tường minh  Lớp cơ sở gián tiếp: là lớp được thừa kế từ 2 hoặc nhiều mức phía trên trong phân cấp lớp  Đơn thừa kế: một lớp được dẫn xuất từ một lớp cơ sở (trong Java chỉ có đơn thừa kế)  Đa thừa kế: cho phép một lớp có thể được thừa kế từ nhiều lớp (trong C++ cho phép đơn thừa kế và đa thừa kế) Lập trình hướng đối tượng – Thừa kế 11 Ví dụ: Lớp cơ sở, lớp... of: thừa kế  Lớp dẫn xuất là một lớp cơ sở  Car is a Vehicle  Has-a: chứa/có  Lớp có một thành viên  Car has a Engine Lập trình hướng đối tượng – Thừa kế 14 Ví dụ: is-a/a kind of class Telephone Các lớ p cơ sở - tổng quát - ít thành viên - kích thướ c đối tượ ng nhỏ hơ n Các lớ p dẫn xuất - cụ thể - nhiều thành viên hơ n - kích thướ c đối tượ ng lớ n hơ n Lập trình hướng đối tượng – Thừa kế class... viên của lớp dẫn xuất mới có thể truy cập được, còn các lớp khác thông tin là private Lập trình hướng đối tượng – Thừa kế 17 Truy cập thành viên của lớp Base Others Private Public Protected derived Friend Lập trình hướng đối tượng – Thừa kế 18 Truy cập các thành viên được thừa kế  Việc truy cập các thành viên được thừa kế của lớp dẫn xuất phụ thuộc nhiều vào các thành viên đó được khai báo public, private... lớp dẫn xuất Lập trình hướng đối tượng – Thừa kế 20 Thừa kế protected  Các thành viên public của lớp cơ sở trở thành các thành viên protected của lớp dẫn xuất  Các thành viên protected của lớp cơ sở trở thành các thành viên protected của lớp dẫn xuất; và  Các thành viên private của lớp cơ sở không thể được truy cập bên trong lớp dẫn xuất Lập trình hướng đối tượng – Thừa kế 21 Thừa kế private  Các... không thể được truy cập bên trong lớp dẫn xuất Lập trình hướng đối tượng – Thừa kế 22 Truy cập các thành viên được thừa kế B Not inherited private protected public D1: public B D2: private B private private protected protected public Lập trình hướng đối tượng – Thừa kế public 23 D3: protected B private protected public Ví dụ: Truy cập các thành viên thừa kế class A { private: int m_iPrivate; void main()... return 0; } Lập trình hướng đối tượng – Thừa kế 34 Định nghĩa các hàm thành viên lớp dẫn xuất  Một lớp dẫn xuất sẽ không thừa kế constructors, destructor hoặc toán tử gán từ lớp cơ sở  Tuy nhiên, các constructors và toán tử gán của lớp dẫn xuất có thể gọi các constructors và toán tử gán của lớp cơ sở Lập trình hướng đối tượng – Thừa kế 35 Định nghĩa các hàm thành viên lớp dẫn xuất (tt)  Một đối tượng. .. error!!! } Lập trình hướng đối tượng – Thừa kế 24 d.m_iPrivate = 1; // error!!! d.m_iProtected = 1; // error!!! d.m_iPublic = 1; // error!!! Ví dụ: Thừa kế public class Base { public: int m1; protected: int m2; private: int m3; }; class PublicClass : public Base { void test() { m1 = 1; // Still public m2 = 2; // Still protected m3 = 3; // Error Not accessible } }; Lập trình hướng đối tượng – Thừa kế int... Administrator Lập trình hướng đối tượng – Thừa kế 12 Alumnus Single inheritance Single inheritance Biểu diễn thừa kế bằng UML Person Name: String Address: Address DOB: Date Student Staff Student Number: Integer Program: ProgramCode Staff Number: Integer StartDate: Date Faculty: FacultyCode Classification: Integer Permanent Casual AnnualSalary: Money AccruedLeave: Integer Lập trình hướng đối tượng – Thừa kế PayRate:... class Lập trình hướng đối tượng – Thừa kế 28 Sự tương hợp kiểu  Một minh họa của lớp dẫn xuất trong thừa kế public có thể sử dụng bất kỳ nơi đâu như là minh họa của lớp cơ sở  Một minh họa của lớp dẫn xuất có thể không sử dụng được như là minh họa của lớp cơ sở nếu kiểu thừa kế là private hoặc protected  Luôn luôn sử dụng thừa kế public trừ khi có một lý do chính đáng phải sử dụng các kiểu thừa kế. .. Ngoài ra, việc truy cập các thành viên được thừa kế của lớp dẫn xuất còn phụ thuộc vào loại thừa kế: public, private hoặc protected Điều này được xác định trong định nghĩa của lớp dẫn xuất Về nguyên tắc, tất cả các thành viên của lớp cơ sở đều được thừa kế trong lớp dẫn xuất, nhưng chỉ khác ở khả năng truy cập mà thôi Lập trình hướng đối tượng – Thừa kế 19 Thừa kế public  Các thành viên public của lớp . Lập trình hướng đối tượng – Thừa kế 1 Chương 3 THỪA KẾ THỪA KẾ Lập trình hướng đối tượng – Thừa kế 2 Nội dung chính  Tại sao phải thừa kế ? Tại sao phải thừa kế ?  Các thuật. thuật ngữ  Thừa kế trong C++ Thừa kế trong C++  Phạm vi truy cập trong các kiểu thừa kế Phạm vi truy cập trong các kiểu thừa kế  Đơn thừa kế và đa thừa kế Đơn thừa kế và đa thừa kế  Sự tương. thành viên cho các lớp dẫn xuất xuất  … … Lập trình hướng đối tượng – Thừa kế 3 Tài liệu đọc Lập trình hướng đối tượng – Thừa kế 4 Tại sao phải thừa kế ? L pớ L pớ Các đ i t ngố ượ Tính dùng

Ngày đăng: 23/10/2014, 21:05

Từ khóa liên quan

Mục lục

  • Chương 3

  • Nội dung chính

  • Tài liệu đọc

  • Tại sao phải thừa kế ?

  • Xây dựng lớp mới từ lớp đã có

  • Một ví dụ khác (1)

  • Một ví dụ khác (2)

  • Một ví dụ khác (3)

  • Thừa kế để

  • Các thuật ngữ

  • Các thuật ngữ (tt)

  • Ví dụ: Lớp cơ sở, lớp dẫn xuất, …

  • Biểu diễn thừa kế bằng UML

  • Phân biệt mối quan hệ is-a và has-a

  • Ví dụ: is-a/a kind of

  • Những gì được thừa kế ?

  • Thừa kế trong C++

  • Truy cập thành viên của lớp

  • Truy cập các thành viên được thừa kế

  • Thừa kế public

Tài liệu cùng người dùng

Tài liệu liên quan