8

"Abstractionđóng gói là những khái niệm bổ sung: trừu tượng tập trung vào các hành vi quan sát của một đối tượng ... đóng gói tập trung vào việc thực hiện đó làm phát sinh hành vi này ... đóng gói thường được thực hiện thông qua che giấu thông tin, là quá trình che giấu tất cả những bí mật của đối tượng không đóng góp vào các đặc tính thiết yếu của nó. " - Grady Booch trong phân tích và thiết kế hướng đối tượngMột ví dụ tuyệt vời về đóng gói hiệu quả thông qua việc ẩn thông tin?

Bạn có thể cho tôi thấy một số ví dụ mạnh mẽ thuyết phục về lợi ích của việc đóng gói thông qua ẩn thông tin không?

Trả lời

20

Ví dụ được đưa ra trong lớp OO đầu tiên của tôi:

Hãy tưởng tượng trình phát đa phương tiện. Nó tóm tắt các khái niệm về phát, tạm dừng, chuyển tiếp nhanh, vv Là người dùng, bạn có thể sử dụng điều này để vận hành thiết bị.

VCR của bạn triển khai giao diện này và hid hoặc đóng gói chi tiết ổ đĩa và băng cơ học.

Khi mới thực hiện của một media player đến (nói một đầu DVD, trong đó sử dụng đĩa chứ không phải là băng) nó có thể thay thế việc thực hiện đóng gói trong media player và người dùng có thể tiếp tục sử dụng nó cũng giống như họ đã làm với VCR của họ (hoạt động tương tự như chơi, tạm dừng, vv ...).

Đây là khái niệm về ẩn thông tin thông qua trừu tượng. Nó cho phép các chi tiết triển khai thay đổi mà không cần người dùng phải biết và quảng bá mã số coupling thấp.

0

Cái gì? Bạn chưa thuyết phục?

Hiển thị đối diện dễ dàng hơn. Chúng tôi đã từng viết mã không kiểm soát được ai có thể truy cập thông tin chi tiết về việc triển khai nó. Điều đó làm cho nó gần như không thể vào những thời điểm để xác định mã nào đã sửa đổi một biến.

Ngoài ra, bạn thực sự không thể trừu tượng điều gì đó nếu mọi đoạn mã trên thế giới có thể phụ thuộc vào việc triển khai các lớp cụ thể cụ thể.

9

Sự trừu tượng * nix của luồng ký tự (tệp đĩa, đường ống, ổ cắm, tty, v.v.) thành một thực thể duy nhất (mô hình "mọi thứ là tệp") cho phép nhiều công cụ được áp dụng rộng phạm vi của các nguồn dữ liệu/chìm trong một cách mà chỉ đơn giản là sẽ không thể có mà không có đóng gói.

Tương tự như vậy, các khái niệm về dòng bằng các ngôn ngữ khác nhau, trừu tượng hóa qua danh sách, mảng, tập tin, vv

Ngoài ra, khái niệm như số (trừu tượng hóa trên số nguyên, một nửa tá các loại phao, rationals, vv) hãy tưởng tượng cơn ác mộng này sẽ là gì nếu mã mức cao hơn được đưa ra định dạng mantissa và vân vân và còn lại để tự bảo vệ mình.

0

Gần như mọi cơ sở mã Java, C# và C++ trên thế giới đều ẩn thông tin: Nó đơn giản như phần riêng tư: các phần của các lớp.

Thế giới bên ngoài không thể nhìn thấy các thành viên riêng tư, vì vậy nhà phát triển có thể thay đổi chúng mà không cần phải lo lắng về phần còn lại của mã không biên dịch.

+0

Tôi không biết rằng tôi sẽ đi xa như vậy để nói "mà không cần phải lo lắng về phần còn lại của mã không biên dịch". Bạn chắc chắn có thể phá vỡ các biên dịch trong khi chỉ thay đổi các thành viên riêng. Lợi ích là nhiều hơn dọc theo dòng có thể hoàn toàn viết lại nội bộ của một lớp miễn là bạn không thay đổi giao diện bên ngoài. Điều này là rất tốt cho một số loại tối ưu hóa. – Toji

2

Tôi biết có đã là một câu trả lời được chấp nhận, nhưng tôi muốn ném một nhiều hơn từ đó: OpenGL/DirectX

Không phải của các API có đầy đủ triển khai (mặc dù DirectX chắc chắn là một chút đầu nặng trong đó liên quan), nhưng thay vào đó là các phương thức chung để truyền đạt các lệnh hiển thị tới một cạc đồ họa.

Nhà cung cấp thẻ là công cụ cung cấp trình điều khiển cho một thẻ cụ thể, trong nhiều trường hợp rất cụ thể về phần cứng, nhưng bạn không cần phải quan tâm đến việc một người dùng đang chạy GeForce ABC và một Radeon XYZ vì việc triển khai chính xác bị ẩn đi phía sau API cấp cao. Nếu không, bạn sẽ cần phải có một con đường mã trong trò chơi của bạn cho mỗi thẻ trên thị trường mà bạn muốn hỗ trợ, điều này hoàn toàn không thể quản lý được từ ngày 1. Một điểm cộng lớn nữa là Nvidia/ATI có thể phát hành phiên bản mới hơn, hiệu quả hơn của các trình điều khiển của họ và bạn tự động được hưởng lợi mà không cần nỗ lực từ phía bạn.

Nguyên tắc tương tự cũng có hiệu lực đối với âm thanh, mạng, chuột, bàn phím ... về cơ bản bất kỳ thành phần nào của máy tính của bạn. Cho dù đóng gói xảy ra ở cấp phần cứng hay trong trình điều khiển phần mềm, tại một thời điểm nào đó, tất cả các chi tiết cụ thể đều bị ẩn đi để cho phép bạn xử lý bất kỳ bàn phím nào, chẳng hạn như bàn phím chứ không phải bản sửa lỗi Microsoft Ergonomic Media Explorer Deluxe 2

Khi bạn xem xét nó theo cách đó, nó nhanh chóng trở nên rõ ràng rằng không có một số hình thức đóng gói/trừu tượng máy tính như chúng ta biết ngày nay chỉ đơn giản là sẽ không làm việc cả. Đó là đủ rực rỡ cho bạn?

Các vấn đề liên quan