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.