Saat berkembang dalam OOP, terkadang antarmuka / kontrak diberikan oleh perpustakaan yang tidak dapat Anda ubah. Sebut saja antarmuka ini J.
Sekarang Anda memiliki objek kelas A yang mengkonsumsi objek yang mengimplementasikan antarmuka ini. Di dalam Hanya diperlukan sebagian kecil dari definisi antarmuka. Beberapa kelas objek dibuat oleh saya selama proyek (sebut saja salah satu dari mereka tipe D), jadi ada overhead dalam implementasi segala sesuatu di dalam antarmuka J.
Saya ingin mengimplementasikan subset dari fungsionalitas di antarmuka J, tetapi solusi saya sejauh ini tidak memuaskan saya:
- menerapkan setiap aspek J dan kemudian melemparkan "notImplementedExceptions" salah informasi pengguna objek saya: akan terlihat objek tipe D saya sesuai dengan antarmuka J, tetapi mereka tidak - dan konsumen lain dari objek saya (yang menerima objek yang mengimplementasikan antarmuka J) tidak dapat mengandalkan integritas dari objek saya.
- Menerapkan antarmuka yang baru didefinisikan melarang saya menggunakan objek yang hanya mengimplementasikan antarmuka J, meskipun antarmuka J sepenuhnya kompatibel dengan antarmuka saya sendiri.
- Membiarkan objek kustom saya mengimplementasikan antarmuka J akan membuat overhead yang signifikan, karena mereka tidak memerlukan semua fungsi ini.
Ketika saya dapat mengubah antarmuka J, saya akan membuat "super-interface" K yang memiliki subset ini dari fungsi antarmuka J, dan membuat antarmuka J mewarisi dari antarmuka K. Tapi saya tidak dapat mengubah antarmuka J.
Apa solusi berorientasi objek untuk masalah ini? Apakah solusi terbaik masih menerapkan antarmuka J "just"? Atau adakah cara OOP untuk "superclass" suatu antarmuka tanpa mengubahnya?