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


Polecenie

Przykład 1
#include "zestawuruchomieniowy.h"
#include "polecenie.h"

#include <iostream>

int main () {
	ZestawUruchomieniowy * zestaw = new ZestawUruchomieniowy();
	zestaw->przypiszPolecenie(ZestawUruchomieniowy::PRZYCISK_1, new PolecenieLed(zestaw, ZestawUruchomieniowy::LED_1,  true));
	zestaw->przypiszPolecenie(ZestawUruchomieniowy::PRZYCISK_2, new PolecenieBrzeczyk(zestaw, true));
	zestaw->przypiszPolecenie(ZestawUruchomieniowy::PRZYCISK_4, new PolecenieBrzeczyk(zestaw, false));
	
	zestaw->nacisnijPrzycisk(ZestawUruchomieniowy::PRZYCISK_1);
	zestaw->nacisnijPrzycisk(ZestawUruchomieniowy::PRZYCISK_2);
	zestaw->nacisnijPrzycisk(ZestawUruchomieniowy::PRZYCISK_3);
	zestaw->nacisnijPrzycisk(ZestawUruchomieniowy::PRZYCISK_4);
	
	delete zestaw;

	return 0;
}
#ifndef __POLECENIE_H__
#define __POLECENIE_H__
#include "zestawuruchomieniowy.h"

class Polecenie {
public:
	Polecenie (ZestawUruchomieniowy * zestaw);
	virtual ~Polecenie ();
	virtual void wykonaj () = 0;
protected:
	ZestawUruchomieniowy * s_zestaw;
};

class PolecenieLed : public Polecenie {
public:
	PolecenieLed (ZestawUruchomieniowy * zestaw, ZestawUruchomieniowy::Led led, bool zaswiec = true);
	virtual void wykonaj ();
private:
	ZestawUruchomieniowy::Led s_led;
	bool s_zaswiec;
};

class PolecenieBrzeczyk : public Polecenie {
public:
	PolecenieBrzeczyk (ZestawUruchomieniowy * zestaw, bool uruchomienie = true);
	virtual void wykonaj ();
private:
	bool s_uruchomienie;
};

#endif
#include "polecenie.h"

Polecenie::Polecenie (ZestawUruchomieniowy * zestaw)
	: s_zestaw(zestaw)
{
}

Polecenie::~Polecenie () {
}

PolecenieLed::PolecenieLed (ZestawUruchomieniowy * zestaw, ZestawUruchomieniowy::Led led, bool zaswiec) 
	: Polecenie (zestaw), s_led (led), s_zaswiec (zaswiec)
{
}
	
void PolecenieLed::wykonaj () {
	s_zaswiec ? s_zestaw->zaswiecLed (s_led) : s_zestaw->zgasLed (s_led);
}

PolecenieBrzeczyk::PolecenieBrzeczyk (ZestawUruchomieniowy * zestaw, bool uruchomienie) 
	: Polecenie (zestaw), s_uruchomienie(uruchomienie)
{
}
	
void PolecenieBrzeczyk::wykonaj () {
	s_uruchomienie ? s_zestaw->uruchomBrzeczyk () : s_zestaw->wylaczBrzeczyk();
}
#ifndef __ZESTAWURUCHOMIENIOWY_H__
#define __ZESTAWURUCHOMIENIOWY_H__
#include <vector>

class Polecenie;

class ZestawUruchomieniowy {
public:
	enum Przycisk { PRZYCISK_1 = 1, PRZYCISK_2 = 2, PRZYCISK_3 = 3, PRZYCISK_4 = 4};
	enum Led { LED_1 = 1, LED_2 = 2, LED_3 = 3, LED_4 = 4};
public:
	ZestawUruchomieniowy ();
	~ZestawUruchomieniowy ();

	void nacisnijPrzycisk (Przycisk przycisk);
	void przypiszPolecenie (Przycisk przycisk, Polecenie * polecenie);
	void zaswiecLed (Led led);
	void zgasLed (Led led);
	void uruchomBrzeczyk ();
	void wylaczBrzeczyk ();
private:
	const unsigned int LICZBA_PRZYCISKOW;
	const unsigned int LICZBA_LED;
	std::vector<Polecenie *> s_polecenia;
};

#endif
#include "zestawuruchomieniowy.h"
#include "polecenie.h"
#include <algorithm>
#include <iostream>

namespace {
	class ObiektFunUsun {
	public:
		void operator() (Polecenie * polecenie) {
			delete polecenie;
		}
	};
}

ZestawUruchomieniowy::ZestawUruchomieniowy ()
	: LICZBA_PRZYCISKOW(4), LICZBA_LED(4), s_polecenia(4,0)
{
}
	
ZestawUruchomieniowy::~ZestawUruchomieniowy () {
	std::for_each(s_polecenia.begin(), s_polecenia.end(), ObiektFunUsun ());
}

void ZestawUruchomieniowy::nacisnijPrzycisk (Przycisk przycisk) {
	std::clog << "Nacisnieto przycisk : " << przycisk << std::endl;
	unsigned int indeks = przycisk - 1;
	
	if (s_polecenia[indeks]) 
		(s_polecenia[indeks])->wykonaj();
}
	
void ZestawUruchomieniowy::przypiszPolecenie (Przycisk przycisk, Polecenie * polecenie) {
	unsigned int indeks = static_cast<unsigned int>(przycisk) - 1;
	delete s_polecenia[indeks];
	s_polecenia[indeks] = polecenie; 
}
	
void ZestawUruchomieniowy::zaswiecLed (Led led) {
	std::clog << "\tzaswiecono diode LED " << led << std::endl;
}
	
void ZestawUruchomieniowy::zgasLed (Led led) {
	std::clog << "\tzgaszono diode LED " << led << std::endl;
}

void ZestawUruchomieniowy::uruchomBrzeczyk () {
	std::clog << "\turuchomiono Brzeczyk" << std::endl;
}
	
void ZestawUruchomieniowy::wylaczBrzeczyk () {
	std::clog << "\twylaczono Brzeczyk" << std::endl;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11