Documente Academic
Documente Profesional
Documente Cultură
curs 7
Principii de proiectare
Diagrame UML
Arhitectura stratificat
abloane Grasp
Diagrame UML
Unified Modeling Language (UML) - este un limbaj standardizat de
modelare destinat vizualizrii, specificrii, modelrii i documentrii
aplicaiilor.
UML include un set de notaii grafice pentru a crea modele vizuale ce
descriu sistemul.
Diagrame UML
Diagrame de clase
n UML clasele sunt reprezentate sub form de dreptunghiuri cu trei compartimente
pentru:
numele clasei,
compartimentul din mijloc afieaz atributele clasei,
compartimentul inferior conine operaiile clasei
Vizibilitatea membrilor:
- privat (inaccesibil pentru toate celelalte clasele)
# protejat (accesibil pentru subclase)
+ vizibil pentru toate celelelate clase
~ vizibil pentru clasele din acelai pachet
Diagrame UML
Diagrame de clase - Exemplu
def get_total(self):
return self.total
def add(self,a):
'''adauga la total numarul a
parametrii: a
prec: a-nr rational
post: total =tolal+a
'''
copie=Rational(self.total.get_nominator(),self.total.get_denominator())
self.undoStack.append(copie)
self.total.addToSelf(a) #total=total+a
def undo(self):
'''anuleaza ultima operatie'''
if len(self.undoStack)>0:
self.total=self.undoStack.pop()
Diagrame UML
Relaii ntre clase
Descriu modul n care obiectele unei clase sunt conectate/interacioneaza cu obiectele altei clase
Tipuri de relaii:
Relaia de asociere
Agregare
Compunere
Dependenta
Generalizare
Multiplicitate
agregare slaba (romb neumplut), cand o componenta poate apartine la mai multe agregate
(obiecte compuse)
agregare tare (romb umplut cu negru), cand o componenta poate apartine la cel mult un
agregat (obiect compus)
un contact apartine
la o singura agenda;
stergere agenda =>
stergere contact
o agenda poate
avea zero sau mai
multe contacte
Exemple de dependene:
creaz instane
are un parametru
foloseste un obiect n interiorul unei metode
Arhitectura stratificat
Arhitectura stratificat ablon arhitectural care permite dezvoltarea
Fiecare strat are o interfa bine definit (se ascun detaliile), interfa folosit
de stratul imediat superior
Arhitectura stratificat
User Interface Layer (View Layer, UI layer sau Presentation layer)
Sterge un student
Filtreaza:
Dupa nume
Dupa matricol
Principii de proiectare
O bun proiectare este aceea care conduce la obtinerea unui
system soft:
Uor de neles, testat, ntreinut, modificat
Principii de proiectare
abloane Grasp- General Responsibility Assignment Software
Patterns (or Principles)
conin recomandri pentru alocarea responsabilitilor ntr-o aplicaie orientat obiect.
High Cohesion
Low Coupling
Information Expert
Controller
Protected Variations
Creator
Pure Fabrication
abloane Grasp
Low Coupling
Aloc responsabiliti astfel nct cuplarea rmne slab (redus)
abloane Grasp
Low Coupling
Un cuplaj excesiv afecteaza n mod negativ diverse atribute externe ale calitii precum:
Reutilizabilitatea un cuplaj puternic al unei entiti scade reutilizabilitatea acesteia datorit dependenei de
context
Modularitatea un cuplaj puternic indic faptul c nu sunt clar specificate responsabilitile fiecrui modul
ntelegerea si testabilitatea logica entitii puternic cuplate este greu de neles, deoarece necesit
nelegerea entitilor de care aceasta depinde
Forme de cuplare:
Clasa A are un atribut care este de tipul B.
Clasa A are o medod care refer o instan de tipul B n orice form (parameterii, variabile locale, valoare
returnat, apel la
metode)
Clasa A ete derivat direct sau indirect din clasa B.
abloane Grasp
High Cohesion
Aloc responsabilitile astfel nct coeziunea n sistem rmne ridicat
Coeziunea este un aspect complementar cuplajului. Ea descrie gradul cu care entitatile unei portiuni de
proiectare contribuie la ndeplinirea unui singur si bine denit scop.
Coeziunea ridicat la nivel de clas indica o strnsa legatur ntre toate elementele respectivei clase.
abloane Grasp
High Cohesion
O proiectare obiectuala buna trebuie sa balanseze echitabil constrangerile de coeziune ridicat si
cele de cuplaj redus.
O coeziune sczut afecteaza n mod negativ diverse proprietati ale sistemului proiectat:
ntelegerea. Clasele mari si complexe sunt greu de nteles n special daca ele sunt si necoezive.
ntreinerea. Datorita greutatilor ntmpinate n ntelegerea codului unei clase aceasta este greu de ntretinut.
Orice modicare adusa unei clase impune ntelegerea ei n totalitate.
Siguranta si testabilitatea. O clasa prea complexa nu numai ca nu este usor de ntretinut si nteles dar este si
greu de testat. Este deci mult mai probabila aparitia unor erori logice ceea ce are drept consecinta o scadere a
sigurantei (reliability) n functionare.
abloane Grasp
Information Expert
Aloc responsabilitatea clasei care are toate informaiile necesare pentru a
abloane Grasp
Creator
Crearea de obiecte este o activitate important ntr-un sistem orientat obiect. Care este clasa responsabil
cu crearea de obiecte este o proprietate fundamental care definete relaia ntre obiecte de
diferite tipuri.
ablonul Creator descrie modul n care alocm responsabilitatea de a crea obiecte n sistem
n general o clasa B ar trebui s aib responsibilitatea de a crea obiecte de tip A dac una sau mai
multe (de preferat) dintre urmtoarele condiii sunt adevrate:
Instana de tip B conine sau agreg instane de tip A
Instana de tip B gestioneaz instane de tip A
Instana de tip B folosete extensiv instane de tip A
Instana de tip B are informaiile necesare pentru a iniializa instana A.
abloane Grasp
Protected Variations
class ValidatorProdus:
ablonul
Protected
Variations
protejeaz
abloane Grasp
Pure Fabrication Repository
abloane Grasp
GRASP Controller
Scop: decuplarea sursei de evenimente de obiectul care gestioneaz
evenimentul. Decuplarea startului de prezentare de restul aplicaiei.
Referine
http://en.wikipedia.org/wiki/Class_diagram#Association
http://en.wikipedia.org/wiki/GRASP_(object-oriented_design)
Craig Larman. Applying UML and Patterns. An Introduction to Object Oriented Analysis and Design
Limbajul Python
http://docs.python.org/3/reference/index.html
http://docs.python.org/3/library/index.html
Tutorial Python
http://docs.python.org/3/tutorial/index.html
http://en.wikipedia.org/wiki/Test-driven_development
Martin Fowler. Refactoring. Improving the Design of Existing Code. Addison-Wesley, 1999
http://refactoring.com/catalog/index.html