Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
In concluzie, o altã definitie posibilã pentru clasa “Object” ar fi urmãtoarea:<br />
// clasa abstractã pentru obiecte generice<br />
class Object {<br />
public:<br />
virtual void print() =0;<br />
virtual int compare (Object* obj) =0; // cu rezultat negativ, pozitiv sau zero<br />
} ;<br />
In C++ nu se face deosebire <strong>în</strong>tre o clasã care contine numai metode abstracte si o<br />
clasã care mai contine si date sau metode implementate. In C# si <strong>în</strong> Java se foloseste<br />
notiunea de “interfatã” pentru o clasã care contine numai metode abstracte.<br />
O interfatã stabileste un mod de utilizare comun pentru toate subclasele sale (clase<br />
care implementeazã interfata) sau un contract pe care clasele compatibile cu interfata<br />
se obligã sã-l respecte (prin definirea tuturor metodelor abstracte din interfatã).<br />
In programarea orientatã pe obiecte se poate face o separare netã <strong>în</strong>tre interfatã si<br />
implementare, evidentã <strong>în</strong> cazul tipurilor abstracte de date. Un tip abstract de date este<br />
definit prin operatiile posibile cu obiecte de acel tip si nu presupune nimic despre<br />
modul de implementare.<br />
Un exemplu este tipul abstract “multime”, definit ca o colectie de elemente distincte<br />
cu operatii de adãugare element la multime, verificare apartenentã la o multime s.a.<br />
Conceptul matematic de multime poate fi implementat printr-un vector cu elemente<br />
distincte sau printr-un arbore binar sau printr-un tabel de dispersie etc. In Java existã o<br />
interfatã “Set” pentru operatii cu orice multime si câteva clase instantiabile care<br />
implementeazã interfata : “TreeSet” si “HashSet”. La acestea se pot adãuga si alte<br />
implementãri de multimi (vector, listã <strong>în</strong>lãntuitã), dar cu aceleasi operatii.<br />
Se recomandã ca o aplicatie cu multimi sã foloseascã variabile si argumente de<br />
functii de tipul general “Set” si numai la crearea de obiecte multime se va preciza tipul<br />
de multime folosit. In acest fel se poate modifica usor implementarea multimii, fãrã a<br />
interveni <strong>în</strong> multe puncte din aplicatie. In plus, se pot scrie algoritmi generici, deci<br />
functii care pot prelucra orice multime, indiferent de implementare.<br />
Agregare si delegare<br />
Reutilizarea functionalitãtii unei clase C <strong>în</strong>tr-o altã clasa E se poate face si prin<br />
includerea unui obiect de tip C <strong>în</strong> clasa E; metodele clasei E vor apela metodele clasei<br />
C prin intermediul obiectului continut. Relatia dintre clasele E si C este de tipul "E<br />
contine un C" (“has a”). Exemplu:<br />
// clasa multime-vector, prin compunere<br />
class ArraySet {<br />
IntArray vec;<br />
public:<br />
ArraySet (int max=10, int incr=10): vec(max,incr) { }<br />
int contains (int x) {