Ingineria programării Adriana Gheorghieş, Ovidiu Gheorghieş 23 octombrie / 62

Documente similare
PROGRAMARE ORIENTATA PE OBIECTE

PowerPoint Presentation

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Creational design patterns

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Babeş-Bolyai Cluj-Napoca 1.2 Facultatea Matematică şi Info

Proiectarea Sistemelor Software Complexe

Ingineria sistemelor soft Curs 2 Specificarea modelelor folosind UML Curs bazat pe B. Bruegge and A.H. Dutoit "Object-Oriented Software Engi

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

Laborator 3

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Paradigme de Programare

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Slide 1

Slide 1

Curs 10

Ingineria Sistemelor de Programare

PowerPoint Presentation

CL2009R0976RO bi_cp 1..1

Microsoft Word - Curs_08.doc

proiectarea bazelor de date

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

PPSD

Analiză de flux de date 29 octombrie 2012

Retele Petri si Aplicatii

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Microsoft PowerPoint - TDRC_II-10-TCP.ppt

Analiză statică Analiza fluxului de date 23 octombrie 2014

INFORMATICĂ ŞI MARKETING

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

PowerPoint Presentation

Introducere

Gestionarea I/E

Aggregating Data

Slide 1

Tablouri (continuare)

A TANTÁRGY ADATLAPJA

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai din Cluj-Napoca superior 1.2 Facultatea Facultatea de

Paradigme de programare

MODUL RETAIL

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Ghid privind raportările referitoare la decontarea internalizată conform articolului 9 din regulamentul privind depozitarii centrali de titluri de val

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Microsoft Word - Algoritmi genetici.docx

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Kein Folientitel

Definiţie: modele analitice care asigură evaluarea unor caracteristici de calitate alese, bazându-se pe date din măsurători ale proiectelor software.

NORMĂ pentru aplicarea Ghidului ESMA privind raportările referitoare la decontarea internalizată conform articolului 9 din regulamentul privind depozi

Slide 1

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

Slide 1

LABORATOR I

Biomedical Wi-Fi data transmissons

AUTORITATEA NAȚIONALĂ DE REGLEMENTARE ÎN DOMENIUL ENERGIEI Nota de prezentare a Proiectului de Normă Tehnică privind Cerinţele tehnice de racordare la

Microsoft Word - lab-fr_3

ALGORITHMICS

Prezentarea calculatorului

Microsoft Word - grile.doc

Document2

Baze de date Anul 2 Teorie Examen 1. Diagrama entitate/relatie si diagrama conceptuala (curs 2-5) 2. Arbore algebric si expresie algebrica (curs 6-10)

1

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

carteInvataturaEd_2.0_lectia5.pdf

tehnologii web

Microsoft Word - 2 Filtre neliniare.doc

CURS

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Microsoft Word - Curs_07.doc

PowerPoint Presentation

PowerPoint Presentation

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Chertif Ionuț - Andrei Prietenul meu, calculatorul CLASA a V - a, 1 ora pe săptămână ARGUMENT Transformările societăţii româneşti din ultimii ani, dez

PHP (II)

