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: ) Module thì toàn là hàm.

4 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
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?