Thừa kế vs Tàng trữ
Kế thừa và Vật chứa là hai khái niệm quan trọng được tìm thấy trong OOP (Ví dụ về lập trình hướng đối tượng: C ++). Nói một cách dễ hiểu, cả Quyền sở hữu và Quyền thừa kế đều giải quyết việc cung cấp các thuộc tính hoặc hành vi bổ sung cho một lớp. Kế thừa là khả năng một lớp kế thừa các thuộc tính và hành vi từ một lớp cha bằng cách mở rộng nó. Mặt khác, Containership là khả năng của một lớp chứa các đối tượng của các lớp khác nhau dưới dạng dữ liệu thành viên.
Thừa kế là gì?
Như đã đề cập ở trên, Kế thừa là khả năng một lớp kế thừa các thuộc tính và hành vi từ một lớp cha bằng cách mở rộng nó. Tính kế thừa về cơ bản cung cấp khả năng tái sử dụng mã bằng cách cho phép mở rộng các thuộc tính và hành vi của một lớp hiện có bởi một lớp mới được xác định. Nếu lớp A mở rộng B, thì lớp B được gọi là lớp cha (hoặc siêu lớp) và lớp A được gọi là lớp con (hoặc lớp dẫn xuất / lớp con). Trong trường hợp ví dụ này, lớp A sẽ kế thừa tất cả các thuộc tính và phương thức công khai và bảo vệ của lớp siêu (B). Lớp con có thể ghi đè tùy chọn (cung cấp chức năng mới hoặc mở rộng cho các phương thức) hành vi được kế thừa từ lớp cha. Kế thừa thể hiện mối quan hệ “là một” trong OOP. Điều này về cơ bản có nghĩa là A cũng là một B. Nói cách khác, B có thể là lớp mô tả chung về một thực thể thế giới thực nhất định nhưng A chỉ rõ một chuyên môn nhất định. Trong một bài toán lập trình thế giới thực, lớp Person có thể được mở rộng để tạo ra lớp Employee. Đây được gọi là chuyên môn hóa. Nhưng trước tiên bạn cũng có thể tạo lớp Nhân viên và sau đó tổng quát hóa nó thành lớp Người (i.e. sự khái quát). Trong ví dụ này, Nhân viên sẽ có tất cả các thuộc tính và hành vi của Người (nghĩa là Nhân viên cũng là một Người) và có thể chứa một số chức năng bổ sung (vì vậy Người cũng không phải là Nhân viên).
Container là gì?
Containership là khả năng của một lớp chứa các đối tượng của các lớp khác nhau dưới dạng dữ liệu thành viên. Ví dụ, lớp A có thể chứa một đối tượng của lớp B như một thành viên. Ở đây, tất cả các phương thức công khai (hoặc hàm) được định nghĩa trong B có thể được thực thi trong lớp A. Lớp A trở thành vùng chứa, trong khi lớp B trở thành lớp được chứa. Vật chứa đựng còn được gọi là Thành phần. Trong ví dụ này, có thể nói rằng lớp A bao gồm lớp B. Trong OOP, Containership biểu thị mối quan hệ “has-a”. Điều quan trọng cần lưu ý là, mặc dù vùng chứa có quyền truy cập để thực thi tất cả các phương thức công khai của lớp được chứa, nó không thể thay đổi hoặc cung cấp chức năng bổ sung. Khi nói đến một vấn đề lập trình trong thế giới thực, một đối tượng của lớp TextBox có thể được chứa trong lớp Form, và do đó có thể nói rằng một Form có chứa TextBox (hoặc cách khác, một Form bao gồm một TextBox).
Sự khác biệt giữa Quyền thừa kế và Quyền sở hữu
Mặc dù Kế thừa và Vật chứa là hai khái niệm OOP, chúng hoàn toàn khác nhau về những gì chúng cho phép lập trình viên đạt được. Kế thừa là khả năng một lớp kế thừa các thuộc tính và hành vi từ một lớp cha bằng cách mở rộng nó, trong khi Quyền chứa là khả năng của một lớp chứa các đối tượng của các lớp khác nhau dưới dạng dữ liệu thành viên. Nếu một lớp được mở rộng, nó kế thừa tất cả các thuộc tính / hành vi công khai và được bảo vệ và những hành vi đó có thể bị lớp con ghi đè. Nhưng nếu một lớp được chứa trong một lớp khác, thì vùng chứa không có khả năng thay đổi hoặc thêm hành vi vào lớp được chứa. Kế thừa thể hiện mối quan hệ “là một” trong OOP, trong khi Quyền sở hữu thể hiện mối quan hệ “có-một”.