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

UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Programare orientată obiectCurs 03

Laura Dioşan

UNIVERSITATEA BABEŞ-BOLYAIFacultatea de Matematică şi Informatică

Page 2: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

POO Elemente de bază ale limbajului C++

Fişiere de IO

Clase Declarare Constructor/destructor Metode Utilizare (static şi dinamic) Clase ca şi date membre UML

12 martie 2010 2POO - definirea claselor

Page 3: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Fişiere de Intrare/Ieşire

Procesarea fişierelor la 2 nivele:

Nivel inferior Acces direct la SO

Nivel superior Utilizarea unor funcţii speciale de intrare-ieşire

12 martie 2010 3POO - definirea claselor

Page 4: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Procesarea fişierelor

Deschiderea unui fişier

Citirea dintr-un fişier

Scrierea într-un fişier

Accesarea unui fişier

Închiderea unui fişier

12 martie 2010 4POO - definirea claselor

Page 5: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Procesarea la nivel superior header <fstream>

ifstream ofstream

a se consulta exemplul din 03/appFiles.cpp

12 martie 2010 5POO - definirea claselor

Page 6: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

POO

Dezvoltarea proiectării sistemelor care presupune utilizarea:

obiectelor – unităţi de bază, fiecare obiect fiind o instanţă a unei clase

clase – relaţionate prin relaţii de compoziţie şi moştenire

12 martie 2010 6POO - definirea claselor

Page 7: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

POO – concepte de bază clasă

defineşte în mod abstract caracteristicile unui lucru: caracteristici (atribute, câmpuri, proprietăţi) comportament (metode, operaţii, trăsături)

implementarea unui TAD obiect

instanţă (obiectul actual creat în timpul rulării) a unei clase variabilă de tip clasă

metodă modalitate de comunicare între obiecte toate metodele formează interfaţa unui obiect

12 martie 2010 7POO - definirea claselor

Page 8: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

12 martie 2010

Dezvoltarea TAD-urilor în C++ TAD

Exportarea un nume (un tip de date) Definirea unui domeniu de valori pentru date Definirea unei interfaţe (operaţiile TAD-ului) Restricţionarea accesului la componentele TAD-

ului (acces doar prin intermediul operaţiilor) Ascunderea implementării unui TAD

8POO - definirea claselor

Page 9: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

POO - caracteristici încapsularea

capacitatea de a comprima datele cu operaţiile ascunderea implementării controlul accesului

Moştenire Reutilizarea codului (folosirea şi îmbunăţirea

codului unei clase) Polimorfism

Permite un comportament adaptat contextului

12 martie 2010 9POO - definirea claselor

Page 10: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Definirea clasei Similar unei date de tip struct:

Protecţie: private

Nu permite acces la membri în afară clasei Permite accesul la membri claselor de tip friend

protected Nu permite acces la membri în afară clasei Permite accesul la membri claselor derivate

public permite acces la membri din afară clasei

Lista de elemente membre date membre metode membre

class <nume_clasă>{[<protecţie>:] listă_membri;

};

12 martie 2010 10POO - definirea claselor

Page 11: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Definirea clasei Membri

date

metode

class <class_name>{[<protection>:]

<type> <identif>;

[<protection>:] <return_type> <fc_name>(<lfp>);

};

12 martie 2010 11POO - definirea claselor

Page 12: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Clase – definirea metodelor

imediat, în interiorul clasei metode inline definiţie completă (antet + corp) pentru metodele simple, fără bucle

în afara clasei -> prin utilizarea operatorului de rezoluţie/scop :: antetul metodei în interiorul clasei corpul metodei în afara clasei

12 martie 2010 12POO - definirea claselor

Page 13: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Obiecte Declararea obiectelor

Alocarea şi iniţializarea unui obiect la declarare prin apelul automat al constructor-ului

De-alocarea la sfârşitul programului/funcţiei prin apelul automat al destructor-ului

Utilizarea obiectelor Componentele clasei sunt accesate:

direct – în interiorul metodelor membre ale clasei prin folosirea operatorului “.” – în alte metode

(care nu sunt membre) (operatorul este precedat de un obiect)

prin folosirea operatorului “->” – operatorul este precedat de o referinţă a unui obiect)

