1. Pretpostavimo da se u programu za vektorsku grafiku javlja potreba za enkapsuliranjem oblika i crteža prema sljedećim sučeljima:
class Shape{
std::string id_;
Rectangle rect_;
public:
const std::string& id() const;
const Rectangle& rect() const;
public:
virtual void rotate(double angle) =0;
...
};
class Drawing{
public:
virtual void addShape(const Shape* pShape)=0;
virtual void removeShape(const std::string& id)=0;
virtual const Shape& getShape(int i)=0;
virtual int nShapes()=0;
};
Predloži implementaciju crteža
(Drawing)
koristeći prilagodnik za std::vector.
Napiši jednostavno ispitno okruženje
te ispitaj ispravan rad razvijenih komponenata.
2. I dalje smo kod programa za vektorsku grafiku. Implementiraj prolaz kroz elemente crteža iteratorom (metodu getShape sada možeš izbaciti jer implicira linearni uređaj elemenata crteža). Prepravi prilagodnik prema std::vector u skladu s novim sučeljem. Neka konkretne iteratore stvara metoda tvornica.
Sad ponudi alternativnu implementaciju crteža koja bi se
temeljila na binarnom stablu (std::map).
Pokaži da klijenti mogu transparentno koristiti
i jednu i drugu implementaciju
zahvaljujući polimorfnim iteratorima.
Ispitaj ispravan rad razvijenih komponenata.
3. Razvijamo program za upravljanje strojem za pripremanje toplih napitaka. U prvoj demonstracijskoj verziji potrebno je podržati barem dva različita napitka, te se odlučujemo za čaj i kavu.
Poznato je da se kava radi po sljedećem receptu:
- zakuhaj vodu - umiješaj kavu - izlij u posudu - dodaj šećer i mlijeko
Čaj se sprema na sličan način:
- zakuhaj vodu - umetni vrećicu čaja - izlij u posudu - dodaj limun
Oblikuj rješenje problema prema obrascu okvirne metode. Neka su elementi obrasca kako slijedi:
Neka svaka pozvana metoda na standardnom izlazu ispiše dijagnostički izlaz kako bi se mogao pratiti tijek izvođenja programa.
Kako bismo omogućili da korisnik može birati koliko grama šećera će se dodati, neovisno o tome koji napitak je izabran?
4. Prouči način korištenja pametnih pokazivača biblioteke boost. Napiši kratke ispitne programe za scoped_ptr i shared_ptr.
5. Implementiraj kompozit za prikazivanje i evaluiranje jednostavnih aritmetičkih izraza. Neka komponenta podržava operaciju zbrajanja te grupiranje zagradama.
Napiši ispitni program za razvijenu komponentu koji učitava izraz sa standardnog ulaza kao znakovni niz, te ispisuje njegovu vrijednost na standardnom izlazu.
Svi komentari su dobrodošli:
| Povratak |