17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

De observat cã <strong>în</strong> ambele cazuri un obiect stivã va contine un obiect vector, pentru<br />

cã un obiect stivã contine datele clasei sale, date mostenite dela superclasã si care sunt<br />

adresa si dimensiunea vectorului (la fel ca si <strong>în</strong> cazul agregãrii).<br />

Relatia stabilitã prin derivare este o relatie staticã <strong>în</strong>tre clase ( nu mai poate fi<br />

modificatã la executie), dar relatia stabilitã prin agregare este o relatie dintre obiecte si<br />

poate fi o relatie dinamicã, dacã variabila continutã <strong>în</strong> clasa compusã este de un tip<br />

mai general (clasã abstractã sau interfatã). Variabila continutã (obiect sau pointer la<br />

obiect) poate primi la executie, prin atribuire, variabile de diferite subtipuri.<br />

Un alt exemplu de reutilizare a functionalitãtii unei clase prin compunere poate fi o<br />

clasã pentru dictionare implementate printr-un singur vector extensibil. Metodele clasei<br />

dictionar pot folosi metode ale clasei vector: adãugare la vector (cu extindere, la<br />

nevoie), afisare vector, cãutare <strong>în</strong> vector s.a.<br />

Cele mai importante metode de lucru cu un dictionar sunt:<br />

Object * put (Object* key, Object* value); // pune o pereche in dictionar<br />

Object* get (Object * key); // obtine valoarea asociata unei chei date<br />

Un dictionar este o colectie de perechi cheie-valoare, <strong>în</strong> care cheia si valoarea pot<br />

avea orice tip dar cheile trebuie sã fie distincte ( la comparatie cu metoda “equals”). O<br />

solutie posibilã foloseste o clasã auxiliarã “Pair” pentru o pereche de obiecte si un<br />

vector <strong>în</strong> care se introduc pointeri la obiecte “Pair”.<br />

Exemplul urmãtor este o transcriere <strong>în</strong> C++ a unei situatii uzuale din Java, când se<br />

defineste o colectie ordonatã de obiecte generice comparabile. Ordonarea foloseste<br />

operatia de comparare, dar aceasta depinde de tipul obiectelor din colectie: altfel se<br />

comparã date calendaristice si altfel se comparã siruri de caractere sau numere. Este<br />

deci necesar ca la crearea unui obiect vector ordonat sã se transmitã si obiectul<br />

comparator specific tipului de obiecte introduse <strong>în</strong> vector. Clasa pentru vectori<br />

ordonati contine o variabilã pointer la tipul abstract “Comparator”, initializatã de<br />

constructor cu obiectul concret comparator (dintr-o subclasã a clasei “Comparator”).<br />

Obiectul concret comparator folosit de obiectul vector este stabilit la executie, iar<br />

relatia dintre aceste obiecte este o relatie dinamicã.<br />

// clasa ptr vectori ordonati de obiecte oarecare<br />

class SortedArray: public Array {<br />

private:<br />

Comparator* comp; // comparator de obiecte memorate<br />

void sort();<br />

public:<br />

SortedArray (int size, Comparator* cmp): Array(size) { comp=cmp;}<br />

void add (Object * p) {<br />

Array::add(p);<br />

sort();<br />

}<br />

};

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!