prin folosirea operatorului “::” – în alte metode(care nu sunt membre) (operatorul este precedat de numele unei clase)

<class_name> <identif>;

12 martie 2010 13POO - definirea claselor

Page 14: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Constructorul unei clase Constructor – o metodă publică specială:

numele metodei = nume_clasă fără tip de return (nici măcar void) scop:

rezervă spaţiu pentru datele membre iniţializează datele membre

apelat automat la declararea unui obiect

Destructor – o metodă publică specială: numele metodei = ~nume_clasă fără tip de return (nici măcar void) scop:

eliberează spaţiul ocupat de datele membre apelat automat la sfarţitul domeniului de vizibilitate

la sfârşitul programului pentru obiectele globale la sfârşitul funcţiei pentru obiectele locale

12 martie 2010 14POO - definirea claselor

Page 15: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Constructorul unei clase Fiecare clasă trebuie să conţină cel puţin 2

constructori: constructor implicit constructor de copiere

Alţi constructori posibili constructor cu parametri constructor de conversie

12 martie 2010 15POO - definirea claselor

Page 16: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Constructor implicit fără argumente (implicite) rezervă spaţiu pentru datele membre iniţializează datele membre cu valori implicite este apelat automat la declararea unui obiect

class <class_name>{…public:

<class_name>();<class_name>(<implicit_arg>);

…};

12 martie 2010 16POO - definirea claselor

Page 17: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Constructor general (cu parametri) cu argumente rezervă spaţiu pentru datele membre iniţializează datele membre cu valori date

class <class_name>{…public:

<class_name>(<type1 arg1>, <type2 arg2>, …);…

};

12 martie 2010 17POO - definirea claselor

Page 18: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Constructor de copiere crează o copie a unui obiect

este apelat când: un obiect este transmis ca parametru prin valoare un obiect este returnat prin valoare Se iniţializează un obiect cu un alt obiect

dacă nu există, compilatorul produce un contructor de copiere implicit care realizează o copie bit cu bit a obiectului curent probleme cu datele alocate dinamic

alternative ale contructorului de copiere prevenirea transmiterii prin valoare

class <class_name>{…public:

<class_name>(<class_name> &o);<class_name>(<class_name> &o, <impl_arg>);<class_name>(const <class_name> &o);<class_name>(const <class_name> &o, <impl_arg>);

…};

12 martie 2010 18POO - definirea claselor

Page 19: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Constructor de conversie construieşte un obiect de tipul clasei

curente dintr-un obiect de alt tip

class <class_name>{…public:

<class_name>(<other_type> &o);<class_name>(<other_type> &o, <impl_arg>);<class_name>(const <other_type> &o);<class_name>(const <other_type> &o, <impl_arg>);

…};

12 martie 2010 19POO - definirea claselor

Page 20: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Destructor Eliberează resursele de memorie alocate de constructor

memoria alocată în heap conexiunile cu baze de date conexiunile în reţea fişierele deschise

Este unic Nu returnează nimic Nu are parametri

class <class_name>{…public:

~<class_name>();…

};

12 martie 2010 20POO - definirea claselor

Page 21: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Forma standard a unei clase Date

atributele clasei Metode

Constructor implicit Constructor de copiere Destructor Operator de atribuire (a se consulta cursul

următor) Alte metode

12 martie 2010 21POO - definirea claselor

Page 22: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Obiecte ca şi parametri Dacă obiectul nu-şi

schimbă valoarea în interiorul funcţiei, el va fi apelat ca parametru const

Dacă o metodă nu modifică obiectul apelant, metoda va fi const

12 martie 2010 22POO - definirea claselor

Page 23: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Obiecte ca şi parametri Obiectele sunt transmise prin

referinţă pentru a evita apelarea contructorului de copiere

Un obiect de ieşire este returnat prin valoare când el a fost creat ca obiect temporar în interiorul funcţiei

12 martie 2010 23POO - definirea claselor

Page 24: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Exemplu – clasă simplă Clasa Flower

Date membre: Name Price

Metode: Constructors Destructor Set-ers Get-ers toString Compare

a se consulta exemplul din 03/class

