Hermetyzacja zmienności
Dzisiaj mam zamiar poruszyć kwestię związaną z analizą obiektową i projektowaniem oprogramowania. Hermetyzacja czy też enkapsulacja (ang. encapsulation) to ukrywanie pól klasy (oznaczanie jako private) i ewentualnie udostępnianie ich za pośrednictwem metod. Lecz hermetyzacja zmienności jest trochę innym pojęciem, związanym z oddzielaniem zmiennej funkcjonalności.
Stosowanie hermetyzacji zmienności jest jedną z podstawowych zasad projektowania systemów informatycznych. Przede wszystkim pozwala wyeliminować powtarzalność kodu i wykorzystywać różne elementy aplikacji w jednolity sposób.
Za przykład zmienności może posłużyć wykorzystywana baza danych. Nie ważne, czy korzystam z SQLite, Firebird, MySQL czy PostgreSQL, chciałbym mieć możliwość uruchomienia mojej aplikacji. Dlatego korzystam z jednolitych interfejsów (np. JDBC), podczas gdy konkretna implementacja sterownika bazy danych będzie wybierana na podstawie plików konfiguracyjnych.
Na dobrą sprawę, schemat jest zawsze ten sam. Niezależnie od sytuacji, hermetyzacja zmienności polega na ukryciu wielu różnych implementacji za jednolitym interfejsem. Jej realizację widać w wielu wzorcach projektowych&hellip mostu, strategii, fabryki abstrakcyjnej, fasady, obserwatora, dekoratora, metody szablonu – wszystkie one sprowadzają się do zastosowania jednego interfejsu lub jednej klasy abstrakcyjnej oraz wielu różnych klas potomnych.
Jeżeli chodzi o stosowanie interfejsów i klas abstrakcyjnych (chyba, że stosowany język programowania nie posiada interfejsów), to interfejsy powinny być wybierane w każdej sytuacji, w której istnieje taka możliwość. W językach takich jak Java, Delphi czy C# klasa może implementować wiele interfejsów, ale dziedziczy tylko z jednej klasy bazowej – użycie interfejsów zwiększa możliwość zamknięcia większej funkcjonalności w jednej klasie.
Jednak skoro tyle wzorców powstało w oparciu o zasadę hermetyzacji zmienności, to po co poznawać jedno i drugie? Przede wszystkim wzorce są gotowymi odpowiedziami na konkretne problemy – zależnie od sytuacji stosuje się inny wzorzec, a czasem wręcz takiego wzorca brakuje. Sama zasada powinna być stosowana zawsze, a jej znajomość często pozwala samemu zaprojektować powszechnie używane wzorce.



