Intruksi :
Prinsip Segregasi Antarmuka (ISP) menyatakan bahwa tidak ada klien yang harus dipaksa untuk bergantung pada metode yang tidak digunakannya. ISP membagi antarmuka yang sangat besar menjadi antarmuka yang lebih kecil dan lebih spesifik sehingga klien hanya perlu menerapkan metode yang menarik bagi mereka.
ISP dimaksudkan untuk menjaga sistem dipisahkan dan dengan demikian lebih mudah untuk memperbaiki, mengubah, dan memindahkan. Suatu sistem dapat menjadi sangat berpasangan pada beberapa tingkatan sehingga tidak mungkin lagi melakukan perubahan di satu tempat tanpa memerlukan banyak perubahan tambahan. Menggunakan antarmuka atau kelas abstrak dapat mencegah efek samping ini.
Contoh Praktis
Melanggar ISP
Berikut ini adalah contoh situasi yang masuk akal bagi pengembang. Tugas kita adalah membangun perangkat lunak melalui kode, dan kita diharuskan menguji kode ini sebelum melanjutkan ke proses selanjutnya. Jadi itu adalah asumsi yang adil bahwa Pekerjaan kami adalah untuk kode dan menguji kode itu. Di bawah ini adalah implementasi dari antarmuka yang bisa diterapkan yang sesuai dengan pengembang.
Satu masalah muncul setelah kami menambahkan entitas lain yang bisa diterapkan, Penguji yang tidak tahu cara membuat kode. Sekarang kita harus memeriksa apakah Tester dapat membuat kode, jika tidak maka mereka tidak dapat melakukan pengkodean, hanya pengujian. Ini merupakan pelanggaran terhadap ISP karena Penguji sekarang harus menerapkan metode kode yang tidak berlaku untuknya.
interface Workable
{
public function canCode();
public function code();
public function test();
}
class Developer implements Workable
{
public function canCode()
{
return true;
}
public function code()
{
return 'coding';
}
public function test()
{
return 'testing in localhost';
}
}
class Tester implements Workable
{
public function canCode()
{
return false;
}
public function code()
{
// Tester is having to implement an unnecessary method
throw new Exception('Opps! I can not code');
}
public function test()
{
return 'testing in test server';
}
}
class ProjectManagement
{
public function processCode(Workable $member)
{
if ($member->canCode()) {
$member->code();
}
}
}
Mematuhi ISP :
Solusi untuk masalah ini adalah dengan membagi antarmuka yang bisa diterapkan menjadi dua masalah terpisah, pengujian dan pengkodean. Ini adalah kita dapat memiliki Pengembang mengimplementasikan antarmuka Codeable dan Testable khusus dan bukan antarmuka yang bisa diterapkan secara umum seperti sebelumnya. Kami juga bisa memberikan Tester antarmuka yang dapat diuji sehingga mereka tidak perlu lagi mengimplementasikan fungsi kode dengan tidak perlu.
interface Codeable
{
public function code();
}
interface Testable
{
public function test();
}
class Programmer implements Codeable, Testable
{
public function code()
{
return 'coding';
}
public function test()
{
return 'testing in localhost';
}
}
class Tester implements Testable
{
public function test()
{
return 'testing in test server';
}
}
class ProjectManagement
{
public function processCode(Codeable $member)
{
$member->code();
}
}
Kesimpulan :Prinsip Segregasi Antarmuka mengajarkan bahwa banyak antarmuka kurus spesifik lebih baik daripada antarmuka umum tunggal yang gemuk. Hal ini memungkinkan lebih banyak fleksibilitas dalam pengkodean dan akan membuat refactoring dan penempatan kembali jauh lebih mudah karena semuanya mematuhi kontrak.