Sự kế thừa và các vấn đề liên quan- Phần 1
Bạn có thể tham khảo thêm bài Giới thiệu về lập trình hướng đối tượng
Ở bài viết này, mình tổng hợp và bổ sung những gì các cuốn sách còn thiếu. Đầu tiên mình sẽ nói 2 khái niệm cực kì quan trọng là kế thừa và hợp thành. Sau đó mình sẽ nói tiếp về phạm vi của sự kế thừa.
Sự kế thừa và thiết kế chương trình
Ngoài việc làm cho việc thay đổi các chương trình có sẵn dễ dàng hơn, sự kế thừa còn có 1 lợi ích khác. Nó cung cấp một cách để liên kết một thành phần chương trình này với một thành phần chương trình khác. Mối quan hệ mới này làm cho việc thiết kế chương trình linh động hơn và cấu trúc chương trình phản ánh mối quan hệ thế giới thực chính xác hơn. Sự kế hơn đôi khi còn gọi là quan hệ "loại". Để thấy được ý nghĩa này, đầu tiên chúng ta cùng xét một loại quan hệ khác là quan hệ hợp thành.
class base_class_name //Lớp cơ sở
{/*....*/};
class derived_class_name: public base_class_name //Lớp dẫn xuất
{ /*...*/ };
Từ khóa public có thể thay thế bằng protected hoặc private. Các thành viên trong cùng một lớp có nhiều quyền truy cập hơn là thành viên lớp dẫn xuất.
Nếu chúng ta xác định mức độ truy cập là protected, mọi thành viên public trong lớp cơ sở sẽ được thừa kế thành proctected trong lớp dẫn xuất. Tương tự đối với từ khóa private.
Ở bài viết này, mình tổng hợp và bổ sung những gì các cuốn sách còn thiếu. Đầu tiên mình sẽ nói 2 khái niệm cực kì quan trọng là kế thừa và hợp thành. Sau đó mình sẽ nói tiếp về phạm vi của sự kế thừa.
Sự kế thừa và thiết kế chương trình
Ngoài việc làm cho việc thay đổi các chương trình có sẵn dễ dàng hơn, sự kế thừa còn có 1 lợi ích khác. Nó cung cấp một cách để liên kết một thành phần chương trình này với một thành phần chương trình khác. Mối quan hệ mới này làm cho việc thiết kế chương trình linh động hơn và cấu trúc chương trình phản ánh mối quan hệ thế giới thực chính xác hơn. Sự kế hơn đôi khi còn gọi là quan hệ "loại". Để thấy được ý nghĩa này, đầu tiên chúng ta cùng xét một loại quan hệ khác là quan hệ hợp thành.
- Hợp thành: Một quan hệ "có":
Nếu có một lớp employee ( nhân viên) và một trong những mục dữ liệu trong lớp này là tên của nhân viên thì chúng ta có thể nói rằng đối tượng employee "có" tên. Đối tượng employee cũng có thể "có" lương, mã nhân viên... Loại quan hệ này gọi là sự hợp thành bởi vì đối tượng employee là hợp của các biến trên.
Dữ liệu thành viên của lớp có thể chưa đối tượng của lớp khác cũng như các biến của các kiểu dữ liệu cơ bản. Chúng ta có thể hình dung một lớp xe đạp bao gồm đối tượng khung, hai đối tượng bánh và 1 đối tượng tay lái.
Sự hợp thành trong OOP mô hình hóa các tình huống thế giới thực trong đó các đối tượng là hợp thành của các đối tượng khác. - Sự kế thừa: Một quan hệ "loại"
Sự kế thừa trong OOP phản ánh khái niệm mà chúng ta gọi là sự khái quát quá trong thế giới thực. Nếu chúng ta có một chiếc xe đạp đua, một chiếc xe đạp địa hình và một chiếc xe đạp thiếu nhi thì chúng ta có thể nói những chiếc xe đạp này cụ thể rõ ràng của một khái niệm trổng quát hơn là xe đạp. Tất cả các loại xe đạp đều có đặc điểm: hai bánh, một khung... Nhưng một chiếc xe đạp đua ngoài các đặc điểm chung này còn có đặc điểm là lốp nhỏ và nhẹ. Một chiếc xe đạp địa hình cũng có tất cả những đặc điểm của một chiếc xe đạp, ngoài ra còn có lốp to, dày và phanh tốt. - Không hoàn toàn là một gia tộc:
Sự kế thừa được so sánh với mối quan hệ gia tộc, đó là lý do nó mang tên là sự kế thừa. Tuy nhiên sự kế thừa trong OOP không hoàn toàn giống sự kế thừa trong gia tộc loài người. Vì một điều, một lớp con có thể kế thừa một lớp cha. Lớp con (lớp dẫn xuất) có xu hướng có nhiều đặc điểm hơn lớp cha (lớp cơ sở) trong khi loài người thường hưởng những phẩm chất có sẵn từ bố và mẹ.
class base_class_name //Lớp cơ sở
{/*....*/};
class derived_class_name: public base_class_name //Lớp dẫn xuất
{ /*...*/ };
Từ khóa public có thể thay thế bằng protected hoặc private. Các thành viên trong cùng một lớp có nhiều quyền truy cập hơn là thành viên lớp dẫn xuất.
Access | public | protected | private |
---|---|---|---|
members of the same class | yes | yes | yes |
members of derived classes | yes | yes | no |
not members | yes | no | no |
Nhận xét
Đăng nhận xét