Có sự khác biệt nào trong việc trừu tượng hóa dữ liệu và ẩn thông tin không? Sau khi đi qua tất cả các câu trả lời trong liên kết này, tôi bối rối hơn. Abstraction VS Information Hiding VS Encapsulation Không thể tìm thấy bất kỳ sự khác biệt nào. Có phải chỉ là chúng ta có thể gọi một (ẩn thông tin) như một mục tiêu & khác (trừu tượng) như một quá trình? Nhưng đây không phải là sự khác biệt thỏa đáng đối với tôi. Hơn nữa, tôi nhận được rằng đóng gói là kỹ thuật để thực hiện quá trình trừu tượng Tôi có ở đây không? Xin giải thích sự khác biệt chính xác.Sự khác biệt về ẩn thông tin và trừu tượng dữ liệu?
Trả lời
Ẩn thông tin là khi nhà thiết kế quyết định giới hạn quyền truy cập vào chi tiết triển khai. Đó là một nguyên tắc cũ hơn thiết kế hướng đối tượng, nhưng thường được sử dụng.
Ví dụ đơn giản là xác định các hằng số trong C, ví dụ:, #define NAME_SIZE 15
Mã (khách hàng) của hằng số không cần biết giá trị của nó, và sẽ không gặp rắc rối nếu bạn (nhà thiết kế) quyết định thay đổi giá trị của nó sau này. Họ không nên đưa ra giả định về thực tế là nó thực sự là 15, bởi vì bạn có thể quyết định thay đổi nó.
trừu tượng là khi bạn đang xử lý tổng hợp, ví dụ: Ô tô trừu tượng các chi tiết như khung gầm, động cơ, bánh xe, v.v ... Tóm tắt cho phép chúng ta nghĩ về những thứ phức tạp theo cách đơn giản hơn.
Đóng gói là cách chúng tôi quyết định mức độ chi tiết của các yếu tố bao gồm các tóm tắt của chúng tôi. Đóng gói tốt sẽ áp dụng thông tin ẩn, để thực thi các giới hạn chi tiết. Ví dụ, xe của tôi được bao gồm trong thực tế của tất cả các bộ phận của nó, nhưng nó chỉ cung cấp cho tôi (người lái xe) một giao diện phù hợp với nhu cầu của tôi và không nhiều hơn nữa. Tôi có thể điều khiển cánh cửa, ổ khóa, cửa sổ, đèn, sừng, cửa sổ trời, hướng di chuyển, tăng tốc, giảm tốc, vv Mặc dù tôi có thể tò mò muốn thao tác các chi tiết của "cách" của tất cả những thứ này, tôi nhìn thấy nhiều hơn.
Nếu việc thay đổi xe của tôi thay đổi (tôi thay đổi từ động cơ đốt sang điện hoặc hybrid), vì tôi là người lái xe chỉ biết giao diện giới hạn, tôi không cần phải thay đổi cách lái xe. Trừu tượng cho phép tôi chỉ biết tôi đang lái xe, thay vì hàng trăm mảnh kim loại, cao su vv
Một ví dụ về nơi ẩn thông tin là không phần của một chiếc xe có thể là một choke valve. Cha mẹ tôi nói với tôi rằng những người đã từng làm việc trong những chiếc xe họ lái xe ... đó là một chi tiết động cơ đốt, mà sẽ không hữu ích trong một chiếc xe điện.
"Ẩn thông tin" là một phần quan trọng của "trừu tượng dữ liệu", chứ không phải toàn bộ khái niệm. Và hãy nhớ: bạn có thể (và cần) có "ẩn thông tin" trong mã thủ tục (như "không sử dụng hình cầu", v.v. trong FORTRAN hoặc BASIC) - nhưng bạn sẽ không cần thiết có "kiểu dữ liệu trừu tượng" ".
Information hiding và Abstract Data Types có liên quan chặt chẽ, nhưng chúng là các khái niệm khác nhau.
Một lớp thường ẩn chi tiết triển khai của ứng dụng từ khách hàng. Điều này được gọi là ẩn thông tin. bằng cách tạo ra các giao diện chúng tôi triệu tập thông tin ẩn khái niệm ...
ví dụ về ẩn thông tin bên dưới ... chúng tôi có một giao diện trong tập tin tiêu đề của chúng tôi ...
class Coder
{
public:
Coder();
void prints();
private:
int x;
};
và thực hiện các chức năng trong tập tin khác "Coder.cpp" là ...
Coder::Coder
{
x=10;//any int value you can take;
}
void Coder::prints()
{
cout<<x;
}
thay vì làm trên hai tệp (một tiêu đề + một tệp cpp), chúng tôi có thể thực hiện tại một nơi duy nhất. chúng ta có thể đã đưa ra, định nghĩa của constructor và chức năng in trong tập tin tiêu đề riêng của mình ...
class Coder
{
public:
Coder()
{
x=10;//any int value you can take;
}
void prints()
{
cout<<x;
}
private:
int x;
};
nếu chúng ta đã làm điều này chúng tôi đã không thể thực hiện thông tin ẩn ... và khách hàng của chúng tôi sẽ biết làm thế nào chúng tôi đã thực hiện của chúng tôi chức năng!
cho dữ liệu absraction bạn có thể xem xét ... ví dụ về ngăn xếp ...
Một khách hàng của một lớp ngăn xếp không cần phải được quan tâm đến việc thực hiện của chồng. Khách hàng chỉ biết rằng khi các mục dữ liệu được đặt trong ngăn xếp, chúng sẽ được gọi lại theo thứ tự từ đầu đến cuối. Khách hàng quan tâm đến chức năng mà một ngăn xếp cung cấp, không phải về cách chức năng đó được triển khai. Khái niệm này được gọi là trừu tượng dữ liệu.
Ẩn dữ liệu là quá trình mà các công cụ sửa đổi truy cập được sử dụng để ẩn khả năng hiển thị của các phương thức và biến java. Họ truy cập các công cụ sửa đổi là: công khai, riêng tư và được bảo vệ. Tóm tắt là quá trình mà theo đó chúng tôi xác định một hành vi cụ thể bằng hạt của lớp trừu tượng và phương pháp tạo thành bộ xương cho bất kỳ lớp nào sẽ mở rộng lớp này.
Sự trừu tượng là biểu thị của một cái gì đó có ít chi tiết hơn (như trong một bức tranh trừu tượng). Trong OO, một kiểu trừu tượng có thể được thao tác mà không cam kết với biểu diễn bên trong của nó. Ví dụ, số điện thoại như là một trừu tượng của một số điện thoại có thể được hoạt động mà không có khách hàng biết rằng nó bao gồm mã quốc gia, mã vùng, và số thực tế. Tóm tắt là hữu ích nhất trong giai đoạn phân tích và thiết kế bởi vì nó cho phép bạn nói về kiểu dữ liệu trừu tượng (ví dụ: Số điện thoại) mà không phải lo lắng về việc nó sẽ được triển khai như thế nào.
Loại quen thuộc hơn, string
là sự trừu tượng của văn bản: bạn thao tác string
mà không biết cách triển khai. Sự trừu tượng chuỗi cho phép các phần bên trong của nó được thay đổi mà không ảnh hưởng đến việc sử dụng nó trong một thiết kế ứng dụng.
Ẩn và đóng gói thông tin là hai cách mà một kiểu dữ liệu trừu tượng có thể được triển khai. Một kiểu dữ liệu trừu tượng có thể thậm chí không phải ẩn trạng thái nội bộ của nó hoặc sự đóng gói của nó; ví dụ: Số dưới dạng trừu tượng có thể được triển khai dưới dạng int
.
- 1. Sự khác nhau giữa một kiểu dữ liệu trừu tượng (ADT) và một cấu trúc dữ liệu là gì?
- 2. khác biệt giữa các phương pháp ảo và trừu tượng
- 3. sự khác biệt giữa orm và pdo
- 4. Sự khác nhau giữa trừu tượng và ảo là gì?
- 5. Đối tượng so với Lưu trữ tài liệu (Cơ sở dữ liệu) = Sự khác biệt (nosql)?
- 6. Sự khác biệt giữa String.getBytes() và Bytes.toBytes (Dữ liệu chuỗi)
- 7. Sự khác biệt thực sự (hoặc ẩn) giữa các bootstrap Twitter và Angular.js
- 8. sự khác biệt về khái niệm giữa SynchronizationContext và TaskScheduler
- 9. Sự khác biệt giữa mẫu Đối tượng Giá trị và mẫu Truyền Dữ liệu
- 10. Sự khác biệt giữa đối tượng và *?
- 11. Giải thích sự khác biệt giữa cấu trúc * dữ liệu * và loại dữ liệu *
- 12. Sự khác biệt về Java giữa FileWriter và BufferedWriter
- 13. Sự khác biệt giữa "var" và "đối tượng" trong C#
- 14. Sự khác biệt giữa tập dữ liệu và cơ sở dữ liệu là gì?
- 15. Sự khác biệt về sự khác biệt giữa Matplotlib giữa Agg và Cairo
- 16. Sự khác biệt về PHP giữa Curl và HttpRequest
- 17. Một ví dụ tuyệt vời về đóng gói hiệu quả thông qua việc ẩn thông tin?
- 18. Sự khác biệt về PHP giữa mảng() và []
- 19. Sự khác biệt giữa SimpleDB và S3
- 20. Sự khác biệt về Tastypie giữa list_allowed_methods và detail_allowed_methods
- 21. Sự khác biệt về thời gian Python
- 22. Sự khác biệt giữa ADO và DAO
- 23. Có sự khác biệt về sự khác biệt nào giữa tuần tự hóa nhị phân và XML không?
- 24. Có cách nào để lưu trữ thông tin về người dùng ẩn danh/khách trong cơ sở dữ liệu?
- 25. Sự khác biệt giữa $ .post và $ .ajax?
- 26. Sự khác biệt giữa việc chờ thông báo và CountDownLatch
- 27. Sự khác biệt về chức năng mysqli_fetch
- 28. Sự khác biệt giữa Khai thác thông tin và Khai thác văn bản là gì?
- 29. Sự khác biệt giữa thông tin bảo mật liên tục và bảo mật tích hợp?
- 30. Sự khác biệt giữa bản đồ và dict
appriciate nỗ lực của bạn giải thích ví dụ thời gian thực. Cảm ơn. :) –