![Page 1: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/1.jpg)
Programare orientată
obiect
Curs 10
Laura Dioşan
UNIVERSITATEA BABEŞ-BOLYAI
Facultatea de Matematică şi Informatică
![Page 2: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/2.jpg)
POO
Analiză şi proiectare orientată obiect
Şabloane de proiectare (Design patterns)
Singleton
Model View Controller
Martie 2018 2 POO - APOO
![Page 3: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/3.jpg)
Analiză şi proiectare orientată pe obiecte
(APOO)
Definire şi etape
Limbajul UML
Relaţii între clase
Asociere
Agregare/Compoziţie
Clase imbricate
Liste şi iteratori
Listă simplu înlănţuită
Iterator exterior
Iterator interior Martie 2018 3 POO - APOO
![Page 4: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/4.jpg)
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
Martie 2018 4 POO - APOO
![Page 5: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/5.jpg)
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
Martie 2018 5 POO - APOO
![Page 6: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/6.jpg)
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
Martie 2018 6 POO - APOO
![Page 7: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/7.jpg)
Limbajul UML
UML oferă vizualizarea elementelor arhitecturale ale unui sistem:
actori
procesele business
componentele (logice)
activităţile
scheme ale bazelor de date
reutilizabilitatea componentelor
Martie 2018 7 POO - APOO
![Page 8: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/8.jpg)
Diagrame UML Tipologie
Diagrame de comportament pt. înţelegerea cerinţelor de funcţionare a sistemului Diagrama cazurilor de utilizare Diagrama de secvenţe Diagrama de colaborare Diagrama activităţilor Diagrama stărilor
Diagrame de structură pt. organizarea obiectelor şi stabilirea
relaţiilor între ele Diagrama de clase Diagrama de obiecte Diagrama de componente Digrama de desfăşurare
Diagrame de organizare a modelului pt. a descrie cum şi unde sunt
implementate obiectele Diagrama de pachete Diagrama de subsisteme Diagrama modelului
Martie 2018 8 POO - APOO
![Page 9: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/9.jpg)
Diagrame UML
Diagram
Structure diagram
Behaviour diagram
Class diagram
Profile diagram
Object diagram
Component diagram
Composite structure diagram
Deployment diagram
Package diagram
Use case diagram
Activity diagram
Interaction diagram
State Machine Diagram
Timing diagram
Interaction Overview Diagram
Communication diagram
Sequence diagram
![Page 10: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/10.jpg)
Diagrama de clasă Specificarea unei clase
Protecţia: + - public – - private # - protected
Numele clasei
Secţiunea de date - protecţie - numele datelor - tipul datelor
Secţiunea de metode - protecţia - numele metodei - parametrii metodei - tipul metodei
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 11: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/11.jpg)
UML
Tipuri de date predefinite în UML:
Integer
Real
Boolean
String
char
Martie 2018 11 POO - APOO
![Page 12: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/12.jpg)
Diagrama de clase Relaţii între clase
asociere (colaborare) A utilizează B Grădinarul utilizează Stropitoarea
agregare A conţine 1/mai multe B-uri B există fără A Gradina conţine Flori
compoziţie A conţine 1/mai multe B-uri B este creat de către A Floarea este compusă din mai multe Petale
dependenţă A depinde (într-un anumit fel) de B Forma depinde de un ContextDeDesenare
moştenire A este un B Floarea este o Plantă
A
B
A
B
A
B
A
B
A
B
Martie 2018 12 POO - APOO
![Page 13: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/13.jpg)
Asocierea (colaborarea)
presupune două elemente între care există o relaţie
implementată, de obicei, ca instanţă a unei clase (în alta clasă)
poate conţine: numele rolului la fiecare capăt,
cardinalitatea,
direcţia,
constrângeri
O echipă are un manager
Team
- mg : Manager
Manager
Team
Manager
-mg
1 1
1 1
Martie 2018 13 POO - APOO
![Page 14: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/14.jpg)
Exemplu de relaţie de asociere
a se consulta directorul 10/association
Manager.h, Manager.cpp
Team.h, Team.cpp
Test.cpp
Martie 2018 14 POO - APOO
![Page 15: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/15.jpg)
Agregarea se foloseşte pentru a ilustra elemente formate din componente mai mici
este o specializare a asocierii, specificând o relaţie de tip întreg-parte între 2
obiecte
partea şi întregul au diferite durate de viaţă
partea poate exista şi fără întreg A conţine (1/mai multe) B-uri B există fără A
poate include:
numele rolului la fiecare capăt, cardinalitatea, direcţia, constrângeri
Grădina conţine Flori
Garden
- f : Flower*
Flower
1 *
Garden
Flower
1 *
-f
Martie 2018 15 POO - APOO
![Page 16: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/16.jpg)
Exemplu de relaţie de agregare
a se consulta directorul 10/aggregation
Flower.h, Flower.cpp
Gardener.h, Gardener.cpp
test.cpp
Martie 2018 16 POO - APOO
![Page 17: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/17.jpg)
Dependenţa
o relaţie foarte slabă între 2 clase (care nu e implementată prin variabile membre)
poate fi implementată prin intermediul argumentelor unei metode
Exemplu – a se consulta directorul 10/dependency Box.h, Box.cpp
Gardener.h, Gardener.cpp
test.cpp
Gardener
+working(b : Box)
Box
Martie 2018 17 POO - APOO
![Page 18: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/18.jpg)
Imbricarea
arată că elementul sursă este imbricat în elementul destinaţie
clase imbricate (interioare)
Container
- it : iterator
iterator
Martie 2018 18 POO - APOO
![Page 19: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/19.jpg)
Compoziţie este o formă puternică de asociere în care întregul şi partea au
aceeaşi durată de viaţă
în general, întregul controlează durata de viaţă a părţii
partea nu poate exista fără întreg A conţine (1/mai multe) B-uri B este creat de către A
poate include:
numele rolului la fiecare capăt, cardinalitatea, direcţia, constrângeri
Floarea este compusă din Petale
Flower
- p : Petal*
Petal
1 *
Flower
Petal
1 *
-p
Martie 2018 19 POO - APOO
![Page 20: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/20.jpg)
Exemplu de relaţie de compoziţie
Listă simplu înlănţuită
Nod
Clasă exterioara Listei
Clasă interioară Listei
Iterator
Clasă exterioara Listei
Clasă interioară Listei
Martie 2018 20 POO - APOO
![Page 21: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/21.jpg)
TAD Listă Simplu Înlănţuită
1. Specificare TAD
Domeniu
D = {l | l = (el1, el2, …), unde eli, i=1,2,3… sunt de acelaşi tip TE}
Operaţii:
create
addElem
removeElem
getElem
getLength
….
Martie 2018 21 POO - APOO
![Page 22: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/22.jpg)
TAD Listă Simplu Înlănţuită Specificarea operaţiilor
create Data: - Precond: true Results: l Postcond: l є D, l este vidă
addElem Data: l, el Precond: l є D, e є TE, l =(el1, el2, …,
eln) Results: l’ Postcond: l’ є D, l’ =(el1, el2, …, eln, el)
removeElem Data: l, el Precond: l є D, e є TE, l =(el1, el2, …,
eln) Results: l’ Postcond: l’ є D, l’ =(el1, el2, …, eln)
without el if el є l l’ = l, altfel
getElem
Data: l, pos Precond: l є D, pos є Z, l =(el1, el2, …, eln) Results: el Postcond:el є TE, el = elpos
getLength Data: l Precond: l є D, l =(el1, el2, …, eln) Results: n Postcond:e n є Z
Martie 2018 22 POO - APOO
![Page 23: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/23.jpg)
TAD Listă Simplu Înlănţuită
2. Proiectarea TAD-ului
Reprezentarea TAD-ului
static – cu 2 vectori
dinamic – cu alocare dinamică de memorie
Operaţiile TAD în pseudo-cod Martie 2018 23 POO - APOO
![Page 24: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/24.jpg)
TAD Listă Simplu Înlănţuită
Observaţii: O listă reţine:
un cap -> un pointer către primul element al listei
o coadă -> un pointer către ultimul element al listei (opţional)
Accesul la elementele listei începe cu primul element (cap) şi utilizează legăturile între noduri
Un element nou poate fi inserat oriunde în listă
Nu există restricţii privind capacitatea listei (decât cele date de Heap)
Orice listă are asociat un iterator – pentru accesarea elementelor
Martie 2018 24 POO - APOO
![Page 25: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/25.jpg)
Iterator
Un obiect care se mişcă printr-un container de obiecte şi selectează unul dintre aceste obiecte, fără a oferi acces direct la implementarea containerului
Pointer inteligent (smart pointer) de obicei, imită operaţiile unui pointer
Desemnat a fi sigur
O abstractizare a genericităţii
Martie 2018 25 POO - APOO
![Page 26: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/26.jpg)
Iterator Orice container are asociată o clasă numită iterator
Se declară numele clasei iterator
Iteratorul se declară a fi prieten (friend) cu containerul
Se definşete clasa iterator
Câteva funcţii importante ale iteratorului:
moveFirst() i = 0 sau crt = head moveNext() i++ sau crt = crt->next hasNext() i < n – 1 sau crt->next != NULL isValid() i < n sau crt != NULL getCrtElem() return elem[i] sau return crt->info
Martie 2018 26 POO - APOO
![Page 27: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/27.jpg)
Iteratori - tipologie
Locul declarării
Iteratori externi
Iteratori interni (true iterators)
Capacităţi
IO
Iteratori de intrare (doar citire, se deplasează înainte)
Iteratori de ieşire (doar scriere, se deplasează înainte)
Mişcare
Înainte (se deplasează doar înainte)
Bidirecţionali (se deplasează înainte şi înapoi)
Acces aleator (similar unui pointer)
Martie 2018 27 POO - APOO
![Page 28: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/28.jpg)
TAD Listă Simplu Înlănţuită
3. Implementare TAD
a se consulta subdirectoarele directorului 10/SLL/
SLL_OuterNode_int
SLL_OuterNode_InnerIterator_Pointer_int
SLL_InnerNode_int
SLL_InnerNode_InnerIterator_Pointer_int
SLL_InnerNode_InnerIterator_Pointer_Flower
Martie 2018 28 POO - APOO
![Page 29: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/29.jpg)
TAD LSI – diagrama UML
Martie 2018 29 POO - APOO
![Page 30: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/30.jpg)
Aplicaţie Medic de familie - pacienţi
Problemă
Dezvoltaţi o aplicaţie pentru un medic care doreşte o mai bună administrare a pacienţilor săi. Aplicaţia va permite:
Adăugarea unui pacient nou (PIN, nume, adresă)
Adăugarea unei noi consultaţii pentru un pacient (data, diagnostic, medicamente)
Afişarea istoricului unui pacient (toate consultaţiile)
Afişarea tuturor pacienţilor (în ordine alfabetică a numelor)
Afişarea pacienţilor care suferă de o anumită boală
Afişarea pacienţilor care iau un anumit medicament
Martie 2018 30 POO - APOO
![Page 31: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/31.jpg)
Analiza şi proiectarea problemei Paşi:
Formularea detaliată a problemei Cerinţele sistemului şi planificarea lor
Tabelul cerinţelor Definirea cazurilor de utilizare Identificarea entităţilor
Analiza Modelul conceptual
Identificarea entităţilor Stabilirea relaţiilor între entităţi Stabilirea proprietăţilor fiecărei entităţi
Evenimente sistem Comportamentul sistemului conform cazurilor de utilizare
Proiectare Descrierea cazurilor de utilizare reale Specificarea TAD-urilor Diagrama de clasă
Implementare Testare
Dezvoltare bazată pe testare Cutia deschisă Cutia închisă
Martie 2018 31 POO - APOO
![Page 32: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/32.jpg)
Cerinţele sistemului şi planificarea lor
Tabelul cerinţelor
nr explicaţie Tip
1. Dezvoltarea unei aplicaţii pentru un medic care doreşte o mai bună administrare a pacienţilor săi
Evident
2. Adăugarea unui nou pacient Evident
3. Adăugarea unei noi consultaţii Evident
4. Afişarea istoricului unui pacient Evident
5. Afişarea tuturor pacienţilor în ordine alfabetică Evident
6. Afişarea tuturor pacienţilor care suferă o anumită boală Evident
7. Afişarea tuturor pacienţilor care iau un anumit medicament Evident
8. Datele de intrare se preiau din fişierul “patients.txt” Ascuns
9. Datele de intrare se preiau din fişier Ascuns
10. Datele de ieşire se vor reţine în fişiere Ascuns
11. Implemntarea unei funcţii de căutare a unui pacient Ascuns
![Page 33: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/33.jpg)
Cerinţele sistemului şi planificarea lor
Cazuri de utilizare – interacţiunile între actori şi sistem
Adăugarea unui nou pacient
Modificarea unui pacient existent
Eliminarea unui pacient
Afişarea tuturor informaţiilor despre un pacient
Adăugarea unei noi consultaţii
Martie 2018 33 POO - APOO
![Page 34: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/34.jpg)
Cerinţele sistemului şi planificarea lor
Cazuri de utilizare – detalii Denumire:
Adăugarea unui nou pacient
Descriere: Adăugarea informaţiilor (nume, adresă, data naşterii, telefon, etc) despre
noul pacient
Autor: doctorul
Referinţe: 2 (din tabelul de cerinţe)
Precondiţie: Doctorul are suficient spaţiu pentru un nou pacient
Postcondiţie: Noul pacient va aparţine listei de pacienţi a doctorului
Doctor
efectuează
Adăugarea pacient nou
Martie 2018 34 POO - APOO
![Page 35: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/35.jpg)
Cerinţele sistemului şi planificarea lor Cazuri de utilizare – detalii
Denumire: Adăugarea unei noi consultaţii
Descriere: Adăugarea informaţiilor despre o consultaţie (data, simptome, boală, medicamente)
pentru un naumit pacient (identificat prin nume)
Autor: doctor
Referinţe: 3 (din tabelul de cerinţe)
Precondiţie: Doctorul are sufiecient spaţiu pentru adăugarea unei noi consultaţii, iar pacientul dat
este unul valid
Postcondiţie: Noua consultaţie este adăugatăîn lista de consultaţii a doctorului şi în istoricul pacientului
respectiv
Doctor
efectuează
Adăugare consultaţie nouă
Martie 2018 35 POO - APOO
![Page 36: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/36.jpg)
Cerinţele sistemului şi planificarea lor
Identificarea entităţilor
Doctor
Pacient
Consultaţie
Boală
Medicament
Martie 2018 36 POO - APOO
![Page 37: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/37.jpg)
Analiza
Modelul conceptual
Identificarea entităţilor
Stabilirea relaţiilor între entităţi
Stabilirea proprietăţilor fiecărei entităţi
Martie 2018 37 POO - APOO
![Page 38: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/38.jpg)
Analiza – modelul conceptual
Identificarea entităţilor
Doctor
Pacient
Consultaţie
Boală
Medicament
Simptom
Martie 2018 38 POO - APOO
![Page 39: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/39.jpg)
Analiza – modelul conceptual
Relaţii între entităţi
Doctor Pacient Consultaţie
Simptom
Medicament
Boală
are 0..* are 0..* are 0..*
Martie 2018 39 POO - APOO
![Page 40: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/40.jpg)
Analiza – modelul conceptual
Proprietăţile entităţilor Doctor
Nume, specialitate, ...
Pacient Nume, data naşterii, adresă, telefon, ...
Consultaţie Data, ...
Boală Nume, intensitate,...
Medicament Nume, cantitate, ...
Simptom Nume, tip, ...
Martie 2018 40 POO - APOO
![Page 41: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/41.jpg)
Proiectare
Specificarea TAD-urilor
Diagrama de clase
Martie 2018 41 POO - APOO
![Page 42: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/42.jpg)
Implementare
A se consulta exemplu din directorul 10/doctor
Martie 2018 42 POO - APOO
![Page 43: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/43.jpg)
Testare
Cutia închisă
Metodă baztă pe specificarea unui subalgoritm
Cutia deschisă
Metodă bazată pe codul unui subalgoritm
Dezvoltare bazată pe testare (Test Driven Development – TDD)
Martie 2018 43 POO - APOO
![Page 44: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/44.jpg)
Testare void Doctor::addExaminationForPacient(char* pn, Examination* e){ IIterator* it = patients->getIterator(); bool found = false; while ((it->isValid()) && (!found)){ if (strcmp(((Patient*)it->getCrtElem())->getName(), pn) == 0) found = true; else it->moveNext(); } if (!found){ char* s = new char[1000]; sprintf(s , "%s %s %s", "patient ", pn, " is not in the list"); throw s; } else{ ((Patient*)it->getCrtElem())->addExamination(e); } }
(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
Martie 2018 44 POO - APOO
![Page 45: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/45.jpg)
Testare Black box (cutia închisă)
Specificarea algoritmului
Data d, s, ex
Precond d este un doctor, s este un şir de caractere, ex este o consultaţie
Rez d’
Postcond d’ = d U {ex pentru pacientul s dacă doctorul d are ca pacient persona cu numele s} sau d’ = d, altfel
![Page 46: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/46.jpg)
Testare Black box (cutia închisă)
Cazuri de testare
Caz de testare
Valoare
T1 Doctorul d are 0 pacienţi
T2 Doctorul d are mai mulţi pacineţi, printre care şi pacientul cu numele s
T3 Doctorul d are mai mulţi pacineţi, dar printre care nu se află şi pacientul cu numele s
![Page 47: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/47.jpg)
Testare White box (cutia deschisă)
Graful de flux
1
2
3 7
start
4 5
6
8 9
10
stop
T F
T T F F
void Doctor::addExaminationForPacient(char* pn, Examination* e){ IIterator* it = patients->getIterator(); bool found = false; while ((it->isValid()) && (!found)){ if (strcmp(((Patient*)it->getCrtElem())->getName(), pn) == 0) found = true; else it->moveNext(); } if (!found){ char* s = new char[1000]; sprintf(s , "%s %s %s", "patient ", pn, " is not in the list"); throw s; } else{ ((Patient*)it->getCrtElem())->addExamination(e); } }
(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
![Page 48: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/48.jpg)
Testare White box (cutia deschisă)
Complexitate ciclometrică = nr. min de drumuri în graf
# predicatelor + 1
= 3 + 1
# muchilor – # nodurilor + 2
= 12- 10 + 2
1
2
3 7
start
4 5
6
8 9
10
stop
T F
T T F F
![Page 49: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/49.jpg)
Testare White box (cutia deschisă)
Drumuri posibile în graf
1
2
3 7
start
4 5
6
8 9
10
stop
T F
T T F F
Drum Caz de testare
1 2 7 9 10 T1
1 (2 3 4 6) 7 8 10 T2
1 (2 3 5 6) 7 9 10 T3
![Page 50: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/50.jpg)
Dezvoltare bazată pe testare
(Test Driven Development – TDD)
tehnică de dezvoltare a aplicaţiilor
stil de programare în care testele se scriu înainte codurilor care se presupun a trebui testate
CUM?
Funcţii assert
Biblioteci speciale
CppUnit
ECUT
….
Martie 2018 50 POO - APOO
![Page 51: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/51.jpg)
Şabloane de proiectare (Design patterns)
Singleton
Model View Controller
Martie 2018 51 POO - APOO
![Page 52: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/52.jpg)
Şabloane de proiectare (Design patterns)
Un mod special de a rezolva anumite probleme
Martie 2018 52 POO - APOO
![Page 53: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/53.jpg)
Singleton
Permite crearea unei singure instanţe la o clasă
De ce?
Pentru a preveni clientul programator de a controla durata de viaţă a unui obiect
Cum?
Constructor(i) privat(i)
Instanţe statice
A se consulta exemplul din directorul 10/singleton
Martie 2018 53 POO - APOO
![Page 54: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/54.jpg)
Model View Controller
Şablon architectural arhitectură pe mai multe nivele
3 nivele: Prezentare View
Nivel logic Model and Controller
Nivel de date stocarea şi accesarea datelor
MVC Model controlează informaţi şi notifică observatorii când
aceasta se modifică
View prezintă modelul într- formă “frumoasă”, potrivită pentru interacţiune
Controller primeşte intrări şi iniţiază răspunsuri
Martie 2018 54 POO - APOO
![Page 55: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/55.jpg)
Model View Controller
View Controller
Model
User
manipulates updates
sees
![Page 56: Programare orientată obiect - Babeș-Bolyai University](https://reader031.vdocumento.com/reader031/viewer/2022012415/616f8bc141c2fe3f573276c9/html5/thumbnails/56.jpg)
Model View Controller – aplicaţia
medicală
Model Obiecte
Pacient Consultaţie
Containeri Listă Iterator
Excepţii Alte clase
View
Interfaţă tip consolă Interfaţă grafică
Controller
Doctor Martie 2018 56 POO - APOO