Hỏi về 2 đặc tính của OOP

https://www.tutorialspoint.com/cplusplus/cpp_data_encapsulation.htm
https://www.tutorialspoint.com/cplusplus/cpp_data_abstraction.htm
Sau khi đọc xong 2 cái đặc tính này mình vẫn còn hơi ngơ ngác để phân biệt nó.
Theo mình hiểu là tính trừu tượng cung cấp một cái interface cho người dùng mà không quan tâm đến cài đặt bên trong.
Còn tính đóng gói thì nó đóng gói dữ liệu private chỉ được truy cập qua các function public. Vậy data hiding cũng là 1 phần của đóng gói??

Kết: Các bạn có cách hiểu như thế nào chia sẻ cho mình hiểu rõ hơn về 2 đặc tính này được không?

Encapsulation, trong một số tài liệu ghi là “tính bao đóng và che giấu thông tin”.

Về tính trừu tượng, theo như cá nhân mình hiểu, thì nó có nghĩa là một vật thể phải có tính “trừu tượng”, tức là phải có một mẫu hình X nào đó. Ví dụ, nếu nó là Tập hợp thì nó phải có kích thước. Vì vậy, khi thiết kế interface Collection, người ta có phương thức size()

4 Likes

Do bài viết đánh tráo khái niệm và thể hiện của khái niệm đó :smiley: chứ encapsulation và information hiding là riêng biệt.

Encapsulation là “trói” hàm và dữ liệu lại một chỗ.
Information hiding là giấu đi không cho nhìn thấy hoạt động bên trong.
Abstraction là giản lược một đối tượng thực để mô hình hóa. (vâng, trừu tượng hóa)

“One point of confusion regarding abstraction is its use as both process and an entity. Abstraction, as a process, denotes the extracting of the essential details about an item, or a group of items, while ignoring the inessential details. Abstraction, as an entity, denotes a model, a view, or some other focused representation for an actual item.”

Thực ra struct cũng là encapsulation nhưng nó ko có cái hàm nào (đừng lầm với C++ :smiley: )

5 Likes

Cứ hiểu thế này, encapsulation thực hiện data hiding bằng cách sử dụng các access modifiers (private, public,…)
Vì vậy, data hiding chỉ đơn giản là mục đích của đóng gói mà thôi.

3 Likes

Khác biệt rõ ràng giữa ẩn dữ liệu và trừu tượng hóa dữ liệu là:

  1. Sự khác biệt chính giữa trừu tượng và ẩn dữ liệu là: Trừu tượng là chỉ trích xuất thông tin có liên quan và bỏ qua các chi tiết không cần thiết. Còn đóng gói là ẩn dữ liệu khỏi các phần của chương trình.
  2. Mục đích của abstraction là để che giấu sự phức tạp. Mặt khác, encapsulation là để đạt được tính đóng gói.
  3. Lớp: Lớp sử dụng abstraction để lấy ra một kiểu dữ liệu mới do người dùng định nghĩa. Encapsulation được sử dụng trong một lớp để làm cho dữ liệu của nó ở chế độ riêng tư.
  4. Cuối cùng: Tính trừu tượng tập trung vào hành vi có thể quan sát được của dữ liệu. Việc đóng gói tập trung vào Hạn chế hoặc cho phép sử dụng dữ liệu trong một vùng.

Bạn cũng có thể xem thêm về Data Hiding (Encapsulation) tại đây:

Hy vọng rằng nó có thể giúp bạn.

Chúc may mắn.

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?