2 BAZE TEORETICE ALE REȚELELOR DE CALCULATOARE CAPITOLUL 2 BAZE TEORETICE ALE REŢELELOR DE CALCULATOARE 2.1. Necesitatea standardizării (referenţierii

Modulul 1 M1-2.3 Protocoale şi servicii în reţea În acest capitol ne propunem să abordăm următoarele: Protocoalele şi aplicaţiile folosite în reţelele

Cuprins

SUBPROGRAME

Microsoft PowerPoint - ARI_R_c9-10_IP_part2 [Compatibility Mode]

Microsoft Word - Curs_09.doc

E_d_Informatica_sp_SN_2014_bar_10_LRO

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Modelarea si Simularea Sistemelor de Calcul

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

programă şcolară pentru clasa a 11a, liceu

Utilizare Internet

PROIECT DIDACTIC DATE DE IDENTIFICARE Data: Școala : Școala Gimnazială Grigore Moisil Ploiești Clasa: a VI-a Profesor: Ilie Oana Magdalena Disciplina:

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Microsoft Word - 4-Interfete paralele.doc

PowerPoint-Präsentation

Ingineria Sistemelor de Programare

Limbaje de Programare Curs 6 – Functii de intrare-iesire

PLAN DE ÎNVĂŢĂMÂNT

PT Curs 6 [Compatibility Mode]

Transcriere:

Ingineria programării Adriana Gheorghieş, Ovidiu Gheorghieş 23 octombrie 2005 1 / 62

Cuprins Diagrama de stari Diagrama de activitati Organizare: pachete UML recapitulare studiu de caz recomandări 2 / 62

Eveniment Exemple de evenimente Acţiune Activitate 3 / 62

Eveniment Exemple de evenimente Acţiune Activitate Eveniment Acţiune Activitate 4 / 62

Eveniment Eveniment Exemple de evenimente Acţiune Activitate Reprezintă ceva atomic care se întâmplă la un moment dat Modelează apariţia unui stimul care poate conduce la efectuarea unei tranziţii Are ataşată o locaţie în timp şi spaţiu Nu are o durată în timp Evenimentele pot fi: sincrone sau asincrone externe sau interne 5 / 62

Exemple de evenimente Eveniment Exemple de evenimente Acţiune Activitate semnal=stimul asincron care are un nume, este aruncat de un obiect şi recepţionat de altul (ex. excepţii) apel de operaţie (de obicei sincron) trecerea timpului schimbarea rezultatului evaluării unei condiţii 6 / 62

Acţiune Eveniment Exemple de evenimente Acţiune Activitate Reprezintă execuţia atomică a unui calcul Are ca efect: returnarea unei valori schimbarea stării Are o durată mică în timp Exemplu: i++; 7 / 62

Activitate Eveniment Exemple de evenimente Acţiune Activitate Repezintă execuţia neatomică a unor acţiuni Are o durată în timp Exemplu: vorbitul la telefon execuţia unei funcţii 8 / 62

Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) 9 / 62

Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Folosită pentru a modela comportamentul unui singur obiect. Specifică o secvenţă de stări prin care trece un obiect de-a lungul vieţii sale ca răspuns la apariţia unor evenimente împreună cu răspunsul la acele evenimente. Conţine: Stări Tranziţii 10 / 62

Stare Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Reprezintă o perioadă din viaţa unui obiect în care acesta: satisface anumite condiţii, execută o acţiune sau aşteaptă apariţia unui eveniment. Stările pot fi: simple compuse concurente secvenţial active 11 / 62

Stare: Notaţie grafică Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Typing Password entry/set echo invisible exit/set echo normal character/ handle character help/display help Elementele unei stări: nume tranzitii interne stare initiala stare finala nume: identifică o stare tranziţii interne: acţiuni şi activităţi pe care obiectul le execută cât timp se află în acea stare. 12 / 62

Tranziţie internă Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Forma generală a unei tranziţii interne: nume eveniment ( lista parametrilor ) [ cond gardă ] / acţiune nume eveniment identifică circumstanţele în care acţiunea specificată se execută nume predefinite: entry, exit, do, include cond gardă este o expresie booleană care se evaluează la fiecare apariţie a evenimentului specificat; acţiunea se execută doar în cazul în care rezultatul evaluării este TRUE. acţiunea poate folosi atribute şi legaturi care sunt vizibile entităţii modelate 13 / 62

Tranziţie Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Reprezintă o relaţie între două stări Indică faptul că un obiect aflat în prima stare va efectua nişte acţiuni şi apoi va intra în starea a doua atunci când un anumit eveniment se produce. Notaţie grafică: Stare sursa nume eveniment(lista parametrilor)[cond garda]/actiune Stare destinatie 14 / 62

Exemplu de tranziţie Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Simple object right-mouse-down(location)[location in widow]/object=pick object(location); object.highlight() eveniment parametru conditie garda Highlighted object activitati 15 / 62

Stări compuse Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Conţin substări tranziţii interne Substările pot fi: secvenţial active (disjuncte) paralel active (concurente) Substările pot conţine, la rândul lor, alte substări. 16 / 62

Exemplu de stare compusă (1) Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Stare compusă cu substări secvencţial active: Incepe entry/apare ton exit/dispare ton apasatasta(n) Formeaza numar de telefon Numar partial entry/numar.adauga(n) apasatasta(n) [numar.estevalid()] 17 / 62

Exemplu de stare compusă (2) Stare Stare: Notaţie grafică Tranziţie internă Tranziţie Exemplu de tranziţie Stări compuse Exemplu de stare compusă (1) Exemplu de stare compusă (2) Stare compusă cu substări paralel active: Take class Incomplete Lab 1 lab done Lab 2 lab done Project project done Exam pass fail Passed Failed 18 / 62

(1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) 19 / 62

