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.

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) {

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

Saved successfully!

Ooh no, something went wrong!