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



Prototyp

Przykład 2
#include "petla.h"

int main () {
	Petla petla (new ARX(1, "1 -0.8", "0.2"), new RegulatorPID(2.0, 5.0, 0.2));
	petla.krokSymulacji();
	
	Petla petla2 = petla;
	petla2.ustawRegulator(new RegulatorGPC(2, 2, 0.5, 0.2, 1, 0));
	petla2.krokSymulacji();

	return 0;
}
#ifndef __OBIEKT_H__
#define __OBIEKT_H__
#include <string>

class Obiekt {
public:
	virtual double symuluj (double wej) = 0;
	virtual Obiekt * klonuj () const = 0;
};

class ARX : public Obiekt {
public:
	ARX (unsigned int k, const std::string & A, const std::string & B);
	virtual double symuluj (double wej);
	virtual ARX * klonuj () const;
private:
	unsigned int s_k;
	std::string s_A;
	std::string s_B;
};

class RegulatorPID : public Obiekt {
public:
	RegulatorPID (double k, double Ti, double Td);
	virtual double symuluj (double wej);
	virtual RegulatorPID * klonuj () const;
private:
	double s_k;
	double s_Ti;
	double s_Td;
};

class RegulatorGPC : public Obiekt {
public:
	RegulatorGPC (unsigned int H, unsigned int L, double alfa, double ro, unsigned int stA, unsigned int stB);
	virtual double symuluj (double wej);
	virtual RegulatorGPC * klonuj () const;
private:
	unsigned int s_H;
	unsigned int s_L;
	double s_alfa;
	double s_ro;
	unsigned int s_stA;
	unsigned int s_stB;
};

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

ARX::ARX (unsigned int k, const std::string & A, const std::string & B) 
	: s_k(k), s_A(A), s_B(B)
{
}
	
double ARX::symuluj (double wej) {
	std::clog << "Symulacja obiektu ARX : " 
		<< "\n\t" << "k=" << s_k
		<< "\n\t" << "A=[" << s_A << "]"
		<< "\n\t" << "B=[" << s_B << "]"
		<< "\n";

	return 0;
}

ARX * ARX::klonuj () const {
	return new ARX(*this);
}

RegulatorPID::RegulatorPID (double k, double Ti, double Td) 
	: s_k(k), s_Ti(Ti), s_Td(Td)
{	
}
	
double RegulatorPID::symuluj (double wej) {
	std::clog << "Symulacja regulatora PID : "
		<< "\n\t" << "k=" << s_k
		<< "\n\t" << "Ti=" << s_Ti
		<< "\n\t" << "Td=" << s_Td
		<< "\n";

	return 0;
}

RegulatorPID * RegulatorPID::klonuj() const {
	return new RegulatorPID(*this);
}

RegulatorGPC::RegulatorGPC (unsigned int H, unsigned int L, double alfa, double ro, unsigned int stA, unsigned int stB) 
	: s_H(H), s_L(L), s_alfa(alfa), s_ro(ro), s_stA(stA), s_stB(stB)
{
}
	
double RegulatorGPC::symuluj (double wej) {
	std::clog << "Symulacja regulatora GPC : "
		<< "\n\t" << "H=" << s_H
		<< "\n\t" << "L=" << s_L
		<< "\n\t" << "alfa=" << s_alfa
		<< "\n\t" << "ro=" << s_ro
		<< "\n";

	return 0;
}

RegulatorGPC * RegulatorGPC::klonuj () const {
	return new RegulatorGPC(*this);
}
#ifndef __PETLA_H__
#define __PETLA_H__
#include "obiekt.h"

class Petla {
public:
	Petla (Obiekt * arx, Obiekt * regulator);
	Petla (const Petla & petla);
	~Petla ();
	
	void krokSymulacji ();
	void ustawRegulator (Obiekt * nowyRegulator);

private:
	Obiekt * s_arx;
	Obiekt * s_regulator;
};

#endif
#include "petla.h"
#include "obiekt.h"
#include <exception>
#include <iostream>

Petla::Petla (Obiekt * arx, Obiekt * regulator) 
	: s_arx(arx), s_regulator(regulator)
{

}

Petla::Petla (const Petla & petla) {
	if (this == &petla) return;					// ochrona przeciw przeudoprzypisaniu

	s_arx = petla.s_arx->klonuj();
	s_regulator = petla.s_regulator->klonuj();
}
	
Petla::~Petla () {
	delete s_arx;
	delete s_regulator;
}
		
void Petla::krokSymulacji () {
	if (!s_arx || !s_regulator) 
		throw std::exception("Brak wymaganego skladnika petli");

	std::clog << "\nPETLA REGULACJI - symulacja kroku\n";
	s_regulator->symuluj(0.0);
	s_arx->symuluj(0.0);
}

void Petla::ustawRegulator (Obiekt * nowyRegulator) {
	delete s_regulator;
	s_regulator = nowyRegulator;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11