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


Strategia

Przykład 2
#include "regulator.h"

#include <iostream>

int main () {
	try {
		Regulator regulator(new AlgorytmP(1.0));
		regulator.symuluj(10.0);
		
		regulator.zmienAlgorytm(new AlgorytmPID(2, 10, 0.2));
		regulator.symuluj(5.0);
	} catch (const std::exception & e) {
		std::clog << e.what() << std::endl;
	}

	return 0;
}
#ifndef __ALGORYTM_H__
#define __ALGORYTM_H__

class Algorytm {
public:
	virtual ~Algorytm ();
	virtual double symuluj (double wZad, double y) = 0;
};

class AlgorytmP : public Algorytm {
public:
	AlgorytmP (double k);
	virtual double symuluj (double wZad, double y);
private:
	double s_k;
};

class AlgorytmPID : public Algorytm {
public:
	AlgorytmPID (double k, double Ti, double Td);
	virtual double symuluj (double wZad, double y);
private:
	double s_k;
	double s_Ti;
	double s_Td;
};

#endif
#include "algorytm.h"
#include <iostream>

Algorytm::~Algorytm () {

}

AlgorytmP::AlgorytmP (double k) 
	: s_k(k)
{
}
	
double AlgorytmP::symuluj (double wZad, double y) {
	std::clog << "\tsymulacja algorytmu P (" << s_k << ")" << std::endl;
	return 0;
}

AlgorytmPID::AlgorytmPID (double k, double Ti, double Td) 
	: s_k(k), s_Ti(Ti), s_Td(Td)
{
}
	
double AlgorytmPID::symuluj (double wZad, double y) {
	std::clog << "\tsymulacja algorytmu PID (" << s_k << ", " << s_Ti << ", " << s_Td << ")" << std::endl;
	return 0;
}
#ifndef __REGULATOR_H__
#define __REGULATOR_H__
#include "algorytm.h"

class Regulator {
public:
	Regulator (Algorytm * algorytm);
	~Regulator ();
	void zmienAlgorytm (Algorytm * algorytm);
	double symuluj (double y);
private:
	void sprawdzAlgorym (Algorytm * algorytm);

	Algorytm * s_algorytm;
};

#endif
#include "regulator.h"
#include <iostream>
#include <exception>

Regulator::Regulator (Algorytm * algorytm) 
	: s_algorytm (algorytm) 
{
	sprawdzAlgorym (algorytm);
}

Regulator::~Regulator () {
	delete s_algorytm;
}
	
void Regulator::zmienAlgorytm (Algorytm * algorytm) {
	sprawdzAlgorym (algorytm);
	delete s_algorytm;
	s_algorytm = algorytm;
}
	
double Regulator::symuluj (double y) {
	std::clog << "Symulacja kroku regulatora regulatora : " << std::endl;
	std::clog << "\twyznaczenie nowej wartosci zadanej z generatora" << std::endl;
	double wZad = 1.0;

	return s_algorytm->symuluj(wZad, y);
}

void Regulator::sprawdzAlgorym (Algorytm * algorytm) {
	if (!algorytm)
		throw std::exception("Nie mozna parametryzowac regulatora algorytem nieokreslonym");
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11