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


Kompozyt

Przykład 3
#include <iostream>

#include "urzadzeniausb.h"

int main(void) {
	try {
		UrzadzenieUSB * kontroler = new HubUSB(4);

		// podlaczanie elementow na pierwszym poziomie
		kontroler->podlaczUrzadzenie(0, new HubUSB(4));
		kontroler->podlaczUrzadzenie(1, new DyskTwardy());
		kontroler->podlaczUrzadzenie(2, new DyskTwardy());

		// podlaczanie elementow na drugim poziomie
		kontroler->port(0)->podlaczUrzadzenie(0, new Klawiatura());
		kontroler->port(0)->podlaczUrzadzenie(1, new Mysz());
		kontroler->port(0)->podlaczUrzadzenie(2, new Pendrive());
		
		// symulacja pracy
		kontroler->pracuj();

		// UWAGA - rzuca wyjatek - nie mozna podlaczyc nic do dysku
		kontroler->port(1)->podlaczUrzadzenie(0, new AparatFotograficzny());
	} catch (const std::exception & e) {
		std::clog << "WYJATEK: " << e.what() << std::endl;
	}

	return 0;
}
#include "urzadzeniausb.h"

#include <algorithm>
#include <iostream>

namespace {
	class ObFunUsun {
	public:
		void operator() (UrzadzenieUSB * urz) {
			delete urz;
		}
	};
}

UrzadzenieUSB::UrzadzenieUSB () 
{

}

UrzadzenieUSB::~UrzadzenieUSB () {

}

HubUSB * UrzadzenieUSB::podlaczUrzadzenie (unsigned int port, UrzadzenieUSB * urzUSB) {
	throw std::exception("Nie mozna podlaczac urzadzen");
}

UrzadzenieUSB * UrzadzenieUSB::odlaczUrzadzenie (unsigned int port) {
	throw std::exception("Nie mozna odlaczac urzadzen");
}

UrzadzenieUSB * UrzadzenieUSB::port (unsigned int aPort) {
	throw std::exception("Nie mozna zwrocic uzadzenia z portu");
}

unsigned int UrzadzenieUSB::liczbaPortow () const {
	return 0;
}

HubUSB::HubUSB (unsigned int liczbaPortow) 
	: s_porty(liczbaPortow, 0)
{

}

HubUSB::~HubUSB () {
	std::for_each(s_porty.begin(), s_porty.end(), ObFunUsun());
}

void HubUSB::pracuj () {
	std::clog << "Hub pracuje" << std::endl;
	
	std::vector<UrzadzenieUSB *>::iterator it;
	for (it = s_porty.begin(); it != s_porty.end(); ++it) {
		if (*it) 
			(*it)->pracuj();
	}
}

HubUSB * HubUSB::podlaczUrzadzenie (unsigned int port, UrzadzenieUSB * urzUSB) {
	s_porty.at(port) = urzUSB;
	return this;
}

UrzadzenieUSB * HubUSB::odlaczUrzadzenie (unsigned int port) {
	UrzadzenieUSB * temp = s_porty.at(port);
	s_porty.at(port) = 0;
	return temp;
}

UrzadzenieUSB * HubUSB::port (unsigned int aPort) {
	return s_porty.at(aPort);
}

unsigned int HubUSB::liczbaPortow () const {
	return s_porty.size();
}

Klawiatura::Klawiatura () {
	
}

void Klawiatura::pracuj () {
	std::clog << "Klawiatura pracuje" << std::endl;
}

Mysz::Mysz () {
	
}

void Mysz::pracuj () {
	std::clog << "Mysz pracuje" << std::endl;
}

DyskTwardy::DyskTwardy () {
	
}

void DyskTwardy::pracuj () {
	std::clog << "Dysk twardy pracuje" << std::endl;
}

Pendrive::Pendrive () {

}

void Pendrive::pracuj () {
	std::clog << "Pendrive pracuje" << std::endl;
}

AparatFotograficzny::AparatFotograficzny () {

}

void AparatFotograficzny::pracuj () {
	std::clog << "Aparat fotograficzny pracuje" << std::endl;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11