Pendahuluan


Untuk melihat apa itu Liskov Substitution Principle (LSP), bisa dilihat di sini

Dengan Liskov Substitution Principle ini, maka kita mesti memastikan bahwa :

  • Desain Code untuk Object Parent dan Child kita di code memenuhi design by contract, sampai level Behaviour dari object tersebut.

Apa bedanya dengan Prinsip Interface Segregation (ISP) ?


Prinsip Interface Segregation tentu saja berbeda..

Prinsip Interface Segregation menyatakan bahwa :

Clients should not be forced to depend on methods that they don’t need

terjemahan bebas

Client atau pengguna Interface tidak dipaksa untuk menggunakan fungsi yang tidak akan mereka gunakan.

eh.. gimana..gimana maksudnya ?


Gimana maksudnya ?


Penjelasan detail akan dibuat di artikel selanjutnya.

Secara umum, Interface Segregation ini menginginkan :

  • Jangan membuat hanya satu class Interface besar hanya untuk mengakomodasi semua kebutuhan fungsi.
  • Pisah-pisahkan fungsi di dalam class Interface yang besar itu ke dalam banyak class Interface yang punya fungsi-fungsi spesifik.
  • Lebih baik mempunyai class Child/Implementor yang implements banyak Interface yang masing-masing punya fungsi spesifik, dibandingkan implements hanya satu Interface yang generic/umum.

Lalu bedanya antara LSP dan ISP ?


Coba kita lihat :

Liskov Substitution Principle, cirinya :

  • Berfokus ke “Behaviour” dari class Child / Implementor.
  • Memastikan hubungan “Tight Coupling” antara class Parent dengan class Child nya, sampai pada level “Behaviour”.
  • Prinsip ini bersifat internal di dalam hubungan Parent dan Child.
  • Bertujuan untuk bisa saling mempetukarkan class Child / Implementor.

Sementara Interface Segregation Principle, cirinya :

  • Berfokus ke pemisahan komponen di level Parent / Abstract
  • Memastikan hubungan “Loosely Coupling” antara class-class Interface</Parent/Abstract yang “mungkin” saling berkaitan.
  • Prinsip ini bersifat external di dalam hubungan Parent dan Child.
  • Bertujuan untuk membuat fokus serius dalam mendesain class Parent / Abstract.

Dari jabaran diatas, maka dapat dilihat bahwa :

  • Liskov Substitution Principle berfokus ke internal, hubungan antara class Parent dan Child.
  • Interface Segregation Principle berfokus ke external, hubungan antara class Parent dengan class Parent lainnya.

Lalu antara LSP dan ISP bisa disatukan ?


Tentu saja bisa …

Kedua prinsip diatas sebenarnya saling melengkapi..

yang satu melengkapi dari sisi internal yang satu lagi melengkapi dari sisi external

Apakah segampang itu ?

Tentu saja..

Hampir ke 5 prinsip di SOLID Principle itu saling melengkapi.

Bahkan terkadang kita susah membedakan dan saling overlapping antara satu prinsip dengan prinsip lainnya.

Termasuk didalamnya antara :

  • Liskov Substitution Principle
  • Interface Segregation Principle

Kebanyakan kita akan beranggapan keduanya sepaket.

Akan tetapi sebenarnya dari penjelasan diatas, bisa kita lihat perbedaan yang cukup mendasar, yang bisa menjadi acuan ketika mencari perbedaan diantara keduanya.