Istnieje wiele heurystyk związanych z projektowaniem obiektowym. Na przykład „wszystkie zmienne składowe powinny być prywatne” lub „należy unikać zmiennych globalnych”, lub „niebezpieczne jest używanie identyfikacji typu w czasie wykonywania (RTTI)”. Jakie jest źródło tych heurystyk? Co sprawia, że są prawdziwe? Czy zawsze są prawdziwe? Ta kolumna bada zasadę projektowania leżącą u podstaw tej heurystyki - zasadę otwartego zamkniętego.
Jak powiedział Ivar Jacobson: „Wszystkie systemy zmieniają się podczas swoich cykli życia. Należy o tym pamiętać, opracowując systemy, które mają trwać dłużej niż pierwsza wersja. ”Jak możemy tworzyć projekty, które są stabilne w obliczu zmian i będą trwać dłużej niż pierwsza wersja? Bertrand Meyer udzielił nam wskazówek już w 1988 r., Kiedy ukształtował słynną już zasadę otwartego zamknięcia. Parafrazując go:
PODMIOTY OPROGRAMOWANIA (KLASY, MODUŁY, FUNKCJE, ITP.) POWINNY BYĆ OTWARTE NA ROZSZERZENIE, ALE ZAMKNIĘTE NA MODYFIKACJĘ.
Gdy pojedyncza zmiana w programie powoduje kaskadę zmian w zależnych modułach, program ten wykazuje niepożądane atrybuty, które kojarzymy z „złym” projektem. Program staje się kruchy, sztywny, nieprzewidywalny i niemożliwy do ponownego użycia. Zasada otwartego zamknięcia atakuje to w bardzo prosty sposób. Mówi, że powinieneś projektować moduły, które nigdy się nie zmieniają . Gdy wymagania się zmieniają, rozszerzasz zachowanie takich modułów, dodając nowy kod, a nie zmieniając stary, który już działa.
Opis
Moduły zgodne z zasadą otwartego i zamkniętego mają dwa podstawowe atrybuty.
- Są „otwarte na rozszerzenie”.
Oznacza to, że zachowanie modułu można rozszerzyć. Możemy sprawić, że moduł będzie zachowywał się w nowy i różny sposób, gdy zmieniają się wymagania aplikacji lub w celu zaspokojenia potrzeb nowych aplikacji.
- Są „zamknięte na modyfikacje”.
Kod źródłowy takiego modułu jest nienaruszony. Nikomu nie wolno dokonywać w nim zmian w kodzie źródłowym.
Wydaje się, że te dwa atrybuty są ze sobą sprzeczne. Normalnym sposobem na rozszerzenie zachowania modułu jest dokonywanie zmian w tym module. Uważa się, że moduł, którego nie można zmienić, ma ustalone zachowanie. Jak rozwiązać te dwa przeciwstawne atrybuty?
Abstrakcja jest kluczem ...