universitatea babeŞ-bolyai facultatea de matematică şi...

30
Programare orientată obiect Curs 08 Laura Dioşan UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi Informatică

Upload: others

Post on 08-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

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

Diagrama UML

generalizare realizare

16 aprilie 2013 4POO - 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

16 aprilie 2013 10POO - 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

Clasă Template – exemplu complex

16 aprilie 2013 29POO - Interfete,i polimorfism, template

Cursul următor Clase

Excepţii Spaţii de nume

16 aprilie 2013 30POO - Interfete,i polimorfism, template