Documente Academic
Documente Profesional
Documente Cultură
1 /58
ABLOANE DE PROIECTARE
2 /58
3 /58
4 /58
Ce este UML ?
UML este o notaie standard internaional pentru analiza i proiectarea orientate pe obiecte. Este definit de Object Management Group (www.omg.org) UML = Unified Modelling Language UML furnizeaz elemente de notaie descrise n detaliu n Ian Graham, Object-Oriented Methods (Addison-Wesley, 2001); UML permite dezvoltare bazat pe componente. Dar UML nu nseamn numai notaii ci i un anumit principiu de gndire i modelare. Astfel, un inginer software trebuie s tie i proceduri de utilizare a notaiilor respective, n afara dezvoltrii efective de aplicaii: modelarea cerinelor afacerii (business), procesul de dezvoltare propriu-zis, gestiunea proiectelor (project management), metrici (msuri), trasabilitate, gestiunea reutilizrii software (reuse).
5 /58
6 /58
8 /58
Un exemplu de diagram simpl de clase (sistem autopilot cu o clas autopilor i diferii senzori i elemente de execuie pe care aceast clas i folosete)
9 /58
Multiplicitate numrul obiectelor care particip ntr-o relaie, pentru fiecare dintre cei implicai (numerele se pun la fiecare capt al liniei care simbolizeaz relaia)
POO - Vasile StoicuStoicu-Tivadar
10 /58
Subclas
Superclas
ntreg
Parte
ntreg Client
Parte Furnizor
A Client
POO - Vasile StoicuStoicu-Tivadar
B Furnizor
11 /58
12 /58
13 /58
UML
Stereotipul tereotipul - o clas a unei entiti n UML care permite utilizatorilor extinderea limbajului de modelare pentru a permite acestora o mai bun exprimare conform necesitilro proiectelor (notaie cu paranteze ascuite, pe liniile ce reprezint relaia n care e implicat entitatea n cauz)
Exemple de stereotipuri
POO - Vasile StoicuStoicu-Tivadar
14 /58
Exemplu: cteva cazuri de utilizare ale unui sistem de control al traficului aerian (doar un actor este un utilizator uman controlorul de zbor)
15 /58
Subsisteme
POO - Vasile StoicuStoicu-Tivadar
16 /58
Exemplu de exprimare a Cerinelor, inclusiv prin constrngeri (v. Notele text) 17 /58
Liniile verticale de instan reprezint obiectele. Fiecare linie care simbolizeaz un mesaj pleac de la obiectul de origine i sfrete la obiectul destinaie i are un nume de mesaj pe linie. Acest nume poate fi nsoit n fazele ulterioare de o list de parametri (parametrii de apel ai operaiei care este apelat pentru a transmite mesajul).
20 /58
Diagrame de stare
O diagram de stare conine dreptughiuri cu Exemplu: main de stare pentru cazul coluri rotunjite numite stri. de utilizare Pozitionare Telescop al unui O stare este o condiie de existen a unui sistem de comand a unui telescop clasificator (clas sau caz de utilizare) care persist o perioad semnificativ de timp i poate fi cumva distrins fa de alte condiii similare de existen. Distinctibilitatea poate fi analizat n termeni de: comportament al obiectului n timpul intrrii, ieirii sau persistenei ntr-o/dintr-o stare. evenimente acceptate n starea respectiv graful de accesibilitate al strilor subsecvente Mainile de stare sunt utile deoarece furnizeaz o descompunere a comportamentului complex n buci mai mici, fiecare fiind valabil n anumite condiii specifice. O diagram de stare este complet constructiv adic o singur diagram de stare descrie ntregul comportament al Clasificatorului al crui comportament o descrie. Un Clasificator este o metaclas n UML, care are proprietatea c are asociat o main de stare (exemple: clase, cazuri de utilizare).
POO - Vasile StoicuStoicu-Tivadar
21 /58
23 /58
Dup ce modelul obiectelor a fost creat, cazurile de utilizare de la nivelul sistemului pot fi rafinare pentru a lua n considerare obiectele identificare i relaiile dintre acestea.
Key concepts may be modeled as objects. Bank accounts exist only conceptually, but are important objects in a banking domain. Frequency bins for an online autocorrelator may also be objects. Identify Transactions are finite instances of associations transactions between objects that persist for some significant period of time. Examples include bus messages and queued data. Identify Information that must persist for significant periods of persistent time may be objects or attributes. This persistence may information extend beyond the power cycling of the device. Identify visual User interface elements that display data are objects elements within the user interface domain, such as windows, buttons, scroll bars, menus, histograms, waveforms, icons, bitmaps, and fonts. Identify control Control elements are objects that provide the interface elements for the user (or some external device) to control system behavior. Apply scenarios Walk through scenarios using the identified objects. Missing objects will become apparent when required actions cannot be achieved with existing objects.
25 /58
Exemplu: o diagram de clase cu clasele primare controller, senzor i element de execuie, cuprinznd 4 din aceste tipuri de relaii.
26 /58
Compo Compozi ziia este o form tare de agregare, n care prile (componentele) sunt n ntregime n responsabiliyayea clasei compozite. Compozitele trebuie s i creeze i distrug componentele. Componentele nu pot fi partajate nter compozite. Compoziia este reprezentat prin includere grafic a componentelor n cadrul compozitelor sau prin romb de agregare umplut. Dac se folosete includerea, multiplictatea trebuie precizat n colul din dreapta sus.
28 /58
29 /58
class cat: public Animal { public: void speak (void) { cout << Miew ! << endl; } ; void ClawFurniture(long ClawLength); void SnubOwner(void); };
Clas abstract acea clas care nu poate fi instaniat direct (conine cel puin o funcie virtual pur) POO - Vasile StoicuStoicu-Tivadar
31 /58
32 /58
n metodologiile orientate pe obiect, elementele capabile de comportament de stare sunt doar Clasificatorii (clasele, cazurile de utilizare) i doar obiectele execut (funcioneaz ca) maini de stare. Strile sunt reprezentate ca dreptunghiuri cu coluri Aciunile sunt prezentate ntr-o list de aciuni, separate rotunjite. Tranziiile sunt reprezentate ca sgei care ncep de la starea de pornire i se termin la de descriptorul (eticheta) tranziiei printr-un slash. starea int. Tranziiile au de obicei asociate nume de evenimente declanatoare urmate de aciuni nterprinse dac se realizeaz tranziia. POO - Vasile StoicuStoicu-Tivadar 33 /58
35 /58
36 /58
37 /58
38 /58
Cnd Modelul Atrial recepioneaz un semnal de la Modelul ventricular n starea Waiting (ateptare), emitorul de fapt determin propagarea la Modelul Atrial a unui eveniment APace (Stimulare). Dup ce Modelul Atrial realizeaz stimularea (adic trimiterea unui semnal electric la un electrod din inim), trimite un eveniment APaceDone napoi la Modelul Ventricular. Prin trimiterea acestor evenimente n ambele sensuri ntre cele dou obiecte care colaboreaz, mainile lor de stare rmn sincronizate. POO - Vasile StoicuStoicu-Tivadar 39 /58
Notaia este o modalitate standard de a exprima temporizrile ntre mesaje sau valorile trimise (vezi figura). POO - Vasile StoicuStoicu-Tivadar
40 /58
41 /58
Exemplu: o clas colecie simpl (un arbore binar): class Bunch_O_Objects { node* p; node current_node; public: void insert(node n); node* go_left(void); node* go_right(void); };
Dar o mai bun abordare ar fi furnizarea unei semantici fundamentale - conceptul de urmator (next) sau precedent (previous) : class Bunch_O_Objects { node* p; node current_node; public: void insert(node n); node* next(void); node* previous(void); };
42 /58
class Bunch_O_Objects { node* p; node current_node; public: void insert(node n); node* next(void); node* previous(void); node* first(); node* last(); node* find(node &n); };
Instrumente CASE
Exist cteva instrumente comerciale de tip CASE (Computer Aided Software Engineering instrumente software utile n mai multe etape din ciclul de via al programelor, nu numai la codificare/testare, ca i mediile utilizate la laboratorul de PC sau POO) care ofer suport pentru utilizarea UML . Multe dintre acestea sutn editoare care analizeaz corectitudinea sintactic a modelelor UML i unele chiar genereaz cod (de fapt un schelt al viitoarei aplicaii) de folos ulterior la codificare. Cea mai cunoscut astfel de aplicaie este Rose din pachetul Rational (IBM). http://www-01.ibm.com/software/awdtools/developer/rose/enterprise/index.html Este conceput s se integreze n suita Rational care ofer suport pentru toate etapele de dezvoltare software, ndeosebi dac se urmeaz metodologia RUP- Rational Unified Process (IBM). Permite crearea cazurilor de utilizare, a diagramelor de clase care le realizeaz, a tuturor celorlalte diagrame UML Marele avantaj al mediului este c se integrez n suita Rational i astfel activitile de dezvoltare software sunt integrate unitar inclusiv la nivelul gestiunii configuraiilor, testare etc. Aplicaia este capabil s genereze cod n C++, JAVA sau datorit unor extensii recente, chiar n .NET (implementruile metodelor nu sunt generate) Exist i aplicaii unele chiar gratuite care ns nu sunt de complexitatea acestui instrument. Exemplu: StarUML http://staruml.sourceforge.net/en/ POO - Vasile StoicuStoicu-Tivadar
45 /58
ABLOANE DE PROIECTARE
(Design Patterns)
46 /58
abloane de proiectare
Un ablon (pattern) o regul care exprim o relaie dintre un context, o problem i o soluie (Cristopher Alexander, 1979) Permite utilizarea soluiei de multe ori n contexte diferite Abstractizeaz i identific aspectele cheie ale unei structuri comune de proiectare pe care o face util pentru crearea unui design OO, reutilizabil. Identific clasele i instanele participante, rolurile i colaborrile lor i distribuia responsabilitilor iniial folosit n arhitectur ulterior, n proiectarea software (OO software design)
47 /58
Problem: when exception handling is used, raw pointers can lead to memory leaks when exceptions are thrown. The use of temporary pointers within normal C++ functions or class member functions may not be properly cleaned up if an exception is thrown, because the inline delete operator may be bypassed. This does not apply to objects, because when objects go out of scope, their destructors are called. Raw pointers do not have destructors.
Solution: rather than use a raw pointer, a smart pointer object can be used when a temporary pointer is needed. The smart pointer is responsible for identifying if it must deallocate memory when the pointer is destroyed. This require an interrral mechanism, such as reference counting, to determine whether other smart pointers are referring to the same object in memory.
48 /58
ABORDRI GENERICE
Idiomuri - convenii general acceptate de utilizare a unui anumit limbaj de programare. abloane de proiectare (DP) structuri n cadrul crora obiectele colaboreaz n vederea obinerii unui anumit comportament care s satisfac o anumit cerin a problemei. Cadrele (frameworks)reprezint colecii de clase care ofer un set de servicii pentru un domeniu particular. Exporta un numar de clase si mecanisme pe care utilizatorii le pot adapta.
49 /58
Exemple de abloane
50 /58
ablonul Interface
De ce interfa ? O implementare comun poate fi potrivit pentru o varietate de utilizri. Dac o clas poate furniza diverse interfee, o singur implementare poate satisface multe necesiti. Exemple: arbori, cozi sau stive pot de fapt s fie implementate ca liste nlnuite. Prin separarea de utilizator prin intermediul unei interfee, devine mai uoar schimbarea unei implementri sau adugharea unei noi interfee diferite. Exemplu: devine mai uoar adugarea unui nou container - un vector extensibil prin crearea unei interfee care asigur clienilor serviciile cerute de acetia dar folosesc operaiile promitive ale containerelor existente Interfeele pot fi construite astfel ca s asigure diverse nivele de acces. Este un ablon foarte simplu - UML funizeaz stereotipul <<interface>> Client Object are nevoie de un container tip stiv deci de un obiect myStack . Acesta nu gestioneaz direct colecia dar furnizeaz interfaa potrivit pentru Client (precum metodele Push i Pop) dar implemenetaz aceast interfa prrin utilizarea operaiilor furnizate de clasa de list nlnuit (insertAtEnd, getLast, deleteLast).
51 /58 ablonul e reprezentat ca un oval punctat din care sgei punctate arat ctre clasele din cadrul ablonului
Smart Pointer este un ablon uzual care elimin aceste surse de erori: Dac pointerii obinuii nu au constructor, smart pointers vor folosi constructori pentru a iniializa cu NULL sau a fora precondiii pentru ca pointerii s indice spre obiecte valide Dac pointerii obinuii nu au destructor, smart pointers determin dac memoria trebuie eliberat cnd nu mai e necesar Dac pointerii obinuii nc menin adresa memorie unde e obiectul utilizat, dac eliberarea memoriei nu se face corect, smart pointers pot automat detecta condiia c obiectul nu mai exist i s refuze accesul. Dei mecanismul e simplu, proiectarea de detaliu a clasei smart pointer ascunde mult funcionalitate.
52 /58
ablonul Container
Cnd un obiect are asociere 1-la-mai muli i dorim s mbuntim reuzabilitatea, o soluie este ca acea clas de la captul 1 s gestioneze un set de obiecte stocate ntr-un container (v. cursul despre tipare). Adugarea unui obiect container pentru a gestiona obiectele agregate nu rezolv n ntergime problema, deoarece adesea mai muli clieni doresc s acceseze simultan containerul. Pentru a rezolva problema, se folosesc iteratori n conjuncie cu containerele (in evidena poziiei din container a fiecrui client). Standard Template Library (STL) - parte a standardului ANSI C++ furniezeaz o varietate de containere i iteratori (v. cursul despre tipare). ablonul Container este foarte simplu, chiar dac un container n siner poate fi intern foarte complex. Participanii n cadrul unui ablon Container: Container gestioneaz colecia i furnizeaz operaiile de acces Iterator acioneaz ca un smart pointer i mediaz accesul de ctre Client (first, next, insertion, deletion etc.) la obiectele Parte. Client obiectele care doresc accesul la obiectele Parte gestionate de Container Parte obiectele gestionate de Container Parte inclusiv stocate de acesta
53 /58
ablonul Observer
Problema: este uzual situaia n care o singur surs de informaie acioneaz ca un server pentru mai muli clieni care trebuie s i actualizeze autonom datele cnd acestea se schimb. Pentru aplicaii n timp real cu date citite de senzori, problema este cum proiectm o modalitate eficient de notificare (anunare) a tuturor clienilor Soluia: ablonul Observer (sau PublishSubscribe) un singur obiect (Server) furnizeaz automat date pentru clienii si (Observers). Acestea sunt clase abstracte care au clase derivate (Concrete Server i Concrete Observer) care adaug comportamentul specializat pentru situaia concret de funcionare. Observerii se nregistreaz la server prin apelul metodei Subscribe() a acestuia i se dezaboneaz prin apelul metodei Detach() . Atunci cnd serverul primete un apel subscribe, creaz un obiect Notification Handle care include adresa obiectului. Politica de actualizare definete criteriile dup care datele sunt trimise la observer - periodic, episodic sau epi-periodic (amndou) .
54 /58
Observer cont. 1
ablonul Observer este util dac muli clieni vor s acceseze un singur obiect. ablonul simplific crearea acestor clieni deoarece dup ce acetia se nregistreaz, vor fi notificai asupra datelor, conform politicii de actualizare definite.
Detach(target address) dez-aboneaz ceea ce a fost transmis prin Subscribe() prin tergerea obiectului Notification Handle corespunztor obiectului cu adresa target address. Gimme() permite o interogare direct a valorii urmrite AcceptTick() este apelat de un obiect de asigurare a unei temporizri (precum timerele furnizate de sistemul de operare) care indic trecerea unui interval de timp sau contorizarea unei secvene de eevnimente. Acesta incrementeaz atributul CurrentTime . Atunci cnd aceast metod este apelat, serverul scaneaz lista de notificare alctuit din obiecte cu notificare periodic r Periodic Notification Handle la care valoarea trebuie actualizat. Concrete Server este o clas derivat din Server i o extinde cu datele propriu-zise de interes i metoda Acquire(): Acquire() preia datele concrete pentru server. Atunci cnd metoda este apelat, mesaje de date sunt trimise la toate obiectele din lista cu Episodic 55 /58 Notification Handles.
Observer cont. 2
Observer clasa abstract Observer apeleaz metoda Subscribe() a clasei Server pentru ca ulterior s fie notificat automat asupra datelor i metoda Detach() cnd nu mai dorete s fie la curent cu aceste date. Atre metoda Update(value) apelat de Server pentru pasarea valorii. Din punct de vedere logic, este o funcie callback (apel invers, napoi) Concrete Observer este o subclas a clasei Observer i adaug stocarea local n atributele dorite, precum i celelalte metode cerute de funcionarea dorit a clientului propriu-zis. Notification Handle este o referin local la un Observer mregistrat, deinut i gestionat de Server. Este creat atunci cnd un Observer apeleaz Subscribe() i este distrus cnd acesta apeleaz Detach(). Conine atributul Object Address, care este o referin la funcia Update() din Observer. Setul tutuor Notification Handles este utilizat ca list de notificare. Aceasta este utilizat de Server astfel nct acesta poate apela metodele Update() ale obiectelor Observer atunci cnd e cazul.
Episodic Notification Handle este o subclas a Notification Handle i genereaz o ierarhie separat de clase cu baza Notification Handle . Observers nregistai cu aceastp politic sunt actualizai cu date oridecteori aceste date se schimb. Periodic Notification Handle este o subclas a clasei Notification Handle i este utilizat pentru a notifica periodic Observers astfel nregistrai. Aceasta permite mbuntirea serviciilor clasei Observer n situaia pierderii sau coruperii de mesaje. Subclasa adaug atributele Period iTimeOfNextUpdate. Clasa Server scaneaz Periodic Notification Handles periodic i atunci cnd s-a scurs perioada de notificare, obiectul Observer referit este acutalizat i TimeOfNextUpdate is recalculat.
56 /58
ablonul
Model-View-Controller (MVC)
Este alctuit din setul de componente ortogonale: Model componenta de date i procesare specific a aplicaiei (business model) View cuprinde modul de afiare a rezultatelor Controller recepionez i proceseaz evenimentele din vizualizare Exemplu: ntr-un monitor ECG, btile inimii pot fi vizualizate/prezentate n mai multe moduri: iconografic, numeric, grafic, alarm, sunet. Modul de prezentare nu are consecine asupra modului de achiziie sau manipulare. Prin separarea acestei funcionaliti, un mic set de obiecte care colaboreaz i lucreaz mpreun pot s rezolve problema Este aplicabil n sistemele n timp real care au afiaje, n particular atunci cnd valorile trebuie controlate i afiate simultan. Este o form specializat de ablon Observer. Poate fi implementat prin utilizarea pointerilor sau a metodelor publish-subscribe din ablonul Observer. Dac obiectele se schimb dinamic (n timpul rulrii) sau dac obiectele Controller sau View s-ar putea s nu fie cunoscute la compilare, atunci abordarea cu subscriere este de preferat. Exemplu: o valv care este controlat de un buton cu valoare vizualizat sub form de deschidere pe ecran.
Exemplu: arhitectura document-view (v. cursul despre MFC) unde CDocument este clasa Model, metoda UpdateAllViews a acestei clase transmite actualizrile iar OnUpdate din vizualizarea derivat din CView trateaz actualizarea n fiecare vizualizare.
57 /58