Sự khác biệt giữa thừa kế và container

Anonim

Thừa kế và Chứa hàng

Thừa kế và Containership là hai khái niệm quan trọng được tìm thấy trong OOP (Ví dụ Lập trình hướng Đối tượng: C ++). Nói một cách đơn giản, cả Containership và Inheritance sẽ đề cập đến việc cung cấp các thuộc tính hoặc hành vi bổ sung cho một lớp. Thừa kế là khả năng để một lớp kế thừa tài sản và hành vi từ lớp cha mẹ 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 như dữ liệu thành viên.

Thừa kế là gì?

Như đã đề cập ở trên, Inheritance là khả năng để một class thừa kế các thuộc tính và hành vi từ một lớp cha mẹ bằng cách mở rộng nó. Thừa kế chủ yếu cung cấp tái sử dụng mã bằng cách cho phép mở rộng 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 kéo dài B, thì lớp B được gọi là lớp cha mẹ (hoặc siêu lớp) và lớp A được gọi là lớp con (hoặc lớp nguồn / lớp phụ). Trong kịch bản 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à được bảo vệ của lớp siêu (B). Lớp con có thể tùy ý ghi đè (cung cấp chức năng mới hoặc mở rộng cho các phương thức) hành vi thừa kế từ lớp cha mẹ. Thừa kế đại diện cho 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à B. Nói cách khác, B có thể là lớp với một mô tả chung của một thực thể thế giới thực nào đó, nhưng A chỉ định một chuyên môn nhất định. Trong một vấ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 ngành. Nhưng trước tiên bạn cũng có thể tạo lớp Employee và sau đó tổng quát hóa nó cho một lớp Person (ví dụ như khái quát hoá). 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 (tức 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 (như vậy, Người không phải là nhân viên).

Containership 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 như là dữ liệu thành viên. Ví dụ, lớp A có thể chứa một đối tượng lớp B như một thành viên. Ở đây, tất cả các phương thức công cộng (hoặc các chức năng) được định nghĩa trong B có thể được thực hiện trong lớp A. Lớp A trở thành vùng chứa, trong khi lớp B trở thành lớp chứa. Containership 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 đại diện cho một mối quan hệ "có một". Đ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 hiện tất cả các phương thức công cộng của lớp 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 thế giới thực, một đối tượng TextBox lớp có thể được chứa trong các lớp Mẫu, và do đó có thể nói rằng một Mẫu có chứa một TextBox (hoặc cách khác, một Mẫu bao gồm một TextBox).

Mặc dù kế thừa và đóng gói là hai khái niệm OOP, chúng khá khác biệt trong những gì họ cho phép lập trình viên đạt được. Thừa kế là khả năng để một lớp kế thừa tài sản và hành vi từ lớp cha mẹ bằng cách mở rộng nó, trong khi 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 làm dữ liệu thành viên. Nếu một lớp được mở rộng, nó thừa hưởng tất cả các thuộc tính / hành vi công cộng và được bảo vệ và các hành vi đó có thể được ghi đè bởi lớp con. Nhưng nếu một lớp được chứa trong một lớp khác, vùng chứa không có khả năng thay đổi hoặc thêm hành vi vào vùng chứa. Thừa kế đại diện cho mối quan hệ "là-một" trong OOP, trong khi Containership thể hiện quan hệ "có-một".