Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 16 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Alternatywa wobec instrukcji warunkowych

Zaprezentowany przykład rozwiązania postawionego zadania bez użycia wzorców projektowych mimo, że spełnia postawione wymagania zawiera szereg wad.

Przede wszystkim wyraźnie widać iż implementacja wszystkich możliwych algorytmów w jednej klasie powoduje jej rozrost i trudność w jej rozumieniu. Klasa Regulatora nie tylko zawiera składowe jej właściwe (s_typ itp), ale także składowe wszystkich możliwych algorytmów regulacji. O ile w przykładzie implementowano tylko dwa algorytmy (P, PID) i klasa może wydawać się jeszcze przejrzysta, o tyle po dodaniu kolejnych algorytmów (GPC, GMV, PZP itp) jej zrozumienie może być już wyzwaniem.

Kolejna wada to konieczność zmian w klasie Regulator za każdym razem, gdy zostanie dodany nowy regulator. Co gorsza – zmiana ta nie dotyczy jednego miejsca, ale co najmniej trzech. Pierwszym z nich jest poszerzenie typu TypRegulatora o nową stałą, drugim - dodanie metody zmiany algorytmu, natomiast trzecim – modyfikacja metody symuluj() o nowy warunek i wywołanie metody prywatnej, czwartym – implementacja owej metody prywatnej wywoływanej z metody symuluj(). Oczywiście należy również dodać nowe składniki prywatne właściwe nowym algorytmom.

Co niejako wynika z przedstawionych błędów narusza się ważną zasadę programowania obiektowego – "jedna klasa – jedna odpowiedzialność". Klasa Regulator nie tylko zapewnia wymienne zarządzanie algorytmami, ale również implementuje te algorytmy. Znacznie lepszym rozwiązaniem było by więc rozdzielenie tej odpowiedzialności na szereg osobnych klas. Jedna nadrzędna klasa zarządzała by algorytmami i operacjami wspólnymi dla algorytmów (np. wyznaczanie wartości sterującej), natomiast algorytmy regulacji można by implementować w klasach zewnętrznych wywodzących się ze wspólnej klasy bazowej. Następnie za pomocą dodatkowego interfejsu klasy nadrzędnej była by ona parametryzowana odpowiednim obiektem (egzemplarzem konkretnej klasy zewnętrznej), a metoda symuluj() delegowała by operację wyznaczania wartości sterującej do tego właśnie obiektu.

Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11