(1) (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Folosită pentru a modela dinamica unui proces sau a unei operaţii Evidenţiază controlul execuţiei de la o activitate la alta Se ataşează: Unei clase (modelează un caz de utilizare) Unui pachet Implementării unei operaţii 20 / 62

(2) (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Poate conţine: Stări activitate/acţiune Tranziţii Obiecte Bare de sincronizare Ramificaţii 21 / 62

Stare activitate/acţiune (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Modelează execuţia unor acţiuni sau a unor subactivităţi Notaţie grafică: Exemplu: Nume Drive car matrix.invert(tolerance:real) 22 / 62

Tranziţie (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Reprezintă o relaţie între două activităţi Tranziţia este iniţiată de terminarea primei activităţi şi are ca efect preluarea controlului execuţiei de către a doua activitate Notaţie grafică: Activitate 1 Activitate 2 tranzitie 23 / 62

Ramificaţie (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Se foloseşte pentru a modela alternative (decizii) a căror alegere depinde de o expresie booleană Are o tranziţie de intrare şi două sau mai multe tranziţii de ieşire Fiecare tranziţie de ieşire trebuie să aibă o condiţie gardă Condiţiile gardă trebuie să fie disjuncte (să nu se suprapună) şi să acopere toate posibilităţile de continuare a execuţiei 24 / 62

Exemplu ramificatie reunire (1) (2) Stare activitate/acţiune Calculate total cost [cost<$50] [cost>=$50] Get authorization Charge customer s account Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) 25 / 62

Bară de sincronizare (1) (2) Stare activitate/acţiune Folosită pentru a modela sincronizarea mai multor activităţi care se execută în paralel. Poate fi de două tipuri: fork: are o tranziţie de intrare şi două sau mai multe tranziţii de ieşire join: are două sau mai multe tranziţii de intrare şi o singură tranziţie de ieşire. Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Notaţie grafică: fork join 26 / 62

Exemplu: diagrama de activităţi (1) (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Pune filtrul in cafetiera Pune apa in rezervor Pune cafea in filtru Porneste cafetiera Prepara cafeaua Ia o cana Toarna cafeaua Bea 27 / 62

Exemplu: diagrama de activităţi (2) Customer Sales Stockroom (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Request service Pay Take order Deliver order Fill order Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Collect order 28 / 62

Obiecte (1) (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Acţiunile sunt realizate de către obiecte sau operează asupra unor obiecte. Obiectele pot constitui parametri de intrare/ieşire pentru acţiuni Obiectele pot fi conectate de acţiuni prin linii punctate cu o săgeată la unul din capete (orientarea săgeţii indică tipul parametrului - intrare sau ieşire) 29 / 62

Obiecte (2) (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Un obiect poate apărea de mai multe ori în cadrul aceleiaşi diagrame de activităţi. Fiecare apariţie indică un alt punct (stare) în viaţa obiectului. Pentru a distinge apariţiile numele stării obiectului poate fi adăugat la sfârşitul numelui obiectului 30 / 62

Exemplu: diagrama de activităţi (3) (obiecte) Customer Sales Stockroom Request service (1) (2) Stare activitate/acţiune Tranziţie Ramificaţie Exemplu Bară de sincronizare de activităţi (1) de activităţi (2) Pay Order {placed} Take order Deliver order Order {entered} Order {filled} Fill order Obiecte (1) Obiecte (2) de activităţi (3) (obiecte) Collect order Order {delivered} 31 / 62

Pachet (1) Pachet (2) Exemplu Utilitatea pachetelor 32 / 62

Pachet (1) Pachet (1) Pachet (2) Exemplu Utilitatea pachetelor Este un container logic pentru elemente între care se stabilesc legături Defineşte un spaţiu de nume Toate elementele UML pot fi grupate în pachete (cel mai des pachetele sunt folosite pentru a grupa clase) Un pachet poate conţine subpachete se creează o structură arborescentă (similară cu organizarea fişierele/directoarelor) 33 / 62

Pachet (2) Pachet (1) Pachet (2) Exemplu Utilitatea pachetelor Notaţie grafică: Relaţii: Nume dependenţă <<access>> = import privat dependenţă <<import>> = import public Ambele relatii permit folosirea elementelor aflate în pachetul destinaţie de către elementele aflate în pachetul sursă făra a fi necesară calificarea numelor elementelor din pachetul destinaţie (similar directivei import din java. 34 / 62

Exemplu Auxiliary <<access>> ShoppingCart <<import>> WebShop <<import>> Types Pachet (1) Pachet (2) Exemplu Utilitatea pachetelor Elementele din Types sunt importate în ShoppingCart şi apoi sunt importate mai departe de către WebShop. Elementele din Auxiliary pot fi accesate însă doar din ShoppingCart şi nu pot fi referite folosind nume necalificate din WebShop 35 / 62

Utilitatea pachetelor Pachet (1) Pachet (2) Exemplu Utilitatea pachetelor Împart sisteme mari în subsisteme mai mici şi mai uşor de gestionat Permit dezvoltare paralelă iterativă Definirea unor interfeţe clare între pachete promovează refolosirea codului (ex. pachet care oferă funcţii grafice) 36 / 62

37 / 62

Diagramele să nu fie nici prea complicate, dar nici simpliste: scopul este comunicarea eficientă. Daţi nume sugestive elementelor componente. Aranjaţi elementele astfel încât liniile să nu se intersecteze. Încercaţi să nu arătaţi prea multe tipuri de relaţii odată (altfel vor rezulta diagrame complicate). Dacă este nevoie, realizaţi mai multe diagrame de acelaşi tip. 38 / 62

Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 39 / 62

Pattern Traducere: şablon, model Este o soluţie generală la o problemă comună Fiecare pattern are un nume sugestiv şi uşor de reţinut (ex. composite, observer, iterator) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 40 / 62

GRASP Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea GRASP = General Responsibility Assignement Software Patterns Descrise de Craig Larman în cartea Applying UML and Patterns. An Introduction to Object Oriented Analysis and Design Ne ajuta să alocăm responsabilităţi claselor în cel mai elegant mod posibil Modelele sunt numite: Information Expert (sau Expert), Creator, High Cohesion, Low Couplig şi Controller 41 / 62

Information Expert (1) Problemă: dat un anumit comportament (operaţie), cărei clase trebuie să-i fie atribuit? O alocare bună a operaţiilor conduce la sisteme care sunt: Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Uşor de înţeles Mai uşor de extins Refolosibile Mai robuste 42 / 62

Information Expert (2) Soluţie: asignez o responsabilitate clasei care are informaţiile necesare pentru îndeplinirea acelei responsabilităţi Recomandare: începeţi asignarea responsabilităţilor evidenţiind clar care sunt responsabilităţile Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 43 / 62

Information Expert (3) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Sale -date -time 1 SalesLineItem -quantity Contains 1..* * Described by 1 ProductSpecification -description -price -itemid Scenariul de utilizare cere ca utilizatorului sa-i fie prezentată valoarea totală a cumpărăturilor. Cărei clase trebuie să-i fie asignată metoda gettotal()? Mai trebuie adăugate şi alte metode? 44 / 62

Information Expert (4) t := gettotal() :Sale t := gettotal() :Sale 1*: st := getsubtotal() * :SalesLineItem Pattern t := gettotal() :Sale 1*: st := getsubtotal() * :SalesLineItem GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) 1.1: p:=getprice() Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) :ProductSpecification Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 45 / 62

Information Expert (5) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Clasă Sale SalesLineItem ProductSpecification Responsabilităţi să cunoască valoarea totală a cumpărăturilor să cunoască subtotalul pentru un produs să cunoască preţul produsului Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 46 / 62

Information Expert (6) Sale -date -time +gettotal() 1 Contains Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) SalesLineItem -quantity 1..* +getsubtotal() * Described by 1 ProductSpecification -description -price -itemid +getprice() Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 47 / 62

Creator (1) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Problemă: cine trebie să fie responsabil cu crearea unei instancte a unei clase? Soluţie: Asignaţi clasei B responsabilitatea de a crea instanţe ale clasei A doar dacă cel puţin una dintre următoarele afirmaţii este adevărată: B agregă obiecte de tip A B conţine obiecte de tip A B foloseşte obiecte de tip A B are datele de iniţializare care trebuie transmise la instanţierea unui obiect de tip A (B este deci un Expert în ceea ce priveşte crearea obiectelor de tip A) 48 / 62

Creator (2) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Sale -date -time 1 SalesLineItem -quantity Contains 1..* * Described by 1 ProductSpecification -description -price -itemid Cine este responsabil cu crearea unei instanţe a clasei SalesLineItem? 49 / 62

Creator (3) :Register :Sale Pattern addlineitem(itemtype, quantity) create(itemtype, quantity) :SalesLineItem GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Deoarece Sale conţine (agregă) instanţe de tip SalesLineItem, Sale este un bun candidat pentru a i se atribui responsabilitatea creării acestor instanţe 50 / 62

Low coupling (cuplaj redus) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Cuplajul este o măsură a gradului de dependenţă a unei clase de alte clase. Dependenţă: este conectată cu are cunoştinţe despre se bazează pe O clasă care are cuplaj mic (redus) nu depinde de multe alte clase; multe este dependent de contex. O clasă care are cuplaj mare depinde de multe alte clase. 51 / 62

Cuplaj (2) Probleme cauzate de cuplaj: schimbări în clasele relaţionate forţează schimbări locale clase greu de înţeles în izolare (scoase din context) clase greu de refolosit deoarece folosirea lor presupun prezenţa şi a claselor de care depind Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 52 / 62

Cuplaj (3) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Forme comune de cuplaj de la clasa A la clasa B sunt: A are un atribut de tip B O instanţă a clasei A apelează un serviciu oferit de un obiect de tip B A are o metodă care referenţiază B (parametru, obiect local, obiect returnat) A este subclasă (direct sau indirect) a lui B B este o interfaţă, iar A implementează această interfaţă 53 / 62

Legea lui Demeter Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Don t talk to strangers Orice metodă a unui obiect trebuie să apeleze doar metode aparţinând lui însuşi oricărui parametru al metodei oricărui obiect pe care l-a creat oricăror obicte pe care le conţine 54 / 62

Vizualizarea cuplajelor Diagrama de clase Diagrama de colaborare Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 55 / 62

Exemplu makepayment() :Register 1:create() p:payment 2:addPayment(p) (a) :Sale Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea makepayment() 1:makePayment() :Register :Sale 1.1:create() (b) :Payment (a) Există legături între toate clasele (b) Elimină cuplajul dintre Register şi Payment 56 / 62

High Cohesion Coeziunea este o măsură a cât de puternic sunt focalizate responsabilităţile unei clase. O clasă ale cărei responsabilităţi sunt foarte strâns legate şi care nu face foarte multe lucruri are o coeziune mare. O clasa care face multe lucruri care nu sunt relaţionate sau face prea multe lucruri are o coeziune mică (slabă) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 57 / 62

Coeziune (2) Probleme cauzate de o slaba coeziune: greu de înţeles greu de refolosit greu de menţinut delicate; astfel de clase sunt mereu supuse la schimbări Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 58 / 62

Coeziune şi Cuplaj Sunt principii vechi în design-ul software Promovează un design modular Modularitatea este proprietatea unui sistem care a fost descompus într-o mulţime de module coezive şi slab cuplate Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea 59 / 62

Controller (1) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Problemă: Cine este responsabil cu tratarea unui eveniment generat de un actor? Aceste evenimente sunt asociate cu operaţii ale sistemului Un Controller este un obiect care nu ţine de interfaţa grafică şi care este responsabil cu recepţionarea sau gestionarea unui eveniment. Un Controller defineşte o metoda corespunzătoare operaţiei sistemului. 60 / 62

Controller (2) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea Soluţie: asignează responsabilitatea pentru recepţionarea sau gestionarea unui eveniment unei clase care reprezintă una dintre următoarele alegeri: Reprezintă întregul sistem sau subsistem (façade controller) Reprezintă un scenariu de utilizare în care apare evenimentul; deseori acesta este numit [UseCaseName]Handler, [UseCaseName]Coordinator sau [UseCaseName]Session (use-case or session controller) -Folosiţi aceeaşi clasă Controller pentru toate evenimentele care apar în acelaşi scenariu de utilizare -Informal, o sesiune reprezintă o instanţă a unei conversaţii cu un actor. Sesiunile pot avea orice lungime, însă sunt organizate, de obicei, în termeni de scenarii (use case sessions) 61 / 62

Controller (3) Pattern GRASP Information Expert (1) Information Expert (2) Information Expert (3) Information Expert (4) Information Expert (5) Information Expert (6) Creator (1) Creator (2) Creator (3) Low coupling (cuplaj redus) Cuplaj (2) Cuplaj (3) Legea lui Demeter Vizualizarea În mod normal, un controller ar trebui sa delege altor obiecte munca care trebuie făcută; Controller-ul coordonează sau controlează activitatea, însă nu face prea multe lucruri el însuşi. O greşeală comună în design-ul unui controller este să i se atribuie prea multe responsabilităţi (façade controller) Un UseCaseController este o alegere bună dacă există multe evenimente care apar în procese diferite împărţire în mai multe clase. Avantaje: mai uşor de gestionat oferă o bază pentru a putea determina starea scenariului în desfăşurare. 62 / 62