Jest to skrót od zbioru pięciu podstawowych założeń programowania obiektowego, które warto znać i stosować:
-
Single responsibility principle:
"A class should have one and only one reason to change, meaning that a class should have only one job."
-
Open-closed principle:
"Objects or entities should be open for extension, but closed for modification."
-
Liskov subsitution principle:
"Subtypes must be substitutable for their base types."
lub
"Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it."
-
Interface segregation principle:
"A client should never be forced to implement an interface that it doesn't use or clients shouldn't be forced to depend on methods they do not use."
-
Dependency inversion principle:
"Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they should depend on abstractions."
Podsumowując:
1. Każda klasa powinna być odpowiedzialna tylko i wyłącznie za jedną, konkretną rzecz.
2. Klasa powinna być otwarta na rozbudowę, zamknięta na modyfikację.
3. Klasa dziedzicząca powinna tylko rozszerzać możliwości klasy bazowej i nie zmieniać tego, co robiła wcześniej.
4. Jeżeli klasa implementuje interfejs, który posiada metodę która nie będzie używana w tej klasie, oznacza to, że warto podzielić interfejs w taki sposób, żeby klasa miała tylko te metody, których będzie używała.
5. Kod z warstw z wyższego poziomu nie powinien zależeć od kodu z niższych warstw. Obie warstwy za to powinny być zależne od abstrakcji.