Single Responsibility Principle (SRP)

Zasada pojedynczej odpowiedzialności jest pierwszą z pięciu podstawowych zasad programowania obiektowego ukrytych pod akronimem SOLID. SRP czyli Single Responsibility Principle mówi o tym, że każda klasa powinna mieć tylko jedną odpowiedzialność (powinna wykonywać tylko jedną konkretną rzecz). To znaczy, że powinien istnieć tylko jeden powód do modyfikacji klasy w przyszłości. Mówiąc inaczej: jeżeli klasa jest odpowiedzialna za więcej niż jeden obszar w naszym projekcie to istnieje duże prawdopodobieństwo, że wprowadzając zmiany w jednym obszarze, można zepsuć coś w innym, który z pozoru nie jest z nim związany. Reguła SRP oprócz klas czy interfejsów, dotyczy również modułów oraz metod.

Przykład kodu bez zastosowania SRP:

public class Pracownik {
   private String imie;
   private String email;
   private double wynagrodzenie;

   public Pracownik(String imie, String email, double wynagrodzenie) {
       this.imie = imie;
       this.email = email;
       this.wynagrodzenie = wynagrodzenie;
   }

   public String getImie() {
       return imie;
   }

   public String getEmail() {
       return email;
   }

   public double getWynagrodzenie() {
       return wynagrodzenie;
   }

   public double obliczPodatek() {
       // kod do obliczenia podatku bazujący na wynagrodzeniu
   }
}

Nasza klasa powinna jedynie przechowywać dane o pracowniku, lecz posiada także inne zadanie – jest odpowiedzialna za obliczanie podatków na podstawie wynagrodzenia.

Zobaczmy zatem kod zgodnie z zasadą SRP:

public class Pracownik {
   private String imie;
   private String email;
   private double wynagrodzenie;

   public Pracownik(String name, String email, double wynagrodzenie) {
       this.imie = imie;
       this.email = email;
       this.wynagrodzenie = wynagrodzenie;
   }

   public String getImie() {
       return imie;
   }

   public String getEmail() {
       return email;
   }

   public double getWynagrodzenie() {
       return wynagrodzenie;
   }
}
public class KalkulatorPodatku {
   public double obliczPodatek(Pracownik pracownik) {
       // kod do obliczenia podatku bazujący na wynagrodzeniu
   }
}

Teraz nasza klasa “Pracownik” spełnia zasadę pojedynczej odpowiedzialności – przechowuje informacje o pracowniku. Natomiast funkcja obliczania podatku została przeniesiona do osobnej klasy, która również spełnia zasadę SRP. Dzięki takiemu zabiegowi nasz kod stał się bardziej czytelny, prostszy w utrzymaniu oraz rozbudowie.

Scroll to Top