SOLID – Zasada otwarte-zamknięte

Posted on by 0 comment

Kolejną zasadą z kręgu SOLID jest zasada otwarte-zamknięte. Jeśli nie wiesz co to jest SOLID, tutaj umieściłem artykuł, który wypełni tę lukę SOLID’nym materiałem.

SOLID - Zasada otwarte-zamknięte

SOLID – Zasada otwarte-zamknięte

Zasada otwarte-zamknięte

O – Open closed principle, czyli Zasada otwarte-zamknięte

Przekładając na język potoczny, reguła ta zaleca, aby tworzyć oprogramowanie, które jest otwarte na rozszerzanie i równocześnie zamknięte na modyfikację.

Na pierwszy rzut oka wydawać się to może sprzecznością, szczególnie gdy próbujemy przełożyć ja na życie codzienne, bo jak można powiesić dodatkowy obrazek w pokoju (rozszerzanie), nie wiercąc nowej dziury w ścianie (modyfikacja).

Jednakże, gdy zostawimy te rozważania i zastanowimy się jakie narzędzia oferuje programowanie obiektowe (delegaty, polimorfizm…), to zastosowanie powyższej zasady będzie już tylko formalnością.

Zasada otwarte-zamknięte wchodzi w tajniki projektowania, wymaga myślenia perspektywicznego, dlatego początkujący adepci mogą mieć problem z dostrzeganiem miejsc, gdzie warto było by ją zastosować, a gdzie nie.

Przykład

Posłużmy się przykładem, aby rozwiać wszelkie wątpliwości. Załóżmy, że projektujemy system, który będzie wydawał posiłki dla 3 typów ludzi (odchudzający się, przybierający na wadze, trzymający wagę).

Utworzyłem prostą klasę Person oraz type Enum DietType definiujący typ diety obsługiwanych klientów.

Teraz utwórzmy funkcję, która będzie wydawać odpowiedni posiłek dla poszczególnych typów osób.

Na pierwszy rzut oka wszystko wydaje się być poprawne, ale warto wziąć pod uwagę, że klasa EnumType jest bardzo podatna na zmiany. Być może będziemy chcieli ją w przyszłości rozbudować o dodatkowy typ diety, np. „dieta bezglutenowa”.

Zmusi nas to także do przebudowania funkcji ServeAMeal, ponieważ nie zbudowaliśmy jej zgodnie z zasadą otwarte-zamknięte.

Popatrzmy jak można by było zaimplementować funkcję ServeAMeal, tak, aby dodanie dodatkowego rodzaju diety nie wymuszało jej zmiany.

Dodałem kolejny argument, w którym definiowane będą rodzaje posiłków dla poszczególnych diet. Dla czystości kodu utworzyłem także prywatną metodę, która dopasowuje osobę do aktualnego posiłku

Dzięki takiemu podejściu nie wystawiamy się już na ryzyko zmian w publicznym api i oszczędzamy sobie pracy w przyszłości.

Podsumowanie

Poznaliśmy już kolejną zasadę z kręgu SOLIDZasada otwarte-zamknięte pomaga tworzyć takie oprogramowanie, które będzie otwarte na nowe funkcjonalności bez potrzeby modyfikacji istniejącego kodu. Zasada otwarte-zamknięte wymaga od programisty dobrego zrozumienia treści którą programuje oraz wykazania się swego rodzaju intuicją, aby zaimplementować tę zasadę w miejscach podatnych na rozszerzanie. Zapraszam do innych artykułów, w których pisze o innych składnikach składających się na SOLID.

Dodaj komentarz