Prinsip Segregasi Antarmuka, prinsip isolasi antarmuka ISP menganjurkan bahwa menggunakan beberapa antarmuka khusus lebih baik daripada menggunakan antarmuka total tunggal.
Ketergantungan satu kelas pada kelas lain harus ditetapkan pada antarmuka terkecil.
Antarmuka mewakili peran, dan peran yang berbeda tidak boleh diserahkan ke antarmuka. Antarmuka yang tidak terkait digabungkan bersama untuk membentuk antarmuka besar yang membengkak, yang merupakan polusi pada peran dan antarmuka.
"Pelanggan tidak boleh dipaksa untuk mengandalkan metode yang tidak mereka gunakan. Antarmuka milik pelanggan, bukan hierarki kelas tempat mereka berada." Ini sangat jelas. Secara sederhana, jangan memaksa pelanggan untuk menggunakan metode yang tidak mereka gunakan. Jika pengguna dipaksa untuk menggunakan metode yang tidak mereka gunakan, maka pelanggan ini akan menghadapi perubahan yang disebabkan oleh perubahan dalam metode ini yang tidak mereka gunakan.
Dalam kasus penggunaan, berikan metode yang dibutuhkan oleh penelepon dan blokir metode yang tidak perlu. Ini memenuhi prinsip isolasi antarmuka. Misalnya, dalam sistem e-commerce, ada tiga tempat yang akan digunakan dalam kategori pesanan.
Menurut Prinsip Isolasi Antarmuka (ISP), ketergantungan satu kelas pada kelas lain harus ditetapkan pada antarmuka terkecil.
Artinya, untuk portal, itu hanya dapat mengandalkan antarmuka dengan metode kueri.
Struktur UML adalah sebagai berikut:
Mari kita lihat contoh penulisan antarmuka java yang mengabaikan prinsip isolasi antarmuka:
antarmuka i {public void method1 (); Metode public void2 (); Metode public void3 (); Metode public void4 (); Metode public void5 (); } class a {public void dependent1 (i i) {i.method1 (); } public void depend2 (i i) {i.method2 (); } public void depend3 (i i) {i.method3 (); } } class B implements I{ public void method1() { System.out.println("Method1" to implement interface I"); } public void method2() { System.out.println("Method 2 of Class B implements Interface I"); } public void method3() { System.out.println("Method 3 of Class B implements Interface I"); } //For class B, Metode4 dan Metode5 tidak diperlukan, tetapi karena ada dua metode ini dalam antarmuka A, // dalam proses implementasi, bahkan jika badan metode kedua metode ini kosong, kedua metode ini harus diimplementasikan. } public void dependen (i i) {i.method5 (); } // Untuk Kelas D, Method2 dan Method3 tidak diperlukan, tetapi karena ada dua metode ini dalam antarmuka A, // jadi bahkan jika badan metode kedua metode ini kosong selama proses implementasi, kedua metode yang tidak memiliki efek ini harus diimplementasikan. public void method2 () {} public void method3 () {} public void Method4 () {System.out.println ("Metode 4 dari kelas D mengimplementasikan antarmuka i"); } Metode public void5 () {System.out.println ("Metode 5 dari kelas D mengimplementasikan antarmuka i"); }} klien kelas publik {public static void main (string [] args) {a = new a (); a.depend1 (baru b ()); a.depend2 (baru b ()); a.depend3 (baru b ()); C c = c baru (); c.depend1 (baru d ()); c.depend2 (baru d ()); c.depend3 (baru d ()); }} Dapat dilihat bahwa jika antarmuka terlalu membengkak, selama metode muncul di antarmuka, terlepas dari apakah mereka berguna untuk kelas yang bergantung padanya, metode ini harus diimplementasikan di kelas implementasi. Ini jelas bukan desain yang bagus. Jika desain ini dimodifikasi untuk mematuhi prinsip isolasi antarmuka, antarmuka saya harus dibagi. Di sini kami membagi antarmuka asli I menjadi tiga antarmuka. Desain split ditunjukkan pada gambar di bawah ini:
Seperti biasa, posting kode program untuk referensi untuk teman yang tidak terbiasa dengan diagram kelas:
antarmuka I1 {public void method1 (); } antarmuka I2 {public void method2 (); Metode public void3 (); } antarmuka i3 {public void method4 (); Metode public void5 (); } class a {public void dependen1 (i1 i) {i.method1 (); } public void depend2 (i2 i) {i.method2 (); } public void depend3 (i2 i) {i.method3 (); }} kelas B mengimplementasikan I1, I2 {public void Method1 () {System.out.println ("Metode 1 dari kelas B mengimplementasikan antarmuka I1"); } public void method2 () {System.out.println ("Metode 2 dari kelas B mengimplementasikan antarmuka I2"); } Metode public void3 () {System.out.println ("Metode 3 dari kelas B mengimplementasikan antarmuka I2"); }} class c {public void dependent1 (i1 i) {i.method1 (); } public void depend2 (i3 i) {i.method4 (); } public void depend3 (i3 i) {i.method5 (); }} kelas D mengimplementasikan I1, i3 {public void method1 () {System.out.println ("Metode 1 dari kelas D mengimplementasikan antarmuka i1"); } public void method4 () {System.out.println ("Metode 4 dari kelas D mengimplementasikan antarmuka i3"); } Metode public void5 () {System.out.println ("Metode 5 dari kelas D mengimplementasikan antarmuka i3"); }} Arti dari prinsip isolasi antarmuka adalah: membangun antarmuka tunggal, tidak membangun antarmuka yang besar dan membengkak, cobalah untuk memperbaiki antarmuka, dan mencoba lebih sedikit metode dalam antarmuka. Dengan kata lain, kita perlu membangun antarmuka khusus untuk setiap kelas, alih -alih mencoba membangun antarmuka besar untuk semua kelas yang bergantung padanya untuk menelepon. Dalam contoh ini, prinsip isolasi antarmuka diadopsi saat mengubah antarmuka besar menjadi tiga antarmuka khusus. Dalam pemrograman, mengandalkan beberapa antarmuka khusus lebih fleksibel daripada mengandalkan satu antarmuka yang komprehensif. Antarmuka adalah "kontrak" yang ditetapkan untuk pengaturan eksternal selama desain. Dengan mendefinisikan beberapa antarmuka, penyebaran perubahan eksternal dapat dicegah dan fleksibilitas dan pemeliharaan sistem dapat ditingkatkan.
Berbicara tentang hal ini, banyak orang akan merasa bahwa prinsip isolasi antarmuka sangat mirip dengan prinsip tanggung jawab tunggal sebelumnya, tetapi tidak. Pertama, prinsip tanggung jawab tunggal berfokus pada tanggung jawab; Sementara prinsip isolasi antarmuka berfokus pada isolasi ketergantungan antarmuka. Kedua, prinsip tanggung jawab tunggal sebagian besar adalah kelas kendala, diikuti oleh antarmuka dan metode, yang ditujukan untuk implementasi dan rincian dalam program; Sementara prinsip isolasi antarmuka terutama membatasi antarmuka antarmuka, terutama ditujukan untuk abstraksi, dan ditujukan untuk pembangunan kerangka kerja program secara keseluruhan.
Saat menggunakan prinsip isolasi antarmuka untuk membatasi antarmuka, titik -titik berikut harus diperhatikan:
Antarmuka harus sekecil mungkin, tetapi harus dibatasi. Memperbaiki antarmuka dapat meningkatkan fleksibilitas pemrograman adalah fakta bahwa itu tidak menguntungkan, tetapi jika terlalu kecil, itu akan menyebabkan terlalu banyak antarmuka dan mempersulit desain. Jadi harus moderat.
Layanan khusus untuk kelas yang bergantung pada antarmuka, hanya metode yang perlu diekspos ke kelas yang disebut, dan metode yang tidak perlu disembunyikan. Hanya dengan berfokus pada penyediaan layanan khusus untuk suatu modul, Anda dapat membangun hubungan ketergantungan minimum.
Tingkatkan kohesi dan kurangi interaksi eksternal. Gunakan jumlah antarmuka paling sedikit untuk mencapai banyak hal.
Saat menggunakan prinsip isolasi antarmuka, itu harus moderat. Tidak baik memiliki desain antarmuka yang terlalu besar atau terlalu kecil. Saat merancang antarmuka, hanya dengan menghabiskan lebih banyak waktu berpikir dan perencanaan prinsip ini dapat dipraktikkan secara akurat.