Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Sobota, 21 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


Adapter

Przykład 2
#include "regulator.h"
#include "regulatorzewn.h"
#include "adapter.h"
#include "funkcje.h"

#include <iostream>

int main () {
	Regulator * regulator1 = new Regulator();
	Regulator * regulator2 = new AdapterObiektow(new RegulatorZewn());
	
	uzycieRegulatora (regulator1);
	std::clog << std::endl;
	uzycieRegulatora (regulator2);

	delete regulator1;
	delete regulator2;

	return 0;
}
#ifndef __ADAPTER_H__
#define __ADAPTER_H__
#include "regulator.h"
#include "regulatorzewn.h"

class AdapterObiektow : public Regulator {
public:
	AdapterObiektow  (RegulatorZewn * regulatorZewn);
	virtual ~AdapterObiektow  ();
	virtual double symuluj (double wej);
	virtual double pobierzE () const;
	virtual double pobierzWzad () const;
	virtual double pobierzU () const;
	virtual double pobierzY () const;
private:
	RegulatorZewn * s_regulatorZewn;
};

#endif
#include "adapter.h"

AdapterObiektow::AdapterObiektow (RegulatorZewn * regulatorZewn) 
	: s_regulatorZewn(regulatorZewn)
{
	if (!s_regulatorZewn) 
		throw std::exception ("Adapter musi posiadac odniesienie do istniejacego skladnika");
}

AdapterObiektow::~AdapterObiektow () {
	delete s_regulatorZewn;
}

double AdapterObiektow::symuluj (double wej) {
	return s_regulatorZewn->krokSymulacji(wej);
}

double AdapterObiektow::pobierzE () const {
	return s_regulatorZewn->pobierz("uchyb");
}

double AdapterObiektow::pobierzWzad () const {
	return s_regulatorZewn->pobierz("wartoscZadana");
}

double AdapterObiektow::pobierzU () const {
	return s_regulatorZewn->pobierz("wartoscSterujaca");
}

double AdapterObiektow::pobierzY () const {
	return s_regulatorZewn->pobierz("wyjscie");
}
#ifndef __FUNKCJE_H__
#define __FUNKCJE_H__
#include "regulator.h"
#include "regulatorzewn.h"

void uzycieRegulatora (Regulator * reg);

#endif
#ifndef __REGULATOR_H__
#define __REGULATOR_H__

class Regulator {
public:
	Regulator ();
	virtual ~Regulator ();
	virtual double symuluj (double wej);
	virtual double pobierzE () const;
	virtual double pobierzWzad () const;
	virtual double pobierzU () const;
	virtual double pobierzY () const;
private:
	double s_e, s_wZad, s_u, s_y;
};

#endif
#include "regulator.h"

Regulator::Regulator () {
	s_e = 1.0;
	s_wZad = 3.0;
	s_u = 1.7;
	s_y = 2.0;
}

Regulator::~Regulator () {
}

double Regulator::symuluj (double wej) {
	// symulacja pracy regulatora
	return 0;
}
	
double Regulator::pobierzE () const {
	return s_e;
}
	
double Regulator::pobierzWzad () const {
	return s_wZad;
}
	
double Regulator::pobierzU () const {
	return s_u;
}
	
double Regulator::pobierzY () const {
	return s_y;
}
#ifndef __REGULATORZEWN_H__
#define __REGULATORZEWN_H__
#include <map>
#include <string>

class RegulatorZewn {
public:
	RegulatorZewn ();
	~RegulatorZewn ();
	virtual double krokSymulacji (double wej);
	virtual double pobierz(const std::string & wlasnosc) const;
private:
	std::map<std::string, double> s_mapaWlasnosci;
};

#endif
#include "regulatorzewn.h"
#include <exception>

RegulatorZewn::RegulatorZewn () {
	s_mapaWlasnosci["uchyb"] = -1.5;
	s_mapaWlasnosci["wartoscZadana"] = 1.0;
	s_mapaWlasnosci["wartoscSterujaca"] = 1.5;
	s_mapaWlasnosci["wyjscie"] = 2.5;
}

RegulatorZewn::~RegulatorZewn () {

}

double RegulatorZewn::krokSymulacji (double wej) {
	return 0;
}
	
double RegulatorZewn::pobierz(const std::string & wlasnosc) const {
	if (s_mapaWlasnosci.count(wlasnosc) == 0)
		throw std::exception("Brak odpowiedniej wlasnosci");
	else
		return s_mapaWlasnosci.find(wlasnosc)->second;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11