12 martie 2010 24POO - definirea claselor

Page 25: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Exemplu – o clasă mai complexă Este nevoie de un constructor implicit pentru

clasa Flower Dacă clasa Flower nu are un constructor implicit,

compilatorul va sintetiza unul

Dacă clasa Flower are alte tipuri de constructori erori

12 martie 2010 25POO - definirea claselor

Page 26: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Analiză şi proiectare orientată pe obiecte (APOO) Abordare a ingineriei informaţiei care modelează

sistemele ca un grup de obiecte care interacţionează

AOO este o descriere a ceea ce sistemul trebuie să facă, sub forma unui model conceptual Cazuri de utilizare Diagrame de clase Diagrame de interacţiune

Proiectarea OO transformă modelul conceptual în implementare

12 martie 2010 26POO - definirea claselor

Page 27: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

APOO 5 etape:

Realizarea unui plan Ce trebuie realizat? -> cazuri de utilizare:

Cine va utiliza sistemul? Cine sunt actorii sistemului? Cum vor acţiona actorii? Ce probleme pot să apară?

Cum se va construi? Numele claselor Responsabilităţile claselor: ce ar trebui să facă Colabărările între clase: cum vor interacţiona clasele?

Construcţia nucleului Iterarea cazurilor de utilizare Evoluţia

12 martie 2010 27POO - definirea claselor

Page 28: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Limbajul UML UML

Unified Modelling Language

Limbaj standard pentru specificarea şi proiectarea artefacturilor unei aplicaţii orientată pe obiecte

Un limbaj: general de modelare independent de limbajul de programare

12 martie 2010 28POO - definirea claselor

Page 29: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Limbajul UML UML oferă vizualizarea elementelor

arhitecturale ale unui sistem: actori procesele business componentele (logice) activităţile scheme ale bazelor de date reutilizabilitatea componentelor

12 martie 2010 29POO - definirea claselor

Page 30: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Diagrame UML

Diagram

Structure diagram

Behaviour diagram

Class diagram

Profile diagram

Object diagram

Component diagram

Composite structure diagram

Deployment diagram

Package diagram

Use casediagram

Activitydiagram

Interaction diagram

StateMachine Diagram

Timing diagram

Interaction OverviewDiagram

Communication diagram

Sequence diagram

Page 31: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Diagrama de clasă Specificarea unei clase

Protecţia: + - public – - private # - protected

Class_nameData’s section- protection- data_name- data_typeMethod’s section- protection- method_name- method_param- method_type

Flower

- name : String- price : Integer

Flower() <<constructor>> Flower(String, Integer) <<constr>> Flower(String) <<constr>> Flower(const Flower &) <<constr>> ~Flower() <<destructor>> setName(String) setPrice(Integer) getName() : String getPrice() : Integer toString() : String compare(Flower&) : Boolean

Page 32: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

UML Tipuri de date predefinite în UML:

Integer

Real

Boolean

String

char

12 martie 2010 32POO - definirea claselor

Page 33: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Class diagram Relaţii între clase

asociere (colaborare) A utilizează B Grădinarul foloseşte Stropitoarea

agregare A conţine (1/mai multe) B-uri B există fără A Grădinarul conţine Floare/Flori

compoziţie A conşine (1/mai multe) B-uri B este creat de către A Floarea este alcătuită din mai multe Petale

moştenire A este un B Floarea este o Plantă

A B

A B

A B

A B

12 martie 2010 33POO - definirea claselor

Page 34: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Temă Scrieţi un program pentru a defini şi utiliza:

clasa Student (PIN, nume, vârstă) şi scrieţi un program de test pentru această clasă

Scrieţi un program pentru a defini şi utiliza: clasa Punct(x, y), clasa Segment (punct1, punct2) şi clasa Figură (nrDeSegmente, segmente). Scrieţi un program de test pentru aceste clase

12 martie 2010 34POO - definirea claselor

Page 35: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi …lauras/test/docs/school/oop/2013/... · 2013-03-11 · POO – concepte de bază clasă defineşte în mod abstract caracteristicile

Cursul următor Clase

Elemente prietene Supraîncărcarea operatorilor Elemente statice

12 martie 2010 35POO - definirea claselor