Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Programare orientată obiectCurs 08
Laura Dioşan
UNIVERSITATEA BABEŞ-BOLYAIFacultatea de Matematică şi Informatică
POO Clase
Polimorfism Interfeţe Colecţii cu elemente generice Şabloane (Template)
Funcţii Clase
16 aprilie 2013 2POO - Interfete,i polimorfism, template
Interfaţa descrie comportamentul sau capacităţile unei clase fără a
recurge la o implementare particulară
Reprezintă un contract între furnizor şi clienţi, definind ceea ce este necesar pentru fiecare implementare, dar doar în termeni de servicii care trebuie furnizate, nu şi în modul în care aceste servicii trebuie realizate
în C++, interfaţa = o clasă abstractă care conţine doar metode virtuale pure poate fi derivată din 0 sau mai multe interfeţe de bază nu poate fi derivată dintr-o clasă de bază (ordinară) poate conţine doar metode publice virtuale pure nu poate conţine constructori nu poate conţine metode statice nu poate conţine date membre
16 aprilie 2013 3POO - Interfete,i polimorfism, template
Containere Un container este un obiect care stochează o colecţie de alte
obiecte (elementele sale).
Containerul: gestionează spaţiul pentru elemente oferă funcţii de acces la elemente, direct sau prin intermediul
iteratorilor
Unele containere au funcţii comune şi împart aceleaşi funcţionalităţi
Alegerea unui anumit tip de container depinde de: funcţionalităţile oferite de container eficienţa (complexitatea) acestor funcţionalităţi
16 aprilie 2013 5POO - Interfete,i polimorfism, template
Clasificarea containerelor Containere secvenţiale
Vector Listă Deque (coadă cu 2 capete)
Containerere adaptate Stivă Coadă Coadă cu priorităţi
Containere asociative Multime Mulţime multiplă Dicţionar Dicţionar multiplu Tabelă de dispersie
16 aprilie 2013 6POO - Interfete,i polimorfism, template
Containere secvenţiale Vector
elementele sunt ordonate urmând în mod STRICT o secvenţă liniară se poate implementa ca:
şir static şir dinamic
elementele sunt stocate în locaţii de memorie continue elementele se pot accesa prin folosirea:
iteratorilor deplasamentelor (offsets)
Listă elementele sunt ordonate urmând o secvenţă liniară se poate implementa ca:
listă simplu înlănţuită listă dublu înlănţuită
elementele sunt stocate în locaţii de memorie diferite şi ne-continue elementele se pot accesa prin folosirea:
iteratorilor
Deque (coadă cu 2 capete) elementele sunt ordonate urmând în mod STRICT o secvenţă liniară se poate implementa în diferite moduri elementele sunt stocate în locaţii de memorie continue sau nu elementele se pot accesa prin folosirea:
iteratorilor cu acces aleator
16 aprilie 2013 7POO - Interfete,i polimorfism, template
Containere adaptive adaptors Stivă
Operează în stil LIFO (last-in first-out) Elementele sunt depuse/scoase în/din vârful stivei
Coadă Operează în stil FIFO (first-in first-out) Elementele sunt depuse la sfârşitul cozii şi scoase de la
începutul cozii
Coadă cu priorităţi Primul element este “mai mare” decât restul elementelor
(conform unei relaţii de ordine date) Elementele sunt depuse la sfârşitul cozii
Se pot implementa folosind containere secvenţiale
16 aprilie 2013 8POO - Interfete,i polimorfism, template
Containere asociative Desmnate pentru a oferi acces eficient la elemente prin folosirea unor chei
Mulţime stochează elemente unice (diferite) elementele sunt ele însele cheile de indexare
Mulţime multiplă similar mulţimii permite stocarea unor chei multiple cu valori egale
Dicţionar elementele sunt formate din cheie şi valoare cheia ideintifică unic un element valoarea corespunde unei anumite chei elementele sunt ordonate crescător pe baza cheii
Dicţionar multiplu Similar dicţionarului permite stocarea unor elemente diferite cu chei egale
Tabelă de dispersie (Hash Table) foloseşte o funcţie de dispersie pentru a translata anumite chei in valorile asociate lor rezolvarea coliziunilor:
chaining (cu ajutorul listelor înlănţuite independente) open address
16 aprilie 2013 9POO - Interfete,i polimorfism, template
Structuri de date polimorfice Şiruri polimorfice
exemplu în 08/array
16 aprilie 2013 11POO - Interfete,i polimorfism, template
Structuri de date polimorfice Liste simplu înlănţuite polimorfice
exemplu în 08/simpleList
16 aprilie 2013 12POO - Interfete,i polimorfism, template
Structuri de date polimorfice Liste dublu înlănţuite polimorfice
exemplu în 08/doubleList
16 aprilie 2013 13POO - Interfete,i polimorfism, template
Structuri de date polimorfice Tabele de dispersie polimorfice
exemplu în 08/hashTable
16 aprilie 2013 14POO - Interfete,i polimorfism, template
Structuri de date polimorfice
Dicţionare polimorfice exemplu în 08/map
Dicţionare multiple polimorfice exemplu în 08/multipleMap
16 aprilie 2013 15POO - Interfete,i polimorfism, template
Temă Să se implementeze mulţimi polimorfice
Să se implementeze mulţimi multiple polimorfice urmând exemplele deja prezentate
16 aprilie 2013 16POO - Interfete,i polimorfism, template
Re-utilizare La nivel de cod obiect
Relaţia de compoziţie Relaţia de derivare
Nivel de cod sursă (elemente generice) prin void* Prin clase abstracte Prin mecanismul template
Funcţii template Clase template Clase cu membrii template
16 aprilie 2013 17POO - Interfete,i polimorfism, template
Funcţii template Funcţii generice
Lista prametrilor formali conşine parametri genericei care vor fi înlocuiţi, la apel, cu parametri particulari
Legătura cu supraîncărcarea funcţiilor
A se consulta exemplul din directorul08/templateFunctions
16 aprilie 2013 18POO - Interfete,i polimorfism, template
Funcţii template Declarare şi definire
Exemplu
template <class T> return_type fc_name(type param);
template <class T> T maxim(T a, T b){return (a > b ? a : b);
}int x = 5;int y = 8;int maxInt = maxim<int>(x, y) ;cout << "integer maxim is " << maxInt << endl;
double z = 9.5;double t = 12.24;double maxDouble = maxim<double>(z, t);cout << "double maxim is " << maxDouble << endl;
Student student1(10);Student student2(9);Student maxStudent = maxim<Student>(student1, student2);cout << "Student maxim is " << maxStudent << endl;
declarare template argument template (parametru substutibil )
instanţiere template
16 aprilie 2013 19POO - Interfete,i polimorfism, template
Funcţii template Funcţia maxim poate fi apelată pentru orice
fel de argumente: int double obiect (Flower, Student, etc) pentru aceste
clase trebuie supraîncărcat operatorul >
16 aprilie 2013 20POO - Interfete,i polimorfism, template
Clase template Elemente generice:
C : void* Java, SmallTalk : o singură clasă de bază
(Object IE); din această clasă sunt derivate toate celelalte clase
C++ Pointeri la clase abstracte Clase template
16 aprilie 2013 21POO - Interfete,i polimorfism, template
Clase template Un macro (framework, skeleton) care descrie o
mulţime de clase similare
Similar unei interfeţe
template Indică compilatorului că definiţia clasei va manipula unul
sau mai multe tipuri de date nespecificate La moment utilizării codul clasei generat pe baza
template-ului trebuie să aibă acces la tipul de date respectiv pentru ca compilatorul sa+l poată înlocui
16 aprilie 2013 22POO - Interfete,i polimorfism, template
Clase template - schelettemplate <class T> class MyClass{private:T data;static T staticData;
public:MyClass();MyClass(MyClass<T> &);void fc1(T);T fc2();
};
template <class T> T MyClass <T>::staticData = 0;
template <class T> MyClass<T>::MyClass(){…}template <class T> MyClass<T>::MyClass(MyClass<T> &mc){…}template <class T> void MyClass<T>::fc1(T x){…}template <class T> T MyClass<T>::fc2(){…}
MyClass<int> mc1;MyClass<Flower> mc2;
16 aprilie 2013 23POO - Interfete,i polimorfism, template
Clase template Întreaga declarare şi definire în acelaşi fişier
Compilatorul nu va aloca spaţiu pentru o astfel de clasă, ci va aştepta până la realizarea unei instanţieiri template
Există un mecanism, undeva între compilator şi linker, pentru înlăturarea definiţiilor multiple a unui template identic
Dacă definirea se scrie în alt fişier (source file), atunci: Programul de test trebuie să includă acest fişier sursă Programul trebuie compilat într-un mod mai special
16 aprilie 2013 24POO - Interfete,i polimorfism, template
Parametrul template Poate fi:
orice tip de dată predefinit int, bool, double, char, etc
orice tip de dată definit de user Student, Flower, etc
expresii constante – folosite pentru a preciza capacitatea unei structuri void adrese ale variabilelor (obiectelor) ne-locale funcţii alte template-uri
Nu poate fi: expresii constante flotante adrese ale elementelor dinţun vector adrese ale variabilelor locale tipuri de date locale
A se consulta exemplul din directorul 08/templateParam
16 aprilie 2013 25POO - Interfete,i polimorfism, template
Clasă template - exemplu
Vector cu elemente generice A se consulta exemplul din directorul
08/templateVector
Secvenţă ordonată cu elemente generice A se consulta exemplul din directorul
08/templateOrdSeq
16 aprilie 2013 26POO - Interfete,i polimorfism, template
Clasă template – membri template
A se consulta exemplul din directorul08/templateMember
16 aprilie 2013 27POO - Interfete,i polimorfism, template
Clasă Template – exemplu complex Coadă cu priorităţi cu elemente generice
Reprezentată folosind: Liste simplu înlănţuite Vectori
Şi iteratori interiori (inner) A se consulta exemplul din directorul
08/templatePriorityQueue
16 aprilie 2013 28POO - Interfete,i polimorfism, template