Khi phát triển trong OOP, đôi khi một giao diện / hợp đồng được cung cấp bởi một thư viện mà bạn không thể thay đổi. Hãy gọi giao diện này là J.
Bây giờ bạn có một đối tượng của lớp A tiêu thụ các đối tượng thực hiện giao diện này. Bên trong Chỉ cần một phần nhỏ các định nghĩa của giao diện. Một số lớp đối tượng được tôi tạo ra trong dự án (hãy gọi một trong số chúng là loại D), do đó, có một chi phí trong việc thực hiện mọi thứ bên trong giao diện J.
Tôi muốn triển khai một tập hợp con của chức năng trong giao diện J, nhưng các giải pháp của tôi cho đến nay không làm tôi hài lòng:
- triển khai mọi khía cạnh của J và sau đó ném "notImcellenceedExceptions" gây hiểu lầm cho người dùng đối tượng của tôi: có vẻ như các đối tượng loại D của tôi tuân thủ giao diện J, nhưng họ không - và những người tiêu dùng khác của đối tượng của tôi (chấp nhận giao diện J) không thể dựa vào tính toàn vẹn của các đối tượng của tôi.
- Việc triển khai một giao diện mới được xác định cấm tôi sử dụng các đối tượng chỉ thực hiện giao diện J, mặc dù giao diện J hoàn toàn tương thích với giao diện của riêng tôi.
- Để các đối tượng tùy chỉnh của tôi triển khai giao diện J sẽ tạo ra chi phí đáng kể, vì chúng không cần tất cả chức năng này.
Khi tôi có thể thay đổi giao diện J, tôi sẽ tạo một "siêu giao diện" K có tập hợp con chức năng này của giao diện J và tạo giao diện J kế thừa từ giao diện K. Nhưng tôi không thể thay đổi giao diện J.
Một giải pháp hướng đối tượng cho vấn đề này là gì? Là giải pháp tốt nhất vẫn đang thực hiện giao diện "chỉ" J? Hoặc có những cách OOP để "siêu lớp" một giao diện mà không thay đổi nó?