Zasada mówi żeby tworzone przez programistę interfejsy były odpowiedzialne za jak najmniejsza funkcjonalność. Użytkownik chcąc zaimplementować taki interfejs nie powinien pisać metod, których nie potrzebuje. Jeśli znajdują się w nim niepotrzebne metody to wtedy nazywamy go interfejsem “fat” lub “polluted”.
Najlepiej rozważyć to na klasycznym przykładzie (z oodesign):
interface IWorker { void Work(); void Eat(); } class Worker: IWorker { public void Work() { } public void Eat() { } } class Robot: IWorker { public void Work() { } public void Eat() { throw new NotImplementedException(); } }
Mamy interfejs IWorker z dwoma metodami: Work oraz Eat. Następnie definiujemy dwie konkretne implementacje pracownika. Pierwszy reprezentuje zwykłego pracownika, który musi jeść i pracować (implementacje obydwu metod). Z kolei druga klasa reprezentuje robota, który może tylko pracować – bez jedzenia :). Przykład prezentuje łamanie zasady ISP ponieważ implementacja wymaga dostarczenia dwóch metod a przecież istnieją klasy (Robot) w których wystarczy zaimplementować wyłącznie jedną (Work). Programista nie powinien być zmuszany do pisania pustych metod (dummy methods) tylko po to aby sprostać wymaganiom interfejsu. Prawidłowe rozwiązanie polega na rozłupaniu interfejsu na dwie części:
interface IWorkable { public void Work(); } interface IFeedable { public void Eat(); } class Worker: IWorkable, IFeedable { public void Work() { } public void Eat() { } } class Robot: IWorkable { public void Work() { } }