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



Przykład (regulator z wymiennym algorytmem regulacji)

Przykład wykorzystania wzorca Strategia będzie opierał się na następującym problemie: należy zbudować klasę regulatora, który będzie używany w pętli regulacji wraz z innymi obiektami (np. obiektem inercyjnym). Ów regulator do wyznaczenia wartości sterującej powinien mógł korzystać wymiennie z różnych algorytmów (np. P, PID, GPC itd.) przy czym decyzja o zmianie algorytmu należy do klienta i może być przeprowadzona w dowolnym momencie symulacji.

Bez znajomości wzorców projektowych można do problemu podejść opierając się na implementacji wszystkich algorytmów w jednej klasie Regulator. Na podstawie odpowiedniej zmiennej s_typ przechowującej wartość utożsamianą z określonym algorytmem można dokonać szeregu instrukcji warunkowych i wywołać odpowiedni algorytm.

Deklaracja takiej klasy jest następująca:

class Regulator {
private:
	enum TypRegulatora { REGULATOR_BRAK, REGULATOR_P, REGULATOR_PID };
public:
	Regulator ();
	void zmienAlgorytmNaP (double k);
	void zmienAlgorytmNaPID (double k, double Ti, double Td);

	double symuluj (double y);
private:
	void symulujRegulatorP (double wZad, double y);
	void symulujRegulatorPID (double wZad, double y);

	TypRegulatora s_typ;

	double s_regP_k;
	double s_regPID_k;
	double s_regPID_Ti;
	double s_regPID_Td;
};

Najważniejsze elementy na jakie należałoby zwrócić uwagę to:

  • typ prywatny enum (TypRegulatora) – definiujący wartości jakie może przyjmować zmienna s_typ określająca używany przez regulator w danym momencie algorytm.
  • metodę symuluj() - wywoływaną np. w pętli regulacji, wyznaczającą wartość sterującą i podejmującą decyzję o wyborze algorytmu,
  • metody zmienAlgorytmP() oraz zmienAlgorytmPID() służące do zmiany algorytmu, który służy do wyznaczania wartości sterującej,
  • metody prywatne symulujRegulatorP() i symulujRegulatorPID() wywoływane na podstawie wartości składowej s_typ przez metodę symuluj().
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11