You are on page 1of 152

AULA POLITCNICA 17

Enginyeria del software


Disseny I
Disseny de sistemes orientats a objectes
amb notaci UML
AULA POLITCNICA / FIB
EDICIONS UPC
Cristina Gmez - Enric Mayol
Antoni Oliv - Ernest Teniente
Enginyeria del software
Disseny I
Disseny de sistemes orientats a objectes
amb notaci UML
Primera edici: setembre de 1999
Reimpressi: setembre de 2000
Segona edici: febrer de 2001
Aquest llibre s'ha publicat amb la collaboraci
del Comissionat per a Universitats i Recerca
i del Departament de Cultura de la Generalitat de Catalunya.
En collaboraci amb el Servei de Llenges i Terminologia de la UPC.
Disseny de la coberta: Manuel Andreu
Els autors, 1999
Edicions UPC, 1999
Edicions de la Universitat Politcnica de Catalunya, SL
Jordi Girona Salgado 31, 08034 Barcelona
Tel. 93 401 68 83 Fax 93 401 58 85
Edicions Virtuals: www.edicionsupc.es
e-mail: edupc@sg.upc.es
Producci: CPET (Centre de Publicacions del Campus Nord)
La Cup. Gran Capit s/n, 08034 Barcelona
Dipsit legal: B-2.615-2001
ISBN obra complerta: 84-8301-437-8
ISBN: 84-8301-460-2
Sn rigorosament prohibides, sense l'autoritzaci escrita dels titulars del copyright, sota les sancions
establertes a la llei, la reproducci total o parcial d'aquesta obra per qualsevol procediment, inclosos la
reprografia i el tractament informtic, i la distribuci d'exemplars mitjanant lloguer o prstec pblics.
ndex
1 Introducci
1.1 Introducci al disseny de software ................................................................... 9
1.2 Introducci a larquitectura del software......................................................... 11
1.3 Introducci als patrons de disseny .................................................................. 17
1.4 Patr arquitectnic en capes ........................................................................... 25
1.5 Arquitectura lgica i fsica dels Sistemes dInformaci ................................. 33
2 Disseny orientat a objectes en UML
2.1 Introducci al disseny orientat a objectes en UML......................................... 43
2.2 Conceptes dUML per al disseny .................................................................... 49
2.3 Disseny de la Capa de Domini ........................................................................ 61
2.3.1 Especificaci dun exemple: gesti dun club de tennis.................. 63
2.3.2 Normalitzaci de lesquema conceptual despecificaci ................ 69
2.3.3 Aplicaci de patrons de disseny ...................................................... 75
2.3.3.1 Patr Iterador .................................................................... 75
2.3.3.2 Patr Controlador ............................................................. 81
2.3.3.3 Assignaci de Responsabilitats a Objectes ...................... 87
2.3.3.4 Patr Estat ........................................................................ 99
2.3.3.5 Patr Mtode Plantilla .................................................... 111
2.3.4 Exemple de disseny de la capa de domini .................................... 119
2.4 Disseny de la Capa de Presentaci................................................................ 129
2.4.1 - Introducci...................................................................................... 129
2.4.2 Patr Model Vista Controlador ............................................... 137
2.5 Disseny de la Capa de Gesti de Dades: persistncia en BDOO.................. 147
77
Introducci al disseny de software 1
Introducci al disseny de software
Etapes del desenvolupament de software
Disseny de software
Bibliografia
Introducci al disseny de software 2
Etapes del desenvolupament de software
Anlisi de Requeriments Quin sistema cal construir?
Especificaci Qu ha de fer el sistema?
Disseny Com ho fa el sistema?
Implementaci
Independent de
la tecnologia
Dependent de
la tecnologia
Especificaci del sist. sw.
Arquitectura del sist. sw.
99
Els autors, 2001; Edicions UPC, 2001.
Introducci al disseny de software 3
Disseny de software
Disseny de software s lactivitat daplicar diferents tcniques i principis
amb el propsit de definir un sistema amb el suficient detall per permetre la
seva construcci fsica (implementaci).
Punt de partida:
Resultat de lespecificaci: (Qu ha de fer el sistema?)
. Especificaci de dades (Model de Dades)
. Especificaci de processos (Models Funcional i de Comportament)
. Especificaci de la interacci amb lusuari (Model de la Interfcie)
Tecnologia (Amb quins recursos)
. Recursos hardware i software disponibles
. Requeriments no funcionals del sistema
Resultat del disseny: (Com ho fa el sistema?)
Estructura interna del sistema software (Arquitectura del Sistema Software)
Disseny de les Dades
Disseny de la Interfcie
Disseny dels Programes
Procs del disseny:
Metodologies de disseny
Adaptaci de solucions genriques a problemes de disseny (Patrons de disseny)
Introducci al disseny de software 4
Bibliografia
Ingeni era del software
Un enfoque prctico
R. G. Pressman
McGraw Hill, 1998. (Cuarta Edicin)
Caps. 11 i 13.
10 10
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci a larquitectura del software 1
Introducci a larquitectura del software
Arquitectura del software
Components
Vistes
Propietats de larquitectura
Principis de disseny
Relaci entre propietats i principis de disseny
Determinaci de larquitectura
Bibliografia
Introducci: Introducci a larquitectura del software 2
Arquitectura del software
Larquitectura del software s una descripci dels subsistemes i
components (computacionals) dun sistema software, i les relacions entre ells.
Larquitectura del software s el resultat de lactivitat de disseny arquitectnic del
software.
La determinaci de larquitectura del software consisteix en la presa de decisions
respecte a:
Lorganitzaci del sistema software
La selecci dels elements estructurals i les seves interfcies
Comportament daquests elements estructurals
La possible composici dels elements estructurals en subsistemes ms grans
Lestil que guia aquesta organitzaci
tenint en compte les propietats (requeriments no funcionals) del sistema software que
es volen assolir:
Eficincia, canviabilitat, usabilitat, fiabilitat, ...
11 11
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci a larquitectura del software 3
Components
Un component s una part fsica i reemplaable dun sistema que :
s conforme a, i
proporciona una realitzaci
dun conjunt dinterfcies especificades contractualment.
Un component s una part encapsulada dun sistema software
Els components sn els blocs constitutius de larquitectura del sistema
Els components noms tenen dependncies contextuals explcites
A nivell de llenguatge de programaci, els components es poden representar com a:
- mduls
- classes dobjectes
- un conjunt de funcions relacionades
- etc.
Introducci: Introducci a larquitectura del software 4
Relacions entre components
Una relaci denota una connexi entre components.
Les relacions poden ser:
Esttiques
. Tenen a veure amb la collocaci dels components en larquitectura
. Es veuen directament en el codi
. Exemples: Crides a procediments, accs a variables compartides
Dinmiques
. Tracten de les connexions temporals i les interaccions dinmiques entre els
components
. No sn visibles fcilment en el codi
. Exemples: Protocols client-servidor, protocols daccs a bases de dades
12 12
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci a larquitectura del software 5
Vistes
Una vista:
representa un aspecte parcial de larquitectura,
mostra propietats especfiques
Disseny
Procs
Implementaci
Desplegament
Casos ds
Els subsistemes i components sespecifiquen normalment en diferents vistes, per
mostrar diferents propietats rellevants (req. func. i no func) del sistema software.
Casos ds: Com lusuari o analista veu el funcionament del sitema (cas ds, interacci)
Disseny: Descriu la soluci software (classes, interacci entre objectes )
Implementaci: Fitxers i components del sistema implementat (llibreries, executables)
Procs: Mecanismes de concurncia i sincronitzaci dels processos del sistema
Desplegament: Nodes que composen la topologia hardware del sistema instalat
Introducci: Introducci a larquitectura del software 6
Propietats de larquitectura
Canviable:
Extensible: Noves funcionalitats o millores dels components
Portable: Canvis plataforma hardware, sistemes operatius, llenguatges
Mantenible: Detecci i reparaci derrors
Reestructurable: Reorganitzaci de components
Interoperable
Capacitat de dues o ms entitats software dintercanviar funcionalitat i dades
Eficient
Temps de resposta, rendiment, s de recursos
Fiable:
Tolerncia a fallades: Prdua de connexi i recuperaci posterior
Robustesa: Protecci contra ls incorrecte I el tractament derrors inesperats
Provable
Facilitar les proves del sistema
Reusable: Assolir el que es vol amb lajuda del que es t
Reusar software ja existent
Fer software per a ser reusat
Integritat conceptual: Harmonia, simetria i predictibilitat
13 13
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci a larquitectura del software 7
Principis de disseny
Abstracci
Encapsulament
Ocultaci dinformaci
Modularitzaci
Separaci de concerniments
Acoblament i cohesi
Suficincia, completesa i primitivitat
Separaci de poltica i implementaci
Separaci dinterfcie i implementaci
nic punt de referncia
Divideix-i-vencers
Introducci: Introducci a larquitectura del software 8
Principis de disseny: Ocultaci dinformaci
Confinar (ocultar) en un nic mdul (classe, etc.) un aspecte qualsevol del
software que s possible (probable) que canvi, i establir interfcies
intermduls que siguin insensibles als canvis previstos.
Si hi ha un canvi en laspecte ocultat (secret), quedar limitat al mdul
corresponent, sense afectar la resta del sistema. Les interfcies no quedaran
afectades.
Tamb es diu que el secret soculta en el mdul.
Aquest principi fou proposat per en D. Parnas, el 1972.
14 14
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci a larquitectura del software 9
Relaci entre propietats i principis de disseny
Laplicaci dun principi de disseny pot afectar lassoliment duna propietat de
larquitectura del sistema
baix acoblament
alta cohesi
Canviabilitat
Eficincia
pot
Per exemple:
suposar
Introducci: Introducci a larquitectura del software 10
Determinaci de larquitectura:
Dues vies complementries
Especificaci
Mtode
Selecci
Patrons de disseny
Adaptaci
Arquitectura
Patr
Donats els requeriments del sistema degudament especificats, aplicar un conjunt passos genrics de
forma ordenada i sistemtica definits en un mtode
Donats els requeriments del sistema degudament especificats,
- identificar els problemes especfics a resoldre
- seleccionar solucions genriques a problemes concrets (patrons)
- i adaptar-ne la seva aplicaci tenint en compte el problema concret
- procs molt guiat
- procs independent
del problema
- procs poc guiat
- procs ms contextualitzat
al problema
15 15
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci a larquitectura del software 11
Bibliografia
Pattern-ori ented Software Architecture. A System of patterns
F. Buschmann, R. Meunier, H. Rohnert, P.Sommerlad, M. Stal
John Wiley & Sons, 1996, Cap. 6.
The Unified Modeling Language User Gui de
G. Booch, J. Rumbaugh, I. Jacobson
Addison-Wesley, 1999, cap. 2, 25.
Component Software: Beyond Object-oriented programming
C. Szyperski
Addison-Wesley, 1998, cap. 4.
16 16
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 1
Introducci als patrons de disseny
Patrons de disseny: Definici.
Patrons de disseny: Categories.
Catleg parcial de patrons arquitectnics.
Catleg parcial de patrons de disseny.
Heterogenetat destils.
Bibliografia
Introducci: Introducci als patrons de disseny 2
Patrons de disseny: definici
Context:
Situaci on es presenta el problema de disseny
Problema:
Problema a resoldre
Forces: Aspectes que shan de considerar en la soluci
Soluci:
Esquema de soluci del problema, que equilibra les forces.
Dos aspectes:
. Esttic
. Dinmic
17 17
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 3
Patrons de disseny: Categories
Patr arquitectnic:
Un patr arquitectnic expressa un esquema dorganitzaci estructural
fonamental per a sistemes software.
Proporciona un conjunt de subsistemes predefinits, especifica les seves
responsabilitats, i inclou regles i guies per organitzar les relacions entre ells.
Patr de disseny:
Un cop determinat el patr arquitectnic, un patr de disseny dna un
esquema per refinar els seus subsistemes o components, o les relacions
entre ells.
Descriu lestructura :
+ duna soluci a un problema que apareix repetidament
+ de components que es comuniquen entre ells
Resol un problema de disseny general en un context particular
Modisme:
Usats en la fase dimplementaci per a transformar una arquitectura en un
programa escrit en un llenguatge especfic.
Descriu lestructura duna soluci depenent del llenguatge de programaci
Introducci: Introducci als patrons de disseny 4
Catleg parcial de patrons (o estils) arquitectnics
Crida i retorn:
estils arquitectnics ms usats, tradicionalment en grans sistemes
software
. Programa principal i subrutina
. Orientaci a objectes
. En capes
Centrat en dades:
per sistemes que requereixen accs a dades compartides
. Repositori
. Pissarra
Flux de dades:
per sistemes que donades unes dades dentrada realitzen una srie de
transformacions per obtenir unes dades de sortida
. Batch sequencial
. Tubs i filtres
Model - Vista - Controlador: per sistemes interactius
18 18
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 5
Crida i retorn: programa principal i subrutina
Main
Sub 3 Sub 2 Sub 1
Descomposici jerrquica dun programa principal en subrutines
Una subrutina (component) al rebre el control (i dades) dun dels seus pares,
el passa cap als seus fills, el retorn del control es fa en sentit contrari (de fills
a pares).
Facilita la canviabilitat
Estil tpic de la programaci tradicional
Introducci: Introducci als patrons de disseny 6
Crida i retorn: Orientaci a objectes
Objecte
Op1()
Op2()
Objecte
Op3()
Objecte
Op4()
Cada component agrupa (encapsula) les dades i els mecanismes per a
manipular-les.
La comunicaci entre components es realitza mitjanant la invocaci de
serveis oferts pels component (operacions).
Facilita la canviabilitat i reusabilitat
19 19
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 7
Crida i retorn: En capes
Capa 3 Comp. 3-1 Comp. 3-2 Comp. 3-p
Capa 2 Comp. 2-1 Comp. 2-2 Comp. 2-n
Capa 1 Comp. 1-1 Comp. 1-2
Els components sagrupen en capes.
La comunicaci solament pot ser entre components de la mateixa capa, o
entre components de capes contiges.
Facilita la canviabilitat i portabilitat.
Introducci: Introducci als patrons de disseny 8
Centrat en dades: Repositori
Les dades compartides per diferents clients estan en un mateix lloc
Els clients es comuniquen amb el repositori per accedir i actualitzar les dades
El Repositori s un medi d'emmagatzemament passiu
Repositori
(dades compartides)
Client6
Client2
Client3
Client4 Client5
Client1
20 20
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 9
Centrat en dades: Pissarra
Les dades compartides per diferents clients estan en un mateix lloc
Els clients es comuniquen amb la pissarra per accedir i actualitzar les dades i
la pissarra notifica als clients quan hi ha hagut canvis en les dades que els hi
interessen
La pissarra s un medi d'emmagatzemament actiu
Pissarra
(dades compartides)
Client6
Client2
Client3
Client4 Client5
Client1
Introducci: Introducci als patrons de disseny 10
Flux de dades: Batch seqencial
validar classificar actualitzar llistar
cinta
llistats
cinta cinta cinta
cinta
Descomposici del sistema en una seqncia de programes independents
Un programa no pot comenar la seva execuci fins que els precedents han
finalitzat completament
Les dades es transmeten entre components en la seva totalitat
Facilita canviabilitat i reusabilitat
Orientat a sistemes que sexecutaran de forma diferida (Batch)
21 21
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 11
Tubs i filtres
Procs1
Procs2
Procs4
Procs3
Procs6
Procs5
Descomposici del sistema en una seqncia de processos que realitzen
modificacions incrementals de les dades
Un procs pot comenar la seva execuci en el moment que rebi alguna dada
dentrada
Els tubs (processos) no tenen informaci destat
Facilita canviabilitat i reusabilitat
Estil arquitectnic tpic dels sistemes operatius UNIX
Introducci: Introducci als patrons de disseny 12
Model-Vista-Controlador
Model
dades
afegir(o:Observador)
treure(o:Observador)
notificar()
obtenirDades()
servei()
Vista
inicialitzar(m:Model)
ferControlador()
mostrar()
actualitzar()
Controlador
inicialitzar(m:Model, v:Vista)
tractarEsdeveniment()
actualitzar()
Observador
actualitzar()
*
1
1 1
T
Amb
Descomposici del sistema software en:
- Model: encarregat de la implementaci de les funcionalitats i dades del sistema
- La interfcie amb lusuari amb:
. Vista: encarregada de gestionar com es mostra la informaci a lusuari
. Controlador: encarregat de gestionar la interacci amb lusuari
Facilita canviabilitat i portabilitat
22 22
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 13
Heterogentat destils arquitectnics
Sovint, els sistemes combinen dos o ms estils:
sanomenen sistemes heterogenis.
Hi ha tres menes dheterogenetat:
Locacional
. Diferents parts del sistema poden estar fetes en estils diferents
. Ex.: Algunes de les branques dun sistema que segueix el patr programa
principal i subrutina comparteixen una pissarra i altres branques no.
Jerrquica
. La descomposici dun component dun estil es pot fer en un altre estil
. Ex.: descomposici en capes i orientaci a objectes dins cada capa
Simultnia
. Un mateix sistema es pot interpretar alternativament per ms dun estil
. Ex.: Un mateix sistema es pot veure estructurat seguint el patr tub-filtres
(on cada procs espera una dada a lentrada per processar) o vist com n
subsistemes independents amb un ordre dexecuci predeterminat.
Introducci: Introducci als patrons de disseny 14
Catleg parcial de patrons de disseny
Creaci:
Patrons de disseny relatius a com es creen classes i objectes
Estructurals:
Patrons de disseny relatius a com diferents classes i objectes es poden
combinar per definir estructures ms grans
Comportament:
Patrons de disseny relatius a com les classes i objectes interaccionen i
com sels hi han dassignar responsabilitats
. Assignaci de responsabilitats (Controlador, Expert, Creador)
. Iterador
. Estat
. Mtode Plantilla
. Observador
23 23
Els autors, 2001; Edicions UPC, 2001.
Introducci: Introducci als patrons de disseny 15
Patrons que considerarem
Patrons Arquitectnics:
- Patr Arquitectnic en 3 Capes (Presentaci, Domini i Gesti de Dades)
- Patr Orientaci a Objectes (dins de cada capa)
- Patr Model-Vista-Controlador (en la Capa de Presentaci)
Patrons de Disseny:
- Iterador
- Controlador
- Expert
- Creador
- Estat
- Mtode Plantilla
Introducci: Introducci als patrons de disseny 16
Bibliografia
Software Archi tecture in Practice
L. Bass; P. Clements; R. Kazman
Addison-Wesley, 1998, Cap. 5.
Software Archi tecture
M. Shaw; D. Garlan
Prentice Hall, 1996, Cap. 2.
Pattern-ori ented Software Architecture. A System of patterns
F. Buschmann, R. Meunier, H. Rohnert, P.Sommerlad, M. Stal
John Wiley & Sons, 1996, Cap. 5 i 2
Design Patterns. Elements of Reusable Object-Oriented Software
E. Gamma, R. Helm, R. Johnson, J. Vlissides
Addison-Wesley, 1995, Cap.1
24 24
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 1
Patr arquitectnic: Arquitectura en capes
Context
Problema
Soluci:
Estructura
Comportament
Consideracions en la definici de larquitectura
Beneficis i inconvenients
Variants
Bibliografia
Introducci: Patr Arquitectnic en Capes 2
Context
Un sistema gran que requereix sser descomposat en grups de subtasques
(components), tals que cada grup de subtasques est a un nivell determinat
dabstracci.
25 25
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 3
Problema
Cal dissenyar un sistema amb la caracterstica dominant dincloure aspectes dalt i baix
nivell, on les tasques dalt nivell es basen en les de baix nivell.
El sistema requereix tamb una estructuraci horitzontal, ortogonal a la vertical: tasques
del mateix nivell dabstracci independents entre elles
Lespecificaci descriu les tasques a alt nivell, aix com la plataforma.
Es desitja portabilitat a daltres plataformes.
Les tasques dalt nivell no es poden implementar utilitzant directament els serveis de la
plataforma, a causa de la seva complexitat. Calen serveis intermediaris.
Introducci: Patr Arquitectnic en Capes 4
Problema: forces a equilibrar
Canvis en el codi no haurien de propagar-se en tot el sistema (Mantenible)
Les interfcies dels components haurien de ser estables i clarament definides
Els components shaurien de poder reemplaar per implementacions
alternatives (Separaci dinterfcie i implementaci)
En el futur, pot ser necessari construir altres sistemes, amb els mateixos
aspectes de baix nivell que aquest (Reusabilitat)
Responsabilitats semblants shaurien dagrupar per ajudar a la
comprensibilitat i mantenibilitat (Cohesi)
No hi ha una granularitat estndard de components
Els components complexos necessiten una descomposici addicional
26 26
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 5
Soluci
Estructurar el sistema en un nombre apropiat de capes.
Col.locar les capes verticalment.
Tots els components duna mateixa capa han de treballar al mateix nivell
dabstracci.
Els serveis que proporciona la capa j utilitzen serveis proporcionats per la
capa j - 1. Alhora, els serveis de la capa j poden dependre daltres serveis en
la mateixa capa.
Lesquema ms tpic de comunicaci consisteix en peticions de dalt a baix, i
respostes a les peticions en la direcci oposada.
Introducci: Patr Arquitectnic en Capes 6
Soluci: Estructura
usa
Nivell ms alt dabstracci
Nivell ms baix d abstracci
Client Capa N
Capa N - 1
Capa 1
Dispositius Fsics
Sistema Software
27 27
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 7
Exemple: Arquitectura 3 capes
Capa 3 Comp. 3-1 Comp. 3-2 Comp. 3-p
Capa 2 Comp. 2-1 Comp. 2-2 Comp. 2-n
Capa 1 Comp. 1-1 Comp. 1-2 Comp. 1-m
Introducci: Patr Arquitectnic en Capes 8
Soluci: Comportament
(Comunicaci de dalt a baix)
Un usuari realitza una petici duna tasca a la capa superior
Capa 3 Capa 2 Capa 1
tasca
resultat
petici
28 28
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 9
Soluci: Comportament
(Comunicaci de baix a dalt)
Capa 3 Capa 2 Capa 1
notificaci
esdeveniment
Un dispositiu fsic detecta locurrncia dun esdeveniment a la cap inferior
Introducci: Patr Arquitectnic en Capes 10
Soluci: Comportament
(Comunicaci bi-direccional)
Protocol de comunicaci TCP/IP
FTP
TCP
IP
Ethernet
FTP
TCP
IP
Ethernet
Protocol FTP
Protocol TCP
Protocol IP
Protocol Ethernet
Connexi fsica
petici
resposta
29 29
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 11
Consideracions a la definici de larquitectura (I)
1. Definir el criteri dabstracci per agrupar tasques en capes.
2. Determinar el nombre de nivells dabstracci (capes):
Una capa per nivell dabstracci.
Dos o ms nivells en una capa.
Un nivell en dues o ms capes.
3. Anomenar les capes i assignar tasques a cada una delles:
La capa superior correspon a la tasca del sistema.
Les altres capes donen suport a les capes superiors.
4. Especificar els serveis:
Cap component pot estar repartit en dues o ms capes.
Pocs serveis en les capes inferiors.
5. Refinar larquitectura en capes.
Introducci: Patr Arquitectnic en Capes 12
Consideracions a la definici de larquitectura (II)
6. Especificar una interfcie per cada capa. La capa j pot sser:
Una caixa negra per a la j+1
Una caixa blanca (el seu contingut es visible per la capa j+1)
7. Estructurar les capes individualment
8. Especificar la comunicaci entre capes adjacents:
Model empenta: la informaci es comunica en la petici del servei
Model estirada: el servei demanat estira la informaci de la capa superior
9. Desacoblar capes adjacents:
Comunicaci descendent: Canvis en capa j poden ignorar presncia capa j+1.
Comunicaci ascendent: Capa j coneix quin servei especfic demanar de la capa j+1 per
notificar un esdeveniment rebut (Retrocrides)
10. Dissenyar una estratgia de tractament derrors.
Tractar errors en la capa on es detecten
Tractar errors en les capes superiors
30 30
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 13
Beneficis i inconvenients
Beneficis:
Reutilitzaci de les capes en altres contexts (interfcie i abstracci ben
definides)
Suport a lestandaritzaci (nivells dabstracci comunment acceptats)
Totes les dependncies sn locals (canvis locals)
Portabilitat
Facilitat de prova
Canviabilitat
Inconvenients:
Menor eficincia
Feina innecessria o redundant
Dificultat en establir la granularitat i nombre de capes
Introducci: Patr Arquitectnic en Capes 14
Variants
Arquitectura en capes relaxat
Una capa pot usar els serveis de totes les capes que estan per sota della
Una capa pot sser parcialment opaca
Conseqncies
Possible guany en flexibilitat i eficincia
Possible prdua en la canviabilitat
31 31
Els autors, 2001; Edicions UPC, 2001.
Introducci: Patr Arquitectnic en Capes 15
Bibliografia
Pattern-ori ented Software Architecture. A System of patterns
F. Buschmann, R. Meunier, H. Rohnert, P.Sommerlad, M. Stal
John Wiley & Sons, 1996. Pgines 31-51
32 32
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 1
Arquitectura lgica i fsica de sistemes dinformaci
Funcions dun sistema dinformaci.
Arquitectura lgica dun sistema dinformaci.
Arquitectura fsica no distribuda:
Una capa.
Dues capes.
Tres capes.
Bibliografia
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 2
Funcions dun sistema dinformaci
Passiva:
Mantenir una representaci consistent de lestat del domini:
. Capturar els esdeveniments que ocorren al domini
. Actualitzar lestat del sistema dinformaci com a conseqncia daquests
esdeveniments
. Assegurar la consistncia de la representaci
Activa:
Respondre a consultes sobre lestat del domini.
Produir reaccions quan es donen certes condicions predefinides.
Sistema
Informaci
Domini
activa
passiva
33 33
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 3
Arquitectura lgica dun sistema dinformaci:
Context
operacions
entrada/
sortida
esdeveniments
presentaci:
men seleccionat
bot premut
mostrar finestra
imprimir lnia
...
Sistema
dInformaci
......
......
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 4
Arquitectura lgica dun sistema dinformaci:
Visi general
Aplicaci del patr Arquitectura en 3 Capes a un Sistema dInformaci
Sistema
dInformaci
......
......
Sistemes gesti bases de dades/fitxers
Capa Presentaci
Capa del Domini
Capa de Gesti de dades
Responsable de la interacci
amb lusuari
Responsable de la interacci
amb el SGBD/F
Responsable de la implementaci
de les funcionalitats del sistema
34 34
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 5
Arquitectura lgica dun sistema dinformaci:
Capa de Presentaci
......
Domini
Presentaci
Sassabenta peticions usuaris
Ordena execuci accions
Comunica resultats accions
als usuaris
Tractament de:
Finestres
Dilegs, Mens
Botons
Llistats
esdeveniments
presentaci
esdeveniments externs
consultes
respostes
resultats
La Capa del Presentaci coneix com presentar les dades a lusuari, per ignora
quines transformacions cal fer per donar resposta a les peticions de lusuari
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 6
Arquitectura lgica dun sistema dinformaci:
Capa del Domini
La Capa del Domini coneix com satisfer les peticions de lusuari, per ignora on es
guarden les dades i com es presenten a lusuari
Sassabenta esdeveniments
En controla la validesa
Canvia lestat del domini
Executa accions encomanades
Sassabenta consultes
Obt els resultats
Comunica respostes
Gesti de dades
Domini
Presentaci
esdeveniments externs
consultes
operacions de consulta i
modificaci a les dades
respostes
resultats
resultats
respostes
35 35
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 7
Arquitectura lgica dun sistema d'informaci:
Capa Gesti de Dades
La capa del Gesti de Dades coneix on i com estan emmagatzemades les dades, per
desconeix com tractar-les
Gesti de
Dades
Domini
Sistemes de gesti bases de dades/fitxers
operacions de consulta i
modificaci en el llenguatge de
les bases de dades i fitxers
Permet que el domini pugui ignorar on sn les dades.
Les funcions concretes daquesta capa depenen del
sistema de gesti de dades que susi.
operacions de consulta i
modificaci de les dades
resultats
respostes
resultats
respostes
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 8
Arquitectura lgica dun sistema dinformaci:
Els sistemes de gesti de bases de dades/fitxers
......
...... Esque. SGBDi SGFj
Gesti de dades
Sencarrega de mantenir una
representaci persistent i concreta
de lestat del domini
operacions de consulta i
modificaci en el llenguatge de
les bases de dades i fitxers
select ... from ... where ...
find ....
delete record
....
resultats
respostes
36 36
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 9
Capa Gesti de Dades:
Exemple en arquitectura basada en transaccions/bases de dades
Acceptar
rebut
nou rebut
error
REBUTS
CLIENTS
Verifi car
rebut
Afegir
rebut
CLIENTS REBUTS
nou rebut (correcte)
nou rebut
error
Procs de dades discret Verificar rebut
Estmul: Flux de dades nou rebut
* El flux nou rebut ja est accessible
if client does not exist
error := No conec el client
issue (error) * operaci estndard YSM
else if rebut exists
error := Aquest rebut ja existeix
issue (error)
else
issue (nou rebut (correcte))
end
Procs de dades discret Afegir rebut
Estmul: nou rebut (correcte)
* Tenim nou rebut disponible
create REBUT with:
codi rebut := nou rebut.codi rebut
import := nou rebut.import
data := todays date ()
* todays date() s una operaci estndard del YSM
end;
* tenim REBUT lligat per la creaci anterior i
* CLIENT lligat pel flux dentrada
create REBUT del CLIENT;
end.
Rebut Client del
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 10
Capa Gesti de Dades:
Exemple en arquitectura basada en transaccions/bases de dades
ExisteixClient?(Client) ExisteixRebut?(codiRebut) creaRebut (codiRebut,Import,Client)
select client from Clients
where...
select codiRebut from Rebuts
where...
insert into Rebuts...
TAULES:
Clients(client,...)
Rebuts(codi,import,client, data)
Domini
Gesti de dades
Sistema gesti base de dades
Presentaci
Transforma operacions
conceptuals en operacions
fsiques
error nouRebut (CodiRebut,Import,Client)
37 37
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 11
Arquitectura fsica no distribuida: Una capa
Sistema
dInformaci
......
......
Sistemes gesti bases de dades/fitxers
Presentaci /
Domini /
Gesti de Dades
En el codi estan barrejades
les tres funcions
Propietats de larquitectura:
Poc canviable
Poc reusable
Poc portable
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 12
Arquitectura fsica no distribuda: Dues capes (I)
Propietats de larquitectura:
Interfcie:
- portable, reusable i canviable
(canvis a la interfcie sn locals)
Implementaci de funcionalitats:
- Poc portable, canviable i reusable
(molta dependncia del SGBD, el format i
localitzaci de les dades)
Sistema
dInformaci
......
......
Sistemes gesti bases de dades/fitxers
Presentaci
Domini/Gesti de dades
38 38
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 13
Arquitectura fsica no distribuda: Dues capes (II)
Sistema
dInformaci
......
......
Sistemes gesti bases de dades/fitxers
Presentaci/Domini
Gesti de dades
Propietats de larquitectura:
Implementaci de funcionalitats:
- Poc portable, canviable i reusable
(molta dependncia de la interfcie, del GUI i
el disseny de pantalles)
Accs a les dades:
- portable, reusable i canviable
(canvis en format, localitzaci i SGBD sn
locals)
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 14
Arquitectura fsica no distribuda: Tres capes
Sistema
dInformaci
......
......
Sistemes gesti bases de dades/fitxers
Presentaci
Domini
Gesti de dades
Tots els canvis sn locals
Propietats de larquitectura:
canviable
reusable
portable
39 39
Els autors, 2001; Edicions UPC, 2001.
Introducci: Arquitectura lgica i fsica dels sistemes dinformaci 15
Bibliografa
Analysis Patterns
Martin Fowler
Addison-Wesley, 1997, cap. 12.
40 40
Els autors, 2001; Edicions UPC, 2001.
Disseny orientat a objectes en UML 1
Disseny orientat a objectes en UML
Introducci al disseny orientat a objectes en UML
Conceptes dUML per al disseny
Disseny de la Capa de Domini
Especificaci dun exemple: gesti dun club de tennis
Normalitzaci de lesquema conceptual despecificaci
Aplicaci de patrons de disseny
Exemple de disseny de la capa de domini
Disseny de la Capa de Presentaci
Disseny de la Capa de Gesti de Dades
41 41
Els autors, 2001; Edicions UPC, 2001.
42 42
Els autors, 2001; Edicions UPC, 2001.
Introducci al disseny orientat a objectes en UML 1
Introducci al disseny orientat a objectes en UML
Etapes del desenvolupament de software
Determinaci de larquitectura del software
Especificaci versus disseny
Visi dun sistema software en UML
Punt de partida: especificaci en UML
Resultat a obtenir: disseny en UML
Bibliografia
Introducci al disseny orientat a objectes en UML 2
Etapes del desenvolupament de software
Anlisi de Requeriments Quin sistema cal construir?
Especificaci Qu ha de fer el sistema?
Disseny Com ho fa el sistema?
Implementaci
Independent de
la tecnologia
Dependent de
la tecnologia
Especificaci del sistema software
Arquitectura del sistema software
43 43
Els autors, 2001; Edicions UPC, 2001.
Introducci al disseny orientat a objectes en UML 3
Determinaci de larquitectura del software
Dependncia tecnolgica:
Propietats que es volen assolir (requeriments no funcionals)
Recursos tecnolgics disponibles
famlia de llenguatges de programaci
famlia de sistema gestor de bases de dades
etc.
Larquitectura del sistema software i els patrons
(arquitectnics) que susaran per fer el disseny del sistema
determina
Introducci al disseny orientat a objectes en UML 4
Determinaci de larquitectura del software - ES:D1
El disseny que explicarem es basa en els supsits segents:
Propietats que es volen assolir: canviabilitat i portabilitat
Recursos tecnolgics disponibles
llenguatge de programaci orientat a objectes
base de dades orientada a objectes
- Arquitectura en tres capes
- Orientaci a objectes dins de cada capa
44 44
Els autors, 2001; Edicions UPC, 2001.
Introducci al disseny orientat a objectes en UML 5
Especificaci versus disseny
En UML:
Es fan servir els mateixos models al disseny que a lespecificaci
La visi (enfocament) dels models s molt diferent a ambdues etapes:
Especificaci: els models defineixen els conceptes del mn real.
(domini del probl ema)
Disseny: els models defineixen els conceptes que es desenvoluparan
per proporcionar una soluci a les necessitats del mn real.
(domini de l a soluci)
Introducci al disseny orientat a objectes en UML 6
Del domini del problema al de la soluci (I)
Lespecificaci no t en compte les propietats a assolir ni la tecnologia
que susar per implementar el sistema software.
Durant el disseny, es poden haver de canviar els models despecificaci
per tal dassolir determinades propietats.
Exemple: propi etat a assolir -> eficincia
Esquema conceptual despecificaci:
- Problema: operaci visita-provs costosa perqu hi ha molts recorreguts
- Soluci: afegir una associaci derivada /visita entre persona i ciutat
- Malauradament, aquesta associaci podia no ser rellevant al domini del problema
Empresa
nom
Ciutat
nom
nm-hab
Treb-a T-prov-a *
*
*
Persona
nom
visita-provs(): ll-ciutats
*
ll-ciutats = {nom-c}
45 45
Els autors, 2001; Edicions UPC, 2001.
Introducci al disseny orientat a objectes en UML 7
Del domini del problema al de la soluci (II)
Possibles coses a fer, des del punt de vista del domini de la soluci:
afegir informaci derivada (atributs i/o associacions)
simplificar jerarquies de generalitzaci / especialitzaci (eliminar subclasses)
afegir classes dobjectes redundants
considerar classes abstractes
etc.
Aquest pas est poc formalitzat i poc explicat a la literatura actual.
Les transformacions a aplicar depenen de molts factors externs: freqncia
dinvocaci de les operacions, cost dexecuci, poblaci de les classes, etc.
Per tant, lestudi daquestes transformacions queda fora de labast
daquesta documentaci.
Introducci al disseny orientat a objectes en UML 8
Visi dun sistema software en UML
Especificaci Disseny
sistema software
sistema software
Especificaci: el sistema software es veu com una sola classe dobjectes que
engloba tota la informaci i totes les operacions.
Disseny: cada classe dobjectes t les seves prpies operacions de manipulaci
dinformaci. Els objectes interactuen per satisfer les operacions del
sistema.
46 46
Els autors, 2001; Edicions UPC, 2001.
Introducci al disseny orientat a objectes en UML 9
Punt de partida: especificaci en UML
Especificaci: QU fa el sistema software?
Resultat de lespecificaci en UML:
Model de Casos ds:
Quina interacci hi ha entre els actors i el sistema software?
Esquema Conceptual:
Quins sn els conceptes rellevants del mn real de referncia ?
Diagrames de seqncia del sistema:
Quina resposta dna el sistema als esdeveniments externs? (quines
operacions ha de tenir el sistema?)
Contractes de les operacions:
Qu fan les operacions del sistema?
Introducci al disseny orientat a objectes en UML 10
Resultat a assolir: disseny en UML
Disseny: COM estructurem el sistema perqu faci el que ha de fer?
el disseny s una acti vitat iterati va i s difcil seqencialitzar tot el que shi fa.
Resultat del disseny en UML:
Model de Casos ds:
Defineix la interacci real, amb una interfcie concreta.
Diagrama de classes de disseny:
Descriu les classes del software i les seves interfcies (operacions).
Diagrames de seqncia:
Defineixen la interacci entre les classes dobjectes per respondre un
esdeveniment extern.
Contractes de les operacions:
Defineixen qu fan les operacions de les classes dobjectes.
47 47
Els autors, 2001; Edicions UPC, 2001.
Introducci al disseny orientat a objectes en UML 11
Bibliografia
Applying UML and Patterns
An Introduction to Object-Oriented Analysis and Design
C. Larman
Prentice-Hall 1998
Object-Oriented Modeling and Design
J.Rumbaugh, M.Blaha, W.Premerlani, F.Eddy, W.Lorensen
Prentice-Hall, 1991
Enginyeri a del software: Especificaci
D.Costal, M.R.Sancho, E.Teniente
Edicions UPC, 1999
48 48
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 1
Conceptes dUML per al disseny
Objecte i Classe dobjectes
Atribut
Associaci
Operaci, Mtode i Contracte
Agregaci i Composici
Generalitzaci i Herncia
Polimorfisme
Diagrames dinteracci
Diagrames de seqncia
Invocaci doperacions en jerarquies
Bibliografia
Conceptes dUML per al disseny 2
Objecte i classe dobjectes
Objecte:
s una manifestaci concreta duna abstracci
s una instncia duna classe, que encapsula estat i comportament
t una identitat prpia
el fa distingible daltres objectes
la seva existncia s independent dels valors de les seves propietats
Classe dobjectes:
descriu un conjunt dobjectes que comparteixen atributs, associacions,
operacions i mtodes.
representa un concepte dins el sistema que sest modelitzant:
un concepte del mn real (a lespecificaci)
un concepte software equipat amb una implementaci (a disseny)
49 49
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 3
Atribut, associaci, operaci i mtode
Atribut: propietat compartida pels objectes duna classe
Associaci: representa relacions entre dos o ms objectes
Operaci:
transformaci o consulta que poden executar els objectes duna classe
t una signatura (nom i parmetres de loperaci) i s invocada per altres
objectes
Mtode: implementaci concreta duna operaci dins duna classe
Persona
dni: String
nom: String
adrea: String
telfon: Integer
canvi-adrea(a:String): Boolean
telfon?(): Integer
afegir-idioma(nom:String)
Idioma
nom: String
/nm-parl.: Integer
nou-parlant(dni:String)
Parla 1..*
*
Conceptes dUML per al disseny 4
Atributs: sintaxi completa
[visibilitat] nom [multiplicitat] [:tipus] [=valor-inicial] [{propietats}]
changeable
addOnly
frozen
Public (+): qualsevol classe que pot veure la classe, veu latribut
Protected (#): noms la prpia classe i els seus descendents veuen latribut
Private (-): noms la prpia classe veu latribut
Univaluat (per defecte)
Multivaluat: [1..*]
Admet valors nuls: [0..1]
etc.
Persona
+ dni: String
# nom: String
- adrea: String = C/Nou
- telfon [0..1]: Integer
Suposarem que els atributs sn privats,
a no ser que especifiquem una altra
visibilitat
50 50
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 5
Atributs: mbit
Atribut dinstncia:
representa una propietat aplicable a tots els objectes duna classe
cada objecte pot tenir un valor diferent daquest atribut
Atribut de classe:
propietat aplicable a la classe dobjectes com a tal
tots els objectes duna classe comparteixen el valor daquest atribut
Persona
dni: String
nom: String
adrea: String
edat: Integer
edat-promig: Real atribut de classe
Conceptes dUML per al disseny 6
Associacions: sintaxi
Persona Idioma
1..*
*
#parlants +idiomes
Persona a Idioma
Idioma a Persona
Persona a Idioma
Navegabilitat
{propietats}
changeable
addOnly
frozen
Navegabilitat:
indica si s possible o no travessar una associaci binria duna classe a una altra
si hi ha navegabilitat, lassociaci defineix un pseudoatribut (que correspon al rol
daquell sentit de navegaci) de la classe a partir de la qual es pot navegar
suposarem que les associacions sn privades, a no ser que sindiqui el contrari
visibilitat: public, protected, private
Persona
Parla
Idioma
1..*
* Parla
+idiomes
51 51
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 7
Associacions: qualificador
Ciutat
Hotel
0..1
1
nom-h
qualificador
objecte
qualificat
Qualificador:
permet seleccionar un conjunt dobjectes relacionats amb un objecte qualificat
mitjanant una associaci.
un objecte, conjuntament amb el valor del qualificador, determina un nic objecte
(de vegades un conjunt dobjectes) de laltre extrem de lassociaci.
s un ndex en el recorregut de lassociaci
Ciutat
nom-c: String
Associaci no qualificada:
Hotel
nom-h: String
T * 1
R.I. textuals:
- no hi pot haver dues ciutats amb idntic nom-c
- una ciutat no pot tenir dos hotels amb nom-h
Associaci qualificada:
(ciutat, nom-h) 0 o 1 hotel
T
Conceptes dUML per al disseny 8
Associacions: ordenaci
s una propietat dun conjunt dobjectes
relacionats amb un altre objecte mitjanant
una associaci, que indica si el conjunt est
o no ordenat (per posici).
Banc
Prstec Compte
1 1
* *
{ordered} {unordered}
52 52
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 9
Agregaci i Composici
Mail
Adrea Text
1 1
* *
Lagregaci s una associaci que
relaciona el tot i les parts.
Les parts poden pertanyer a ms
dun agregat.
A nivell dobjectes, no hi pot haver
cicles en els camins dagregaci.
Cotxe
Xasss
1
1
Motor
1
La composici s una agregaci amb
una pertinena ms forta entre el tot i
les parts: si sesborra el tot, tamb
cal esborrar les parts.
En un moment determinat, les parts
pertanyen com a mxim a una
composici.
Roda
0..5
...
Conceptes dUML per al disseny 10
Operacions: sintaxi completa
[visibilitat] nom [(llista-parmetres)] [:tipus-retorn] [{propietats}]
isQuery
sequential
guarded
concurrent
Public (+): loperaci pot ser invocada des de qualsevol objecte
Protected (#): pot ser invocada pels objectes de la classe i els seus descendents
Private (-): noms els objectes de la prpia classe poden invocar loperaci
Signatura duna operaci:
[direcci] nom : tipus [=valor-per-defecte]
Parmetres duna operaci:
in, out, inout
Suposarem que les operacions sn
pbl iques, si no sindica el contrari
53 53
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 11
Operacions: mbit
Operaci dinstncia:
loperaci s invocada sobre objectes individuals
Operaci de classe:
loperaci saplica a la classe prpiament dita
Exemple: operaci constructora, que serveix per donar dalta
noves instncies duna classe.
Alumne
nom: String
edat: Integer
nom?(): Integer
nova-assig (nom-a:String): Boolean
alumne (nom: String, edat:Integer)
promig-edat(): Real
Operaci constructora:
Suposarem que, si no sindica el contrari,
cada classe dobjectes t una operaci
constructora amb tants parmetres com
atributs t la classe.
Si es consideren altres constructores,
caldr definir-ne la seva signatura.
Conceptes dUML per al disseny 12
Operacions: contractes
Contracte: descriu lefecte duna operaci en base a
canvis destat de la base dinformaci
sortides que el sistema proporciona
Els contractes garanteixen la fiabilitat del software mitjanant:
precondicions: condicions que estan garantides quan es crida loperaci
postcondicions: condicions que loperaci ha de garantir
Tota operaci t un contracte
Sistema
alta-persona (dni: String, nom: String): Boolean
alta-idioma (nom: String) Boolean
parla-idioma (dni: String, nom-i: String): Boolean
Per cada operaci
es defineix
un contracte
54 54
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 13
Contractes: exemple
Operaci: parla-idioma (dni: String, nom-id: String)
Classe retorn: Boole
Semntica: Enregistrar que la persona dni parla lidioma nom-id
Precondicions: Els parmetres tenen valor
Postcondicions:
1. Si la persona amb dni no existeix, o lidioma nom-id no existeix o la persona
ja parla aquest idioma, aleshores operaci invlida i es retorna fals.
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 - Es crea una nova instncia de lassociaci Parla entre la Persona i
lIdioma.
Persona
dni: String
nom: String
Idioma
nom: String
Parla 1..*
*
R.I. textuals:
- Claus de les classes no associatives: (Persona, dni); (Idioma,nom)
Conceptes dUML per al disseny 14
Generalitzaci / Especialitzaci
Generalitzaci:
relaci taxonmica entre una classe ms general (superclasse) i una altra
ms especfica (subclasse)
la superclasse descriu les caracterstiques comunes a totes les subclasses
cada subclasse descriu un conjunt especfic de caracterstiques
Pagament
quantitat: Integer
Pagament
en metl.lic
Pagament
a crdit
codiTarja: String
Pagament
amb tal
nmTal: Integer
forma_pagament {disjoint,complete}
G
E
discriminador
restricci
classe abstracta
Classe abstracta:
classe que no pot ser instanciada directament (no t objectes propis).
55 55
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 15
Herncia
superclasse
subclasses
subclasses,
superclasse
Herncia:
en una generalitzaci, les subclasses incorporen (hereten) lestructura i el
comportament definits a la superclasse.
Professor
plus-lloc: Integer
plus?(): Integer
Prof. Titular
antiguitat: Integer
contractar()
Prof. Associat
perodeCont: Integer
renovar(n:Integer)
Administratiu
nm-h-extres: Integer
def-h-ext(Integer)
{disjoint, incomplete} contracte
{disjoint, complete} tipus
EmpleatUniversitari
nom: String
sou: Integer
nom?(): String
assigSou(Integer)
Conceptes dUML per al disseny 16
Polimorfisme
Professor
plus-lloc: Integer
pagarSou(): Integer
Prof. Titular
antiguitat: Integer
pagarSou(): Integer
Prof. Associat
perodeCont: Integer
renovar(n:Integer)
Administratiu
nm-h-extres: Integer
pagarSou(): Integer
Operaci polimrfica:
operaci que saplica a diverses classes duna jerarquia tal que la seva
semntica depn de la subclasse concreta on saplica
{disjoint, incomplete} contracte
{disjoint, complete} tipus
EmpleatUniversitari
nom: String
sou: Integer
nom?(): String
pagarSou():Integer
operaci abstracta: no t mtode
associat a la classe on est declarada
operaci concreta: t mtode
associat a la mateixa classe
loperaci es defineix de forma
diferent => mtode diferent
56 56
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 17
Herncia mltiple
Una classe pot ser subclasse directa dun nombre arbritari de superclasses
Una classe pot heretar atributs i operacions de diverses classes.
Es produeix un conflicte si una mateixa caracterstica apareix a diverses
superclasses.
. . .
. . .
Docent
assignatura: String
escola: String
donarClasse()
corregir()
Investigador
categoria: String
escola: String
publicar(a: article)
donarClasse()
Professor-Universitat
Conceptes dUML per al disseny 18
Diagrames dinteracci
Objectiu: Mostrar les interaccions entre objectes:
Quan es produeix un esdeveniment extern.
Quan sinvoca una operaci dun objecte.
En un cas ds.
Etc.
Dos tipus de diagrama dinteracci (semnticament equivalents):
Diagrames de seqncia.
Diagrames de col.laboraci.
57 57
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 19
Diagrames de seqncia
Notaci:
:Client instncia (objecte)
Client classe dobjectes
invocaci de loperaci op3
amb retorn de control
c:Client instncia amb nom
op3(c,d)
:Client p:Producte
:Transacci
op1(a,b)
resultat
op2(a,c)
op3(c,d)
Focus de control
Existncia dobjecte
temps
Destrucci d objecte
Creaci dobj ecte
op4(b)
Autoinvocaci doperaci
oper(a)
result
Conceptes dUML per al disseny 20
Invocaci doperacions en jerarquies (I)
Professor
plus-lloc: Integer
s-base-alt?():Boolean
pagarSou(): Integer
Administratiu
preu-h-extra: Integer
nm-h-extres: Integer
pagarSou(): Integer
{disjoint, complete}
tipus
EmpleatUniversitari
nom: String
sou-base: Integer
nom?(): String
sou-base?(): Integer
pagarSou():Integer
sou-base? (invocada a Professor)
:Professor
boolean
s-base-alt?
sou-base?
sou-b
s-base-alt? (a Professor)
:Professor
string
sou-base?
retorna cert si sou-b
ms alt que K
58 58
Els autors, 2001; Edicions UPC, 2001.
Conceptes dUML per al disseny 21
Invocaci doperacions en jerarquies (II)
pagarSou (invocada a EmpleatUniv.)
:EmpleatUniv
enter
pagarSou
:Professor
enter
pagarSou
sou-base?
retorna sou-b
+ plus-lloc
sou-b
:Administratiu
enter
pagarSou
retorna sou-b
+ (nm-h x preu-h)
Professor
plus-lloc: Integer
s-base-alt?():Boolean
pagarSou(): Integer
Administratiu
preu-h: Integer
nm-h: Integer
pagarSou(): Integer
{disjoint, complete} tipus
EmpleatUniversitari
nom: String
sou-base: Integer
nom?(): String
sou-base?(): Integer
pagarSou():Integer
Conceptes dUML per al disseny 22
Bibliografia
The Unified Modeling Language Reference Manual
J.Rumbaugh, I.Jacobson, G.Booch
Addison-Wesley 1999
Applying UML and Patterns
An Introduction to Object-Oriented Analysis and Design
C. Larman
Prentice-Hall 1998
Construccin de Software Orientado a Objetos
B.Meyer
Prentice-Hall, 2a Ed., 1998
The Unified Modeling Language User Gui de
G.Booch , J.Rumbaugh, I.Jacobson
Addison-Wesley 1999
59 59
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini 1
Disseny de la Capa de Domini
Especificaci dun exemple: gesti dun club de tennis
Normalitzaci de lesquema conceptual despecificaci
Aplicaci de patrons de disseny
Iterador
Controlador
Expert
Creador
Estat
Plantilla
Exemple de disseny de la Capa de Domini
De moment, prescindirem del que
fan la capa de Presentaci i la
capa de Gesti de Dades
Suposem que tot ho fa
la Capa de Domini
61 61
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Especificaci dun exemple 1
Especificaci dun exemple: gesti dun club de tennis
Especificaci dun exemple: gesti dun club de tennis
Model de Casos ds
Esquema Conceptual
Diagrames de seqncia del sistema
Contractes de les operacions del sistema
Disseny de la Capa de Domini: Especificaci dun exemple 2
Diagrama Casos ds: context del sistema
Gesti pistes
Afegir pistes
Preveure manteniment
Obtenir ocupaci pistes
s pista
Administraci
Admetre soci
Canvi compte corrent
Alta familiar
Baixa soci
Baixa familiar
Reserves
Fer reserva
Anul.lar reserva
Consultar reserves
Veure reserves no usades
Facturaci
Fer rebuts
Pagar rebuts
Fer crrecs de reserves
Carregar servei a soci
Total deute
Obtenir rebuts no pagats
Canviar parmetres club
Administrador
Facturaci
Persona
Encarregat
pistes
63 63
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Especificaci dun exemple 3
Diagrama de Casos ds: package Administraci
Administraci
Administrador
Admetre soci
Canvi compte corrent
Alta Familiar
Baixa familiar
Baixa Soci
Soci
Familiar
Disseny de la Capa de Domini: Especificaci dun exemple 4
Descripci casos ds: Admetre soci
Cas ds: Admetre soci
Actors: Soci (iniciador), Administrador
Propsit: Donar dalta un nou soci i alguns familiars seus
Curs tpic desdeveniments
Accions dels Actors
1. El cas ds comena quan una persona
es vol donar dalta com a soci.
2. Ladministrador indica el dni, el nom,
ladrea, le-mail i el nmero de compte
corrent de la persona
4. Per cada familiar, ladministrador
introdueix les seves dades (dni, nom,
adrea i e-mail)
Resposta del sistema
3. Comprova que les dades sn correctes,
dna dalta el soci i enregistra que paga
per aquell nmero de compte corrent
4. Comprova que les dades sn correctes,
dna dalta el familiar i enregistra que
s familiar daquell soci
64 64
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Especificaci dun exemple 5
Esquema conceptual despecificaci (I)
Pista
nm: Integer
Rebut
mesEmissi: Mes
pagat: Bool = false
/import: Import
Club
ltNmSoci: Integer=0
preuHoraPista: Import
preuNos:Import
preuAnul.laci: Import
CompteCorrent
nm-cc: Integer
saldo: Import=0
Familiar
Reserva
dataReserva: Data
Persona
dni: String
nom: String
adrea: String
e-mail [0..1] : String
Interval
data: Data
inici: Hora
Soci
nmSoci: Integer
/deute:Import
Crrec
data: Data
import: Import
desc.: String
Es-reserva
reservant
0..1
*
Es-mant-en
*
*
*
*
*
*
1
1 1
1
{disjoint, complete}
0..1
0..1
*
/Correspon
Prevista
Usada
NoUsada
AnMant
data: Data
AnClient
data: Data
Amb
tipus
T
Del
*
A 1
estat
{disjoint, complete}
s-pagada
1
Disseny de la Capa de Domini: Especificaci dun exemple 6
Esquema conceptual despecificaci (II)
Supsit:
Tots els intervals tenen una durada duna hora
Restriccions dintegritat textuals:
Claus classes no associatives: (Pista, nm); (Interval, data + inici); (Persona,
dni); (CompteCorrent, nm-cc).
No hi poden haver dos socis amb el mateix nmSoci
Tots els crrecs dun rebut tenen una data dins de mesEmissi
Tots els crrecs dun mateix rebut sn del mateix soci
No hi pot haver ms dun rebut amb els mateixos nmSoci i mesEmissi
Informaci derivada:
El deute dun soci s la suma dels imports dels seus rebuts no pagats
Limport dun rebut s la suma dels imports dels crrecs de que es composa
Lassociaci correspon entre Soci i Rebut relaciona un soci amb els seus rebuts.
65 65
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Especificaci dun exemple 7
Diagrama de seqncia del sistema: Admetre soci
:Sistema
:Administrador
altaSoci (dni, nom, adrea, e-mail, nm-cc, out nmSoci)
: Boolean
altaFamiliar(nmSoci, dni, nom, adrea, e-mail)
: Boolean
*
Disseny de la Capa de Domini: Especificaci dun exemple 8
Contractes de les operacions del sistema
Operaci: altaSoci (dni: String, nom: String, adrea: String, e-mail: String, nm-cc:
Integer, out nmSoci: Integer)
Classe retorn: Boolean
Semntica: Donar dalta un nou soci i assignar-li el compte corrent.
Precondicions: Els parmetres tenen valor, excepte e-mail que pot ser nul.
Postcondicions: 1. Si no existeix un compte corrent amb nm-cc, aleshores operaci invlida i
es retorna fals.
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 - Es crea un objecte de la classe Soci (i de la classe persona)
2.2 - L'atribut numSoci s igual a l'atribut ltNmSoci+1 de club
2.3 - L'atribut ltNumSoci de club s'incrementa en una unitat
2.4 - Es crea una nova ocurrncia de lassociaci Del entre Soci i CompteCorrent
Operaci: altaFamiliar (nmSoci: Integer; dni: String, nom: String, adrea: String, e-mail: String)
Classe retorn: Boolean
Semntica: Donar dalta un familiar dun soci.
Precondicions: Els parmetres tenen valor, excepte e-mail que pot ser nul.
Postcondicions: 1. Si no existeix un Soci amb nmSoci, aleshores operaci invlida i es retorna fals.
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 - Es crea un objecte de Familiar (i de Persona)
2.2 - Es crea una ocurrncia de lassociaci entre el familiar i el soci amb nmSoci
66 66
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Especificaci dun exemple 9
Bibliografia
Enginyeri a del software: Especificaci
D.Costal, M.R.Sancho, E.Teniente
Edicions UPC, 1999
67 67
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Normalitzaci 1
Normalitzaci de lesquema conceptual
Motivaci
Normalitzaci de lesquema conceptual
Tractament dassociacions n-ries i classes associatives
Tractament de la informaci derivada
Tractament de les restriccions dintegritat
Bibliografia
Disseny de la Capa de Domini: Normalitzaci 2
Motivaci
Al disseny hi tenim components software i no conceptes del domini
Limitaci tecnologia orientada a objectes: no permet implementar
directament tots els conceptes que hem usat a lespecificaci:
associacions n-ries, amb n > 2.
classes associatives
informaci derivada
control de les restriccions dintegritat
cal una transformaci prvia: procs de normalitzaci (binaritzaci)
- eliminar n-ries i associatives
- tractar la informaci derivada
- controlar les restriccions dintegritat
que impacta tant al diagrama de classes com als contractes.
69 69
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Normalitzaci 3
Eliminaci dassociacions n-ries i classes associatives
Reserva
dataReserva: Data
Persona
dni: String
nom: String
adrea: String
e-mail [0..1] : String
Interval
data: Data
inici: Hora
Es-reserva
reservant
0..1
*
Es-mant-en
*
*
*
Restriccions dintegritat textuals:
claus classes no associatives: (Pista, nm); (Interval, data + inici); (Persona, dni)
Esquema conceptual:
Pista
nm: Integer
Disseny de la Capa de Domini: Normalitzaci 4
Normalitzaci: pas a associacions binries
Pista
nm: Integer
Persona
dni: String
nom: String
adrea: String
e-mail [0..1] : String
Interval
data: Data
inici: Hora
1
*
Es-mant-en
1
1
*
Restriccions dintegritat textuals:
claus classes no associatives: (Pista, nm); (Interval, data + inici); (Persona, dni)
(Afegida) No hi pot haver dues reserves amb els mateixos Pista, Interval i Persona
(Afegida) Donats una pista i un interval, com a mxim els pot tenir reservats una Persona
Diagrama de classes normalitzat:
el resultat obti ngut ha de tenir la
mateixa semntica que l esquema
conceptual de parti da
*
*
*
Reserva
dataReserva: Data
selimina perqu est inclosa a la tercera restricci textual
reservant
En
La
Per
70 70
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Normalitzaci 5
Tractament de la informaci derivada
Els atributs i les associacions derivats es poden:
Calcular quan es necessiten.
Materi ali tzar
Si es calcula:
Desapareix (explcitament) la informaci derivada que es decideix calcular
Apareixen noves operacions per obtenir la informaci derivada que es
calcula
Si es materialitza:
Cal modificar els contractes de les operacions que provoquen canvis al
valor de la informaci que es materialitza
Selimina del diagrama de classes la indicaci que la informaci s derivada
En la decisi hi influeix el temps de clcul, la freqncia daccs i lespai
ocupat.
Disseny de la Capa de Domini: Normalitzaci 6
Tractament de la informaci derivada: exemple
Rebut
mes: Mes
pagat: Bool = fals
/import: Import
Soci
nm: Integer
/deute: Import
Crrec
data: Data
import: Import
desc.: String
*
*
1
1
/Correspon
T
*
A
0..1
Cal decidir si calculem o materialitzem la
informaci derivada.
Decidim:
- calcular l atribut deute de Soci
- materialitzar import de Rebut
- materialitzar lassociaci Correspon
Esquema conceptual:
71 71
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Normalitzaci 7
Tractament de la informaci derivada: resultat
Dna la suma dels imports
dels rebuts no pagats
Associaci
materialitzada
Atribut
materialitzat
Cal modificar tamb els contractes
de les operacions:
- Fer rebuts
- Pagar rebuts
perqu modifiquin el valor de:
- import de Rebut
- associaci Correspon
Diagrama de classes resultant:
Rebut
mes: Mes
pagat: Bool = fals
import: Import
Soci
nm: Integer
deute?(): Import
Crrec
data: Data
import: Import
desc.: String
*
*
1
1
Correspon
T
*
A
0..1
Disseny de la Capa de Domini: Normalitzaci 8
Control de les restriccions dintegritat
Els models despecificaci sn no redundants entre ells
Quan dissenyem, cal garantir que el sistema software resultant
satisfaci les restriccions dintegritat (grfiques i textuals) de
lesquema conceptual.
cal modificar els contractes de les operacions perqu
controlin totes les restriccions dintegritat
com a conseqncia, les restriccions dintegritat
desapareixen de lesquema conceptual
En general, la capa de presentaci i la de gesti de dades tamb controlaran
algunes restriccions dintegritat
Per tant, aquest control no es far nicament des de la capa de domini
72 72
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Normalitzaci 9
Control de les restriccions dintegritat: exemple
*
Empleat
codi: Integer
nom: String
data-ingrs: Date
Departament
nom: String
adrea: String
* 0..3 Sassigna
R.I. Textuals:
- Claus: (Empleat, codi); (Departament, nom)
- Data-ini dassignaci data-ingrs
- Un empleat no pot estar assignat alhora als departaments
de Vendes i de Control-Vendes
Assignaci
data-ini: Date
Operaci: novaAssig (codi: Enter, nom-d: String, data: Data)
Classe retorn: Boole
Semntica: Assignar un empleat a un departament
Precondicions: Els parmetres tenen valor
Postcondicions: 1. Si no existeix lempleat, o no existeix el departament o lempleat ja est
assignat al departament aleshores operaci invlida i es retorna fals.
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 - Es dna dalta lassociaci entre lempleat i el departament.
Esquema conceptual:
Disseny de la Capa de Domini: Normalitzaci 10
Control de les rest. dintegritat: normalitzaci de lexemple
*
Empleat
codi: Integer
nom: String
data-ingrs: Date
Departament
nom: String
adrea: String
1 0..3 T
R.I. Textuals:
- Claus: (Empleat, codi); (Departament, nom)
- Data-ini dassignaci data-ingrs
- Un empleat no pot estar assignat alhora als departaments de Vendes i de Control-Vendes
- (Afegida) No hi pot haver dues assignacions amb els mateixos Empleat i Departament
Assignaci
data-ini: Date
Diagrama de classes normalitzat:
1 * Al
73 73
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Normalitzaci 11
Control de les restriccions dintegritat: resultat
*
Operaci: novaAssig (codi: Enter, nom-d: String, data: Data)
Classe retorn: Boole
Semntica: Assignar un empleat a un departament
Precondicions: Els parmetres tenen valor
Postcondicions: 1. Si no existeix lempleat, o no existeix el departament o lempleat ja est
assignat al departament aleshores operaci invlida i es retorna fals.
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 - Es dna dalta lassociaci entre lempleat i el departament.
Operaci: novaAssig (codi: Enter, nom-d: String, data: Data)
Classe retorn: Boole
Semntica: Assignar un empleat a un departament
Precondicions: Els parmetres tenen valor
Postcondicions: 1. Si no existeix lempleat, o no existeix el departament o lempleat ja est
assignat al departament, o data < data-ingrs, o l empleat ja est assignat a
tres departaments o lempleat estaria assignat a Vendes i a Control-Vendes,
aleshores operaci invlida i es retorna fals. (Modificada)
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 - Es crea un nou objecte Assignaci amb les corresponents associacions
amb Empleat i Departament. (Modificada)
Operaci normalitzada:
Disseny de la Capa de Domini: Normalitzaci 12
Bibliografia
The Unified Modeling Language User Gui de
G.Booch; J.Rumbaugh; I.Jacobson
Addison-Wesley, 1999.
Applying UML and Patterns.
An I ntroduction to Object-Oriented Analysis and Design
C.Larman
Prentice Hall, 1998.
74 74
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Iterador 1
Patr disseny Iterador
Descripci general.
Soluci: Estructura.
Exemple daplicaci en UML.
Iteradors en Java: Enumeration.
Exemple daplicaci en Java.
Diccionaris.
Exemple diteraci de diccionaris.
Bibliografia.
Disseny de la Capa de Domini: Patr de disseny Iterador 2
Descripci general
Context:
Necessitat de fer recorreguts seqencials dels elements dun objecte agregat
(col.lecci dobjectes).
Problema:
Es vol accedir als elements dun objecte agregat, sense exposar lestructura
interna.
Es vol poder tenir diverses travessies pendents del mateix objecte agregat.
Es vol poder travessar els elements dun objecte agregat de formes diferents.
No es vol inflar la classe de lobjecte agregat amb operacions per les
diverses travessies possibles.
Soluci:
Treure la responsabilitat de laccs i recorregut de lobjecte agregat i assignar
aquesta reponsabilitat a una nova classe dobjectes que anomenarem
Iterador.
LIterador proporcionar una interficie per accedir i recrrer els elements de
lobjecte agregat.
75 75
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Iterador 3
Soluci: Estructura
Cas dun nic recorregut per agregat
Disseny
Implementaci
Defineix una interfcie per
accedir i travessar els
elements dun agregat
Defineix una interfcie per
crear un objecte Iterador
Iterador
first()
next()
isDone() : Boolean
currentItem() : Object
IteradorLlista
IteradorVector
Llistes i Vectors
en Java
crearIterador(): Iterador
Agregat
crearIterador(): Iterador
Vector
crearIterador(): Iterador
LinkedList
Implementa la interfcie
definida a lIterador segons
el recorregut que es vulgui fer
Implementa la interfcie
de creaci de lIterador
que retorna una instncia
de lIterador concret
first()
next()
isDone():Boolean
currentItem():Object
first()
next()
isDone():Boolean
currentItem():Object
Disseny de la Capa de Domini: Patr de disseny Iterador 4
Exemple daplicaci en UML: Problema
Rebut
1
*
pagador
Soci
nmSoci:Integer
mesEmissi : Mes
import : Import
pagat : Boolean = False
rebuts
Correspon
Es vol dissenyar loperaci deute de Soci (suma dels imports dels seus rebuts no
pagats).
Aplicaci del patr Iterador
Diagrama de classes normalitzat:
deute():Import
R.I. Textuals
- No poden existir dos socis amb el mateix nmSoci.
- Un soci no pot tenir diversos rebuts amb el mateix mesEmissi.
76 76
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Iterador 5
Exemple daplicaci en UML: Soluci
Rebut
mesEmissi : Mes
import : Import
pagat : Boolean = False
pagat?() : Boolean
import?() : Import
*
1
Soci
nmSoci : Integer
deute() : Import
rebuts() : Iterador
pagador
rebuts
Correspon
objecte agregat
de soci
operaci de soci que
invoca a loperaci
crearIterador de
lobjecte agregat
rebuts
Diagrama de classes
acumula limport si el
rebut no sha pagat
:Soci
:Iterador
:Rebut
deute
Import
import?()
currentItem()
isDone()
first()
next()
pagat?()
rebuts()
*
Diagrama de seqncia
la definici daquesta navegabilitat
s conseqncia del disseny de
loperaci deute
Disseny de la Capa de Domini: Patr de disseny Iterador 6
Iteradors en Java: Enumeration
LinkedList
size : Integer
reset()
hasMoreElements(): Boolean
nextElement(): Object
currentElement(): Object
elements(): Enumeration
size():Integer
Object
Link
head
0..1
tail
0..1
pre
0..1
data
1
0..1
next
Enumeration
hasMoreElements(): Boolean
nextElement(): Object
ListEnumeration
hasMoreElements(): Boolean
nextElement(): Object
Defineix una interfcie per
accedir i travessar els
elements dun agregat
Implementa la interfcie
pel cas de les LinkedList
return new ListEnumeration(head)
77 77
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Iterador 7
Exemple daplicaci en Java
:Soci
:Enumeration
:Rebut
deute
Import
import?()
nextElement()
hasMoreElements()
pagat?()
rebuts()
*
Diagrama de seqncia usant Java
Class Soci
{...
LinkedList rebuts
...
}
Class Rebut
{...
...
}
Definici de classes en Java
Implementaci de
lassociaci Correspon
i la seva navegabilitat,
mitjanant atributs
Disseny de la Capa de Domini: Patr de disseny Iterador 8
Diccionaris

dicSocis:Diccionari
Exemples dinstncies:
diccionari()
get(key:Object): Object
put(key:Object, v:Object): Object
remove(key:Object): Object
elements(): Iterador
keys(): Iterador
size: Integer
Diccionari
La classe dobjectes Diccionari mant una col.lecci dobjectes que poden ser
accedits mitjanant una clau key.
La clau key per accedir als objectes dun diccionari ha de ser clau externa de
lobjecte al que es vol accedir.
mant tots els socis del Club. La
clau daquest diccionari podria ser
dni (clau de Persona) o numSoci
(ja que no existeixen dos socis amb
el mateix numSoci).
retorna nul si no hi ha cap
objecte amb aquesta key
si la clau ja existeix, subtitueix
lobjecte existent O per v, i
retorna O
retorna un objecte Iterador
que travessa les claus del
diccionari
retorna un objecte Iterador
que travessa els objectes del
diccionari
dicRebuts:Diccionari
mant tots els rebuts del Club. La
clau daquest diccionari seria
nmSoci+mesEmissi.
78 78
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Iterador 9
Diccionaris en Java: Hashtable
dicSocis:Hashtable
Exemple dinstncia:
Hashtable
size: Integer
hashtable()
get(Obj ect key) : Obj ect
put(Obj ect k, Obj ect v) : Obj ect
remove(Obj ect key) : Obj ect
elements() : Enumeration
keys() : Enumeration
retorna nul si no hi ha cap
objecte amb aquesta key
si la clau ja existeix, subtitueix
lobjecte existent O per v, i
retorna O
retorna un objecte Iterador
que travessa les claus del
diccionari
retorna un objecte Iterador
que travessa els objectes del
diccionari
dicRebuts:Diccionari
Disseny de la Capa de Domini: Patr de disseny Iterador 10
Exemple diteraci de diccionaris
Es vol calcular el deute que t el Club (suma dels deutes de tots els socis).
Diagrama de classes normalitzat:
Club
preuHoraPista: Import
preuNos: Import
ltNumSoci:Integer=0
preuAnul.laci: Import
1
Soci
numSoci:Integer
deute(): Import
R.I. Textuals
- No poden existir dos socis amb el mateix nmSoci.
79 79
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Iterador 11
Exemple diteraci de diccionaris
Soci
numSoci : Integer
deute() : Import
Diagrama de classes
Club
preuHoraPista: Import
preuNos: Import
darrerNumSoci:Integer=0
preuAnul.laci: Import
1
total_deute(): Import
Diagrama de seqncia
:Club
total_deute
dicSocis:Diccionari :Soci
:Iterador
elements()
deute()
currentItem()
isDone()
first()
next()
*
Import
la definici de loperaci
deute sha fet anteriorment.
Disseny de la Capa de Domini: Patr de disseny Iterador 12
Bibliografia
Design Patterns. Elements of Reusable Object-Oriented Software.
E. Gamma; R. Helm.; R. Johnson; J. Vlissides.
Addison-Wesley, 1995, pp. 257-271.
http://www.eli.sdsu.edu/courses/spring98/cs635/notes/iterator
80 80
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Controlador 1
Patr de disseny Controlador
Descripci general
Controlador Faana
faana-sistema
faana-empresa
Controlador Paper
Controlador Cas ds
Controlador Transacci
Relaci entre la Capa Presentaci i:
Controlador Transacci
Combinaci de controladors (Faana i Transacci)
Bibliografia
Disseny de la Capa de Domini: Patr de disseny Controlador 2
Descripci general
Context:
Els sistemes software reben esdeveniments externs
Un cop interceptat un esdeveniment a la Capa de Presentaci, algun
objecte de la Capa del Domini ha de rebre aquest esdeveniment i executar
les accions corresponents
Problema:
Quin objecte s el responsable de tractar un esdeveniment extern?
Soluci:
Assignar aquesta responsabilitat a un controlador
Un controlador s un objecte duna certa classe
Possibles controladors:
. Faana-Sistema: Un objecte que representa tot el sistema
. Faana-Empresa: Un objecte que representa tot el domini (empresa, etc.)
. Paper: Un objecte que representa un actor
. Cas ds: Un objecte que representa una instncia dun cas ds
. Transacci: Un objecte que representa una instncia desdeveniment extern
81 81
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Controlador 3
Controlador Faana: faana-sistema
Tots els esdeveniments externs sn processats per un sol objecte controlador faana
Controladors inflats si hi ha molts esdeveniments externs
Nhi ha de dos tipus depenent el significat que li donem:
- Controlador faana-sistema
- Controlador faana-empresa
altaSoci(dni:String, nom:String, adrea:String, e-mail:String, nm-cc:Integer, out nmSoci:Integer): Boolean
altaFamiliar(nmSoci:Integer, dni:String, nom:String, adrea:String, e-mail:String): Boolean
baixaSoci(nmSoci:Integer) : Boolean
baixaFamiliar(nmSoci:Integer, dni:String) : Boolean
canviCompteCorrent(nmSoci:Integer, nm-cc:Integer): Boolean
....
SistemaGestiClub 1
Faana-sistema: Un objecte que representa tot el sistema software (SistemaGestiClub)
Disseny de la Capa de Domini: Patr de disseny Controlador 4
Controlador Faana: faana-empresa
Faana-empresa: Un objecte que representa tot el domini del problema (Club)
ltNmSoci?(): Integer
incrementar-ltNmSoci()
altaSoci(dni:String, nom:String, adrea:String, e-mail:String, nm-cc:Integer, out nmSoci:Integer): Boolean
baixaSoci(nmSoci:Integer) : Boolean
altaFamiliar(nmSoci:Integer, dni:String, nom:String, adrea:String, e-mail:String): Boolean
baixaFamiliar(nmSoci:Integer, dni:String) : Boolean
canviCompteCorrent(nmSoci:Integer, nm-cc:Integer): Boolean
....
Club 1
ltNumsoci: Integer=0
preuNos: Import
preuHoraPista: Import
preuAnullaci: Import
En aquest exemple hem aprofitat lobjecte Club del model conceptual i li hem afegit la
responsabilitat de ser el controlador.
82 82
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Controlador 5
Controlador Paper
Controlador idoni si es volen controlar les accions realitzades per lactor
Problema si un mateix esdeveniment extern pot ser generat per diversos actors
Hi haur un controlador per cada actor
Controlador Paper: Un objecte que representa un actor dels diagrames de casos ds
Administrador
altaSoci(dni:String, nom:String, adrea:String, e-mail:String, nm-cc:Integer, out nmSoci:Integer): Boolean
baixaSoci(nmSoci:Integer) : Boolean
canviCompteCorrent(nmSoci:Integer, nm-cc:Integer): Boolean
altaFamiliar(nmSoci:Integer, dni:String, nom:String, adrea:String, e-mail:String): Boolean
baixaFamiliar(nmSoci:Integer, dni:String) : Boolean
Disseny de la Capa de Domini: Patr de disseny Controlador 6
Controlador Cas ds
Pot tenir atributs definits per controlar lestat del cas ds
Problema si un mateix esdeveniment extern apareix en diversos casos ds
Hi haur tants controladors com casos ds tingui el sistema
Admetre Soci
altaSoci(dni:String, nom:String, adrea:String, e-mail:String, nm-cc:Integer, out nmSoci:Integer): Boolean
altaFamiliar(nmSoci:Integer, dni:String, nom:String, adrea:String, e-mail:String): Boolean
Controlador Cas ds: Un objecte que representa un cas ds
:Sistema
:Administrador
altaSoci (dni, nom, adrea, e-mail, nm-cc, out nm-soci): Boolean
altaFamiliar(nm-soci, dni, nom, adrea, e-mail): Boolean
*
Cas ds Admetre Soci
83 83
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Controlador 7
Controlador Transacci: Definici
Basat en el patr de disseny Command
Es crea un objecte transacci a cada ocurrncia dun esdeveniment extern
Els parmetres i el retorn de loperaci de sistema associada a lesdeveniment
extern es corresponen als atributs de la transacci
Lexecuci de la transacci es realitza amb la invocaci de loperaci executar(), i
es defineixen operacions especfiques per a consultar els resultats de lexecuci
de la transacci
Sacostuma a destruir lobjecte transacci un cop recuperat el resultat
Operaci de sistema:
altaSoci(dni:String, nom:String, adrea:String, e-mail:String,
nm-cc:Integer, out nmSoci:Integer): Boolean
Sencarrega d efectuar les accions corresponents a la transacci
AltaSoci
dni: String
nom: String
adrea: String
e-mail[0..1]: String
nm-cc: Integer
nmSoci: Integer
resultat: Boolean
nmSoci?(): Integer
resultat():Boolean
executar()
Sencarreguen d obtenir el resultat de la transacci
Resultats de la transacci
Parmetres dentrada la transacci
Disseny de la Capa de Domini: Patr de disseny Controlador 8
Estructura de les classes Transacci
Transacci
executar()
AltaSoci
dni: String
nom: String
adrea: String
e-mail[0..1]: String
nmSoci: Integer
nm-cc: Integer
resultat: Boolean
nmSoci?(): Integer
resultat():Boolean
executar()
CanviCompteCorrent
nmSoci: Integer
nm-cc: Integer
resultat: Boolean
resultat():Boolean
executar()
FerRebuts
mesEmissi: Mes
executar()
TotalDeute
deute: Import
executar()
deute():Import
AltaFamiliar
nmSoci: Integer
dni: String
nom: String
adrea: String
e-mail[0..1]: String
resultat: Boolean
resultat():Boolean
executar()
operaci abstracta
Classe abstracta
84 84
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Controlador 9
Relaci entre la Capa
Presentaci i el controlador
Transacci
:Control-Interfcie
:AltaSoci
onEndavant
executar()
Capa presentaci Capa domini
resultat()
nmSoci()
nom
adrea
e-mail
endavant plega
Alta de soci
dni
nmSoci
nm-cc
. . .
Es dona dalta
un soci
Mostra el nmSoci
per pantalla
Obt el nmSoci
Disseny de la Capa de Domini: Patr de disseny Controlador 10
onEndavant
Capa presentaci Capa domini
:Club
altaSoci(...)
:AltaSoci
executar()
resultat()
nmSoci?()
:Control-Interfcie
nom
adrea
e-mail
endavant plega
Alta de soci
dni
nmSoci
nm-cc
Relaci entre la Capa
Presentaci i la combinaci de
controladors (Faana i
Transacci)
. . .
Es dona dalta
un soci
Mostra el nmSoci
per pantalla
Obt el nmSoci
85 85
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Controlador 11
Bibliografia
Applying UML and Patterns
An I ntroduction to Object-Oriented Analysis and Design
C. Larman
Prentice Hall, 1998. Cap. 18.13.
Design Patterns. Elements of Reusable Object-Oriented Software
E. Gamma, R. Helm, R. Johnson, J. Vlissides
Addison-Wesley, 1995, pp. 233-242.
86 86
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 1
Assignaci de responsabilitats a objectes
Responsabilitats dels objectes
Criteris per a lassignaci de responsabilitats:
Acoblament baix
Cohesi alta
Patrons dassignaci de responsabilitats:
(Controlador)
Expert
Creador
Bibliografia
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 2
Responsabilitats dels objectes
Lassignaci de responsabilitats a objectes consisteix a determinar (assignar)
quines sn les obligacions (responsabilitats) concretes dels objectes del diagrama
de classes per donar resposta als esdeveniments externs.
Les responsabilitats dun objecte consisteixen en:
Saber:
. Sobre els atributs de lobjecte
. Sobre els objectes associats
. Sobre dades que es poden derivar
Fer:
. Fer quelcom en el propi objecte
. Iniciar una acci en altres objectes
. Controlar i coordinar activitats en altres objectes
Lassignaci de responsabilitats a objectes es fa durant el disseny, al definir i
localitzar les operacions de cada classe dobjectes.
87 87
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 3
Acoblament
Hi ha un acoblament de la classe A a la classe B si:
A t un atribut de tipus B
A t una associaci navegable amb B
B s un parmetre o el retorn duna operaci de A
Una operaci de A referncia un objecte de B
A s una subclasse directa o indirecta de B
Lacoblament entre classes ha de ser baix per tal de:
Evitar que canvis en una classe tinguin efecte sobre altres classes
Facilitar la comprensi de les classes (sense recrrer a altres)
Facilitar la reutilitzaci
Acoblament duna classe s una mesura del grau de connexi,
coneixement i dependncia daquesta classe respecte daltres classes.
B
A
atribut : B
operac(b : B) : B
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 4
Anlisi dacoblament: Exemple
Diagrama de classes normalitzat
* 1
Persona
dni: String
nom: String
adrea: String
e-mail [0..1]: String
Familiar
Soci
nmSoci: Integer
deute(): Import
Amb
{disjoint, complete}
tipus
Restriccions dintegritat:
Claus de classes no associatives (Persona, dni)
No hi poden haver dos socis amb el mateix nmSoci
Suposicions:
Lassociaci Amb t navegabilitat doble
88 88
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 5
Anlisi dacoblament: Exemple
Contracte altaFamiliar normalitzat i controlador
Operaci: altaFamiliar (nmSoci: Integer, dni:String, nom:String, adrea:String, e-mail:String)
Classe Retorn: Boolean
Semntica: Donar dalta un familiar dun soci.
Precondicions: Els parmetres tenen valor, excepte e-mail que pot ser nul.
Postcondicions:1. En el casos segents, operaci invlida i es retorna fals:
1.1 No existeix un soci amb nmSoci
1.2 Ja existeix una Persona amb aquest dni (Afegida)
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 Es crea un objecte de Familiar (i de Persona)
2.2 Es crea una ocurrncia de lassociaci Amb entre
Familiar i el soci amb nmSoci
Alta_familiar
nmSoci: Integer
dni: String
nom: String
adrea: String
e-mail [0..1]: String
resultat: Boolean
executar()
resultat():Boolean
Transacci
executar()
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 6
Anlisi dacoblament: Exemple
Diagrama de seqncia (I)
La classe AltaFamiliar est acoblada a dicSocis, dicPersones, Soci i Familiar
La classe Soci est acoblada a Familiar i, aquesta a Soci
:AltaFamiliar
f:Familiar
s:Soci
dicPersones: Diccionari
executar
get(dni)
afegirFamiliar
afegirFamiliar(f:Famil iar)
dicSocis: Diccionari
get(nmSoci)
Es crea familiar (i persona) i
sinicialitzen els seus atributs
Sassocia el familiar f al soci
Comprova que no existeix
cap persona amb dni
Comprova existncia dun
soci s amb nmSoci
creassocAmb(s)
Sassocia el soci s al familiar
89 89
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 7
Anlisi dacoblament: Exemple
Diagrama de seqncia (II)
La classe AltaFamiliar est acoblada a dicSocis i Soci
La classe Soci est acoblada a dicPersones i Familiar.
La classe Familiar est acoblada a Soci.
:AltaFamiliar
f:Familiar
s:Soci
dicPersones: Diccionari
executar
get(dni)
afegirFamiliar
afegirFamiliar(dni:String, nom:String, adrea:String, e-mail:String):Boolean
dicSocis: Diccionari
get(nmSoci)
Comprova que no
existeix cap persona
amb dni
Es crea familiar (i persona) i
sinicialitzen els seus atributs
Sassocia el familiar f al soci
Comprova lexistncia del
soci s amb nmSoci
creassocAmb(s)
Sassocia el soci s al familiar
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 8
Anlisi dacoblament: Exemple
Diagrama de classes de disseny
Alta_familiar
nmSoci: Integer
dni: String
nom: String
adrea: String
e-mail [0..1]: String
resultat: Boolean
executar()
resultat():Boolean
Transacci
executar()
*
1
Persona
dni: String
nom: String
adrea: String
e-mail [0..1]: String
Familiar
Soci
nmSoci: Integer
deute(): Integer
afegirFamiliar(dni:String, nom:String,
adrea:String, e-mail:String):Boolean
Amb
{disjoint, complete}
tipus
90 90
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 9
Cohesi
Cohesi duna classe s una mesura del grau de relaci i de concentraci de les
diverses responsabilitats duna classe.
Una classe amb cohesi alta:
T poques responsabilitats en una rea funcional
Col.labora (delega) amb daltres classes per a fer les tasques
Acostuma a tenir poques operacions
Aquestes operacions estan molt relacionades funcionalment
Avantatges:
Fcil comprensi
Fcil reutilitzaci i manteniment
Una classe amb cohesi baixa:
s lnica responsable de moltes coses i de diverses rees funcionals
T moltes operacions i/o operacions poc relacionades funcionalment
Inconvenients:
s difcil de comprendre
s difcil de reutilitzar i de mantenir
s molt sensible als canvis
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 10
Cohesi: exemple
Els controladors faana acostumen a ser poc cohesius
ltNmSoci?(): Integer
incrementar-ltNmSoci()
altaSoci(dni:String, nom:String, adrea:String, e-mail:String, nm-cc:Integer, out nmSoci:Integer): Boolean
baixaSoci(nmSoci:Integer) : Boolean
altaFamiliar(nmSoci:Integer, dni:String, nom:String, adrea:String, e-mail:String): Boolean
baixaFamiliar(nmSoci:Integer, dni:String) : Boolean
canviCompteCorrent(nmSoci:Integer, nm-cc:Integer): Boolean
....
Club 1
ltNumsoci: Integer=0
preuNos: Import
preuHoraPista: Import
preuAnullaci: Import
91 91
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 11
Patr Expert
Context:
Assignaci de responsabilitats a objectes
Problema:
Decidir a quina classe hem dassignar una responsabilitat concreta
Soluci:
Assignar una responsabilitat a la classe que t la informaci necessria per
realitzar-la
Laplicaci del patr requereix tenir clarament definides les responsabilitats
que es volen assignar (postcondicions de les operacions)
No sempre existeix un nic expert, sin que poden existir diversos experts
parcials que hauran de collaborar.
Beneficis:
Es mant lencapsulament baix acoblament
Conducta distribuda entre les classes que tenen la informaci
alta cohesi
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 12
Patr Expert: Exemple
Diagrama de classes inicial (normalitzat)
Suposici:
Totes les associacions tenen navegabilitat doble
* 1
Persona
dni: String
nom: String
adrea: String
e-mail [0..1]: String
Familiar
Soci
numSoci: Integer
deute(): Integer
Amb
Reserva
datReserva: Data
*
1
reservant
Pista
nm: Integer
Interval
data: Data
inici: Hora
* *
1
1
Baixa_familiar
numsoci: Integer
dni: String
resultat: Boolean
executar()
resultat():Boolean
Transacci
executar()
Per
La
En
92 92
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 13
Patr Expert: Exemple
Cas ds Baixa Familiar
Operaci: baixaFamiliar (nmSoci:Integer, dni:String)
Classe Retorn: Boolean
Semntica: Un soci vol donar de baixa un dels seus familiars.
Precondicions: Els parmetres tenen valor.
Postcondicions:1. En el casos segents, operaci invlida i es retorna fals:
1.1 No existeix un Familiar amb el dni especificat
1.2 No existeix un soci amb el nmSoci especificat
1.3 La persona amb dni no s familiar del soci amb nmSoci
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 Es dna de baixa lobjecte de Familiar (i de Persona)
2.2 Seliminen les Reserves realitzades pel Familiar
:Sistema
:Soci
baixaFamiliar(nmSoci, dni): Boolean
Cas ds Baixa Familiar
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 14
Patr Expert: Exemple
Contracte operaci baixaFamiliar normalitzat
Operaci: baixaFamiliar (nmSoci:Integer, dni:String)
Classe Retorn: Boolean
Semntica: Donar de baixa un familiar dun soci.
Precondicions: Els parmetres tenen valor.
Postcondicions:
1. En el casos segents, operaci invlida i es retorna fals:
1.1 No existeix un Familiar amb el dni especificat (dicPersones i Persona)
1.2 No existeix un soci amb el nmSoci especificat (dicSocis)
1.3 La persona amb dni no s familiar del soci amb nmSoci (Soci, Familiar)
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 Es dna de baixa lobjecte de Familiar (i de Persona) (Familiar)
2.2 Seliminen les Reserves realitzades pel Familiar (Persona)
Experts
93 93
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 15
Patr Expert: Exemple
Diagrama de seqncia baixaFamiliar (I)
:BaixaFamiliar
executar()
dicPersones: Diccionari
get(dni)
p:Persona
familiar-de(nmSoci)
Comprova
existncia de
persona p amb dni
p:Familiar
eliminarReserves()
baixa()
:Soci
elimassocAmb(p)
Elimina p com a Familiar i
com a Persona, i les
seves associacions
Comprova que la persona
p s familiar del Soci amb
nmSoci
Operaci heretada
de Persona
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 16
Patr Expert: Exemple
Diagrama de seqncia baixaFamiliar (II)
familiar-de(nmSoci)
compara si nmSoci
coincideix
:Familiar
:Soci
nmSoci?()
Boolean
familiar-de(nmSoci)
:Soci
fals
:Reserva
first()
:Iterador
isDone()
currentItem()
eliminar()
next()
*
p:Persona
reserves()
eliminarReserves()
operaci
pendent de
definir
94 94
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 17
Patr Expert: Exemple
Diagrama de classes de disseny
*
1
Soci
numSoci: Integer
deute(): Integer
nmSoci?(): Integer
familiar-de(nmSoci:Integer): Boolean
Amb
*
1
reservant
Pista
nm: Integer
Interval
data: Data
inici: Hora
*
*
1
1
Baixa_familiar
numsoci: Integer
dni: String
resultat: Boolean
executar()
resultat():Boolean
Transacci
executar()
Persona
dni: String
nom: String
adrea: String
e-mail [0..1]: String
familiar-de(nmSoci:Integer): Boolean
eliminarReserves()
reserves(): Iterador
Familiar
familiar-de(nmSoci:Integer): Boolean
baixa()
Reserva
datReserva: Data
eliminar()
tipus {disjoint, complete}
La
En
Per
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 18
Patr Creador
Context:
Assignaci de responsabilitats a objectes
Problema:
Qui ha de tenir la responsabilitat de crear una nova instncia duna classe.
Soluci:
Assignar a una classe B la responsabilitat de crear una instncia duna
classe A si se satisf una de les condicions segents:
. B s un agregat d objectes dA
. B cont objectes dA
. B enregistra instncies dobjectes dA
. B usa molt objectes dA
. B t les dades necessries per inicialitzar un objecte d A (B t els valors dels
parmetres del constructor dA)
Beneficis:
Acoblament baix
95 95
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 19
Patr Creador: Exemple
Diagrama de classes normalitzat i Controlador
AltaSoci
dni: String
nom: String
adrea: String
e-mail [0..1]: String
nm-cc: Integer
resultat: Boolean
nmSoci: Integer
executar()
resultat():Boolean
nmSoci?(): Integer
Transacci
executar()
* 1
Persona
dni: String
nom: String
adrea: String
e-mail [0..1]: String
Familiar
Soci
nmSoci: Integer
deute(): Integer
Amb
{disjoint, complete}
tipus
CompteCorrent
nm-cc: Integer
saldo: Integer
1
*
Del
Club
ltNumSoci: Integer=0
preuHoraPista: Import
preuNos: Import
preuAnullaci: Import
1
Restriccions dintegritat:
Claus de classes no associatives (Persona, dni), (CompteCorrent, nm-cc)
No hi poden haver dos socis amb el mateix nmSoci
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 20
Patr Creador: Exemple
Contracte operaci altaSoci normalitzat
Operaci: altaSoci (dni:String, nom:String, adrea:String, e-mail:String, nm-cc: Integer,
out nmSoci: Integer)
Classe Retorn: Boolean
Semntica: Donar dalta un soci i assignar-li el compte corrent.
Precondicions: Els parmetres tenen valor, excepte e-mail que pot ser nul.
Postcondicions:
1. En el casos segents, operaci invlida i es retorna fals:
1.1 No existeix un compte corrent amb nm-cc
1.2 Ja existeix un Soci amb aquest nmSoci (Afegida)
1.3 Ja existeix una Persona amb aquest dni (Afegida)
2. En cas contrari, operaci vlida, es retorna cert i:
2.1 Es crea un objecte de la classe Soci (i de la classe Persona)
2.2 Latribut nmSoci s igual a latribut ltNumSoci+1 de Club
2.3 Latribut ltNumSoci de Club sincrementa en una unitat
2.4 Es crea una ocurrncia de lassociaci Del entre Soci i CompteCorrent
96 96
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 21
Patr Creador: Exemple
Diagrama seqncia AltaSoci --- Cas 1
AltaSoci t totes les dades necessries per inicialitzar Soci, excepte nmSoci
Alta Soci acoblat amb els tres diccionaris, Club i Soci. Soci acoblat amb CompteCorrent
:AltaSoci
s:Soci
:Club
dicPersones: Diccionari
executar
get(dni)
assigCompte(cc)
dicSocis: Diccionari
get(nmSoci)
Incrementa latribut ltnumSoci i
retorna el nou valor
Comprova que no existeix
cap persona amb dni
Comprova que no existeix
cap soci amb nmSoci
dicCompteCorrents: Diccionari
get(nm-cc)
Comprova que existeix un
compte corrent cc amb nm-cc
ltNumSoci()
put(dni,s)
put(nmSoci,s)
Afegim el nou soci
als diccionaris
Associem al soci el
compte corrent
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 22
Patr Creador: Exemple
Diagrama seqncia AltaSoci --- Cas 2
Club rep les dades necessries per inicialitzar Soci, excepte nmSoci.
Alta Soci acoblat amb Club. Club acoblat amb els tres diccionaris i Soci. Soci acoblat amb CompteCorrent
Disminueix la cohesi de Club (si no t altres responsabilitats relatives a Soci) i augmenta el seu acoblament.
:AltaSoci
s:Soci
:Club
dicPersones: Diccionari
executar
get(dni)
assigCompte(cc)
dicSocis: Diccionari
get(nmSoci)
Incrementa latribut
ltnumSoci
Comprova que no
existeix cap soci
amb nmSoci ni
cap Persona amb
dni
dicCompteCorrents: Diccionari
get(nm-cc)
Comprova que
existeix un
compte corrent
cc amb nm-cc
nouSoci
put(dni,s)
put(nmSoci,s)
Afegim el nou soci
als diccionaris
Associem al
soci el compte
corrent
Boolean
97 97
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 23
Patr Creador: Exemple
Diagrama de classes de disseny (Cas 2)
AltaSoci
dni: String
nom: String
adrea: String
e-mail [0..1]: String
nm-cc: Integer
resultat: Boolean
nmSoci: Integer
executar()
resultat():Boolean
nmSoci?(): Integer
Transacci
executar()
* 1
Persona
dni: String
nom: String
adrea: String
e-mail [0..1]: String
Familiar
Soci
nmSoci: Integer
deute(): Integer
assigCompte(cc:CompteCorrent)
Amb
{disjoint, complete}
tipus
CompteCorrent
nm-cc: Integer
saldo: Integer
1
*
Del
Club
ltNumSoci: Integer=0
preuHoraPista: Import
preuNos: Import
preuAnullaci: Import
1
nouSoci(dni:String, nom:String, adrea:String,
e-mail:String, nm-cc: Integer):Boolean
Disseny de la Capa de Domini: Assignaci de responsabilitats a objectes. 24
Bibliografia
Applying UML and Patterns
An I ntroduction to Object-Oriented Analysis and Design
Larman, C.
Prentice Hall, 1998. Caps. 18 i 19.
98 98
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 1
Patr de disseny Estat
Descripci general.
Soluci: Estructura.
Aspectes a considerar.
Exemple 1.
Conseqncies.
Exemple 2.
Bibliografia.
Disseny de la Capa de Domini: Patr de disseny Estat 2
Descripci general
Context:
En una jerarquia despecialitzaci, la semntica duna operaci s diferent a
les diverses subclasses per les que pot passar un objecte.
El comportament dun objecte depn del seu estat en temps dexecuci, que
s variable en el decurs del temps.
Problema:
La tecnologia actual no permet que un objecte canvi dinmicament de
subclasse.
Les estructures condicionals per tractar el comportament en funci de lestat
no sn desitjables ja que afegeixen complexitat i/o duplicaci de codi.
Soluci:
Crear una classe per cada estat que pugui tenir lobjecte context.
El canvi de subclasse se simula pel canvi de lassociaci amb la classe estat.
Basant-se en el polimorfisme, assignar mtodes a cada classe estat per
tractar la conducta de lobjecte context.
Quan lobjecte context rep un missatge que depn de lestat, el reenvia a
lobjecte estat.
99 99
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 3
Soluci: Estructura
Context
requesta()
Estat
tractament()
1
EstatConcret1
tractament()
EstatConcret2
tractament()
estat
estat tractament()
Altres aspectes a considerar en laplicaci del patr estat:
Compartici o no dels objectes estat concrets (multiplicitat associada al rol
del context).
On estan definides les transicions destat.
Moment de creaci i destrucci dels objectes estat.
Disseny de la Capa de Domini: Patr de disseny Estat 4
Aspectes a considerar: Compartici dobjectes estat
Estats no compartits:
Cada objecte context t el seu propi objecte estat, que inclou tota la
informaci rellevant daquell objecte en aquell estat.
Estats compartits:
Diversos objectes context poden usar els mateixos objectes estat, si els
objectes estat no tenen atributs/associacions.
Un objecte estat pot no tenir atributs/associacions:
Si no els necessita.
Si en t, per es defineixen en lobjecte context.
Dues variants:
Lobjecte context els passa a lestat quan els necessita.
Els objectes estat els obtenen del context quan els necessiten.
100 100
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 5
Exemple 1: Problema
Esquema conceptual de lespecificaci i diagrama destats dInterruptor:
Interruptor
{disjoint,complete}
Obert
referncia: String
Tancat
datatanc: Data tempsob:Integer
R.I. Textuals:
Claus classes no associatives: (Interruptor, referncia)
Es vol dissenyar loperaci consum dun interruptor:
s 0 si linterruptor est tancat.
s el temps que estar obert multiplicat per un factor alfa si linterruptor est
obert.
Aplicaci del patr Estat
Tancat Obert
obrir
tancar
estat
data en la que
es va tancar
linterruptor
temps que estar
obert l interruptor
Disseny de la Capa de Domini: Patr de disseny Estat 6
Exemple 1: Compartici dobjectes estat
No Compartici dels objectes estat:
Els objectes estat
tenen informaci
1 Interruptor
referncia: String
{disjoint,complete}
Estat 1
consum():Integer
consum():Integer
Tancat
datatanc: Data
consum():Integer
Obert
tempsob:Integer
consum():Integer
101 101
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 7
Exemple 1: Compartici dobjectes estat
Compartici dels objectes estat:
Interruptor
referncia: String
datatanc[0..1]:Data
tempsob[0..1]:Integer
{disjoint,complete}
Obert Tancat
Estat 1
consum():Integer
*
Els objectes estat
no tenen informaci o
la que tenien sha posat
a lobjecte context
aquesta operaci pot
calcular el consum ja
que t tota la informaci
necessria per fer-ho.
Disseny de la Capa de Domini: Patr de disseny Estat 8
Aspectes a considerar: On es defineixen les transicions destat
Les transicions destat vnen determinades pel diagrama destats
despecificaci.
El patr no especifica quin participant t la responsabilitat de portar a
terme les transicions destat.
La responsabilitat de portar a terme les transicions destat pot estar
definida a:
Lobjecte context:
Si els estats sn compartits per diversos contextos.
Si les regles de canvi destat sn fixes.
Els objectes estat:
s ms flexible que siguin els propis objectes estat els qui decideixin
quan fer la transici i especificar el canvi destat.
Hi ha dhaver una operaci en lobjecte context que permeti canviar
lestat.
T linconvenient que una subclasse estat ha de conixer almenys una
altra subclasse.
102 102
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 9
Exemple 1: On es defineixen les transicions destat
Transicions destat definides a lobjecte context (estats no compartits):
Aquesta operaci es
utilitzada per les
operacions de canvi
destat del Context
per saber quin s el
seu estat
Interruptor
referncia: String
{disjoint,complete}
1
tancar(dt:Data): Bool
obrir(to:Integer):Bool
consum():Integer
1
Aquesta operaci gestiona el
canvi destat dobert a tancat
Aquesta operaci gestiona el
canvi destat de tancat a obert
Tancat
datatanc: Data
consum():Integer
Obert
tempsob:Integer
consum():Integer
Estat
tipus():String
consum():Integer
Disseny de la Capa de Domini: Patr de disseny Estat 10
Transicions destat definides als objectes estat (estats no comparits):
Exemple 1: On es defineixen les transicions destat
Aquestes operacions deleguen
la responsabilitat del canvi
destat als objectes estat
Interruptor
referncia: String
{disjoint,complete}
1
tancar(dt:Data):Bool
obrir(to:Integer):Bool
consum():Integer
mod_assoc(e:Estat)
1
Tancat
datatanc: Data
obrir(to:Integer,i:Interruptor):Bool
tancar(dt:Data,i:Interruptor):Bool
consum():Integer
tempsob:Integer
Obert
tancar(dt:Data,i:Interruptor):Bool
obrir(to:Integer,i:Interruptor):Bool
consum():Integer
Estat
tancar(dt:Data,i:Interruptor):Bool
obrir(to:Integer,i:Interruptor):Bool
consum():Integer
Aquestes operacions
gestionen el canvi destat
Aquesta operaci modifica
lassociaci entre Interruptor
i Estat.
103 103
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 11
Aspectes a considerar: Creaci i destrucci dobjectes estat
Dues opcions:
A: Crear-los quan es necessiten i destruir-los quan ja no sn necessaris.
B: Crear-los dentrada i no destruir-los mai.
Opci A:
Preferible quan:
Lestat inicial no es coneix en temps dexecuci.
Els contextos rarament canvien destat.
Evita la creaci dobjectes estat que no susaran.
Opci B:
Preferible quan :
Lobjecte context canvia destat molt sovint.
Evita la destrucci dobjectes que poden ser necessaris ms endavant.
Els costos de creaci (instanciaci) es paguen un sol cop.
No hi ha costos de destrucci.
Disseny de la Capa de Domini: Patr de disseny Estat 12
Exemple 1: Creaci i destrucci dels objectes estat
Creaci i destrucci dels objectes estat quan es necessiten:
Creaci del nou estat tancat,
destrucci de lestat obert i
creaci de la nova associaci
entre Interruptor i el nou estat.
Creaci del nou estat obert ,
destrucci de lestat tancat i
creaci de la nova associaci
entre Interruptor i el nou estat.
Interruptor
referncia: String
tancar(dt:Data):Bool
obrir(to:Integer):Bool
consum():Integer
mod_assoc(e:Estat)
1
No canvien lestat
{disjoint,complete}
1
Tancat
datatanc: Data
obrir(to:Integer,i:Interruptor):Bool
tancar(dt:Data,i:Interruptor):Bool
consum():Integer
tempsob:Integer
Obert
tancar(dt:Data,i:Interruptor):Bool
obrir(to:Integer,i:Interruptor):Bool
consum():Integer
Estat
tancar(dt:Data,i:Interruptor):Bool
obrir(to:Integer,i:Interruptor):Bool
consum():Integer
104 104
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 13
Exemple 1: Soluci completa
Diagrama de classes de disseny:
Interruptor
referncia: String
tancar(dt:data):Bool
obrir(to:Integer):Bool
consum():Integer
mod_assoc(e:Estat)
1
Hiptesis daplicaci del patr Estat:
Objectes estat no compartits.
Transicions destat definides en els objectes estat.
Creaci dels objectes quan es necessiten.
{disjoint,complete}
1
Tancat
datatanc: Data
obrir(to:Integer,i:Interruptor):Bool
tancar(dt:Data,i:Interruptor):Bool
consum():Integer
tempsob:Integer
Obert
tancar(dt:Data,i:Interruptor):Bool
obrir(to:Integer,i:Interruptor):Bool
consum():Integer
Estat
tancar(dt:Data,i:Interruptor):Bool
obrir(to:Integer,i:Interruptor):Bool
consum():Integer
Disseny de la Capa de Domini: Patr de disseny Estat 14
Exemple 1: Soluci completa
Diagrames de seqncia:
i:Interruptor :Estat
consum()
consum()
:Obert
consum()
retorna tempsob*alfa
:Tancat
consum()
retorna 0
consum():Integer
i:Interruptor :Estat
obrir(to)
obrir(to,i)
:Obert
obrir(to,i)
Els diagrames de seqncia
per loperaci tancar serien
similars als de loperaci obrir.
:Tancat
obrir(to,i)
ob:Obert
i:Interruptor
mod_assoc(ob)
obrir(to:Integer):Integer
Fals
Cert
Boolean
105 105
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 15
Conseqncies
Descomposa la conducta dels diferents estats:
La conducta de cada estat est en una operaci diferent.
Localitza (en un sol lloc) la conducta especfica dun estat.
Es poden definir fcilment nous estats, sense alterar els existents.
Fa explcites les transicions destat:
Cada estat t associat un objecte estat diferent.
Si els objectes estat no tenen atributs/associacions propis, poden ser
compartits per diversos contextos.
Disseny de la Capa de Domini: Patr de disseny Estat 16
Exemple 2: Problema
Esquema conceptual de lespecificaci:
Es vol dissenyar una operaci de la classe dobjectes Reserva que calcula el cost
duna reserva.
cost= 0 si la reserva est prevista o anul.lada per manteniment.
cost= preuHoraPista (de Club) si la reserva est usada.
cost= preuNos (de Club) si la reserva est no usada.
cost= preuAnul.laci (de Club) si la reserva est anul.lada pel client.
Aplicaci del patr Estat
Reserva
{disjoint,complete}
Res.Prevista ResAnMant
data:Data
ResAnClient
data:Data
ResNoUsada ResUsada
dataReserva:Data
estat
106 106
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 17
Prevista
Usada
NoUsada
Anul.lada per Manteniment
Anul.lada pel Client
anMant
anClient
usada
veureSiNoUsada[ dataReserva<dataActual ]
Exemple 2: Diagrama destats de Reserva
Disseny de la Capa de Domini: Patr de disseny Estat 18
Exemple 2: Soluci
Hiptesis daplicaci del patr Estat:
Objectes estat no compartits.
Transicions destat definides en lobjecte context.
Creaci/destrucci dels objectes estat quan es necessiten.
Diagrama de classes de disseny:
Reserva
1
cost():Integer
anMant(d:Data):Bool
anClient(d:Data):Bool
usada():Bool
nousada():Bool
1
dataReserva:Data
EstatRes
cost():Integer
tipus():String
{disjoint,complete}
ResAnMant
data:Data
ResAnClient
data:Data
Res.Prevista ResNoUsada
cost():Integer
ResUsada
cost():Integer
cost():Integer
107 107
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 19
Exemple 2: Soluci
Operaci cost():Integer : Diagrames de seqncia:
:ResUsada
cost()
:Club
preuHoraPista()
:Reserva :Estat
cost()
cost()
retorna 0
operaci ganxo que es
heretada per totes les
subclasses i redefinida
a ResUsada, ResNoUsada
i ResAnClient.
:ResNoUsada
cost()
:Club
preuNos()
:ResAnClient
cost()
:Club
preuAnul.laci()
Disseny de la Capa de Domini: Patr de disseny Estat 20
Exemple 2: Soluci
r:Reserva erp:ResPrevista
eram:ResAnMant
anMant(d)
:Estat
tipus()
formar nova associaci
entre r i eram
comprovar que el tipus
s reserva prevista
La resta de diagrames
de seqncia per les
operacions anClient,
usada i nousada
serien similars.
Operaci anMant(d:Data) : Diagrames de seqncia:
Boolean
108 108
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Estat 21
Bibliografia
Elements of Reusable Object-Oriented Software.
E. Gamma; R. Helm; R. Johnson; J. Vlissides
Addison-Wesley, 1995, pp. 305-313.
Applying UML and Patterns.
An I ntroduction to Object-Oriented Analysis and Design.
C. Larman
Prentice Hall, 1998, pp. 406-410.
http://www.eli.sdsu.edu/courses/spring98/cs635/notes/state
109 109
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 1
Patr de disseny Mtode Plantilla
Descripci general.
Soluci: Estructura.
Exemple 1.
Conseqncies.
Extensi Exemple 1.
Exemple 2.
Bibliografia.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 2
Descripci general
Context:
La definici duna operaci en una jerarquia t un comportament com a
totes les subclasses i un comportament especfic per cadascuna delles.
Problema:
Repetir el comportament com a totes les subclasses implica duplicaci de
codi i un manteniment ms costos.
Soluci:
Definir lalgorisme (loperaci) en la superclasse, invocant operacions
abstractes (amb signatura definida en la superclasse i mtode a les
subclasses) que sn redefinides a les subclasses.
Loperaci de la superclasse defineix la part del comportament com i les
operacions abstractes la part del comportament especfic.
111 111
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 3
Soluci: Estructura
AbstractClass
templateMethod()
primitiveOperation1()
primitiveOperation2()
ConcreteClass
primitiveOperation1()
primitiveOperation2()
...
primitiveOperation1()
...
primitiveOperation2()
..
comportament com
comportament especfic
mtode de loperaci plantilla:
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 4
Exemple 1: Problema
Centre Docent
Esquema conceptual de lespecificaci:
nom: String
*
Escola Ens. Secundria
numestudiants: Integer
Universitat
datacreaci: Data
{disjoint,complete}
Professor
estudis: String
Ensenya 1
Pers. en Formaci
dni: String
1
*
Becari
nif: Integer
1 *
Es vol dissenyar una operaci de la classe dobjectes Centre Docent per calcular
el nombre dempleats que t un centre docent que tenen una edat < 25 anys.
num_empleats=num_professors+num_becaris amb edat < 25 anys si el
centre s una Universitat
num_empleats=num_professors+num_pers_en_formaci amb edat < 25
anys si el centre s una Escola dEnsenyana Secundria.
Aplicaci del patr Plantilla
Assignat
T
R.I. Textuals:
Claus classes no associatives:
(Centre Docent, nom);
(Pers.Docent, nom)
tipus
Pers. Docent
nom: String
edat: Integer
{disjoint,complete}
tipus
Nota: Suposem que els Centres Docents i el Personal Docent no poden canviar de subclasse
112 112
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 5
Exemple 1: Soluci (I)
Aplicaci del patr plantilla:
Centre Docent
nom: String
*
Escola Ens. Secundria
numestudiants: Integer
{disjoint,complete}
Professor
estudis: String
Ensenya 1
Pers. en Formaci
dni: String
1
*
Becari
nif: Integer
1
*
Assignat
T
num_empleats(): Integer
num_professors():Integer
num_pers_espec():Integer
Universitat
datacreaci: Data
num_pers_espec():
Integer
num_pers_espec(): Integer
mtode plantill a
op.concreta
op. primitiva (abstracta)
definici de loperaci abstracta
Pers. Docent
nom: String
edat: Integer
{disjoint,complete}
tipus
tipus
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 6
Exemple 1: Soluci (II)
Diagrames de seqncia:
sumem els dos valors
El diagrama de seqncia de
num_pers_espec() per Escola
Ens. Secundria seria similar al
d Universitat
op. concreta
:CentreDocent
Integer
num_professors()
num_empleats()
num_pers_espec()
mtode plantill a
op. primitiva (abstracta)
:CentreDocent
:Iterador
Integer
currentItem()
isDone()
first()
next()
professors()
*
num_professors()
incrementem un
comptador si edat
<25
:Professor
edat()
num_pers_espec()
:Universitat
:Iterador
Integer
currentItem()
isDone()
first()
next()
becaris
*
incrementem un
comptador si edat
<25
:Becari
edat()
113 113
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 7
Exemple 1: Soluci (III)
Diagrama de classes de disseny resultant:
Centre Docent
nom: String
*
Escola Ens. Secundria
numestudiants: Integer
{disjoint,complete}
Professor
estudis: String
Ensenya 1
Pers. en Formaci
dni: String
1
*
Becari
nif: Integer
1
*
Assignat
T
num_empleats(): Integer
num_professors():Integer
num_pers_espec():Integer
Universitat
datacreaci: Data
num_pers_espec():
Integer
num_pers_espec(): Integer
Pers. Docent
nom: String
edat: Integer
{disjoint,complete}
tipus
edat(): Integer
tipus
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 8
Conseqncies
Tcnica fonamental per a la reutilitzaci de codi.
Els mtodes plantilla porten a una estructura de control invertida:
Principi de Hollywood.
Els mtodes plantilla acostumen a cridar operacions dels segents
tipus:
Operacions concretes de la AbstractClass.
Operacions primitives (s a dir, operacions abstractes).
Operacions ganxo, que proporcionen conducta per defecte (normalment,
res), que les subclasses poden redefinir, si cal.
Operacions concretes (en ConcreteClass o en classes client).
s important que els mtodes plantilla especifiquin:
quines operacions sn ganxos (poden ser redefinides).
Quines operacions sn abstractes (han de ser redefinides):
conv que nhi hagin com menys millor.
114 114
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 9
Extensi Exemple 1: Problema
Centre Docent
Esquema conceptual de lespecificaci:
nom: String
*
Escola Ens. Secundria
numestudiants: Integer
Universitat
datacreaci: Data
{disjoint,complete}
Professor
estudis: String
Ensenya 1
Pers. en Formaci
dni: String
1
*
Becari
nif: Integer
1 *
Aplicaci del patr Plantilla
Assignat
T
R.I. Tetuals:
Claus classes no associatives:
(Centre Docent, nom); (Pers.Docent, nom)
Escola Ens. Primria
edatmxima: Integer
Es vol dissenyar la mateixa operaci nombre dempleats que t un centre docent.
num_empleats dUniversitat i dEscola Ensenyana Secundria igual que
lexemple anterior.
num_empleats=num_professors amb edat < 25 anys si el centre s una
Escola dEnsenyana Primria.
Pers. Docent
nom: String
edat: Integer
{disjoint,complete}
tipus
tipus
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 10
Extensi Exemple 1: Soluci (I)
Diagrama de classes de disseny resultant:
Centre Docent
nom: String
*
Escola Ens. Secundria
numestudiants: Integer
{disjoint,complete}
Professor
estudis: String
Ensenya 1
Pers. en Formaci
dni: String
1
*
Becari
nif: Integer
1
*
Assignat
T
num_empleats(): Integer
num_professors():Integer
num_pers_espec():Integer
Universitat
datacreaci: Data
num_pers_espec():
Integer
num_pers_espec(): Integer
mtode plantill a
op.concreta
op. ganxo
redefinici de loperaci ganxo
Escola Ens. Primria
edatmxima: Integer
Pers. Docent
nom: String
edat: Integer
{disjoint,complete}
tipus
edat(): Integer
tipus
115 115
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 11
Extensi Exemple 1: Soluci (II)
Diagrames de seqncia:
El diagrames de seqncia de
num_pers_espec() per Escola
Ens. Secundria i Universitat
i num_professors() per Centre
Docent serien iguals als
de lexemple anterior
:Centre Docent
num_pers_espec()
Integer
retorna 0
op. concreta
mtode plantill a
:CentreDocent
Integer
num_professors()
num_empleats()
sumem els dos valors
num_pers_espec()
op. ganxo
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 12
Exemple 2: Problema
Diagrama de classes normalitzat:
deute(): Import
Persona
dni: String
nom: String
adrea: String
e-mail[0..1]: String
Familiar Soci
nmSoci: Integer
{disjoint,complete}
1 *
R.I. Tetuals:
- Claus classes no associatives: (Persona,dni)
- No poden existir dos socis amb el mateix numSoci.
Es vol dissenyar dos casos ds amb un nic esdeveniment per consultar les
dades dun soci:
El primer cas ds obt el nom i el deute dun soci a partir del nmSoci en cas
dexistir, i retorna fals en cas contrari.
El segon obt el nom i ladrea tamb a partir del nmSoci en cas dexistir, i
retorna fals en cas contrari.
Aplicaci del patr Plantilla
Amb
116 116
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 13
TrCUS-1
deute: Import
obtDades(s: Soci )
TransConsultaUnSoci
numSoci: Integer
nom: String
resultat:Boolean
executar()
obtDades(s:Soci)
Operaci primitiva
Cert si el soci amb
numSoci existeix. Fals
en cas contrari.
Transacci
executar()
TrCUS-2
adrea: String
obtDades(s: Soci )
Operaci plantilla
Exemple 2: Soluci
Diagrama de classes de disseny:
deute(): Import
Persona
dni:String
nom: String
adrea: String
e-mail[0..1]: String
Soci
numSoci: Integer
{disjoint,complete}
nom(): String
adrea(): String
....
....
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 14
Exemple 2: Soluci
Diagrames de seqncia:
deute()
:TrCUS-1 s:Soci
obtDades() adrea()
:TrCUS-2 s:Soci
obtDades()
error, si el soci
no existeix
:TransConsultaUnSoci
s:Soci
dicSocis:Diccionari
executar
get(numSoci)
nom()
obtDades(s)
117 117
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Patr de disseny Mtode plantilla. 15
Bibliografia
Elements of Reusable Object-Oriented Software.
E. Gamma; R. Helm; R. Johnson; J. Vlissides
Addison-Wesley, 1995, pp. 325-330.
Applying UML and Patterns.
An I ntroduction to Object-Oriented Analysis and Design.
C. Larman
Prentice Hall, 1998, cap. 38.11.
http://www.eli.sdsu.edu/courses/spring98/cs635/notes/template
118 118
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 1
Exemple Capa de Domini
Especificaci:
Esquema Conceptual
Cassos ds
Diagrama dEstats
Normalitzaci:
Diagrama de classes normalitzat
Contractes operacions normalitzats
Aplicaci del Patr Estat
Aplicaci del Patr Controlador
Aplicaci del Patr Expert
Diagrames de Seqncia
Diagrama de Classes de Disseny
Disseny de la Capa de Domini: Exemple 2
Especificaci: Esquema Conceptual
0.. 3
Persona
dni: Integer
nom: String
/nmv: Integer
Ciutat
nom: String
Viatge
{disjoint, complete}
*
*
Vol-viatjar
Mar
{incomplete}
0..1
*
Amb
Hotel
nom: String
*
1
De
/T-pressupostats
1
inici
Data
data: Date
*
Pressupostat
preu: Import
Reservat
avan: Import
Confirmat
R.I. Textuals:
- Claus classes no associatives: (Persona, dni); (Data, data); (Ciutat, nom)
- Una Ciutat no pot tenir ms dun Hotel amb el mateix nom
- Un viatge confirmat es fa a un Hotel de la mateixa ciutat on es fa el viatge
- Una persona no pot tenir ms dun viatge confirmat amb una mateixa data dinici
Informaci derivada:
- nmv: s el nombre de viatges confirmats daquella Persona
- T-pressupostats: s igual al conjunt de viatges pressupostats duna Persona
Suposicions:
- Latribut derivat nmv sha de calcular i lassociaci derivada T-pressupostats sha de materialitzar.
- Les associacions Amb i T-pressupostats tenen navegabilitat doble
119 119
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 3
Especificaci: Cas ds
Quines-Persones
:Sistema
:Empleat/da
Qui?(nom-c, nom-h, ll-per): ok?
Operaci: qui? (nom-c: String, nom-h: String, out ll-per: Llista-noms)
Classe retorn: Boolean
Precondicions: Els arguments han de tenir valor
Semntica: Retorna la llista de noms de persones que shan allotjat alguna vegada a
lhotel nom-h de la ciutat nom-c.
Postcondicions:
1. Si lhotel nom-h no s de la ciutat nom-c o b no hi cap persona que shi hagi
allotjat, llavors operaci invlida i es retorna Fals
2. En cas contrari, operaci vlida, es retorna Cert i la llista que cont els noms de
totes les persones que shan allotjat alguna vegada a lhotel.
Llista-noms= { nom }
Disseny de la Capa de Domini: Exemple 4
Especificaci: Cas ds
Confirmar-Viatge-al-Mar
Operaci: confirmar-mar (dni: Integer, nom-c: String, data: Date, nom-h: String)
Classe retorn: Boolean
Precondicions: Els arguments han de tenir valor
Semntica: Confirmar un viatge a una ciutat de mar i assignar-li lhotel
Postcondicions:
1. En el segents casos, operaci invlida i retorna Fals:
1.1 Si la ciutat nom-c no s de mar
1.2 Si no existeix un viatge de la persona a la ciutat i per a la data especificats
1.3 Lhotel nom-h no s de la ciutat nom-c
2. En cas contrari, operaci vlida, es retorna Cert i:
2.1 El viatge passa a estar Confirmat
2.2 Es crea una nova ocurrncia de lassociaci Amb entre el viatge confirmat i lHotel
:Sistema
:Empleat/da
Confirmar-mar(dni, nom-c, data, nom-h): ok?
120 120
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 5
Especificaci: Diagrama dEstats
Pressupostat Reservat
Confirmat
reservar
confirmar
confirmar
Disseny de la Capa de Domini: Exemple 6
Normalitzaci: Diagrama de classes normalitzat
*
Ciutat
nom: String
Viatge
{disjoint, complete}
*
*
Mar
{incomplete}
0..1 *
Amb
Hotel
nom: String
*
1
De
T-pressupostats
1
inici
Data
data: Date
*
Pressupostat
preu: Import
Reservat
avan: Import
Confirmat
Persona
dni: Integer
nom: String
mmv(): Integer
1
1
1
Viatge-Ciutat
Viatge-Data
Viatge-Pers
R.I. Textuals:
- Claus classes no associatives: (Persona, dni); (Data, data); (Ciutat, nom)
- Una Ciutat de Mar no pot tenir ms dun Hotel amb el mateix nom
- Un viatge confirmat es fa a un Hotel de la mateixa ciutat on es fa el viatge
- Una persona no pot tenir ms dun viatge confirmat amb una mateixa data dinici
- Per una persona i una data no poden existir ms de tres viatges a ciutats diferents
- No poden existir dos viatges de la mateixa persona a la mateixa ciutat amb la
mateixa data dinici
Inf. derivada:
- nmv: s el nombre de viatges confirmats daquella Persona
- T-pressupostats: s igual al conjunt de viatges pressupostats duna Persona
Suposicions:
- Les associacions Amb i T-pressupostats tenen navegabilitat doble
121 121
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 7
Operaci: qui? (nom-c: String, nom-h: String, out ll-per: Llista-noms) (No es modifica)
Classe retorn: Boole
Precondicions: Els arguments han de tenir valor
Semntica: Retorna llista de noms de persones que shan allotjat alguna vegada a lhotel nom-h
de la ciutat nom-c.
Postcondicions:
1. Si lhotel nom-h no s de la ciutat nom-c o b no hi cap persona que shi hagi allotjat, llavors
operaci invlida i es retorna Fals
2. En cas contrari, operaci vlida, es retorna Cert I la llista que cont els noms de totes les
persones que shan allotjat alguna vegada a lhotel.
Normalitzaci: Contracte normalitzat
qui?
Disseny de la Capa de Domini: Exemple 8
Normalitzaci: Contracte normalitzat
confirmar-mar
Operaci: confirmar-mar (dni: Integer, nom-c: String, data: Date, nom-h: String)
Classe retorn: Boolean
Precondicions: Els arguments han de tenir valor
Semntica: Confirmar un viatge a una ciutat de mar i assignar-li lhotel
Postcondicions:
1. En el segents casos, operaci invlida i retorna Fals:
1.1 La ciutat nom-c no s de mar
1.2 No existeix un viatge de la persona a la ciutat per a la data especificats
1.3 Lhotel nom-h no s de la ciutat nom-c
1.4 Ja existeix un viatge confirmat de la persona i data especificats
2. En cas contrari, operaci vlida, es retorna Cert i:
2.1 El viatge passa a estar Confirmat
2.2 Es crea una nova ocurrncia de lassociaci Amb entre el viatge confirmat i lHotel
2.3 Si el viatge era Pressupostat, selimina la instncia de lassociaci T-pressupostat entre
Pressupostat i Persona
122 122
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 9
Aplicaci del Patr Estat
*
Ciutat
nom: String
{disjoint, complete}
*
*
Mar
{incomplete}
0..1
*
Amb
Hotel
nom: String
*
1
De
T-pressupostats
1
inici
Data
data: Date
*
Viatge
Pressupostat
preu: Import
Reservat
avan: Import
Confirmat
Persona
dni: Integer
nom: String
mmv(): Integer
1
1
1
Viatge-Ciutat
Viatge-Data
Viatge-Pers
Estat
estat 1
1
Supsits en l aplicaci del Patr Estat
- Objectes estat no compartits
- Transicions destat definides als objectes estat
- Creaci i destrucci dobjectes estat quan calgui
Suposicions:
- Les associacions Amb i T-pressupostats tenen navegabilitat doble
Disseny de la Capa de Domini: Exemple 10
Aplicaci del Patr Controlador
Transacci
executar()
Allotjats
nom-c: String
nom-h: String
ll-per: Llista-noms
resultat: Boolean
executar()
resultat(): Boolean
noms(): Llista-noms
Confirmar-Mar
dni: Integer
nom-c: String
data: Date
nom-h: String
resultat: Boolean
executar()
resultat(): Boolean
confirmar-mar (dni: Inmteger, nom-c: String, data: Date,
nom-h: String): Boolean
qui? (nom-c: String, nom-h: String,
out ll-per: Llista-noms): Boolean
123 123
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 11
Operaci: qui? (nom-c: String, nom-h: String, out ll-per: llista-noms)
Classe retorn: Boole
Precondicions: Els arguments han de tenir valor
Semntica: Retorna llista de noms de persones que shan allotjat alguna
vegada a lhotel nom-h de la ciutat nom-c.
Postcondicions:
1. En els segents casos, operaci invlida i es retorna fals:
1.1 Si lhotel nom-h no s de la ciutat nom-c
1.2 o b si no hi cap persona que shi hagi allotjat
2. En cas contrari, operaci vlida, es retorna Cert i la llista que cont els
noms de totes les persones que shan allotjat alguna vegada a lhotel
Aplicaci Patr Expert
qui? (nom-c, nom-h, out ll-per)
Experts
DicHotels
Allotjats, Hotel
Allotjats, Hotel
Disseny de la Capa de Domini: Exemple 12
Diagrama Seqncia
qui? (nom-c, nom-h, out ll-per)
confirmat-a(h)
:Estat
fals
:Allotjats
executar()
dicHotel:Diccionari
get(nom-c+nom-h)
existeix
hotel?
:Mar
viatges-a(h)
first()
:Iterador
is_done()
current_item()
:Viatge
next()
*
viatges()
:Estat
confirmat-a(h)
confirmat-a(h)
h:Hotel
qui()
:Persona
nom?()
Llista-noms
Llista-noms
Comprovar si
llista buida
String
confirmat-a(h)
:Confirmat
amb()
= h?
No s
necessari
explicitar-la
Boolean
acumular nom a una llista
124 124
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 13
Diagrama Seqncia (alternativa)
qui? (nom-c, nom-h, out ll-per)
Modificant el patr Estat, definint la navegabilitat de lassociaci entre Viatge i
Estat doble, es pot definir loperaci qui? duna forma ms eficient.
:Allotjats
executar()
dicHotel:Diccionari
get(nom-c+nom-h)
existeix hotel?
first()
:Iterador
is_done()
current_item()
next()
*
confirmats()
viatger()
h:Hotel
qui()
:Persona
nom?()
Llista-noms
Comprovar si
llista buida
String
acumular nom a una llista
:Viatge
viatger()
String
:Confirmat
obtenir el viatge obtenir la persona
Disseny de la Capa de Domini: Exemple 14
Aplicaci Patr Expert
confirmar-mar (dni, nom-c, data, nom-h)
Operaci: confirmar-mar (dni: Enter, nom-c: String, data: Dia, nom-h: String)
Classe retorn: Boole
Precondicions: Els arguments han de tenir valor
Semntica: Confirmar un viatge a una ciutat de mar i assignar-li lhotel
Postcondicions:
1. En el segents casos, operaci invlida i retorna Fals:
1.1 Si la ciutat nom-c no s de mar
1.2 Si no existeix un viatge de la persona a la ciutat per a la data
especificats
1.3 Lhotel nom-h no s de la ciutat nom-c
1.4 Ja existeix un viatge confirmat de la persona i data especificats
2. En cas contrari, operaci vlida, es retorna Cert i:
2.1 El viatge passa a estar Confirmat
2.2 Es crea una nova ocurrncia de lassociaci Amb entre el viatge
confirmat i lHotel
2.3 Si el viatge era Pressupostat, selimina lassociaci T-
pressupostat amb Persona
Experts
Ciutat, dicMar
dicViatges
dicHotels
Persona, dicConfirmats
Estat + Viatge
Confirmat + Hotel
Pressupostat + Persona
125 125
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 15
Diagrama Seqncia (I)
confirmar-mar(dni, nom-c, data, nom-h)
:Confirmar-mar
executar()
existeix viatge?
dicViatge:Diccionari
get(dni+nom-c+data)
dicHotel:Diccionari
get(nom-c+nom-h)
:Persona
t-confirmats?(data)
first()
:Iterador
is_done()
current_item()
:Viatge
next()
*
viatges()
Boolean
:Estat
confirmat-en(data)
data?(data)
:Data
confirmat?()
v:Viatge
confirmar(h, data)
:Estat
confirmar(v, h)
si existeix hotel (h),
llavors est a la
ciutat i, aquesta s
de mar
Boolean
Boolean
Comprova si ja t
viatges confirmats
en la data
Comprova si s un
viatge confirmats en
la data
Compara atribut
data amb valor
parmetre
Comrova
estat
confirmat
Fa canvi destat
Disseny de la Capa de Domini: Exemple 16
Diagrama Seqncia (II)
confirmar-mar(dni, nom-c, data, nom-h)
e:Confirmat
associarAmb(h)
creassocAmb(e)
h:Hotel
modifassocEstat(e)
v:Viatge
nouconfirmat(v, h)
:Estat
confirmat?()
:Confirmat
cert
confirmat?()
:Estat
fals
:Persona
eliminaTePres(e)
e:Pressupostat
confirmar(v, h)
nouconfirmat(v, h)
cert
:Reservat
confirmar(v, h)
nouconfirmat(v, h)
cert
confirmar(v, h)
:Confirmat
fals
126 126
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 17
Diagrama Seqncia (I) (alternativa)
confirmar-mar(dni, nom-c, data, nom-h)
La restricci Una persona no pot tenir ms dun viatge confirmat amb la mateixa
data dinici permet identificar els viatges confirmats amb (dni+data).
:Confirmar-mar
executar()
existeix viatge?
dicViatge:Diccionari
get(dni+nom-c+data)
dicHotel:Diccionari
get(nom-c+nom-h)
v:Viatge
confirmar(h, dni, data)
:Estat
confirmar(v, h)
si existeix hotel (h),
llavors est a la
ciutat i, aquesta s
de mar
Boolean
Mateixa operaci
que abans
dicConfirmats:Diccionari
get(dni+data)
Comprova no existeix cap objecte
estat Confirmat
Disseny de la Capa de Domini: Exemple 18
Diagrama Seqncia (II) (alternativa)
confirmar-mar(dni, nom-c, data, nom-h)
:Persona
eliminaTePres(e)
e:Pressupostat
confirmar(v, h)
nouconfirmat(v, h)
cert
:Reservat
confirmar(v, h)
nouconfirmat(v, h)
cert
confirmar(v, h)
:Confirmat
fals
e:Confirmat
associarAmb(h)
creassocAmb(e)
h:Hotel
modifassocEstat(e)
v:Viatge
nouconfirmat(v, h)
:Estat
modificar associaci amb Viatge
127 127
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Domini: Exemple 19
Diagrama de Classes de Disseny
*
{disjoint, complete}
*
Mar
{incompl ete}
0..1
*
Amb
*
1
De
T-pressupostats
1
inici
*
Persona
dni: Integer
nom: String
mmv(): Integer
t-confirmats(data: Date): Boolean
viatges(): Iterador
eliminaTPres(e:Pressupostat)
nom?(): String
1
1
1
Viatge-Ciutat
Viatge-Data
Viatge-Pers
estat
1
1
Data
data: Date
data?(data:Date): Boolean
Ciutat
nom: String
viatges(): Iterador
viatges-a(h:Hotel): Llista-noms
Viatge
confirmat-en(data:Date): Boolean
confirmar(h:Hotel, data:Date):Boolean
modifassocEstat(e:Estat)
confirmat-a(h:Hotel): String
Estat
confirmat?():Boolean
confirmar(v:Viatge, h:Hotel):Boolean
nouconfirmat(v:Viatge, h:Hotel)
confirmat-a(h:Hotel): Boolean
*
Pressupostat
preu: Import
confirmar(v:Viatge, h:Hotel):Boolean
Reservat
avan: Import
confirmar(v:Viatge, h:Hotel):Boolean
Confirmat
confirmar(v:Viatge, h:Hotel):Boolean
associarAmb(h:Hotel)
amb(): Hotel
confirmat-a(h:Hotel): Boolean
confirmat?():Boolean
Hotel
nom: String
qui(): Llista-noms
crearassocAmb(e:Confirmat)
Transacci
executar()
Allotjats
nom-c: String
nom-h: String
ll-per: Llista-noms
resultat: Boolean
executar()
resultat(): Boolean
noms(): Llista-noms
Confirmar-Mar
dni: Integer
nom-c: String
data: Date
nom-h: String
resultat: Boolean
executar()
resultat(): Boolean
Disseny de la Capa de Domini: Exemple 20
Diagrama de Classes de Disseny (alternativa)
*
{disjoint, complete}
*
*
Mar
{incompl ete}
0..1
*
Amb
*
1
De
T-pressupostats
1
inici
*
Persona
dni: Integer
nom: String
mmv(): Integer
eliminaTPres(e:Pressupostat)
nom?(): String
1
1
1
Viatge-Ciutat
Viatge-Data
Viatge-Pers
estat
1
1
Data
data: Date
Ciutat
nom: String
Viatge
confirmar(h:Hotel, dni:Integer, data:Date):Boolean
modifassocEstat(e:Estat)
viatger(): String
Estat
confirmar(v:Viatge, h:Hotel):Boolean
nouconfirmat(v:Viatge, h:Hotel)
viatger(): String
Pressupostat
preu: Import
confirmar(v:Viatge, h:Hotel):Boolean
Reservat
avan: Import
confirmar(v:Viatge, h:Hotel):Boolean
Confirmat
confirmar(v:Viatge, h:Hotel):Boolean
associarAmb(h:Hotel)
Hotel
nom: String
qui(): Llista-noms
crearassocAmb(e:Confirmat)
confirmats(): Iterador
Transacci
executar()
Allotjats
nom-c: String
nom-h: String
ll-per: Llista-noms
resultat: Boolean
executar()
resultat(): Boolean
noms(): Llista-noms
Confirmar-Mar
dni: Integer
nom-c: String
data: Date
nom-h: String
resultat: Boolean
executar()
resultat(): Boolean
La navegabilitat de les
associacions Viatge-Data, Viatge-
Ciutat i De, no queden definides
pels diagrames de seqncia.
128 128
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 1
Capa Presentaci
Introducci
Patr Model-Vista-Controlador
Disseny de la Capa Presentaci: Introducci 2
Introducci
Qu s i qu inclou la Capa Presentaci
Disseny de la Capa Presentaci:
Disseny Extern
Disseny Intern
Punt de Partida
Bibliografia
129 129
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 3
Qu s i qu inclou la Capa Presentaci
Capa Presentaci: s el component del sistema software encarregat de
gestionar la interacci amb lusuari.
......
Domini
Presentaci
S'assabenta peticions
Ordena execuci accions
Comunica resultats accions
Tractament de:
Finestres, Mens
Botons, Llistats
esdeveniments
presentaci
esdeveniments externs
consultes
resultats
respostes
Disseny de la Capa Presentaci: Introducci 4
Qu s i qu inclou la Capa Presentaci
La interacci home-mquina consisteix en:
Lusuari t un objectiu i un pla dacci.
Lusuari tradueix aquest pla amb accions concretes sobre la interfcie del
sistema software.
El sistema processa els inputs rebuts. Aquest processament consisteix en
accedir, calcular i donar format a les dades.
A cada input rebut, el sistema respon presentant el resultat de les accions i
encaminant lusuari a la segent acci.
La Capa Presentaci inclou els elements necessaris per a:
rebre les ordres o peticions de lusuari
mostrar a lusuari el resultat daquestes peticions
resoldre o coordinar la resoluci de les peticions amb collaboraci de la
Capa Domini
Interfcies:
Lnies de comandes: Sistema porta el control
GUI (Basades en Esdeveniments): Usuari porta el control
130 130
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 5
Disseny de la Capa Presentaci
Disseny Capa Presentaci s un procs, incls en letapa de disseny dun
sistema software, encarregat de definir:
com lusuari interacciona amb el sistema software (Disseny Extern)
com la Capa Presentaci interacciona amb la Capa Domini (Disseny Intern)
Punt de partida pel disseny de la Capa Presentaci:
Caracterstiques tecnolgiques perifrics entrada (teclat, ratol, ...) i perifrics
sortida (pantalla, impressora, ...)
Anlisi dusuaris i tasques Casos ds
Procs de disseny basat en el prototipatge
Equip de dissenyadors:
Coneixement del domini del sistema participaci usuari final
Coneixements en orientaci a objectes programadors
Coneixements en sociologia, psicologia i fisiologia psiclegs, ...
Coneixements en medis presentaci informaci dissenyadors grfics, ...
Disseny de la Capa Presentaci: Introducci 6
Disseny Extern
Disseny Extern (de la Capa Presentaci) consisteix en el disseny
dels elements (tangibles) que lusuari veu, sent i toca al
interaccionar amb el sistema.
El disseny extern consisteix en la definici de:
Mecanismes com lusuari pot demanar peticions al sistema
Mecanismes dinteracci
Formes com es poden mostrar els resultats daquestes peticions a
lusuari Presentaci de la informaci
Exemples:
Mecanismes interacci: escriure comandes, tecles funci, apuntar
objectes/mens amb ratol o pantalla tctil, comandes orals ...
Presentaci de informaci: formats grfics, imatges, textual, vdeo;
presentaci a pantalla o en llistat imprs; ...
131 131
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 7
Disseny Extern: Mecanismes dinteracci
Principis bsics pel disseny de la interacci amb el sistema:
Integritat conceptual en la interacci (seqncia daccions, abreviatures, ...)
Mnim nombre daccions a realitzar (selecci en lloc dintroducci de dades,
evitar introducci dades redundants, ...)
Memria a curt termini usuari mnima (no cal recordar llistes de codis o
comandes complexes, ...)
Compatibilitat entre presentaci informaci i dades introdudes (format
entrada dades similar al de presentaci, ...)
Flexibilitat en la introducci de dades per part de lusuari (permetre entrada
dades en una seqncia diferent per a usuaris experts, ...)
Donar resposta a cada requesta de lusuari.
Disseny de la Capa Presentaci: Introducci 8
Principis bsics pel disseny de la presentaci dinformaci:
Integritat conceptual en la presentaci (formats, colors, terminologia, ...)
Assimilaci eficient de la informaci per part de lusuari (format de
presentaci familiar a lusuari)
Memria a curt termini usuari mnima (no cal recordar informaci de
pantalles anteriors)
Compatibilitat entre presentaci informaci i dades introdudes (mateixos
camps dentrada i sortida)
Flexibilitat per controlar la presentaci dinformaci per part de lusuari
(permetre canvis en formats, ordre, ...)
Missatges derror clars, informatius i orientatius.
Disseny Extern: Presentaci de la Informaci
132 132
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 9
Disseny Intern
Disseny Intern (de la Capa Presentaci) consisteix en dissenyar els
mecanismes que recullen, processen i donen resposta a les requestes
de lusuari.
El disseny intern i disseny extern es realitzen en parallel o
iterativament.
En una arquitectura lgica en tres capes cal definir, a ms a ms, la
comunicaci entre Capa Presentaci i Capa Domini.
Disseny Intern =>
Disseny mecanismes gestionen la Interacci
Disseny mecanismes permeten Presentaci Informaci
Disseny mecanismes de comunicaci Capa Presentaci i Capa Domini
Disseny de la Capa Presentaci: Introducci 10
Estructura lgica de la
Capa Presentaci (GUI):
Disseny Intern
Manipulador dEsdeveniments de Presentaci
Comunicaci amb Capa Domini
Gesti Interacci
amb Usuari
Presentaci
Informaci
Capa Domini
esdeveniments de presentaci
esdeveniments de sistema
Capa
Presentaci
133 133
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 11
Disseny Intern
Manipulador dEsdeveniments de Presentaci
Interfcies dUsuari Grfiques (GUI) basades en esdeveniments.
Com es comuniquen aquests esdeveniments a la Capa Presentaci?.
Comunicaci del sistema software amb el sistema operatiu.
Gesti Interacci amb Usuari
Controlar la recepci desdeveniments de presentaci del manipulador.
Processar aquests esdeveniments i generar esdeveniments de sistema als
objectes que els han de processar.
Presentaci Informaci
Recepci de les dades a presentar a lusuari (pantalla, impressora).
Presentaci de les dades en els formats especfics de lusuari.
Comunicaci amb Capa Domini
Enviar esdeveniments de sistema a processar.
Rebre respostes a aquests esdeveniments.
Disseny de la Capa Presentaci: Introducci 12
Disseny Intern
Manipulador dEsdeveniments de Presentaci
Gesti dEsdeveniments
Gesti Interacci amb Usuari
Patr Model-Vista-Controlador
Presentaci Informaci
Patr Model-Vista-Controlador
Comunicaci amb Capa Domini
Patr Observador
Event Delegation Model de JAVA 1.1
134 134
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 13
Punt de Partida
Descripci dels Casos ds.
Cal adaptar-los al disseny (de pantalles i finestres) definits durant el
Disseny Extern.
Cas ds : Admetre Soci
Actor: Administrador
Objectiu: Admetre un soci I els seus familiars com a
membres del club.
Descripci General: . . .
Seqncia desdeveniments:
Acci Resposta
1. Introduir nom, adrea i e-mail del soci 2. Se li assigna nmero de soci
3. Es dna d alta com a nou soci
4. Introduir numero de compte on carregar
pagament de rebuts.
5. Es guarda el compte on carregar rebuts
6. Introducci nom, adrea i e-mail dels familiars
7. Es donen d alta els seus familiars
Disseny de la Capa Presentaci: Introducci 14
Punt de Partida: Disseny Extern
Numero Compte Corrent
endavant plega
Assignaci Compte
D
Nom
adrea
e-mail
endavant plega
Alta de soci
A
B
C
Numero Soci
Ok
Nmero de Soci
135 135
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Introducci 15
Punt de Partida: Cas ds dissenyat
Cas ds : Admetre Soci
. . .
Acci Resposta
1.1. Ladministrador introdueix el nom del soci a A
i introdueix ladrea a B. En cas de tenir una adrea
E-mail, aquesta sintrodueix a C.
1.2. Si es vol donar dalta aquest nou soci, cal pitjar
el bot Endavant. En cas de voler cancelar lalta,
cal prmer el bot Plegar. El bot Plegar, finalitza
la admissi dun soci.
2.1. El sistema genera un nou nmero de
soci que guarda amb les dades anteriors.
2.2. El sistema mostra el nmero de soci en
una finestra auxiliar.
1.3. Cal prmer el bot Ok per continuar amb
ladmissi del soci.
3.1 Es dona d alta com a nou soci
3.2. Apareix la finestra Assignar Compte
Corrent.
4.1. En aquesta finestra ladministrador introduir el
compte corrent a (D), on cobrar els rebuts pendents.
Si es prem, el bot Plegar, es retorna a la finestra
anterior per a donar dalta un nou soci.
. . . .
Disseny de la Capa Presentaci: Introducci 16
Bibliografia
Collins, D.
Designing Object-Oriented User Interfaces.
Benjamin/Cummings Publishing Company, 1995.
(Cap. 1, 5, 6, 11)
Shneiderman, B.
Designing the User Interface.
Strategies for Effective Human-Computer Interaction (3 edici).
Addison-Wesley, 1998. (Cap. 2)
Larman, C.
Applying UML and Patterns.
An Introduction to Object-Oriented Analysis and Design.
Prentice Hall, 1998. (Cap. 16)
136 136
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 1
Patr Model-Vista-Controlador
Descripci General
Soluci: Estructura
Comportament
Conseqncies
Implementaci
Exemple
Bibliografia
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 2
Descripci General (I)
Context:
Sistemes software interactius amb interfcies dusuari flexibles.
Problema:
La informaci proporcionada pel sistema software i el seu comportament han de
reflectir immediatament les manipulacions de la informaci.
Pot interessar mostrar la mateixa informaci a diverses finestres en diferents
formats.
Shauria de poder canviar la interfcie dusuari quan el sistema software ja est
implantat sense que aix afects el codi del nucli del sistema.
El Patr Model-Vista-Controlador s un patr arquitectnic
137 137
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 3
Descripci General (II)
Soluci:
Descomposar el sistema en tres components:
Model (procs): inclou la implementaci de les funcionalitats i les dades
del sistema.
Vista (sortida): mostra la informaci a lusuari final
Controlador (entrada): responsable de gestionar la interacci amb lusuari
La Capa de Presentaci inclou els components:
Vista: presentaci dinformaci
Controlador: mecanisme dinteracci
El Model representa la Capa de Domini (i Gesti de Dades) del sistema
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 4
Soluci: estructura esttica
Observador
actualitzar
*
Model
dades
afegir(observador)
treure(observador)
notificar()
obtenirDades()
servei()
Vista
inicialitzar (model)
ferControlador()
activar()
actualitzar()
mostrar()
Controlador
inicialitzar(model, vista)
tractarEsdev (esdev.)
actualitzar()
1 1
1
Amb
T
En general, hi ha tantes parell es Vista-Controlador com informacions i formats
diferents es vulguin mostrar dun model determinat.
Les operacions actualitzar (dels controladors), mostrar i tractarEsdev
sacostumen a redefinir a les subclasses de vista i controlador que es defineixin
per a un model determinat
138 138
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 5
Descripci General: Model
Model:
Encapsula les funcionalitats i les dades del sistema.
s independent dels mecanismes de presentaci dinformaci i dinteracci
amb lusuari.
Proporciona al Controlador els serveis per satisfer les peticions de lusuari.
Mant un mecanisme de coordinaci amb les Vistes i Controladors associats
(patr Observador), per notificar-los qualsevol canvi en el seu estat.
Model
...
afegir(observador)
treure(observador)
notificar()
obtenirDades()
servei()
Afegir i treure permeten gestionar observadors associats
Notifica als observadors que s han produt
canvis en lestat del Model
Permet a la Vista i al Controlador obtenir dades modificades
del Model (1 operaci per cada tipus dinformaci a presentar)
Implementa les funcionalitats del sistema que pot invocar
el Controlador (1 operaci per cada funcionalitat)
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 6
Descripci General: Controlador
Controlador:
Lusuari interactua amb el sistema nicament mitjanant controladors
Gestiona els esdeveniments de presentaci i de modificaci del model
generats per lusuari.
La forma com rep aquests esdeveniments depn de la plataforma utilitzada
per interactuar amb lusuari (Manipulador desdeveniments).
Tradueix els esdeveniments de presentaci en:
invocacions a serveis proporcionats pel Model.
peticions de funcionalitats prpies de la Vista.
El comportament del Controlador pot dependre de lestat del Model.
associa el controlador a la Vista i al Model
rep un esdeveniment
el valor del parmetre determina la funcionalitat a tractar
actualitza el comportament del controlador
Controlador
inicialitzar (model, vista)
tractarEsdev (esdev.)
actualitzar()
139 139
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 7
Descripci General: Vista
Vista:
Permet presentar informaci del model a lusuari. Hi pot haver diverses vistes
dun mateix model.
La informaci que mostra es pot veure afectada per canvis en lestat del Model.
T associat un Controlador que gestiona, si sescau, els esdeveniments de
modificaci del Model.
Pot proporcionar operacions que permeten que els controladors gestionar la
modificaci del display (paginaci, moure finestra, iconificar, ...).
Vista
inicialitzar(model)
ferControlador()
activar()
actualitzar()
mostrar()
...
associa el Model a la Vista
mostra dades a pantalla
actualitza el contingut de la Vista
permet activar la Vista
crea el Controlador associat a aquesta Vista
operacions de presentaci de la informaci a la pantalla
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 8
Comportament: inicialitzaci del patr MVC
:Main
m:Model
v:Vista
inicialitzar(m)
ferControlador
afegir(v)
c:Controlador
inicialitzar(m,v)
afegir(c)
A partir daqu ja es poden comenar a
tractar els esdeveniments
...
Inicialitzar el patr MVC suposa associar
estti cament un model amb les seves
vistes i controladors.
140 140
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 9
Comportament: gesti dun esdeveniment (I)
:Controlador :Model
tractarEsdev(servei)
servei
<- Capa Presentaci
...
es realitzen les accions
necessries a la capa de domini
per efectuar el servei
tantes operacions servei com
esdeveniments tracti el sistema
notificar
:Iterador
tots-obs
actualitzar
:Observador
first
isDone
currentItem
next
*
<- Capa Domini -> Capa Presentaci ->
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 10
Comportament: gesti dun esdeveniment (II)
:Controlador
:Model
actualitzar
obtenirDades
:Vista
actualitzar
mostrar
:Model
obtenirDades
- Obt la informaci del model, rellevant
a la vista i al controlador
- No t perqu ser la mateixa informaci
i, aleshores, no ser la mateixa operaci
Actualitzaci dels observadors:
Si el controlador modifica el comportament
141 141
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 11
Conseqncies
Beneficis:
Es poden tenir diverses Vistes associades a un mateix Model.
En temps dexecuci puc tenir diverses vistes obertes.
Les Vistes i Controladors estan sincronitzats davant canvis en el Model.
Fcil reutilitzaci de Vistes i Controladors.
Alta portabilitat de la Capa Presentaci.
Acoblament baix entre Capa Domini i Capa Presentaci.
Inconvenients:
Afegeix complexitat a sistemes amb interfcies simples.
Alt acoblament entre Vista i Controlador.
No hi ha encapsulament de dades depenents de la plataforma grfica, per
facilitar portabilitat.
Variants al Patr:
Patr Presentaci-Abstracci-Control.
Patr Document-Vista.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 12
Aspectes a considerar
Canvis freqents en lestat del Model poden comportar actualitzacions
innecessries a vistes (inactives o iconificades) i reduir-ne leficincia.
En sistemes amb ms duna vista oberta, hi haur diversos controladors
actius. Els esdeveniments rebuts han de transmetres als controladors
en un ordre especfic (Patr Cadena de Responsabilitats).
Definici de Vistes i Controladors com a especialitzacions daltres
permet la reutilitzaci, herncia i redefinici doperacions.
142 142
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 13
Exemple: deute total del club de tennis
Diagrama de classes de disseny (inicial)
- Es vol visualitzar contnuament per pantalla el deute total del club de tennis
- El deute total del club de tennis es modifica mitjanant ferRebuts i pagRebut
- El comportament del controlador no depn de lestat del model
Soci
nmSoci: Integer
deute?(): Import
Crrec
data: Date
import: Import
desc.: String
Rebut
mesEmissi: Mes
import: Import
pagat: Boolean
T * * 1 0..1
A
Club
tot-deute: Import
1
Correspon
*
1
CompteCorrent
nmcc: Date
saldo: Import
Del
1
*
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 14
Exemple: estructura MVC
Observador
actualitzar
*
Model
afegir(observador)
treure(observador)
notificar()
tot-deute?(): Import
pagRebut(nmSoci,mes)
ferRebuts(data)
Vista
inicialitzar (model)
ferControlador()
activar()
actualitzar()
mostrar()
Controlador
inicialitzar(model, vista)
tractarEsdev (esdev.)
actualitzar()
1 1
1
Amb
T
Club
tot-deute: Import
tot-deute?(): Import
pagRebut (nmSoci,mes)
ferRebuts (data)
1 ContTotalDeute
VistaTotalDeute
mostrar()
set-text(imp)
operaci de presentaci dinformaci
serveis oferts pel model
correspon a obtenirDades
op. ganxo
esdev pot ser
pagarRebut o ferRebut
Com que noms hi ha un model, una vista i un
controlador, les jerarquies es podrien col.lapsar
143 143
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 15
Exemple: inicialitzaci del MVC
:Main
c:Club
v:VistaTotalDeute
inicialitzar(c)
ferControlador
afegir(v)
ctr:ContTotalDeute
inicialitzar(c,v)
afegir(ctr)
A partir daqu ja es poden comenar a
tractar els esdeveniments
...
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 16
Exemple: gesti de pagRebut (I)
ctr:ContTotalDeute c:Club
:Rebut
tractarEsdev
(pagRebut(nmSoci,mes))
pagRebut
(nmSoci,mes)
dicReb:diccionari
get
:Soci
pagar
pagar-reb
notificar
Capa Domini -> <- Capa Presentaci
:CC
dec-saldo
dec-deute
boole
boole boole
latribut pagat es posa a cert
144 144
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 17
Exemple: gesti de pagRebut (II)
:Club
:Iterador
tots-obs
notificar
actualitzar
:Observador
first
isDone
currentItem
next
*
Capa Domini -> Capa Presentaci ->
Notificaci als observadors, un cop
shan dut a terme els canvis del model
provocats per pagRebut
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 18
Exemple: gesti de pagRebut (III)
:Controlador
:VistaTotalDeute
actualitzar
actualitzar
mostrar :Club
tot-deute?
op. ganxo: no fa res perqu el comportament
del controlador no depn de l estat del model
set-text
modifica, a la pantalla, el valor de l import
corresponent al deute total del club
Actualitzaci del contingut del s observadors
145 145
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 19
Exemple: diagrama de classes resultant
Soci
nmSoci: Integer
deute?(): Import
pagar-reb(imp): Bool
Crrec
data: Date
import: Import
desc.: String
Rebut
mesEmissi: Mes
import: Import
pagat: Boolean
T *
*
1
0..1
A
Club
tot-deute: Import
1
Correspon
*
1
CompteCorrent
nmcc: Date
saldo: Import
Del
1
*
pagar(): Bool
tot-deute?(): Import
tots-obs(): Iterador
dec-deute(import)
pagRebut(nmSoci,mes): Bool.
ferRebuts(data)
dec-saldo(import): Bool
...
Disseny de la Capa Presentaci: Patr Model-Vista-Controlador 20
Bibliografia
Pattern-ori ented Software Architecture. A System of patterns.
F. Buschmann, R. Meunier, H. Rohnert, P.Sommerlad, M. Stal
John Wiley & Sons, 1996.
146 146
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 1
Persistncia en BDOO
Qu s i com saconsegueix la persistncia?.
Antecedents i arquitectura dun SGBDOO.
Model dObjectes i llenguatges despecificaci dobjectes (ODL).
Llenguatge de consulta dobjectes (OQL).
Java binding.
Bibliografia
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 2
Qu s i com saconsegueix la persistncia?
Persistncia: s la capacitat que molts sistemes software requereixen per
emmagatzemar i obtenir dades usant un sistema demmagatzemament
permanent.
Els objectes es poden fer persistents en:
BDOO.
BDR.
Altres.
147 147
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 3
Antecedents i arquitectura dun SGBDOO
Proposta dun estndar per BDOO
ODMG (Object Database Management Group): s un grup de
persones, membres dempreses (JavaSoft, Windward Solution,
UniSQL, ...), que proposen un estndar per treballar amb sistemes de
gesti de Base de Dades Orientades a Objectes.
Objectiu de lestndard:
Portabilitat
Sistemes de gesti de base de dades orientades a objectes:
ObjectStore
O2
. . .
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 4
Antecedents i arquitectura dun SGBDOO
Comparaci amb un SGBDR
Estructures de dades
de laplicaci
Transparncia
de dades
Representaci
relacional
Cpia i traducci
SGBDR
148 148
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 5
Antecedents i arquitectura dun SGBDOO
Arquitectura dun SGBDOO
Model dobjectes: s el model de dades com suportat per tots els
SGBDOO.
Llenguatge despecificaci dobjectes (ODL): llenguatge de definici dels
objectes.
Llenguatge de consulta dobjectes (OQL): llenguatge declaratiu per fer
consultes i modificacions dels objectes de la BD.
Java binding: defineix el lligam entre el model dobjectes i el llenguatge
de programaci Java.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 6
Antecedents i arquitectura dun SGBDOO
Arquitectura dun SGBDOO
Declaracions en
ODL o PL ODL
Codi font de
laplicaci en PL
Compilador PL
Aplicaci
binari
Linkador
Aplicaci
executable
Preprocessador
declaracions
SGBDOO
Runtime
Base de
dades
metadades
accs dades
149 149
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 7
Model dObjecte: Qu s el Model dObjectes?
El model dobjectes especifica el tipus de semntica que pot definir
explcitament un SGBDOO.
Les construccions suportades pel model dobjecte sn:
Objecte i Literal
Tipus
Estat dun objecte
Comportament de lobjecte
BD
Transaccions
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 8
Llenguatge despecificaci dobjectes (ODL)
ODL s un llenguatge despecificaci utilitzat per definir les
especificacions del tipus dobjectes que constitueixen el Model
dObjectes de ODMG.
Principis que han guiat al desenvolupament del ODL:
ha de suportar totes les construccions semntiques del model
dobjectes.
no ha de ser un llenguatge de programaci sencer complet, per si
un llenguatge de definci.
ha de ser un llenguatge de programaci independent.
ha de ser extensible.
ha de ser prctic.
150 150
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 9
Model dObjectes: Objecte
Creaci dobjectes:
En ODL:
Identificador dels objectes: sn generats pel SGBDOO. El domini s la
BD.
Nom dels objectes: Els SGBDOO proporcionen funcions que retornen
lobjecte a partir del nom. Lmbit del nom s la BD.
Vida dels objectes:
Transitria
Permanent
interface ObjectFactory {
Object new();
};
interface Object {
enum Lock_Type{read,write,upgrade};
exception LockNotGranted{};
void lock(in Lock_Type mode) raises (LockNotGranted)
boolean try_lock(in Lock_Type mode);
boolean same_as(in Object anObject);
Object Copy();
void delete();
}; tots els objectes tenen una interfcie
en ODL, que es heretada implcitament
a les definicions dobjectes dels usuaris
tots els objectes sn creats per la invocaci
doperacions de creaci que hi ha en els
objectes fbrica proporcionats pels llenguatges
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 10
Model dObjectes: Objecte i Literal
El model dobjectes suporta:
Col.leccions dobjectes i literals:
En ODL: Set<t>, Bag<t>, List<t>, Array<t>, Dictionary<t,v>
Objectes i literals estructurats:
En ODL: Date, Interval, Time, Timestamp
Literals atmics:
En ODL: long, short, unsigned long, unsigned short, float, double, boolean,
octet, char, string, enum
Literals nulls:
En ODL: nullable_float, nullable_set,...
151 151
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 11
Model dObjectes: Tipus
Un tipus pot tenir una definici externa i una o ms implementacions.
La definici dinterfcie s una especificaci que defineix el comportament
abstracte dun tipus dobjecte.
En ODL: interface Empleat{...}
La definici de classe s una especificaci que defineix el comportament
abstracte i lestat abstracte dun tipus dobjecte.
En ODL: class Persona{...}
La definici de literal fa noms referncia a lestat abstracte dun tipus
dobjecte.
En ODL: struct Complex{float re; float im}
Herncia del comportament:
En ODL: interface Empleat{...} interface Empleat_fix: Empleat {...}
Herncia de lestat i comportament:
En ODL: class Persona{...}
class Persona_empleada extends Persona{...}: Empleat
Extents: conjunt de totes les instncies dun tipus en una BD concreta.
En ODL: class Persona (extent persones) {...}
Key: instncies individuals poden ser identificades pels valors de les
propietats. Lmbit de la clau s lextent.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 12
Atributs: defineixen un estat abstracte dun tipus.
En ODL:
Relacions: es defineixen entre tipus i noms poden ser binries.
En ODL:
1:1
1:n
m:n
Model dObjectes: Estat dun objecte
interface Professor{
relationship curs ensenya
inverse curs::es_ensenyat_per;
};
interface Curs{
relationship professor es_ensenyat_per
inverse professor::ensenya;
};
interface Professor{
relationship set<curs> ensenya
inverse curs::es_ensenyat_per;
};
interface Curs{
relationship professor
es_ensenyat_per
inverse professor::ensenya;
};
interface Curs{
relationship set<professor> es_ensenyat_per
inverse professor::ensenya;
};
interface Professor{
relationship set<curs> ensenya
inverse curs::es_ensenyat_per;
};
class Persona{
attribute short age;
};
El SGBDOO mant la integritat
referencial de les relacions.
152 152
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 13
Model dObjectes: Comportament dun objecte
Operacions (signatura): defineixen el nom de loperaci, el nom i tipus
de cada argument, el tipus de o dels valors que retornen i el nom de les
excepcions.
Model Excepcions: representen operacions que poden donar
excepcions i comunicar resultats.
En ODL:
void acomiadar() raises (no_s_un_empleat)
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 14
Model dObjectes: BD
Cada BD s una instncia del tipus Database, proporcionat pel
SGBDOO.
interface DatabaseFactory {
Database new();
};
interface Database {
void open(in string database_name);
void close();
void bind(in any an_object, in string name);
Object unbind(in string name);
Object lookup(in string object_name);
Module schema();
};
153 153
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 15
Model dObjectes: Transaccions
Hi ha dos tipus definits per suportar lactivitat transaccional en un
SGBDOO.
interface TransactionFactory {
Transaction new();
Transaction current();
};
interface Transaction {
exception TransactionInProgress{};
exception TransactionNotInProgress{};
void begin() raises (TransactionInProgress);
void commit() raises(TransactionNotInProgress);
void abort() raises (TransactionNotInProgress);
void checkpoint() raises (TransactionNotInProgress);
void join();
void leave();
boolean isOpen();
};
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 16
Model dObjectes: Exemple
Persona
dni:String
nom: String
adrea: String
e-mail[0..1]: String
Soci
numSoci: Integer
deute():Import
afegirFamiliar(..)
hihaFamiliar(nom:
String):Boolean
Familiar 1 *
class Persona
(extent Persones
key dni)
{
attribute string dni;
attribute string nom;
attribute string adrea;
attribute string e-mail;
};
class Soci extends Persona
{
attribute short numSoci;
relationship set<Familiar> familiars
inverse Familiar::soci;
short deute();
void afegirFamiliar (in string nom, in string adrea, in
string e-mail) raises (familiar_ja_existeix);
boolean hihaFamiliar(in string nom);
};
poblaci de Persones
clau de Persona
navegabilitat
doble
herncia de lestat
i comportament
operaci amb
excepcions
Diagrama de classes de disseny
class Familiar extends Persona
{
relationship soci
inverse Soci::familiars;
};
154 154
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 17
Llenguatge de consulta dobjectes (OQL)
El disseny del llenguatge (OQL) est basat en els segents principis:
Est basat en el Model Objecte de ODMG.
Molt semblant a SQL92.
Proporciona primitives dalt nivell per treballar amb col.leccions.
Es un llenguatge funcional on els operadors es poden composar.
Proporciona un accs fcil a un SGBDOO.
Pot ser invocat des doperacions escrites en altres llenguatges i al contrari.
No t operadors dactualitzaci, sino que utilitza els mtodes dels objectes.
Proporciona un accs declaratiu als objectes.
La semntica formal pot ser fcilment definida.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 18
Llenguatge de consulta dobjectes (OQL): Exemple
Exemples de consultes en OQL
typedef set<string> vectad;
vectad (select distinct adrea
from Persones
where nom=Pep)
typedef bag<soci> socs;
socs( select distinct soci(a:nom,b:adrea,c:e-mail)
from Persones
where nom=Pep)
155 155
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 19
Java binding
Principis de disseny del llenguatge:
Principi bsic:
El programador ha de veure el lligam com un llenguatge nic per expressar
operacions de la BD i de laplicaci.
Corol.laris:
Hi ha noms un nic sistema compartit pel llenguatge Java i la base de
dades dobjectes.
El lligam respecta la sintaxi de Java.
Els objectes es convertiran en persistents quan siguin referenciats per
altres objectes persistents de la BD (persistncia per referncia).
El Java binding proporciona :
Un Model Objecte comparable amb el Model Objecte proposat per ODMG.
Java ODL
Java OML
Java OQL
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 20
Java binding: Model Objecte
El Model Objecte de Java suporta totes les caracterstiques del Model
Objecte de ODMG excepte:
Relacions.
Extents.
Claus.
No hi ha literals estructurats.
156 156
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 21
Java binding: Java ODL i Java OML
Java ODL ens permet descriure lesquema de la BD com un
conjunt de classes Java utilitzant sintaxi Java a excepci dels
elements que no suporta el Model Objecte de Java.
Java OML s la sintaxi utilitzada per crear, esborrar, identificar,
referenciar, obtenir i modificar valors i invocar mtodes
dobjectes persistents. Totes les operacions de Java OML sn
invocades en els objectes Java apropiats com si fossin
objectes transitoris.
La persistncia dels objectes s per referncia.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 22
Java binding: JavaOQL
Totes les funcionalitats de lOQL estan disponibles mitjanant Java
binding. Aquesta funcionalitat pot ser usada:
Mtodes de consulta a les classes col.lecci.
Consultes utilitzant classes OQLQuery
Collection query(String predicate)
class OQLQuery {
public OQLQuery() {}
public OQLQuery(String Query){...}
public create(String Query){...}
public bind(Object parameter){...}
public Object execute() throws ODMGException{...}
};
157 157
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 23
Java binding: Arquitectura dObjectStore
host
host host
host
host host
network
Cache Manager Cache Manager Cache Manager
Cache Manager
Client Application Client Application Client Application
Client Application
Client Application
Server
Server
disk
disk
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 24
Java binding
Exemple dutilitzaci del Java binding amb ObjectStore/1
Persona
dni:String
nom: String
adrea: String
e-mail[0..1]: String
Soci
numSoci: Integer
deute():Import
afegirFamiliar(..)
hihaFamiliar(nom:
String):Boolean
Familiar 1
*
abstract class Persona {
String nom;
String adreca;
String email;
// Constructor:
public Persona(String nom, String adreca, String email) {
this.nom = nom; this.adreca = adreca; this.email = email;
}
public String obtenir_nom() { return nom; }
public String obtenir_adreca() { return adreca; }
public String obtenir_email() { return email; }
public void posar_nom(String nom) { this.nom = nom; }
public void posar_adreca(String adreca) { this.adreca = adreca; }
public void posar_email(String email) { this.email = email; }
}
class Familiar extends Persona {
Soci s;
public Familiar(String nom, String adreca, String email,Soci s) {
super(nom,adreca,email);
this.s=s;
s.posar_familiar(this);
}
}
Definici de lesquema
158 158
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 25
Java binding
Exemple dutilitzaci del Java binding amb ObjectStore/2
import COM.odi.*;
import COM.odi.coll.*;
class Soci extends Persona {
int numSoci;
Set familiars;
// Constructor:
public Soci(String nom, String adreca, String email,int numSoci,Placement placement) {
super(nom,adreca,email);
this.numSoci=numSoci;
familiars=NewCollection.createSet(placement) ;
}
public int obtenir_numSoci() { return numSoci; }
public void posar_familiar(Familiar f) {
familiars.insert(f);
}
}
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 26
Java binding
Exemple dutilitzaci del Java binding amb ObjectStore/3
import COM.odi.*;
public
class Exemple {
public static void main(String argv[]) {
String dbName = argv[0];
// Aquesta linia inicialitza ObjectStore
ObjectStore.initialize(null, null);
Database db = createDatabase(dbName);
readDatabase(db);
}
static Database createDatabase(String dbName) {
// Es crea una BD cada vegada que es crida a l'aplicacio
try {
Database.open(dbName,ObjectStore.OPEN_UPDATE).destroy();
} catch (DatabaseNotFoundException e) {
}
//Crida al metode de creacio de la BD.
Database db = Database.create(dbName, ObjectStore.ALL_READ | ObjectStore.ALL_WRITE);
// Comenca una transaccio d'actualitzacio
Transaction tr = Transaction.begin(ObjectStore.UPDATE);
//Creacio dels socis
Soci pep = new Soci("Pep", "C/Balmes", "pep@lsi.upc.es",1,db);
Soci josep = new Soci("Josep", "C/Sants","josep@lsi.upc.es",2,db);
//Creacio de dos punts d'entrada a la BD
db.createRoot("Pep", pep);
db.createRoot("Josep", josep);

operaci de la classe Database
operaci de la classe Transaction
operaci de creaci dun objecte
a la BD
operaci de punts dentrada a la BD
Definici dels programes
159 159
Els autors, 2001; Edicions UPC, 2001.
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 27
Java binding
Exemple dutilitzaci del Java binding amb ObjectStore/4
Familiar maria = new Familiar("Maria", "C/Balmes" , "maria@lsi.upc.es",pep);
Familiar joan = new Familiar("Joan", "C/Pelai" , "joan@lsi.upc.es",pep);
Familiar pere = new Familiar("Pere", "Rda. Universitat" , "pere@lsi.upc.es",josep);
// Final de la transaccio. Es guarden els objectes peristents a la BD.
tr.commit();
return db;
}
static void readDatabase(Database db) {
// Comena una transaccio de lectura
Transaction tr = Transaction.begin(ObjectStore.READONLY);
// Utilitzem els punts d'entrada per obtenir els objectes.
Soci pep = (Soci)db.getRoot("Pep");
Soci josep = (Soci)db.getRoot("Josep");
//Final de la transaccio de lectura
tr.commit();
}
}
Disseny de la Capa de Gesti de Dades: Persistncia en BDOO. 28
Bibliografia
Object Database Standard: ODMG 2.0
Catell R.G.G, Barry Douglas, Bartels Dirk et al.
Morgan Kaufmann Publishers, Inc.
160 160
Els autors, 2001; Edicions UPC, 2001.

You might also like