Beruflich Dokumente
Kultur Dokumente
delCurso
ConceptosbsicosdeOrientacinaObjetos
AnlisisOrientadoaObjetos:
Modeladodeldominio
Comportamientodelsistema
Curso2013 DiseoOrientadoaObjetos:
Diseodeinteracciones
Diseodeestructura
ImplementacinOrientadaaObjetos:
Codificacin
Programacin4Curso2013 2
AsignaturasPosteriores Bibliografa
TallerdeProgramacin: ApplyingUMLandpatternsCraigLarman PrenticeHall(2Ed.2001)
ISBN9780130925695.Nota:estelibroutilizaunaversin1.xde
Semestre6
UML
IngenieradeSoftware: UMLDistilledMartinFowlerAddisonWesley(3Ed.2003)ISBN978
Semestre7 0321193681.Nota:estelibroutilizalaversin2.0deUML
DesignPatternsErichGamma,RichardHelm,RalphJohnson,John
ProyectodeIngenieradeSoftware: VlissidesAddisonWesley(1995)ISBN0201633612
Semestre8 CmoprogramarenC/C++H.M.DeitelyP.J.DeitelPrenticeHall
(1995)ISBN9688804711
BasesdeDatos,TalleresdeSistemasdeInformacin
(TSI) ParaverlaBibliografaComplementariaascomolarelacin
TemasCaptulosverlaWebdelcurso.
Programacin4Curso2013 3 Programacin4Curso2013 4
ProcesodeDesarrollo
Ques?
Unprocesodedesarrollodesoftwaredescribeun
enfoqueparaconstruir,instalarymantenersistemas
desoftware
DesarrolloOrientadoaObjetos Porqunecesitamosuno?
Esnecesarioconocerdeantemanoquactividades
basadoenUML debemosrealizar
Liberacin
Mantenimiento
OtroModelo Caractersticas
IterativoeIncremental(I&I): Sedivideelproblemaenvariossubproblemas
Las iteraciones se producen en Construccin
Se itera sobre una mini cascada donde se resuelve
Relevamiento
cadasubproblema:
for each (sp:Subproblema) {
analisis(sp);
diseo(sp);
Construccin implementacion(sp);
testeo(sp);
}
Liberacin Enlaiteraciniseresuelvespillevndoseresueltos
lossubproblemas:sp1,sp2, , spi-1
Mantenimiento
CasodeEstudio CasodeUso
GestindecuentasenbancosatravsdeATMs(cajeros
automticos):
AtravsdeunareddeATMs,losclientesaccedenasus Nombre AgregarCancin Actor Usuario
cuentassobrelascualesrealizantransacciones Sinopsis Elcasodeusocomienzacuandoelusuarionecesitaagregaruna
nuevacancinalsistema.Paraelloespecificasuttuloyelaoen
(depsitosyretiros)
quesecompuso.LuegoElsistemamuestraunalistaconlos
Lascuentaspuedensercompartidaspormsdeun GnerosyotraconlosArtistasyelusuarioseleccionacules
cliente agregaalacancin.Finalmentesi lainformacinescorrecta,seda
dealtalacancinenelsistema
EnfoqueOrientadoaObjetos DesarrolloOO
Unaaplicacinorientadaaobjetoseselresultadode Lospasosgeneralesdedesarrollosemantienenenel
lacodificacinenunlenguajedeprogramacin enfoqueorientadoaobjetos
orientadoaobjetosdelsiguienteesquema: Perolasactividadesqueconstituyenalgunosdeellosson
particulares:
m m1 m3
o1 AnlisisAnlisisOrientadoaObjetos
o2 o3
DiseoDiseoOrientadoaObjetos
m2 ImplementacinImplemenentacinOrientadaaObjetos
o4 m4
o5
DesarrolloOO(4) AnlisisOrientadoaObjetos
UMLeselestndarparamodeladodesoftware Considerareldominiodelaaplicacinysusolucin
lgicaentrminosdeconceptos(cosas,entidades)
Esunlenguajequepuedeseraplicadocualquierasea
elmtodoparticulardedesarrollarsoftware Conceptoclave:abstraccin
orientadoaobjetos Objetivo:encontrarydescribirlosconceptosenel
Utilizaremosalgunosdesusdiagramasparaasistir dominiodelaaplicacin:
nuestrodesarrollo Estopermitecomprendermejorlarealidadyel
problema
modelado)existeunisomorfismoentreestos
conceptosyloselementosqueparticipanenel
problemaenlavidareal
Modelo Auto
Casa
Persona
Programacin4Curso2013 DesarrolloOrientadoaObjetosbasadoenUML 21 Programacin4Curso2013 DesarrolloOrientadoaObjetosbasado enUML 22
AnlisisOO::Actividades
AnlisisOO::Dominio
ModeladodeDominio UnModelodeDominiocontienelosconceptosysus
Modelareldominioparacomprendermejorelcontexto relacionesqueseansignificativoseneldominiodel
delproblema
problema
Herramienta:DiagramadeClases
LainformacinesprovistaprincipalmenteporlosCasos
EspecificacindelComportamiento
deUso
contarconunadescripcinmsprecisadequesloque
seesperadelsistema Seincluyenademslasrestriccionesalascualesest
Herramientas:DiagramasdeSecuenciadelSistemay sujetoeldominio
Contratos
Diagramadesecuencia(DSS) CasodeEstudio
Contrato
Operacin ingresarCancion(titulo:string, ao: int)
Comienzaelingresodeunanuevacancinalsistemaespecificando
Descripcin
lainformacinbsica
Pre- 1.Noexisteunacancindenombreigualatitulo
condiciones 2.Elparmetroaonoesmayoralaoactual
Post- Elsistemarecuerdaeltituloyelaoespecificados,parausarse
condiciones posteriormente.
DiseoOO::Actividades
DiseoOO::Interacciones
DiseodeInteracciones
definircmosecomunicanlosobjetospararesolverlas SerealizaunDiagramadeComunicacinpor
operacionesdelsistema operacindelsistema
Herramienta:DiagramadeComunicacin Los objetos protagonistas aparecen sugeridos en el
DiseodeEstructura ModelodeDominio
especificarlaestructuranecesariaparaquetodaslas Elresultadoesperadoeselespecificadoenel
interaccionespuedanocurrir contratodelaoperacinadisear
Herramienta:DiagramadeClasesdeDiseo
DiagramadeClasesdeDiseo
ImplementacinOO
Suobjetivoescodificarenunlenguajede
programacinorientadoaobjetoslasconstrucciones
definidaseneldiseo
Ladefinicindelosobjetosyelintercambiode
mensajesrequierenconstruccionesparticularesenel
lenguajeautilizar
agregarProducto(id,cant)
Cont.1 Message2
Object3
descripcion, subtotal
realizarPago(monto)
Cont.2 Message2
Object3
cambio, recibo
Esc. Tpico
: Sistema
: Cajero
Esc. Alternat. 1
iniciarVenta()
agregarProducto(id,cant)
Cont.1
CasosdeUso .
descripcion, subtotal
.
* [mas productos]
terminarVenta()
Message1
.
total con impuestos
cambio, recibo
Cont.3
Esc. Alternat. n
Message2
Object3
: Sistema
: Cajero
iniciarVenta()
agregarProducto(id,cant)
* *
Association1 Class4
Cont.1
ConceptosBsicosdeOrientacina
Class1 descripcion, subtotal
-atr3
-atr1 * [mas productos]
-atr4 terminarVenta()
Cont.4
cambio, recibo
Object1 Object2
-atr2
Message2
Object3
Objetos(1eraparte)
Class4
Class1 * Association1 * -atr3
-atr1 -atr4
+operacion1()
+oper1()
+operacion2()
+oper5()
*
Class2 Class3 * Association2
-atr2
+oper2() +oper4()
+oper3()
Programacin4Curso2013 DesarrolloOrientadoaObjetosbasadoenUML 37
Contenido
ConstruccionesBsicas
Relaciones
Despacho
Programacin4Curso2013 ConceptosBsicos(1eraparte) 2
CasodeEstudio CasodeEstudio(2)
Caso:UsuariocreaCancionesenlabibliotecade
msica
Responsabilidad:Crearlacancinen labibliotecay
asociarlacorrectamenteconelrestoconlosgneros
yartistascorrespondientes
Objeto Identidad
Unobjetoesunaentidaddiscretaconlmitese
identidadbiendefinidos Esunapropiedadinherentedelosobjetosdeser
distinguibledetodoslosdems
Encapsulaestadoycomportamiento:
Dosobjetossondistintosaunquetenganexactamente
Objeto Variable Tradicional losmismosvaloresensuspropiedades
C C Conceptualmenteunobjetononecesitadeningn
mecanismoparaidentificarse
E C vs. E C
C C Laidentidadpuedeserrealizadamediantedirecciones
dememoriaoclaves(peroformandopartedela
Esunainstanciadeunaclase infraestructurasubyacentedeloslenguajes)
Clase(3) Atributo
Esunadescripcindeuncompartimientodeuntipo
Paracrearunobjetosedefinenconstructores
//por defecto (sin parmetros) especificadodentrodeunaclase
Cancion::Cancion () Puedeser:
//comn (con parmetros)
Cancion::Cancion(string titulo, int anio) DeInstancia:Cadaobjetodeesaclasemantieneun
//por copia valordeesetipoenformaindependiente
Cancion::Cancion(Cancion &) DeClase:Todoslosobjetosdeesaclasecompartenun
mismovalordeesetipo
Paradestruirunobjetosedefineundestructor
Cancion::~Cancion();
Mtodo OperacinyMtodo
class Genero {
Eslaimplementacindeunaoperacinparauna private:
determinadaclase string nombre;
public: Operacin
Especificaelalgoritmooprocedimientoquegenerael
resultadooefectodelaoperacin string getNombre();
};
string Genero::getNombre(){
return "el genero es" + nombre;
}
Mtodo para getNombre() en Genero
AccesoaPropiedades AccesoaPropiedades(2)
Losatributosdeberanserprivadosylas
Laspropiedadesdeunaclasetienenaplicadas operacionespblicas:
class Genero {
calificadoresdeacceso private:
EnC++unapropiedaddeunobjetocalificadacon: string nombre;
public:puedeseraccedidadesdecualquierpuntodesde public:
elcualsetengavisibilidadsobreelobjeto string getNombre();
};
private:puedeseraccedidasolamentedesdelos
string Genero::getNombre() {
mtodosdelapropiaclase return nombre;
protected:enC++permitevisibilidadalaclaseysu }
derivada Genero *g = ;
// cdigo no vlido fuera de la clase
Otroslenguajespuedendefinirdiferentestiposde g->nombre
acceso // cdigo vlido
c->getNombre()
Programacin4Curso2013 ConceptosBsicos(1eraparte) 18 Programacin4Curso2013 ConceptosBsicos(1eraparte) 19
DataType DataType(2)
Esundescriptordeunconjuntodevaloresque Muchoslenguajesdeprogramacinnotienenuna
carecendeidentidad construccinespecficaparadatatypes
Datatypespuedensertiposprimitivospredefinidos Enesoscasosseimplementancomoclases:
como: Susinstanciasseranformalmenteobjetos
Strings
Nmeros
Fechas
Tambintiposdefinidosporelusuario,como
enumerados
DataType(3) DataValue
class Complejo { Esunvalornicoquecarecedeidentidad,una
private: instanciadeundatatype
float i, j; Undatavaluenopuedecambiarsuestado:
public:
Esoquieredecirquetodaslasoperacionesaplicables
Complejo (int i, int j);
Complejo operator+ (Complejo &); son funciones puras (sin efectos secundarios) o
// ... ... consultas
}; Losdatavaluessonusadostpicamentecomovalores
deatributos
Complejo operator -(Complejo i, Complejo d);
Asociacin
Unaasociacindescribeunarelacinsemnticaentre
clasificadores(clasesodatatypes)
Lasinstanciasdeunaasociacin(links)sonel
conjuntodetuplasquerelacionanlasinstanciasde
dichosclasificadores
Cadatuplapuedeaparecercomomximounasola
vezenelconjunto
Programacin4Curso2013 ConceptosBsicos(1eraparte) 27
Asociacin(2) Link
Unaasociacinentreclasesindicaquees Esunatupladereferenciasainstancias(objetoso
posible conectar entre s instancias de dichas datavalues)
clases
Esunainstanciadeunaasociacin
Cuandosedeseapoderconectarobjetosde
Permitevisibilidadentretodoslasinstancias
ciertasclases,stasdebenestarrelacionadas
participantes
porunaasociacin
UnaasociacinRentreclasesAyBpuede
entendersecomoRAB
Loselementosen Rpuedenvariarconeltiempo
RepresentacindeAsociaciones
Link(2)
Ejemplo:asociacinRentreclasesAyB Casiningnlenguajeproveeconstrucciones
R={<a1,b1>,<a1,b2>,<a2,b3>} especficasparaimplementarasociaciones
Para ello se suelen introducir pseudoatributos
enlasclasesinvolucradas
Objetos de clase A Objetos de clase B
Deestamaneraunlinknoresultaimplementado
a1 b1
exactamenteigualasurepresentacinconceptual
Unatuplaesdivididayuncomponenteesubicado
a2 b2 enelobjetoreferenciadoporelotrocomponente
a3 b3 delatupla
b4
Generalizacin Taxonoma
Unageneralizacinesunarelacintaxonmicaentre
unelemento(clase,datatype,interfaz)msgeneraly
+ general Animales
entreunelementomsespecfico
Elelementomsespecficoesconsistente(tiene
Vertebrados Invertebrados
todassuspropiedadesyrelaciones)conelms
general,ypuedecontenerinformacinadicional
Reptiles Peces Mamferos Aves Moluscos Equinodermos
Placentarios Marsupiales
+ especfico
AncestrosyDescendientes(2)
AncestrosyDescendientes Animales
Losancestrosdeunaclasesonsuspadres(siexisten),
juntoconlosancestrosdestos
Vertebrados Invertebrados
Losdescendientesdeunaclasesonsushijos(si
existen),juntoconlosdescendientesdestos Reptiles Peces Mamferos Aves Moluscos Equinodermos
Unaclaseesclasebasedirectadesushijos,yuna
claseesclasederivadadirectadesuspadres Placentarios Marsupiales
Unaclaseesclasebaseindirectadelosdescendientes
desushijos,yunaclaseesclasederivadaindirectade Ancestros de Marsupiales son {Mamferos, Vertebrados, Animales}
Descendientes de Invertebrados son {Moluscos, Equinodermos}
losancestrosdesuspadres Ave es clase derivada directa de Vertebrados e indirecta de Animales
Vertebrados es clase base directa de Mamferos e indirecta de Marsupiales
Herencia Herencia(2)
Eselmecanismoporelcualsepermite
compartirpropiedadesentreunaclaseysus Sedicequelaclaseheredalaspropiedades
descendientes especificadasporsusancestros
Siunaclasenotieneningnpadreentoncessus Entonceslalosatributosyoperacionesdeuna
propiedadessonlasdefinidasenlamismaclase. clasesonlosquedeclaramslosdesuclasebase
Sitienepadre,entoncessuspropiedadessonlas
delaunindelaspropiasjuntoconlasdesu Sepuededecirqueunaclasederivadaextiendea
padre suclasebase.
RedefinicindeOperaciones RedefinicindeOperaciones(2)
class Artista {
Artista
private: string nombre;
Cuandoenunajerarquadegeneralizacionesse public: virtual string toString(); ATTArtista::nombre
encuentramsdeunmtodoasociadoala };
OpArtista::toString()
string Artista::toString(){
mismaoperacin,sedicequedichaoperacin return nombre; METArtista::toString()
estredefinida }
Elmtodoheredadopuedeserreferenciadoenla Lasobrecarganoesunconceptoexclusivodela
claseBandausandosufirmacompleta( orientacinaobjetos
Artista::toString())
Sobrecargavs.Redefinicin OperacinAbstracta
Laredefinicintratadelamismaoperacin,con Enunaclase,unaoperacinesabstractasinotiene
diferentesmtodos unmtodoasociado
Lasobrecargatratadediferentesoperaciones, Tenerunaoperacinabstractaescondicin
condiferentesmtodos suficienteparaqueunaclaseseaabstracta
Unaclasepuedeserabstractaansintener
operacionesabstractas
ClaseAbstracta(2)
ClaseAbstracta class Lista {
public:
virtual int tamanio() = 0;
Algunasclasespuedenserabstractas: virtual string getElemento(int idx) = 0;
};
Ningnobjetopuedesercreadodirectamenteapartir Observacin:
deellas class Arreglo { Lista es una clase
private: abstracta por tener
Nosoninstanciables int tam; una operacin
string *elementos;
Lasclasesabstractasexistensolamenteparaque public: abstracta.
int tamanio(); Debido a esto, toda
otrasheredenlaspropiedadesdeclaradasporellas string getElemento(int idx); instancia concreta
}; de Lista es un
int Arreglo::tamanio(){
return tam; Arreglo
}
string Arreglo::getElemento(int idx){
return elementos[idx];
}
Programacin4Curso2013 ConceptosBsicos(1eraparte) 54 Programacin4Curso2013 ConceptosBsicos(1eraparte) 55
InstanciaDirectaeIndirecta
SiunobjetoescreadoparaunaciertaclaseC,
entoncessedicequeeseobjetoesinstanciadirecta
deC
Ademssedicequeelobjetoesinstanciaindirecta
detodaslasclasesancestrasdeC
Ejemplo:
Arreglo *a = new Arreglo();
aesinstanciadirectadeArreglo
aesinstanciaindirectadeLista(ysusancestros,sitiene)
Programacin4Curso2013 ConceptosBsicos(1eraparte) 57
Invocacin Despacho
Conlaintroduccindesubsumptionesnecesario
Unainvocacinseproducealaccederauna reexaminarelsignificadodelainvocacinde
propiedaddeunainstanciaqueseaunaoperacin operaciones
Elresultadoeslaejecucindelmtodoquelaclase Suponiendob:ByB<:Aesnecesariodeterminarel
dedichainstancialeasociaalaoperacinaccedida significadodeb.f()cuandoByAasocianmtodos
(despacho) distintosalaoperacinf()
Portratarsedeb:Bresultaranaturalqueelmtodo
despachadoporlainvocacinseaeldelaclaseB
Sinembargoporsubsumptiontambinb:A,porlo
queseraposiblequeelmtodoadespacharseael
delaclaseA
Programacin4Curso2013 ConceptosBsicos(1eraparte) 58 Programacin4Curso2013 ConceptosBsicos(1eraparte) 59
Despacho(2) Referencia
Enestetipodecasoslodeseableesqueelmtodoa Unareferenciaesunvalorentiempodeejecucin
despacharseaelasociadoalaclasedelacualel quees:voidattached
objetoalqueleesaplicadalaoperacinesinstancia
Siesattachedlareferenciaidentificaaunnico
directa
objeto(sedicequelareferenciaestadjuntaaese
Enelejemploanterior,B
objetoparticular)
Siemprequeesposibleeldespachoserealizaen
Siesvoidlareferencianoidentificaaningnobjeto
tiempodecompilacindenominndosedespacho
esttico
Referencia(2) TipoEstticoyDinmico
Cancion *c1 = null; // void Eltipoestticodeunobjetoeseltipodelcualfue
Cancion *c2 = new Cancion(lazy song, 2012); // attached declaradalareferenciaadjuntaal:
Cancion *c3 = *c2; // attached
Seconoceentiempodecompilacin
Eltipodinmicodeunobjetoeseltipodelcuales
titulo=lazysong
ao=2012 instanciadirecta
Enciertassituacionesambostiposcoincidenporlo
getTitulo() quepierdeelsentidorealizartaldistincin
getAo()
c1 c2
c3
Programacin4Curso2013 ConceptosBsicos(1eraparte) 62 Programacin4Curso2013 ConceptosBsicos(1eraparte) 63
TipoEstticoyDinmico(2) TipoEstticoyDinmico(3)
Numero *x = new Racional(1,2);
Ensituacionesespeciales,eltipodinmicodifiere
deltipoestticoyseconoceentiempode TipoEstatico(t) = Numero
ejecucin TipoDinamico(t) = Racional
Estetipodesituacinesenlaquelareferenciaa bool esRacional;
// el usuario ingresa en la consola 1 o 0
unobjetoesdeclaradacomodeunaclase cout << "Quiere un numero racional? ";
ancestradeltipodelobjeto: cin >> esRacional;
Locualespermitidoporsubsumption Numero *x;
if (esRacional)
Secumplelasiguienterelacinentrelostiposde x = new Racional(1,3);
obj: else
TipoDinamico(obj)<:TipoEstatico(obj) x = new Entero(432);
Cul es el tipo dinmico de x?
Programacin4Curso2013 ConceptosBsicos(1eraparte) 64 Programacin4Curso2013 ConceptosBsicos(1eraparte) 65
DespachoDinmico DespachoDinmico(2)
Loslenguajesdeprogramacinorientadosa Derealizarseeldespachoenformaestticase
objetospermitenqueeltipodinmicodeun utilizaraparaellolanicainformacindisponible
objetodifieradeltipoesttico delenesemomento:
Cuandoserealizaunainvocacinaunaoperacin Labasadaeneltipoesttico
polimrfica(queestredefinida)sobreunobjeto Porloquesedespachara(eventualmente)el
utilizandounareferenciaaldeclaradacomode mtodoequivocado:
unadesusclasesancestraspuedenosercorrecto Enparticular,cuandolaoperacininvocadaes
realizareldespachoentiempodecompilacin abstractaenlaclasedeltipoestticonohaymtodo
quedespachar
DespachoDinmico(5)
Numero *x; DespachoDinmico(6)
if (esRacional) Ladecisindequtipodedespachoemplearparauna
x = new Racional(1,3); operacinpuedeestarpreestablecidaenelpropiolenguaje
else odefinidaestticamenteenelcdigofuente
x = new Entero(432); Enalgunoslenguajesdeprogramacineldespachoes
dinmicoparacualquieroperacin(seapolimrficaono)
x->toFloat();
Enotroslenguajes:
Entiempodecompilacin:alpasarporlainvocacinel Lasinvocacionesaoperacionespolimrficassonsiempre
compiladorNOdespachamtodoalguno despachadasdinmicamente
Entiempodeejecucin:alpasarporlainvocacinelambiente
Lasinvocacionesaoperacionesnopolimrficassonsiempre
deejecucindellenguajeseocupadeaveriguareltipo
despachadasestticamente
dinmicodeeydespacharalmtodocorrecto,esdecira:
METRacional::toFloat()oMETEntero::toFloat()
AlgoritmodedespachoC++(simplificado)
DespachoDinmico(9) Elcompiladorbuscalaoperacinsegneltipoesttico.
Sevadirectamentealaclasedeltipoesttico,aldesupadre,luego
aldesuabuelo,yassucesivamentehastaencontrarlaoperacin
class Natural: public Entero {
queseinvoca.
// no define float toFloat();
}; a) Silaoperacinencontradanoesvirtual
Sedespachaelmtododelaclasequelodeclar(despachoesttico)
Numero *arr[3]; b) Silaoperacinencontradaesvirtual
arr[0] = new Racional(1,2); Sedespachaelmtododinmicamentesegneltipodinmico
arr[1] = new Entero(2); (despachodinmico)
arr[2] = new Natural(3); Sevadirectamentealaclasedeltipodinmico(entiempode
ejecucin)ysinohayunmtodoparaesaoperacinsebuscaenel
arr[0]->toFloat(); // Despacha el mtodo de Racional padre,abuelo,etc.hastaencontrarunaclasequedefinaunmtodo
arr[1]->toFloat(); // Despacha el mtodo de Entero paralaoperacin.
arr[2]->toFloat(); // Despacha el mtodo de Entero
Obs: Una operacin es virtual si tiene el calificador virtual en la declaracin o si alguna
clasebasedirectaoindirectadeclaralamismaoperacinconelcalificadorvirtual.
Programacin4Curso2013 ConceptosBsicos(1eraparte) 74 Programacin4Curso2013 ConceptosBsicos(1eraparte) 75
Contenido
EspecificacindeRequerimientos
TiposdeRequerimientos
RequerimientosFuncionales
RequerimientosdeSoftware CasosdeUso
Programacin4Curso2013 Requerimientos&IntroduccinalAnlisis 2
EspecificacindeRequerimientos EspecificacindeReq.(2)
LaEspecificacindeRequerimientosesuninsumo
fundamentaleneldesarrollodesoftware: Representa un contrato con el usuario
Eslaprincipalfuentedeinformacinapartirdelacualse
disea,implementaytesteaelsistema Nosegeneraporcompletoaliniciodelproyecto,sino
Esunodelosaspectosmsdelicadosdeunproyecto:
incrementalmente
Esalgocomplejodeobtener Suelepresentarsecomolaagregacindediferentes
Desucorrectituddependeelxitodelproyecto artefactos
RequerimientosNoFuncionales
RequerimientosFuncionales
yms: Losrequerimientosfuncionalesseexpresabanen
Interfaces:restriccionesenlacomunicacinconsistemas
trminos de funciones del sistema
externos Unafuncindelsistemaesalgopuntualqueel
Restricciones:enelusode sistemadebehacer
Sistemasopaquetesexistentes Tcnicabsica:SiXesunafuncindelsistema,
Plataformas entonceslafraseEl sistema debe hacer Xtiene
Lenguajesdeprogramacin quetenersentido
Ambientesdedesarrollo
Herramientas(sistemasdebasesdedatos,middleware,etc.)
CasosdeUso(2) CasosdeUso(3)
Loscasosdeuso(ysimilares)sonunaherramienta Uncasodeusosecomponede:
muyaplicadaparalaespecificacinde
Nombrequeidentificaalcasodeuso
requerimientosfuncionales
Actoresparticipantesenelcasodeuso
Porserexpresadostextualmenteresultansimples
Sinopsisquedescribebrevementesuobjetivo
decomprender(hastaparapersonalnotcnico)
Cursotpicodeeventosque narra la historia mscomn
Porestarorientadosalosobjetivosdelosactores
delosactoresduranteelusodelsistema
(yalcaminohaciasuobtencin):
Cursosalternativosdeeventosquenarranlasvariantesde
Sonintuitivos
usodelsistema
Propicianlacompletituddeespecificacin
Ejemplo(AltoNivel)
CasosdeUso(6)
Sobreelprincipiodelproyectosetiendeabuscary Nombre EscribirEmail
especificarloscasosdeusomsimportantes Actor Usuario
Loscasosdeusoseusanademscomocriteriode Descripcin El caso de uso comienza cuando el Usuario desea escribir un
correo electrnico. Para ello especifica el cuerpo del correo
particindelproblemaenunprocesoiterativoe electrnico y un asunto. Luego si lo desea el usuario puede
incremental: adjuntar uno o ms archivos de su disco duro en el email. Al
finalizar de escribir el email el sistema especifica una lista de
En una iteracin se desarrolla uno a la vez contactos y el usuario selecciona opcionalmente uno o ms
destinatarios. Para cada destinatario puede especificar que tipo
Los incrementos no refieren a partes fsicas sino a dedestinatariosetrata(Principal,ConCopiaoConCopiaoculta).
conjuntosdefuncionalidades Luego el usuario puede elegir ms destinatarios escribiendo
manualmentesuscorreoselectrnicosyeltipodedestinatarioal
igualquelohizoantes.Alfinalizarelsistemaenvaelcorreoylo
copiaenlacarpetaEnviados.
Programacin4Curso2013 Requerimientos&IntroduccinalAnlisis 15 Programacin4Curso2013 Requerimientos&IntroduccinalAnlisis 16
Ejemplo(Expandido) Qusiguedespus?
CasodeUso:EscribirEmail
Actores:Cliente Unavezdetectadoyespecificadoelconjunto
Sinopsis:ElcasodeusocomienzacuandoelUsuario
deseaescribiruncorreoelectrnico.Paraello[] inicialdecasosdeuso:
EscenarioTpico:
1. UsuarioespecificaCuerpodelcorreoyelasunto
2. ElSistemamuestraunalistadecontactos Elequipodedesarrolloestlistoparaanalizarlos,
3. ElUsuarioseleccionacontactosyespecificaparacadaunoel disearunasolucinparaelloseimplementarlos
tipodedestinatario
4. ElUsuarioespecificamsdestinatariosescribiendosusnombres
yeltipodedestinatario
5. ElUsuariohaceclickenunbotnEnviar Mientrastantoelequipodeanalistasavanzaenla
6. ElSistemaenvaelmail
7. ElSistemacopiaelmailalacarpetaEnviados
deteccinyespecificacindeotroscasosdeuso
Objetivos
Modelareldominiodelproblema:
Paracomprendermejorelcontextodelproblema
Paraobtenerunaprimeraaproximacinalaestructurade
lasolucin
Especificarelcomportamientodelsistema:
Paracontarconunadescripcinmsprecisadequeslo
queseesperadelsistema
Programacin4Curso2013 Requerimientos&IntroduccinalAnlisis 20
Actividades ModeladodelDominio
Paralograrlosobjetivosplanteadosrealizaremoslas Consisteenencontrarydescribirlosconceptosenel
siguientesactividades: dominiodelaaplicacin
ModeladodelDominio Duranteestaactividadseconstruyeel
EspecificacindelComportamientodelSistema ModelodeDominio
Enlseincluyentodosloselementosquesedefinan
duranteestaactividad
ComportamientodelSistema
Consisteen:
Entendercadacasodeusoentrminosdeintercambiosde
mensajesentrelosactoresyelsistema
Especificarelcomportamientodecadaunodeesos
mensajes(perosindecircmofuncionan)
Programacin 4
DuranteestaactividadsecompletaelModelodeCasos CASO DE ESTUDIO :: ANLISIS
deUso
Enlseincluyentodosloselementosquesedefinan
O BJETIVO
duranteestaactividad En este documento se presenta un caso de estudio que servir como gua prctica para la introduccin de la
etapa de anlisis, tanto para las actividades de Modelado de Dominio como de Especificacin del
Comportamiento del Sistema.
DESCRIPCIN DE LA REALIDAD
Se desea construir una aplicacin web que permita la reserva y venta de pasajes de avin. La aplicacin
debe manejar informacin de las personas que realizan las reservas y compran los pasajes. De cada persona
se sabe su nombre (que lo identifica), telfono y edad. Las mismas pueden reservar o comprar mltiples
Programacin4Curso2013 Requerimientos&IntroduccinalAnlisis pasajes, pero para eso
23 deben ser mayores de 18 aos. Las personas deben primero reservar pasajes y en ese
caso se registra la fecha de reserva y el costo de la misma en dicho momento.
Cuando la persona compra la reserva queda responsable de realizar el pago, sea en efectivo o con tarjeta de
crdito. En caso de pagar en efectivo, se aplica un descuento porcentual que es el mismo para todos los
pagos en efectivo. En caso contrario es necesario registrar el nmero de la tarjeta y la cantidad de pagos que
se realizarn.
MODELADO DE DOMINIO ESPECIFICACIN DEL COMPORTAMIENTO DEL SISTEMA
Un posible modelo para la realidad planteada es el siguiente. A continuacin se presentan dos casos de uso del sistema junto con sus respectivos Diagramas de
Secuencia del Sistema y algunos de los contratos de las operaciones involucradas. En los casos de uso se
puede apreciar a dos actores diferentes: el Cliente que interacta con el sistema para la reserva y compra de
pasajes, y el Administrador encargado de las tareas de mantenimiento.
Nota: Los Diagramas de Secuencia del Sistema (DSS) son una extensin de los Diagramas de Secuencia de
UML en donde aparecen los actores enviando mensajes al sistema. Dado que no son parte del estndar,
muchas de las herramientas de modelado no permiten modelar a los actores, salvo mediante un objeto que
lo represente. No obstante, para nuestros propsitos esto ser suficiente.
Alta de Vuelo
Algunas de las restricciones presentes en el modelo son las siguientes: Los contratos de las operaciones correspondientes a los mensajes del DSS anterior son los siguientes.
El nombre de una persona la identifica (unicidad de atributos)
La edad de una persona debe ser mayor o igual a 18 (dominio de atributos) Operacin nuevoVuelo(ae1:string, ae2:string, fecha:Date):int
Los asientos asignados al vuelo que realiza un avin son asientos de ese avin (integridad circular) Descripcin Da de alta un nuevo vuelo
El costo de un pasaje es la suma de los montos de las instancias de AsientoVuelo asociadas menos el Pre y postcondiciones
descuento correspondiente (atributos calculados) Pre: Existe una instancia de Aeropuerto con atributo codigo = ae1
Si un pasaje tiene ms de tres instancias de AsientoVuelo asociadas y el pasaje fue comprado y pago
con tarjeta, entonces al costo se le aplica el descuento de pago en efectivo (regla de negocio) Pre: Existe una instancia de Aeropuerto con atributo codigo = ae2
Post: Se cre una instancia de Vuelo con atributo fecha = fecha y atributo codigo autogenerado
por el sistema
Post: Se cre un link entre la instancia de Vuelo y la instancia de Aeropuerto con atributo codigo =
ae1 con rol origen
Post: Se cre un link entre la instancia de Vuelo y la instancia de Aeropuerto con atributo codigo =
ae2 con rol destino
Programacin 4 Curso 2013 Caso de Estudio - Anlisis 2 Programacin 4 Curso 2013 Caso de Estudio - Anlisis 3
Post: Se retorn el atributo codigo de la instancia de Vuelo creada El DSS correspondiente al caso de uso anterior se muestra a continuacin. Notar que en l mismo, el
Sistema TIENE MEMORIA. Esto se ve reflejado en los comentarios.
Operacin asignarAvion(codVuelo:int, matricula:string)
Descripcin Asigna un avin a un vuelo
Pre y postcondiciones
Pre: Existe una instancia de Vuelo con atributo codigo = codVuelo
Pre: Existe una instancia de Avion con atributo matricula = matricula
Pre: No existe un link entre la instancia de Vuelo y la de Avion
Post: Se cre un link entre la instancia de Vuelo y la de Avion
Post: Para cada instancia de Asiento asociada a la instancia de Avion, se cre una instancia de la clase
de asociacin AsientoVuelo entre el Asiento y el Vuelo con atributo monto = 0
Programacin 4 Curso 2013 Caso de Estudio - Anlisis 4 Programacin 4 Curso 2013 Caso de Estudio - Anlisis 5
Pre: No existe un link de la asociacin compra entre la instancia de Persona recordada por el sistema
Operacin reservarAsiento(codVuelo:int, asiento:int) y la instancia de Pasaje
Descripcin Se reserva un asiento para un vuelo determinado
Pre: No existe un link entre la instancia de Pasaje y una instancia de Pago
Pre y postcondiciones
Post: Se crea un link de la asociacin compra entre la instancia de Persona recordada por el sistema y
Pre: Existe una instancia de Pasaje recordada por el sistema la instancia de Pasaje
Pre: Existe una instancia de Vuelo con atributo cdigo = codVuelo Post: Se crea una instancia de Tarjeta con atributo estado = pendiente, atributo numero =
Pre: Existe una instancia de Asiento con atributo numero = asiento asociada a la instancia de numTar y atributo cantPagos = pagos y se crea un link entre dicha instancia y la instancia de
Vuelo Pasaje
Pre: No existe un link entre la instancia de AsientoVuelo, asociada a las instancias de Vuelo y Post: Se devuelve la suma de los valores del atributo monto de las instancias de AsientoVuelo
Asiento, y una instancia de Pasaje. (el asiento est disponible) asociadas a la instancia de Pasaje
Pre: El sistema recuerda menos de cinco instancias de AsientoVuelo
Operacin cancelarReserva()
Post: Se crea un link entre la instancia de Pasaje recordada por el sistema y la instancia de
AsientoVuelo Descripcin Se cancela la reserva realizada
Pre y postcondiciones
Operacin consultarCosto():float Pre: El sistema recuerda una instancia de Persona y una de Pasaje asociada a entre dos y cinco
Descripcin Se consulta el costo final del pasaje reservado sin los descuentos instancias de AsientoVuelo
Pre y postcondiciones Post: Se elimina la instancia de Pasaje y los links entre sta y las instancias de Persona y
Pre: Existe una instancia de Pasaje recordada por el sistema AsientoVuelo recordadas por el sistema
Post: Se devuelve la suma de los valores del atributo monto de las instancias de AsientoVuelo Post: El sistema deja de recordar informacin
asociadas a la instancia de Pasaje
Operacin comprarPasajeEfectivo():float
Descripcin Se ingresa la responsabilidad de pago en efectivo
Pre y postcondiciones
Pre: El sistema recuerda una instancia de Persona y una de Pasaje asociada a entre dos y cinco
instancias de AsientoVuelo
Pre: No existe un link de la asociacin compra entre la instancia de Persona recordada por el sistema
y la instancia de Pasaje
Pre: No existe un link entre la instancia de Pasaje y una instancia de Pago
Post: Se crea un link de la asociacin compra entre la instancia de Persona recordada por el sistema y
la instancia de Pasaje
Post: Se crea una instancia de Efectivo con atributo estado = pendiente y se crea un link entre
dicha instancia y la instancia de Pasaje
Post: Se devuelve la suma de los valores del atributo monto de las instancias de AsientoVuelo
asociadas a la instancia de Pasaje con el descuento correspondiente al atributo descuento de
Efectivo
ModelodeDominio
Conceptos
Asociaciones
Anlisis Atributos
ModeladodelDominio Generalizaciones
Otroselementos
Restricciones
Programacin4Curso2013 AnlisisModeladodelDominio 3
ModelodeDominio ModelodeDominio(2)
Estenfocadoenconceptosdeldominioynoenentidades Contenido(cont.)
desoftware Relaciones:Relacionesdeasociacinogeneralizacinentre
Contenido: lasclasesquerepresentanconceptos
Introduccin:Brevedescripcinquesirvecomointroduccinal Restricciones:Expresionesquerestringen
modelo lasposiblesinstanciasdelosconceptosdelmodelo
Conceptos:Clasesquerepresentanconceptossignificativos Diagramas:Representaciones(usualmenteunosolo)de
presenteseneldominio conceptos,tiposyrelacionespresentesenelmodelo
Tipos:Datatypesquedescribenpropiedadesdelasclasesque
representanconceptos
Atributos Atributos
Notacin Notacin(2)
Almostrarunatributoesnecesarioespecificaralmenos Alcancedeatributos
sunombre
Propiedadesopcionales
Tipo,multiplicidad,valorinicial,visibilidad,etc. Empleado Empleado
sueldo sueldo
Persona Persona
nombre -nombre[1] : String De instancia De clase
telefono +telefono[*] : String
edad -edad[1] : Integer = 0
Representacin Representacin
mnima completa
Programacin4Curso2013 AnlisisModeladodelDominio 9 Programacin4Curso2013 Anlisis ModeladodelDominio 10
Atributos Atributos
Notacin(3) Sugerencias
Unatributo(ocualquierelemento)queseaderivablese Noutilizaratributoscomoclavefornea
marca con un / Losatributosnodebenserutilizadospararelacionarelementos
Lousualesadjuntarleunanotaespecificandolaformaen delmodelo
quesecalcula
Avion Piloto
nombrePiloto nombre
Persona
edad = hoy - fechaNacim nombre
vs.
fechaNacim
/edad comanda
Avion Piloto
nombre
Atributos Conceptos
Sugerencias(2) IdentificacindeConceptos
Tiposprimitivosynoprimitivos Esmuycomnomitirconceptosenestafase
Lostiposdelosatributossonengeneraltiposprimitivos (identificacin)quepuedenserdescubiertosenunafaseo
(Integer,String,Real,etc.) etapaposterior
AldescubrirlosselosagregaalModelodeDominio
Desernecesarioesposibledefinirtiposnoprimitivosparaun
problema Esposibleencontrarconceptosinteresantesquenotengan
atributos(quetenganunroldecomportamientomsque
datatype
deinformacin)
Venta
Date
fecha:Date
1 datatype
Venta
Date
fecha
Programacin4Curso2013 AnlisisModeladodelDominio 13 Programacin4Curso2013 Anlisis ModeladodelDominio 14
Conceptos Conceptos
IdentificacindeConceptos(2) IdentificacindeConceptos(3)
ComenzarlaconstruccindeunModelodeDominio Listadecategorasdeconceptos:
haciendounalistadeconceptoscandidatos Consisteenrepasarlalistadecategorasdeconceptos
Existendostcnicasparaello: buscandolosconceptosdeldominiodelproblemaque
Listadecategorasdeconceptos apliquenacadacategora
Identificacindesustantivos
Categora Ejemplo
Objetos fsicos o tangibles Avin
Descripciones de cosas DescripcionVuelo
Lugares Aeropuerto
Transacciones Reserva
Roles Piloto
Programacin4Curso2013 AnlisisModeladodelDominio 15 Programacin4Curso2013 Anlisis ModeladodelDominio 16
Conceptos Conceptos
IdentificacindeConceptos(4) IdentificacindeConceptos(5)
Listadecategorasdeconceptos(cont.) Identificacindesustantivos
Lalistasepuedecontinuarcon:
Seidentificanlossustantivosdeunadescripcintextualdel
contenedoresdecosas
problema(visindelproblemay/ocasosdeuso)yselos
cosascontenidasencontenedores
consideracomoconceptosoatributoscandidatos
sistemasexternos
Noesposiblerealizarestaactividadenformatotalmente
sustantivosabstractos
organizaciones
automtica
Ellenguajenaturalesambiguo
eventos
Notodosustantivorefiereaunconceptosignificativo
reglasypolticas
catlogos
registrodeasuntosfinancierosolegales
servicioseinstrumentosfinancieros
Conceptos
Conceptos
Sugerencias(2)
Sugerencias(3)
Nombresymodelado Granularidaddelaespecificacin
Laestrategiadelcartgrafoseaplicatantoala Duranteelprocesodemodelado,esmejorsobre
construccindemapasyaladeModelosdeDominio: especificarconmuchosconceptosdegranularidadfina,
Usarnombresqueexistanenelterritorio quesubespecificar
Excluircaractersticasirrelevantes Elcostodeeliminarunconceptoqueresultinnecesario
Noincluircosasinexistentes esmenorqueeldeagregarunoquefueomitido
Siempreesposibleagregaroeliminarconceptosdurante
elprocesodemodelado
finaliza en
Vuelo Aeropuerto
nombre
Conceptos Conceptos
Sugerencias(6) Sugerencias(7)
Supngaselasiguientesituacin: Enelcasodequeunproductoseagotenadiepodr
Una instancia de Producto representa a un producto saberculeraelpreciodeeseproducto
fsicoenunatienda Esedatoestabaincluidoensolamenteenlas
Unproductotieneunnmerodeserie,unadescripcin,un instanciasqueconformabanelinventario
precioyuncdigo,quenoaparecenenningunaotraparte
Notartambinqueexisteinformacinrepetida
Los que trabajan en la tienda no tienen memoria
Cadavezqueunproductofsicoesvendido,la
correspondiente instancia de Producto es
eliminadadelsistema
Sugerencias(8) Sugerencias(9)
Especificacionesydescripciones: Especificacionesydescripciones(cont.)
Senecesitanconceptosqueseandescripcionesdeotros Ejemplo:
conceptos
Producto p1 : Producto p2 : Producto
Enelcasodelproductonecesitamosuna
numSerie numSerie = "40-51-2" numSerie = "40-51-4"
DescripcionProducto que registre la informacin de los descripcion descripcion = "Video..." descripcion = "Video..."
codigo
productos precio
codigo = "VCR99A"
precio = 270
codigo = "VCR99A"
precio = 270
Estosconceptosnorepresentanlosproductos,sino
informacinacercadeellos vs.
Si todas las instancias de Producto son eliminadas, la
p1:Producto
EspecificacionProducto permanece * 1 EspProducto
numSerie="40512" :EspProducto
Producto
descripcion descripcion="Video..."
numSerie codigo codigo="VCR99A"
precio p2:Producto
precio=270
numSerie="40514"
Asociaciones Asociaciones(2)
Esnecesarioidentificaraquellasasociacionesentre Sedistinguendoscategorasdeasociaciones:
conceptosque: Decomprensin:Permitencomprendermejorelproblema
Seannecesariasparasatisfacerlosrequerimientos Need-to-know:Permitensatisfacerlasrequerimientosde
deinformacin informacin
AyudenalacomprensindelModelodeDominio
Unaasociacinesunarelacinentreconceptosque
indicaalgunaconexininteresanteosignificativaentre
ellos
Engeneralsurgendelconocimientodeunarelacin
quedebeserpreservadaporunaciertotiempo
Asociaciones Asociaciones
AsociacionesaConsiderar AsociacionesaConsiderar(2)
Considerarlainclusindelassiguientesasociaciones: Sugerencias
Asociacionesparalasqueelconocimientodelarelacin Concentrarseenidentificarconceptosmsque
debeserpreservadoporunaciertaduracin(needto asociaciones
know) Evitarmostrarasociacionesderivablesoredundantes
Asociaciones derivadas de la Lista de Asociaciones
Demasiadasasociacionestiendenaconfundirmsquea
Desernecesarioincluirasociacionesdecomprensin ilustrar
Asociaciones
Asociaciones NotacinMultiplicidades(2)
NotacinMultiplicidades
Lamultiplicidadlimitalacantidaddevecesque Seexpresacomounsubconjuntodelosnaturales
unainstanciadeterminadaestconectadaaotras (subrangooenumerado)
atravsdeunaasociacin mNtalquemax(m)>0
Esoseindicaenelextremodeasoc.opuesto asoc Ejemplos:
a1 b1 * Cualquiercantidad(cerooms)
asocAB Indica la cantidad de a1 b2 1..* Almenosuno(unooms)
instancias de B que pueden a2 b2
a3 b1 0..1 Opcionalmenteuno(ceroouno)
conectarse con un A cualquiera
a1 b3 5 Exactamentecinco
a2 b3
3,5,8 Exactamentetres,cincouocho
asoc m
A B
Asociaciones Asociaciones
NotacinRestricciones(2) NotacinRestricciones(3)
Otroejemplo,sidosinstanciasestnconectadaspor Esposibletambinindicarqueexisteunordenentre
unaasociacin,tambinlodebenestarporotra lasinstanciasconlascuales
asociacin otrainstanciaestrelacionada
dueo * *
Persona Empresa Curso
{ordered}
Alumno
{subset}
empleado
Deestaformaunapersonaqueseadueadela Aquinteresaelordendelosalumnosencadacurso
empresatienequeserempleado (porejemploporcdula)
Mano Dedo
1..2 4
Generalizaciones
Generalizaciones Notacin
Esposibleespecificarvariantesdeunconceptocuando
abstracto concreto
Lossubtipospotencialesrepresentanvariantesinteresantes
deunciertoconcepto
Unsubtipoesconsistenteconsusupertipo(seaplica Evaluacion Curso
subsumption) fecha
Todoslossubtipostienenatributoscomunesquepuedenser
factorizadosenelsupertipo enumeration
Examen Parcial InstanciaParcial
Todoslossubtipostienenasociacionescomunesquepueden
minimo inst : InstanciaParcial unico
serfactorizadasenelsupertipo primero
segundo
enumerado
(data type)
Programacin4Curso2013 AnlisisModeladodelDominio 45 Programacin4Curso2013 Anlisis ModeladodelDominio 46
Generalizaciones Generalizaciones
Sugerencias Sugerencias(2)
Modeladodeestados Modeladodeestados(cont.)
Modelarlosestadosdeunconceptosolamentecuando
resulteimprescindibleparacomprenderelproblema Lampara
NomodelarlosestadosdeunconceptoXcomosubtipos
deX Lampara
Paraestoutilizar encendida? : Boolean
Correcto Incorrecto
TiposAsociativos TiposAsociativos(2)
Untipoasociativoesunelementoqueestantoclase IncluirelsueldoenlaPersonanoescorrectoya
comoasociacin
queunaPersonapuedetenermsdeunsueldoy
Motivacinparausartiposasociativos
stedependedeltrabajo
Unaempresacontrataadiferentespersonasparatrabajary
acadaunaleasignaunsueldoparticular IncluirelsueldoenlaEmpresatampocoes
Unapersonapuedesercontratadapordiferentesempresas correctoyaquelaEmpresapagasueldosdistintos
ypuederecibirunsueldodiferenteporcadatrabajo
acadaempleado
Interesasabercuntocobraunapersonaencadatrabajo
Estoconducealanocindetiposasociativos,los
cualespermitenagregarpropiedadesalas
asociaciones
Programacin4Curso2013 AnlisisModeladodelDominio 49 Programacin4Curso2013 Anlisis ModeladodelDominio 50
TiposAsociativos TiposAsociativos
Notacin ModeladoAvanzado
Cmosemodelacuandosenecesitanmltiplesinstancias
delamismaclasedeasociacinpara
* 1..* unmismopardeinstancias?
Empresa Persona
Ejemplo:registrartodoslossueldosdeunapersonadentro
deunaempresa
* 1..*
Empresa Persona
trabaja
sueldo
El tipo asociativo 1
permite Empresa-Persona
representar *
La relacin
multiplicidades
Empresa-Persona
y atributos Trabaja
acepta mltiples
-sueldo
trabajos
Programacin4Curso2013 AnlisisModeladodelDominio 51 Programacin4Curso2013 Anlisis ModeladodelDominio 52
ModelodeDominio ModelodeDominio
ErroresComunes ErroresComunes(2)
Modelarunestadomedianteconceptos Omisindeunaespecificacinparalasinstancias
sinserestrictamentenecesario Incluirelementosdeldiseo(interfaces,dependencia,
Modelarelconceptomsgeneraldelproblemasinser etc.)
necesario Representarasociacionescomoatributos(usode
Modelarundatatypecomoconcepto clavesforneas)
yviceversa Redundanciaysobreespecificacin
Malusodelasclasesdeasociacin Especificareltipodeestructuraenunamultiplicidad
de*
Restricciones Restricciones
Motivacin Motivacin(2)
Permite o considera como vlidos casos como:
Empresa trabajaen Vendedor
Un vendedor vende un producto producido
por una empresa para la cual l no trabaja
1 *
* * e1 : Empresa v1 : Vendedor
Todas las multiplicidades
estn satisfechas!
Producto
(esta configuracin de
produce } |vende objetos es vlida respecto
* 1 e2 : Empresa p1 : Producto al Modelo de Dominio)
Restricciones Restricciones
AdjuntarRestricciones Invariantes
Otraalternativaalproblemaeslaimposicinde Losinvariantespuedenserexpresadosinformalmente
restricciones(enparticularinvariantes) enlenguajenatural
Uninvarianteesunpredicadoqueexpresauna Unejemplodeestopuedeser
condicinsobreloselementosdelModelodeDominioy
quesiempredebeserverdadero Invariante:
Cuandoesevaluadocontraunaciertaconfiguracinde
objetosdandounresultadodefalsosignificaquela Todo vendedor debe vender un producto que
configuracindeobjetosnoesvlida sea producido por la empresa para la cual trabaja
UMLnoespecificaelmodoenqueuninvariantedeba
serexpresado
Puedeutilizarsenotacininformaloformal
Restricciones Restricciones
Ejemplos(2) Ejemplos(3)
trabaja en
Empresa Vendedor trabaja en
/cantEmp edad
Dominio de Atributos Empresa Vendedor
Integridad Circular
1 1..* (Invariante) /cantEmp
1 1..*
edad
(Invariante)
1..* 1..*
1..* 1..*
En la empresa no puede Un vendedor no puede
Producto
haber vendedores mayores Producto vender productos de una
produce } codigo | vende
1..* 1 de 65 aos de edad produce }
1..*
codigo
1
| vende
empresa en la que no
trabaja
Contenido
Introduccin
ModelodeCasosdeUso
LaClaseSistema
InteraccionesconelSistema
Anlisis ContratosdeSoftware
Especificacindel
ComportamientodelSistema
Programacin4Curso2013 Anlisis:ComportamientodelSistema 2
Introduccin Introduccin(2)
Duranteestaactividaddeanlisissebusca
describirenformaprecisaculdebeserel Cadaescenariodeloscasosdeusoaanalizares
entendidoentrminosdeunainteraccinentrelos
comportamientoesperadodelsistema actoresinvolucradosyelsistema
SetrabajasobreelModelodeCasosdeUso Aldescribirelsignificadodecadaunodelosmensajes
Viendoalsistemacomounaunidad identificadosencadainteraccinseestespecificandoel
Sedefinenprotocolosquecaractericenelusodelsistema comportamientodelsistema
porpartedelosactoresencadaescenariodeloscasosde
uso
Elcomportamientocompletodelsistemaesespecificadoal
especificarcadamensajedelosprotocolos
Introduccin(3)
Nosenfocamosenquesloquedebehacerelsistema
antecadamensaje
Laformaencmoelsistemaresuelveinternamenteun
mensajeserdefinidadurantelaetapadediseo
Programacin4Curso2013 Anlisis:ComportamientodelSistema 5
ModelodeCasosdeUso ModelodeCasosdeUso(2)
Contenido: Contenido(cont.)
Introduccin Actores
Brevedescripcintextualquesirvecomointroduccinal Todoslosactoresdetectadosparaelsistema
modelo Casosdeuso
Relevamientodefuncionalidades Todosloscasosdeusodefinidos
Descripcintextualdeinformacinnoreflejadaenelrestodel Relaciones
modelo,porejemplo: TodaslasasociacionesentreactoresyCU
Secuenciastpicasenqueloscasosdeusosonutilizadosporlos
Comportamiento
usuarios
Especificacindelcomportamientodecadacasodeusoenel
Otrasfuncionalidadesnocapturadasenloscasosdeuso
modelo,elcualestdefinidopor:EventosdelSistemay
ContratosdeSoftware
LaClaseSistema LaClaseSistema(2)
Duranteestaactividadelsistemaserconsideradocomo
unobjeto: Existeunanicainstanciadeestaclaselacualrepresenta
al sistema entero
QueesinstanciadeunaclaseSistema
Quetieneoperaciones(puederecibirmensajes)
Quetieneunestado
EntodoModelodeCasosdeUsoseasumequeexisteuna Sistema
:Sistema
claseSistema
LaClaseSistema(5)
Enestaactividadelestadodelsistemaseasume
comounaconfiguracindeobjetosvlida
respectoalModelodeDominio
:Sistema
a1:Artista
c1:Cancin g1:Gnero
c2:Cancin
a2:Artista
g2:Gnero
c3:Cancin
Programacin4Curso2013 Anlisis:ComportamientodelSistema 13
InteraccionesconelSistema InteraccionesconelSistema(2)
Los DSSs se
incluyen en la secc.
Loscasosdeusodescribenlaformaenque Comportamiento
Esc. Tpico del modelo
actoresutilizanalsistemaparacumplirconsus Esc. Alternativo 1
: Cajero
iniciarVenta()
agregarProducto(id,cant)
: Sistema
objetivos
descripcion, subtotal
.
terminarVenta()
.
realizarPago(monto)
Esnecesarioexpresarestasideasdesdeunpunto
cambio, recibo
agregarProducto(id,cant)
* [mas productos]
terminarVenta()
realizarPago(monto)
Modelode
Paraellosedefinenprotocolosquedeterminanla
cambio, recibo
CasosdeUso
Esc. Tpico
interaccinentrelosactoresyelsistema,yasea
: Sistema
: Cajero
iniciarVenta()
agregarProducto(id,cant)
descripcion, subtotal
Esc. Alternativo 1
* [mas productos]
paraunoovariosescenariosdeuncasodeuso
terminarVenta()
CasodeUso2 .
total con impuestos
realizarPago(monto)
. cambio, recibo
.
CadaprotocoloesexpresadomedianteunDiagramade Un DSS que define
. Esc. Alternativo m : Sistema
: Cajero
.
agregarProducto(id,cant)
descripcion, subtotal
* [mas productos]
en el escenario dado
total con impuestos
realizarPago(monto)
cambio, recibo
InteraccionesconelSistema InteraccionesconelSistema
EventosdelSistema EventosdelSistema(2)
Uneventodelsistema Ejemplo:
Esunestmuloexterno, ElUsuarioingresaelnombredelacancinyelao
Esgeneradoporunactor Esunestmuloexternogeneradoporunactoranteelcual
Anteelcualelsistemadebereaccionar elsistemadebereaccionar
Esuneventodelsistema
Lasaccionesdelosactores(sobreelsistema)descritasen
ElUsuarioiniciaunasesinenelsistemaoperativo
loscasosdeusosugierenloseventosdelsistema
Esuneventoexternoperonoafectaalsistema
Esnecesarioconsiderarladefinicindeeventodel Noesuneventodelsistema
sistemaparaidentificarlos
InteraccionesconelSistema InteraccionesconelSistema
Diag.deSecuenciadelSistema Diag.deSecuenciadelSistema(2)
EsunartefactoincluidoenelModelodeCasosde
Usoquedefineeilustralainteraccinentrelos UnDiagramadeSecuenciadelSistemapuedeser
actoresyelsistemaenunoovariosescenariosde construidopara:
unCU UnescenariodeunCasodeUso
Incluye: VariosescenariosdeunCasodeUso
Unainstanciarepresentandoacadaparticipante(sistema
yactores) Uncriterioparadecidirentreestasalternativas
Losmensajesenviadosentreellosenel/losescenario/s serlacomplejidaddeestosescenariosyla
correspondiente/s(consusrespuestas) simplicidad(ono)delDSSresultante
Losdiagramasdesecuenciadelsistemadefinenla Notacin:
conversacinentrelosactoresyelsistema,
enfocndoseenlosmensajesqueelsistema
recibe
Seraposibleincluirademsmensajesenviados
desdeelsistemahacialosactores:
Sinembargoestonoformapartedelconjuntodeservicios
queelsistemabrinda(ycuyaespecificacineselobjetivo
delapresenteactividad)
Tipodeunatributo(otipoderetorno)cuandonoes Actor
simple,sinoqueesunacoleccindeciertodatatype
Tipo
Iteracin
Criterio de
ingresarNombre(nombre:String):DataCancion parada
Alternativo
PuedeutilizarseSet(Tipo),sisequierepasarcomo
parmetro(oretorno)varioselementosdeunsolotipo Operacin
(porejemplo:unalistadeelementos) del sistema
listarCanciones():Set(DataCancion)
Respuesta
TIEMPO
del sistema
Programacin4Curso2013 Anlisis:ComportamientodelSistema 25 Programacin4Curso2013 Anlisis:ComportamientodelSistema 26
InteraccionesconelSistema InteraccionesconelSistema
Sugerencias Sugerencias(2)
DefinicindeunDSS: Lmitedelsistema:
1. Incluirunainstanciaquerepresentealsistema Paraidentificareventosdelsistemaestilpensarenel
comounaunidad lmitedelsistema
2. Identificarcadaactorqueparticipeenel/los Ellmitesueledeterminarseparaquecoincidaconel
escenario/sconsiderado/seincluirunainstanciapara sistemadesoftware(yeldehardwaretambin)
cadauno Buscaraquelloqueocurrafueradeeselmiteyqueadems
3. Deladescripcindelcasodeusoidentificaraquellos loatraviese
eventosquelosactoresgenerenysean
deintersparaelsistemaeincluircadaunode
elloscomounmensaje
InteraccionesconelSistema InteraccionesconelSistema
Sugerencias(3) Sugerencias(4)
Lmitedelsistema(cont.): Lmitedelsistema(cont.):
Esresponsabilidaddelsistemareaccionaranteelevento Lasoperacionesdelsistemadeberanretornar
X? exclusivamentedatatypesotiposprimitivos
EsXexterno? Se est comprando
un producto promocional
(ver que hacer con eso):
es interno al sistema
Lmite del Sistema
El Cliente elige
un producto: no es SISTEMA El Cajero ingresa
de inters para el sistema
cdigo del producto
(elegido por el Cliente):
eso s es de inters
InteraccionesconelSistema InteraccionesconelSistema
Sugerencias(7) Sugerencias(8)
Ejemplo:DSSsinmemoria Ejemplo:DSSconmemoria
el sistema
recuerda la CI
Contrato:
iniciarVenta()
Contrato:
agregarProducto()
Modelode
CasosdeUso
Contrato:
cancelarVenta()
Contrato:
confirmarVenta()
Programacin4Curso2013 Anlisis:ComportamientodelSistema 37
ContratosdeSoftware
ContratosdeSoftware EnfoquedeContratos(1)
Uncontratodesoftwareespecificael
Obligaciones Derechos
comportamientooefectodeunaoperacin
Laespecificacinesdeclarativaynoimperativa Consumidor Satisfacer Obtener la
EstatcnicaestbasadaenlasternasdeHoareen precondiciones postcondicin
satisfecha
lasque:
Sedescribenpropiedadesdelresultado,enlugardedarun Proveedor Satisfacer Procesamiento
conjuntodepasosoinstruccionesqueindiquencmo postcondiciones asumiendo
calcularlo como satisfecha
la precondicin
ContratosdeSoftware ContratosdeSoftware
EnfoquedeContratos(2) EnfoquedeContratos(3)
ElConsumidorsecomprometeasatisfacerla
precondicinalinvocarlaoperacin: ElProveedorsecomprometeasatisfacerlapostcondicin
Silasatisface:tienederechoaexigirquelapostcondicin alfinalizarlaoperacinsolamentecuandolaprecondicin
sesatisfaga fuesatisfechaalmomentodelainvocacin
Sinolasatisface:noselegarantizalacorrectituddel Elcompromisonocomprendeelcasoenquela
resultadodelainvocacin(selanzanexcepciones) precondicinnofuesatisfecha:
PorestaraznesresponsabilidaddelConsumidor EnesecasoelProveedorpuededevolverunvalorarbitrario
yelConsumidortienequeaceptarloysaberquhacercon
sabercundoinvocaralaoperacin(ymanejaren l
formaadecuadaelresultado)
ContratosdeSoftware ContratosdeSoftware
EnfoquedeContratos(6) ContratosdeOperaciones
TantolasPrecomolasPostlasdeterminaelProveedor Loscontratossepuedenrealizarparaoperacionesde
ElConsumidor: cualquiertipodeclase
ViendolaPostsabequvaaobtener(sinsabercmo) Enestaactividadlasrealizaremosparaoperaciones
ViendolaPresabeacambiodequobtieneelresultado delsistema
ParaunaoperacinXtendremos{P}S{Q}
PeslaprecondicindeX(especificada)
SeselprogramaqueimplementaX(aserdiseadoms
adelanteenlaetapadeDiseo)
QeslapostcondicindeX(especificada)
ContratosdeSoftware ContratosdeSoftware
Condiciones(2) Condiciones(3)
LasPrecondicionesrefierenalmomentoprevioala LasPostcondicionesrefierenalmomento
invocacinyexpresan posterioralainvocacinexpresancondiciones
condicionessobre sobre
Losvaloresdelosparmetrosdelaoperacin Elvalorderetorno(sicorresponde)
Elestadodelsistema: Elestadodelsistema:
Lacreacindeobjetos Lacreacindeobjetos
Ladestruccindeobjetos Ladestruccindeobjetos
Laconexindeobjetos Laconexindeobjetos
Ladesconexindeobjetos Ladesconexindeobjetos
Lamodificacindelvalordeatributosdeobjetos Lamodificacindelvalordeatributosdeobjetos
Post:Declararqueelobjetoexiste Post:Declararquelosobjetosestnconectados
Destruccindeobjetos: Desconexindeobjetos:
Pre:Declararquelosobjetosestnconectados
Pre:Declararqueelobjetoexiste
Post:Declararquelosobjetosnoestnconectados
Post:Declararqueelobjetonoexisteyquetodoslos
objetosqueestabanconectadosalyanoloestn Modificacindelvalordeatributosdeobjetos:
Pre:Declararqueelobjetoexista
Post:Declararqueelatributodelobjetotieneelvalordado
ContratosdeSoftware ContratosdeSoftware
Condiciones(6) Condiciones(7)
Ejemploparaoperacin
crearCancion(nombreCancion:string, nombreArtista:string) 1 a:Artista a:Artista
Precondicin:NoexisteunobjetoCancindenombre nombre = Bruno Mars
nombreCancionenelsistema 2 nombre = Bruno Mars
Precondicin:ExisteunobjetoArtistaadenombre
nombreArtista
Postcondicin:SecreaunanuevainstanciadeCancionc
denombrenombreCancionyconatributoid c:Cancin
autogeneradotalqueelidseanicoenelsistema. nombre=TheLazySong
Postcondicin:Hayunlinkentrecya id=15
Sepuedederivarquelaoperacincreaalobjetodetipo Se pasa del estado 1 al estado 2 mediante la ejecucin de
CancinyloconectaconelobjetoArtista
crearCancion(The Lazy SOng, Bruno Mars);
Programacin4Curso2013 Anlisis:ComportamientodelSistema 53 Programacin4Curso2013 Anlisis:ComportamientodelSistema 54
ContratosdeSoftware ContratosdeSoftware
Condiciones(8) EstructuradeContratos
Expresacondicionessobreelestadoinicialysobreel Uncontratoesunartefactotextualqueseincluye
estadofinalqueindicanquesloquelaoperacin en la seccin Comportamiento del Modelo de
hace,peronocmolohace CasosdeUso
NOdicecmodebeimplementarselaoperacindel Estestructuradodelasiguienteforma:
sistemacrearCancion()
Firma:Cabezalsintcticodelaoperacin
Parmetros:Descripcindelosparmetrosdelaoperacin
Responsabilidades:Descripcindelasresponsabilidades,
unaideadeloquedeberealizarlaoperacin
ContratosdeSoftware ContratosdeSoftware
EstructuradeContratos(2) EstructuradeContratos(3)
Estructura(cont.) Estructura(cont.)
Referenciascruzadas:Caso(s)deUsoalosquepertenecela Postcondicin:Descripcindelestadodelainstanciadel
operacin sistemaalaqueseleapliclaoperacin
Snapshots:(Opcional)
Salida:Resultadodelaoperacin(slosiesunafuncin)
Paresdesnapshotsqueejemplifiquenelestadodelainstanciaa
Precondicin:Descripcindelestadodelainstanciadel laqueseleapliclainvocacin,previoyposterioralainvocacin
sistemaalaqueseleaplicarlaoperacin,yotras Lainvocacinconcretaqueproduceelcambioejemplificado
condicionesqueseanecesarioasumirprevioalaaplicacin (mostrandolosparmetrosefectivos)
(porejemplo,conrespectoalosparmetros)
Contenido
Objetivo
Introduccin
ImplementarelModelodeDominio
GeneracinParcialdeCdigo ImplementarelDSS
Conclusiones
Programacin4Curso2013 GeneracinParcialdeCdigo 2
Objetivo Introduccin(1)
Elobjetivodeestetemaesilustrarunposibleusoquese LaetapadeAnlisisproducelossiguientesartefactos:
lepuededaralosartefactosconstruidosenlaetapade ModelodeDominio
Anlisis. DiagramadeSecuenciadelSistema
Sedebetenerespecialcuidadoenrecordarqueel Severaqucmogenerarcdigoapartirdeestosdos
procesodedesarrolloannohafinalizadoyque artefactosylasconsecuenciasqueestoconlleva.
normalmentesedebeatravesarlaetapadeDiseoantes
deimplementar.
Introduccin(2) Imp.elModelodeDominio(1)
Severcomo,primero,generarunesqueletodelcdigo Dadoque
delasclasesapartirdelaestructuracontenidaenel UnModelodeDominiopresentalosconceptosms
ModelodeDominio(Implementar el Modelo de relevantesdelproblema,yque
Dominio)yluegocomogenerarunesqueletodel LaPOO permite reducir la brecha entre elproblemayla
mtodomain()apartirdelcomportamientocontenido solucin(brindandoconstruccionesqueaplicanenambos
enelDiagramadeSecuenciadelSistema(Implementar contextos).
elDSS).
entonces parecelgicoconcluirquelosconceptos
puedenserconsideradoscomoclasescandidatas.
Imp.elDSS(2) Imp.elDSS(3)
Porlotantosepuede(intentar)generarunesqueletodel Anastambinfaltarnelementos,siendoelms
cdigodelmtodomain()apartirdelainformacin notablequesenosesabequinimplementalas
contenidaenlosDSS. operacionesdelSistema,yporelloseasumelaexistencia
Sedeberasumirquetodasesasoperacionessern delaclaseSistemaquelasproveeatodas.
provistasporunanicaclase(laclaseSistema)puessa Luego,elDiseoespecificarcmoseorganizarnlas
eslavisindecajanegradelosDSSenlaetapade operacionesdelSistema.
Anlisis. Portantoesteesqueletodecdigodebeconsiderarse
comomodificableynofinal.
OperacinyMtodo
Operacin:especificacindeunatransformacino
consultaqueunobjetopuedeserllamadoaejecutar
Mtodo:implementacindeunaoperacinparauna
determinadaclase
ConceptosBsicosdeOrientacina
Objetos(2daparte)
Programacin4Curso2013 ConceptosBsicosdeOrientacinaObj(2daparte) 2
OperacinyMtodo PolimorfismoyRedefinicin
Eslacapacidaddeasociardiferentesmtodosa
class Usuario {
lamismaoperacin
private:
int idUsuario; Cuandoenunajerarquadegeneralizacinse
DateTime* nacimiento; encuentramsdeunmtodoasociadoala
mismaoperacin,sedicequedichaoperacin
public: estredefinida
int getEdad()
{
... // un cierto algoritmo
}
}; Mtodo para getEdad() en Usuario
RedefinicindeOperaciones
Class Usuario {
private:
int permisos; // set de bits
Interfaz
public: Una interfaz esunconjuntodeoperacionesalquesele
};
virtual int getPermisos(); aplicaunnombre
int Usuario::getPermisos(){
Nodefineunestadoparalasinstanciasdeestos
return permisos; elementos,nitampocoasociaunmtodoasus
}
operaciones
class Admin: public Usuario {
public: Esteconjuntodeoperacionescaracterizael(opartedel)
static int ADMIN_SISTEMA;
public:
comportamientodeinstanciasdeclases
int getPermisos();
};
int Admin::getPermisos(){
int p = Usuario::getPermisos();
return (p | ADMIN_SISTEMA);
}
CualquierclasederivadadeArchivoserunArchivo.
Programacin4Curso2013 ConceptosBsicosdeOrientacinaObj(2daparte) 7 Programacin4Curso2013 ConceptosBsicosdeOrientacinaObj(2daparte) 8
Realizacin Realizacin(2)
class CPPArchivo: public Archivo {
private:
Esunarelacinentreunaespecificacinysu fstream f;
implementacin public:
CPPArchivo(const string& ruta);
Unaformaposiblederealizacinseproduceentre
// implementacin de interfaz Archivo
unainterfazyunaclase string read(int n);
void rewind();
SedicequeunaclaseCrealizaunainterfazIsiC int position();
implementatodaslasoperacionesdeclaradasenI,es int available();
decirproveeunmtodoparacadauna // operaciones extra
void close();
void write(const string& s);
void setPosition();
~CPPArchivo();
};
Programacin4Curso2013 ConceptosBsicosdeOrientacinaObj(2daparte) 9 Programacin4Curso2013 ConceptosBsicosdeOrientacinaObj(2daparte) 10
Realizacin(3) Realizacin(4)
CPPArchivo::CPPArchivo(const string& ruta):
f(ruta)
{} Unainterfazpuedeserentendidacomola
// ...
string CPPArchivo::read(int n){
especificacindeunrolquealgnobjetodebe
char *buffer = new char[n]; desempearenunsistema
f.read(buffer, n);
string res = string(buffer, n); Unobjetopuededesempearmsdeunrol:
delete buffer;
return res; Unaclasepuederealizarcualquiercantidadde
} interfaces
// ...
int CPPArchivo::position(){ Unrolpuedeserdesempeadoporobjetosde
}
return f.tellg(); caractersticasdiferentes:
// ... Unainterfazpuedeserrealizadaporcualquier
CPPArchivo::~CPPArchivo(){
f.close();
cantidaddeclases
}
Realizacin(5) Realizacin(5)
class Comparable {
Esposibletiparaunobjeto(ademsdecomoes public:
usualmediantelaclasedelacualesinstancia) // devuelve algo mayor a 0 si this > b
// 0 si this = b, o algo negativo si this < b
tambinmedianteunadelasinterfacesquesu virtual int comparar(Comparable *b) = 0;
claserealiza virtual ~Comparable() {};
};
Porloquesiunobjetoesdeclaradocomodetipo
I(enunalistadeparmetros,comoatributo, class Representable {
public:
etc.),siendoIunainterfaz,significaqueese // devuelve una representacin del objeto
objetonoesunainstanciadeI(locualnotiene virtual string toString();
sentido)sinoqueesinstanciadeunaclaseque virtual ~Representable() {};
}
realizalainterfazI
Realizacin(8) Dependencia
Notarqueenladefinicinpreviaseasumequela Esunarelacinasimtricaentreunpardeelementos
clasequerealizalainterfazesconcreta dondeelelementoindependientesedenominadestinoy
Esposiblesinembargoqueunainterfazsea eldependientesedenominaorigen
realizadaporunaclaseabstracta Enunadependencia,uncambioenelelementodestino
Encuyocasodebedeclarartodaslasoperacionesde puedeafectaralelementoorigen
lainterfazaunquenoestaobligadaa Lasasociaciones,generalizacionesyrealizacionescaen
implementarlasatodas
dentrodeestadefinicingeneral
SiCesabstractayrealizalainterfazI,entoncesun
objetodeclaradocomodetipoIdebeserinstancia Perosonunaformamsfuertededependencia
dealgunasubclaseconcretadeC(odeotraclase Enesoscasosladependenciaseconsideraasumiday
querealicelainterfazI) noseexpresaexplcitamente(porejemploen
DiagramasdeClasesdeDiseo)
Objetivos
Arquitectura Lgica
Diseo Diseo de Bajo Nivel
Acceso
a Datos Acceso
a Datos
sistema mostrarMenu()
: Cliente
ingresarPIN()
Al estudiar la Arquitectura Lgica es ingresarPIN()
seleccionarCuenta()
posible profundizar en los detalles de Serv. Sistema
.
cmo se realizan dichas invocaciones .
Cajero
Operacin del
. ingresarTarjeta() sistema
ingresarPIN()
seleccionarCuenta()
Tenemos definida la estructura interna del Disear Colaboraciones que realicen los Casos
de Uso del sistema
sistema a construir (Arquitectura Lgica)
Se busca disear una colaboracin por cada caso de
A partir de dicha estructura definimos uso (o varios de ellos juntos)
cmo se resuelven internamente cada Una colaboracin realiza un conjunto de casos de uso
cuando define su solucin
una de las operaciones del sistema
Esta relacin es la misma que se puede definir entre
En este curso, el diseo de bajo nivel una interfaz y un conjunto de clases
estar enfocado en la capa lgica Relacin de Realizacin
Resumen : Cajero
iniciarVenta()
: Sistema
Cont. 1
Object1
Message1
Message2
Object2
agregarProducto(id,cant) Object3
descripcion, subtotal
Cont. 2
Object1 Object2
total con impuestos
Programacin 4
realizarPago(monto) Message2
Object3
cambio, recibo
Esc. Tpico
: Sistema
: Cajero
Esc. Alternat. 1
iniciarVenta()
agregarProducto(id,cant)
Cont. 1
Caso de Uso .
descripcion, subtotal
.
* [mas productos]
terminarVenta()
Message1
.
total con impuestos
Cont. 3
realizarPago(monto) Object1 Object2
cambio, recibo
Esc. Alternat. n
Message2
Object3
: Sistema
: Cajero
iniciarVenta()
Diseo
Cont. 1
agregarProducto(id,cant)
* Association1 * Class4
Class1 descripcion, subtotal
-atr3
-atr1 * [mas productos]
-atr4 terminarVenta()
Cont. 4
Class2 Class3 cambio, recibo
Object1 Object2
-atr2
Diagramas de Comunicacin
Message2
Object3
Class4
Class1 * Association1 * -atr3
-atr1 -atr4
+operacion1()
+oper1()
+operacion2()
+oper5()
*
Class2 Class3 * Association2
-atr2
Colaboracin +oper2()
+oper3()
+oper4()
Notacin
Diagramas de Interaccin (2) Instancias
Un Diagrama de Secuencia Las instancias se representan igual que en
: ClaseA : ClaseB los diagramas de instancias
mens1()
mens2()
Corresponden a una instancia cualquiera
de una cierta clase o interfaz (no a una
mens3()
instancia real)
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 6 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 7
Notacin Notacin
Mensajes Parmetros
Los mensajes son representados mediante Los parmetros se muestran entre
una flecha etiquetada parntesis a la derecha del nombre del
Un mensaje est asociado a un link y tiene mensaje
asignado un nmero de secuencia que Se puede mostrar adems su tipo
determina el orden de ocurrencia
1: aumentarSueldo(s:Real)
1: contratar()
: Empresa : Persona
2: asignarSeccion()
3: asignarCliente()
: Empresa : Persona
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 8 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 9
Notacin Notacin
Tipo de Retorno Sintaxis de Mensajes
El valor de retorno puede ser mostrado a la La sintaxis de los mensajes es la siguiente:
izquierda del mensaje, con un := en medio [ret :=] mensaje([param [: TipoParam]]) [: TipoRet]
Se puede mostrar adems el tipo del valor Donde:
de retorno ret almacena el resultado de la operacin (opcional)
mensaje es el nombre del mensaje enviado (y de la
1: s := obtenerSueldo() : Real
operacin invocada)
: Empresa : Persona param son argumentos usados en el envo
TipoParam es el tipo de cada parmetro (opcional)
TipoRet es el tipo del recorrido de la operacin
(opcional)
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 10 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 11
Notacin Notacin
Iteracin Creacin de Instancias
Las iteraciones se indican mediante un La forma de ilustrar la creacin de una
asterisco (*) a continuacin del numero de instancia es enviando el mensaje create
secuencia del mensaje Este mensaje puede incluir parmetros
Esto expresa que el mensaje es enviado en
Lo usual es especificar un nombre para la
forma repetida (en un loop) al receptor
class Simulador {
instancia para poder utilizarla despus
Generador gen;
1* [i:=1..n] : x := generar()
1: e := create()
: Simulador : Generador void unaOper() {
for (i from 1 to n) { : Empresa : Empleado
x = gen.generar();
}
}
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 12 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 13
Notacin Notacin
Destruccin de Instancias Nmeros de Secuencia
La forma de ilustrar explcitamente la El orden de ocurrencia de los mensajes
destruccin de una instancia es enviando el viene dado por los nmeros de secuencia
mensaje destroy El mensaje que inicia la interaccin
Previamente, debe eliminarse todo link que generalmente no es numerado
exista con esa instancia mens1() 1: mens2()
:A :B
1: destroy()
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 14 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 15
Notacin Notacin
Nmeros de Secuencia (2) Mensajes Condicionales
:A :B :C :D
Un mensaje condicional es enviado
mens1()
mens5()
1: [p.edad>18] contratar()
mens6()
: Empresa p : Persona
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 16 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 17
Notacin Notacin
Colecciones Mensajes a Colecciones
Los multiobjetos de los diagramas de Un mensaje a una coleccin representa un
interaccin representan una coleccin de mensaje al objeto coleccin mismo
objetos de una cierta clase No un broadcast a todos los elementos
contenidos en l
1: e := create()
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 18 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 19
Notacin Notacin
Responsabilidad de Colecciones Responsabilidad de Colecciones (2)
Las colecciones sern tratadas como meros add(o:Tipo) Agrega la instancia o a la
coleccin del tipo Tipo
contenedores de objetos por lo que no remove(o:Tipo) Remueve la instancia o de la
tendrn otra responsabilidad ms que esa coleccin del tipo Tipo. No elimina la instancia
Proveern solamente operaciones que find(c:Clave):Tipo Retorna la instancia
con clave c de tipo Clave
permitan administrar los objetos contenidos
member(o:Tipo):Boolean Devuelve un
En general las interfaces de Diccionario booleano indicando si la instancia o de tipo Tipo
(add, remove, find, member, etc.) e existe o no en la coleccin
next():Tipo Devuelve el prximo elemento
Iterador (next, etc.) son suficientes para las en la coleccin. Se supone que la coleccin est
colecciones ordenada
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 20 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 21
Notacin Notacin
Resp. de Colecciones - Ejemplo Datatypes
t := totalSueldos() 1* [foreach]: e := next()
El procesamiento de datatypes
: Empresa : Empleado (construccin, envo de mensajes) no se
2* s := getSueldo()
e : Empleado
muestra grficamente: se utilizan notas
dp := obtenerDatosProducto():Set(DataProducto) 1* [foreach]: l := next()
: Venta : LineaDeVenta
t := totalSueldos() 1: t := getTotal()
Retorna un 2.1* p := getPrecio():Float
: Empresa : Empleado DataProducto d que 2.2* c := getCodigo():String
contiene el precio (p) y l : LineaDeVenta : EspProducto
cdigo (c) del Producto
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 22 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 23
Notacin
Datatypes (2) Reuso de Elementos de Diseo
Es posible iterar sobre los elementos de una Se busca reutilizar los elementos de
coleccin de datatypes: forall dt in ColDT diseo generados de una iteracin a otra
agregarDatos(colDP: Set(DataProducto)) 1* [forall dp in ColDP]: agregar(dp : DataProducto)
En particular: clases, operaciones y atributos
: Venta : LineaDeVenta Esto apunta a generar iterativamente el
diseo y no reinventar la rueda cada vez
Es posible acceder a los elementos de un El diseo debe ser consistente de una
datatype utilizando el operador . iteracin a otra. Es decir, si un elemento
agregar(dp: DataProducto) 1: agregarPrecio(dp.precio)
de diseo cambia, no puede quedar
: LineaDeVenta : EspProducto
informacin inconsistente en otra parte
del diseo
Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 24 Programacin 4 | Diseo: Diagramas de Comunicacin www.fing.edu.uy/inco/prog4 | 2010 | 25
Diagramas de Comunicacin
Errores Comunes
Suponer la existencia de links nunca
generados Programacin 4
Enviar un mensaje a un multiobjeto que
implique el procesamiento con todos los
objetos contenidos en l Diseo
No especificar qu sucede con mensajes Criterios de Asignacin de
que aparentan ser triviales Responsabilidades GRASP
Representar datatypes como instancias
Contenido Introduccin
Introduccin Un sistema orientado a objetos est
Responsabilidades compuesto de objetos que envan
Criterios GRASP mensajes a otros objetos para realizar
operaciones
Interfaces del Sistema
Para una misma operacin es posible
Fbricas
disear interacciones asignando
responsabilidades de diferentes formas
La calidad del producto resultante no es
la misma en todos los casos
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 2 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 3
Introduccin (2) Responsabilidades
Malas elecciones pueden conducir a Una responsabilidad es una obligacin que
sistemas que sean frgiles y difciles de un tipo tiene
mantener, comprender, reutilizar y Estas obligaciones son entendidas en
extender trminos del comportamiento de los objetos
Existen criterios para la asignacin de Existen dos tipos bsicos de
responsabilidades que nos guan hacia el responsabilidades:
diseo de una buena solucin Responsabilidad de saber o conocer
Estos son los criterios GRASP Responsabilidad de hacer
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 4 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 5
Responsabilidades Responsabilidades
Saber/Conocer Hacer
Responsabilidades de objetos tpicas de Responsabilidades de objetos tpicas de
esta categora: esta categora:
Conocer datos privados Hacer algo por s mismos
Conocer a otros objetos Iniciar acciones en otros objetos
Saber cosas que pueda derivar o calcular Controlar actividades de otros objetos
Ejemplo: Una transaccin de un cajero Ejemplo: Una transaccin de un cajero
automtico es responsable de conocer su automtico es responsable de imprimirse a
fecha de realizada s misma
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 6 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 7
Responsabilidades Responsabilidades
Responsabilidades y Mtodos Resps. y Mtodos (2)
Una responsabilidad es tpicamente El mtodo asociado al punto de entrada generar
asignada a una clase siendo instancias de el resultado esperado en funcin de:
sta quienes efectivamente deben cumplir El estado del objeto implcito (la responsabilidad se
con la responsabilidad resuelve completamente en el punto de entrada)
El trabajo delegado a otros objetos
Para solicitar a una instancia que cumpla
enviarle un mensaje (i.e. invocarle una Delegar trabajo a otros objetos significa definir
operacin) sub-responsabilidades y asignarlas a ellos
Dicha operacin suele denominarse punto Esto causa que para resolver la responsabilidad
de entrada original se deba producir un interaccin entre un
conjunto de objetos
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 8 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 9
Responsabilidades
Diagramas de Comunicacin Criterios GRASP
Los diagramas de comunicacin son los Los GRASP son criterios que ayudan a
artefactos mediante los cuales se resolver el problema de asignar
expresarn las interacciones responsabilidades
Su propsito es ilustrar la asignacin de Sugieren:
responsabilidades y sub-responsabilidades 1. A quin asignar una responsabilidad cualquiera
2. A quin asignar algunas responsabilidades
Dan una pauta de cmo se debe particulares
implementar el punto de entrada 3. Aspectos a tener en cuenta al asignar una
Sin embargo NO intenta ser un responsabilidad para que la solucin presente
ciertas cualidades deseables
pseudocdigo para la operacin
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 10 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 11
Criterios GRASP (2) Criterios GRASP (3)
Expert (Tipo 1) Responsabilizar a quin tenga Controller ayuda a asignar la responsabilidad
la informacin necesaria
de manejar una operacin del sistema
Creator (Tipo 2) A quin responsabilizar de la
creacin de un objeto Expert tpicamente ayuda a asignar sub-
Bajo Acoplamiento (Tipo 3) Evitar que un responsabilidades
objeto interacte con demasiados objetos
Alta Cohesin (Tipo 3) Evitar que un objeto
Creator aplica cuando una responsabilidad
haga demasiado trabajo implica crear un objeto
No Hables con Extraos (Tipo 3) Asegurarse El resto se tiene en cuenta en todo momento
que un objeto realmente delega trabajo
Tpicamente para elegir la preferible entre
Controller (Tipo 2) A quin responsabilizar de
ser el controlador diferentes alternativas
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 12 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 13
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 18 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 19
Criterios GRASP Criterios GRASP
Controller (7) Controller (8)
Discusin (cont.): Ejemplo CajaRegistradora
Cuando se tienen muchos casos de uso con
RealizarVentaHandler CrearInventarioHandler iniciarVenta()
muchas operaciones es conveniente optar por agregarProducto()
cancelarProducto()
controladores de casos de uso iniciarVenta()
agregarProducto()
crearInventario()
crearProducto() modificarCantidad()
terminarVenta()
Cada controlador manejara las operaciones del cancelarProducto() eliminarProducto()
caso de uso correspondiente, manteniendo alta su
modificarCantidad()
terminarVenta() vs. realizarPago()
cerrarCaja()
calcularTotales()
realizarPago() RealizarDevolucionHandler
cohesin CerrarCajaHandler
inicarDevolucion()
devolverProducto()
iniciarDevolucion()
terminarDevolucion()
Una desventaja que presenta este enfoque es que cerrarCaja()
devolverProducto()
terminarDevolucion()
liquidarDevolucion()
crearInventario()
si la cantidad de casos de uso es muy grande calcularTotales() liquidarDevolucion()
crearProducto()
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 26 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 27
Criterios GRASP Criterios GRASP
Expert (7) Creator
La estructura necesaria para esta interaccin Sugerencia:
sera Venta Asignar a la clase B la responsabilidad de crear
fecha : Date
hora : Time
una instancia de la clase A en uno de los
totalVenta() : Real siguientes casos:
1 A est agregado en B
tiene
1..* A est contenido en B
EspProducto
LineaDeVenta * 1 B registra instancias de A
describe codigo : String
cantidad : Integer precio : Real B utiliza objetos de A en forma exclusiva
subtotal() : Real descripcion : String
getPrecio() : Real B es experto en crear instancias de A
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 28 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 29
bajo acoplamiento
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 30 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 31
Criterios GRASP Criterios GRASP
Bajo Acoplamiento Bajo Acoplamiento (2)
Sugerencia: El acoplamiento es una medida de
Que tanto una clase est relacionada
Tiene conocimiento de
Asignar responsabilidades de forma tal que el
acoplamiento general se mantenga bajo O depende de otras clases
Una clase con bajo acoplamiento
depende de pocas clases
En cambio una con alto acoplamiento
depende de demasiadas clases
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 32 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 33
: Caja p : Pago
La caja registrara los pagos en el mundo real
2: asignarPago(p)
Por Creator la clase Caja es entonces un
candidato para ser responsable de crear los : Venta
: Caja : Venta
1.1: create()
: Pago
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 38 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 39
Criterios GRASP Criterios GRASP
Alta Cohesin (2) Alta Cohesin (3)
La cohesin es una medida de que tan Una clase con baja cohesin no es deseable
relacionadas estn entre s las ya que presenta los siguientes problemas:
responsabilidades de una clase Es difcil de comprender
Una clase altamente cohesiva tiene un Es difcil de reutilizar
conjunto de responsabilidades Es difcil de mantener
relacionadas y no realiza una gran Se ve afectada por cambios en forma constante
cantidad de trabajo Clases con baja cohesin tomaron
demasiadas responsabilidades que pudieron
haber delegado a otras clases
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 40 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 41
: Caja : Venta
1 captura 1 Venta 1 1
Caja paga Pago
fecha : Date
monto : Real 2: mnt := getMonto()
hora : Time
montoPago() : Real getMonto() : Real
getPago() : Pago
p : Pago
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 46 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 47
Criterios GRASP Criterios GRASP
No Hables con Extraos (5) No Hables con Extraos (6)
Ejemplo (cont.): Ejemplo (cont.):
Un enfoque ms adecuado sera que la venta Realizada dicha modificacin la forma de
en lugar de devolver el pago completo devolver el monto del pago sera
devuelva la informacin del pago que la caja
necesita mnt := montoPago() 1: mnt := montoPago()
: Caja : Venta
Las clases Caja y Pago quedan incambiadas
1.1: mnt := getMonto()
Venta
fecha : Date
hora : Time
: Pago
montoPago() : Real
La caja ya no habla con un extrao
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 48 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 49
b:B
Estos casos corresponden a clases que se
encargan de devolver objetos indirectos para
3: d := getD()
c:C
que otros ganen visibilidad sobre ellos
4: dt := getDato() Estos casos presentan particularidades pero
d:D pueden ser considerados como violaciones a
No Hables con Extraos
X habla (y por lo tanto queda acoplado) con varios extraos
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 50 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 51
Instancias del Sistema
Dnde se encuentran las instancias
Complemento de Arquitectura generadas en el sistema?
Las instancias temporales (como el caso
del sistema con memoria) la informacin
la guarda el propio controlador
Las colecciones de objetos tambin
pueden ser una propiedad del controlador,
aunque existen otras alternativas
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 52 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 53
Formulario
interface Controlador
ISistema
interfaz del sistema (relacin 1:1) operacionSistema1()
operacionSistema2()
operacionSistema1()
operacionSistema2()
operacionSistema3() operacionSistema3()
.
.
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 56 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 57
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 62 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 63
Interfaces del Sistema (10) Fbricas
Propuesta intermedia Las interfaces del sistema se definieron
como un mecanismo que permite quebrar la
interface
interface
ICartelera
interface
IReserva
interface
IVenta
dependencia de las clases de presentacin
hacia los controladores de la capa lgica
IPelicula
crearCartelera() getDisponibilidadFuncion() getDisponibilidadFuncion()
crearPelicula()
indicarFuncionPelicula() crearReserva() venderBoleto()
getPeliculas()
getCartelera() getReservas() getBoletosVendidosFuncion()
getDatosPelicula()
eliminarPelicula()
modificarPelicula()
getSalasProyectanPelicula()
getPeliculasProyectadasEnSala()
getDatosReserva()
eliminarReserva()
getDatosBoletoVendido()
eliminarBoleto()
Pero definir una interfaz no es suficiente
getFuncionesPelicula() modificarReserva() modificarBoleto()
para quebrar la dependencia entre dos
clases
Interfaz que contiene todas
las operaciones del sistema La forma en que una de las clases
de los casos de uso relativos
a la venta de boletos
(invocador) obtiene una referencia a la otra
(la que realiza la interfaz) determina si la
La cantidad de interfaces y de operaciones por interfaz es razonable dependencia se quiebra o no
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 64 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 65
Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 68 Programacin 4 | Diseo: Criterios de Asignacin de Responsabilidades GRASP www.fing.edu.uy/inco/cursos/prog4 | 2010 | 69
Fbricas (5)
Estructura
interface Controlador
Programacin 4
ISistema
operacionSistema1() operacionSistema1()
operacionSistema2() operacionSistema2()
Formulario operacionSistema3() operacionSistema3()
Diseo
Fabrica
Visibilidad
getISistema() : ISistema
Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 2 Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 3
: Empresa : Empleado
en un mtodo de A
Es una visibilidad temporal ya que existe
2: add(e)
solamente en el alcance del mtodo
: Empleado Es el segundo tipo de visibilidad ms
comn en sistemas orientados a objetos
La coleccin de empleados es un pseudoatributo de la empresa
Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 6 Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 7
Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 8 Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 9
Visibilidad Local (2) Visibilidad Local (3)
Formas de obtener este tipo de visibilidad: Formas de obtener este tipo de visibilidad:
Crear una instancia localmente y asignarla a Asignar el objeto devuelto por un mtodo a
una variable local una variable local
Ejemplo: 1: e := create() Ejemplo:
: Empresa : Empleado
2: asignarCliente(c) 2.1: tomarPedido()
La empresa ve al empleado e localmente y puede mandarle mensajes La empresa ve al cliente c localmente y puede mandarle mensajes
Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 10 Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 11
parameter :C
La forma ms obvia de lograr esta visibilidad
3: mens3()
es asignar una instancia a una variable global :D
local
Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 12 Programacin 4 | Diseo: Visibilidad www.fing.edu.uy/inco/cursos/prog4 | 2010 | 13
Contenido
Introduccin
Programacin 4
Caso de Estudio
Guas para el Abordaje del Diseo
Diseo
Guas para el Abordaje del
Diseo
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 1 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 2
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 3 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 4
Caso de Estudio Caso de Estudio
Modelo de Dominio Caso de Uso
1
Cuenta-Cliente
< realizada sobre Nombre Retiro de Cuenta Actores Cliente
1..*
Cuenta Sinopsis El caso de uso comienza cuando el cliente
numero : int
saldo : float *
inserta su tarjeta en el cajero e ingresa su
1 *
clave de usuario. Tras validar al cliente, el
registra >
Transaccion sistema recibe el nombre del banco y el
Banco 1..* * ATM fecha : Date
nombre : string trabaja con > numero : int
hora : int nmero de cuenta para iniciar la transaccin
importe : float
1 *
terminada : bool de retiro correspondiente. El cliente ingresa el
* opera con >
monto que desea retirar de la cuenta y el
*
sistema realiza el dbito. Finalmente, el cliente
Retiro Deposito
1..* Cliente retira su tarjeta.
codigo : string
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 5 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 6
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 7 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 8
Caso de Estudio Caso de Estudio
Caso de Uso (2) DSS con Memoria (2)
Nombre Consulta de Depsitos Actores Cliente
Sinopsis El caso de uso comienza cuando el cliente
inserta su tarjeta en el cajero e ingresa su clave
de usuario. Tras ingresar los datos de validacin Sistema
(igual que en el caso de uso Retiro de Cuenta), Cliente
Caso de Estudio
Descripcin de Operaciones (2) Guas para el Abordaje del Diseo
autenticarCliente (codCliente:String):bool El abordaje de la etapa de diseo puede
Misma operacin que en el DSS anterior realizarse sistemticamente
depositos (nroCuenta:int,
nomBanco:String):float Por ejemplo, considerando estos pasos:
Devuelve la suma de los montos de todos los 1. Organizar Operaciones
depsitos realizados en la cuenta nroCuenta del 2. Definir Ubicacin de Instancias
banco nomBanco
finalizar ()
3. Definir Colaboraciones
Misma operacin que en el DSS anterior 4. Disear Colaboraciones
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 11 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 12
Guas para el Abordaje del Diseo Guas para el Abordaje del Diseo
Organizar Operaciones Organizar Operaciones (2)
Definir los Controladores a utilizar Al definir Controladores, considerar
Definir las Interfaces del Sistema que Operaciones repetidas en casos de uso
contendrn las operaciones del sistema Memoria del Sistema
Organizar operaciones segn: Si un Controlador realiza una Interfaz
Afinidad temtica (segn dominio) del Sistema, asigna un mtodo a todas
Afinidad funcional (segn objetivos) las operaciones presentes en ella.
Casos de Uso
Definir la Fbrica de controladores
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 13 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 14
Guas para el Abordaje del Diseo Guas para el Abordaje del Diseo
Ejemplo (Organizar Operaciones) Definir Ubicacin de Instancias
Algn concepto del dominio podra ser Diferenciar:
un Controlador?, ATM?, Banco? Las colecciones que pueden ser alojadas
interface en un controlador (ej: ATM, Banco)
IATM
+autenticarCliente() Las que sern accedidas nicamente a
+ingresarCuenta()
+ingresarMonto() travs de otra clase (ej: Cuenta accesible a
Una posible opcin ATMFactory
+depositos()
travs de Banco)
+finalizar()
+getIATM() : IATM
En caso de ser necesario, alojar
ATM separadamente una coleccin que sea
compartida entre varios controladores
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 15 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 16
Guas para el Abordaje del Diseo Guas para el Abordaje del Diseo
Definir Colaboraciones Ejemplo (Definir Colaboraciones)
Una colaboracin realiza uno o ms casos Definir una sola colaboracin para
de uso ambos casos de uso es beneficioso ya
Agrupar casos de uso con cierta afinidad que estn relacionados
Comnmente afinidad temtica pero no
Consulta de
hay una regla estricta Depsitos
Retiro de
Cuenta
Definir una colaboracin por cada grupo de
casos de uso, asignndole un nombre
Priorizar las colaboraciones segn el Transacciones
impacto esperado sobre el diseo
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 17 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 18
Guas para el Abordaje del Diseo Guas para el Abordaje del Diseo
Disear Colaboraciones Ejemplo (Disear Colaboraciones)
Disear cada colaboracin en orden de Cmo se asignan responsabilidades?
prioridad: Quin crea las transacciones?
Realizar diagramas de comunicacin para ATM?, Banco?, Cuenta?
las operaciones del sistema involucradas
Quin es el experto en calcular el total
Considerar (a) criterios de asignacin de de depsitos realizados?
responsabilidades, (b) decisiones
tomadas en iteraciones anteriores Banco?, Cuenta?, Cliente?
(consistencia) y (c) nuevos problemas de Qu visibilidades se necesitan?
diseo ATM Transaccin?, Banco Cuenta?,
Realizar el diagrama de clases de diseo Cliente Transaccin?, ATM Cuenta?
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 19 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 20
Guas para el Abordaje del Diseo Guas para el Abordaje del Diseo
Ejemplo (Disear Colaboraciones) (2) Ejemplo (Disear Colaboraciones) (3)
Qu sucede con los tipos asociativos? Una posible solucin
Si poseen informacin relevante puede
ok := autenticarCliente(codCliente) 1: ok := member(codCLiente)
convenir mantenerlas
: ATM : Cliente
Cuenta-Cliente
ingresarCuenta(nroCuenta,nomBanco) 2: c := cuenta(nroCuenta) 2.1: c := find(nroCuenta)
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 21 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 22
Guas para el Abordaje del Diseo Guas para el Abordaje del Diseo
Ejemplo (Disear Colaboraciones) (4) Ejemplo (Disear Colaboraciones) (5)
ingresarMonto(mnt) 1: ingresarMonto(mnt) 1.1: create(mnt) r := depositos(nroCuenta,nomBanco) 2: r := depositos(nroCuenta) 2.1: c := find(nroCuenta)
Transaccion
t : Transaccion
Otras opciones r := suma de los r1
deposito() deposito()
Asociar la transaccin con el cliente : Retiro : Deposito Devuelve
Devuelve 0
el monto
Delegar las transacciones al banco
Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 23 Programacin 4 | Diseo: Guas para el Abordaje del Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 24
Contenido
Introduccin
Programacin 4
Diagrama de Clases de Diseo
Diseo
Diseo de la Estructura de
una Colaboracin
Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 9 Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 10
Retiro
Cuenta Retiro Cuenta
numero numero asignarCliente()
Cliente Cliente
saldo saldo asignarCuenta()
codigo codigo ingresarMonto()
debitar()
finalizar()
Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 11 Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 12
Agregar Informacin de Tipos Agregar Asociaciones y Navegabilidad
Paso 5 Pasos 6 y 7
ATM Transaccion ATM Transaccion
Banco numero : Integer fecha : Date Banco 1 * numero : Integer 1 * fecha : Date
identificacion(Integer,String)() hora : Time identificacion(Integer,String)() hora : Time
nombre : String nombre : String
seleccionarCuenta(Integer)() importe : Integer seleccionarCuenta(Integer)() finalizadas importe : Integer
asignarCuenta(Integer,Retiro)() terminada : Boolean asignarCuenta(Integer,Retiro)() terminada : Boolean
ingresarMonto(Integer)() ingresarMonto(Integer)()
salir() salir()
1
1..* 1
1..*
Retiro 1
Retiro
*
Cuenta Cuenta actual
numero : Integer asignarCliente(Cliente)() numero : Integer asignarCliente(Cliente)()
Cliente Cliente 1 *
saldo : Real asignarCuenta(Cuenta)() saldo : Real asignarCuenta(Cuenta)()
codigo : String ingresarMonto(Integer)() codigo : String ingresarMonto(Integer)()
debitar(Integer)() debitar(Integer)()
finalizar() finalizar()
1 *
Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 13 Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 14
1..* 1
ATM
ATMFactory
1..*
1 numero : Integer
Retiro
* identificacion(Integer,String)()
Cuenta +getIATM() : IATM
actual seleccionarCuenta(Integer)()
numero : Integer * asignarCliente(Cliente)() ingresarMonto(Integer)()
Cliente 1
saldo : Real asignarCuenta(Cuenta)() salir()
codigo : String ingresarMonto(Integer)()
debitar(Integer)()
finalizar()
1 *
Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 15 Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 16
Inclusin de Operaciones Inclusin de Operaciones (2)
Operacin create: Operaciones de acceso:
La operacin create es utilizada para la Son utilizados para obtener el valor de un
creacin de instancias atributo (get) o para modificarlo (set)
Esta forma es propia de UML e independiente Lo usual es declarar los atributos como
privados y necesitar este tipo de operaciones
de todo lenguaje de programacin
Sin embargo se las excluye de los diagramas
Este mensaje se corresponde con los
Por defecto se asume que un atributo tiene su
constructores de clases get y set asociado
Los constructores estn siempre presentes en Es posible indicar que para un atributo no se
las clases por lo que es comn omitirlos en los brindar la operacin set correspondiente
diagramas de clases de diseo aplicndole la restriccin {readOnly}
Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 17 Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 18
Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 19 Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 20
Diseo de la Estructura
Inclusin de Colecciones (2) Errores Comunes
Ejemplo No incluir las dependencias existentes
ATM
1 1
Transaccion
Omitir la definicin de los datatypes
numero : Integer
actual
fecha : Date No incluir interfaces, controladores ni
identificacion(Integer,String)() 1 *
hora : Time
importe : Integer
fbricas
seleccionarCuenta(Integer)()
ingresarMonto(Integer)()
finalizadas
terminada : Boolean
Sobrecargar el diagrama con
salir()
operaciones omitibles (create, set, etc.)
Incluir colecciones como clases
Un ATM tendr asociado:
Una sola transaccin actual
innecesariamente
Una coleccin de transacciones finalizadas
Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 21 Programacin 4 | Diseo: Diseo de la Estructura de una Colaboracin www.fing.edu.uy/inco/cursos/prog4 | 2010 | 22
Contenido
Introduccin
Programacin 4
Patrones de Diseo
Singleton
Diseo Composite
Patrones de Diseo State
Observer
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 5 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 6
Introduccin (5) Patrones
Problemas recurrentes
Cmo puedo manejar diferentes estados de
comportamiento en un objeto? (State)
Cmo generar el esqueleto de un algoritmo y patrn sust 1 modo usual segn el cual
permitir variar algunos pasos del mismo? algo ocurre, se desarrolla o es hecho 2 cosa
(Template Method, Strategy)
Cmo controlar o uniformizar el acceso a un o forma que representa un ejemplo a copiar
objeto? (Proxy, Adapter)
Cmo reaccionar ante ciertos eventos ocurridos
en un objeto? (Observer)
Cmo acceder a las instancias de una coleccin?
(Iterator)
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 7 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 8
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 9 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 10
Patrones de Diseo
Patrones de Diseo (2) Colaboracin Abstracta
Adems provee guas para su La solucin propuesta por un Patrn de
implementacin y ejemplos Diseo es una colaboracin abstracta (o
paramtrica) que resuelve un problema tipo
La solucin es un arreglo general de Dicha colaboracin es por lo tanto interpretada
objetos y clases que solucionan el como una plantilla de colaboracin
problema Si el problema concreto a resolver es
La solucin concreta es adaptada e compatible con el problema tipo se genera una
implementada a partir de ello para resolver colaboracin concreta a partir de la plantilla
el problema en un contexto particular Dicha colaboracin ser muy similar a la
plantilla y resolver el problema concreto
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 11 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 12
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 13 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 14
Patrones de Diseo Patrones de Diseo
Ejemplo (3) Ejemplo (4)
La estructura de una colaboracin que Para el problema concreto determinamos
solucione el problema tipo puede ser: las siguientes correspondencias entre
parmetros Proveedor
Concreto1
clases del diseo y parmetros de la
colaboracin
operacion1()
interface
IProveedor
operacion2()
Clase Parmetro
operacion1()
Consumidor
operacion2() Proveedor
Concreto2
Formulario Consumidor
operacion1()
Fabrica Fabrica
operacion2()
Fabrica
ISistema IProveedor
getIProveedor() : IProveedor Controlador ProveedorConcreto1
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 15 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 16
mostrado originalmente
En general la estructura resultante es idntica Fabrica
nombre del Fabrica colaboracin
a la del patrn por lo que aumenta la patrn de diseo abstracta
complejidad del diseo final
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 17 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 18
Patrones de Diseo Patrones de Diseo
Descripcin Descripcin (2)
La descripcin de un Patrn de Diseo est Descripcin (cont.)
organizada de la siguiente manera Estructura: diagrama de clases que ilustra
Nombre: la estructura de la colaboracin abstracta
Se utiliza para referenciar a un problema, su que soluciona al problema tipo
solucin y consecuencias en una o dos palabras Participantes: descripcin de las clases
Asignarle un nombre a un patrn incrementa el que forman parte de la estructura y sus
vocabulario de diseo permitiendo disear en un responsabilidades
nivel mayor de abstraccin
Interacciones: diagramas de interaccin
Problema: describe cundo utilizar el
que ilustran el funcionamiento de la
patrn, explica el problema tipo y su
colaboracin abstracta
contexto
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 19 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 20
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 23 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 24
Participantes 2: operacion()
1.1: [s no existe] create()
Singleton: provee una operacin de clase s : Singleton
(getInstancia()) que permite acceder a
la nica instancia
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 25 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 26
Singleton (4) Composite
Consecuencias Problema Tipo:
Se provee acceso controlado a una nica Componer objetos en estructuras arborescentes
instancia para representar jerarquas de objetos
Se permiten variantes en las que se vare el compuestos y tratar uniformemente los mismos.
nmero mximo de instancias
Un cliente puede liberar la memoria de la instancia Aplicabilidad:
Derivar una clase Singleton resulta complejo Se debe representar una jerarqua de objetos
donde algunos de ellos se componen de otros de
Aplicaciones la misma jerarqua
Las fbricas y manejadores suelen ser singleton Se desea que los clientes ignoren las diferencias
entre objetos compuestos y objetos primitivos, y
Algunos controladores tambin los traten uniformemente
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 27 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 28
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 29 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 30
Composite (3) Composite (4)
Participantes (cont.) Interacciones
Compuesto: Operacion() Operacion()
Procesa
: Componente : Hoja
Define el comportamiento de los objetos compuestos, el pedido
Cliente:
Manipula los objetos de la composicin a travs de una 1*: [for each] c :=next()
instancia Componente : Componente
del cliente
Dificulta restringir el tipo de los objetos hijo de
Cuadrado Crculo FiguraCompuesta
un objeto compuesto
+mover(in x : int, in y : int) +mover(in x : int, in y : int) +mover(in x : int, in y : int) 0..1
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 33 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 34
State State (2)
Problema Tipo: Estructura
Permitir que un objeto vare su comportamiento 1
Contexto Estado
cuando su estado interno cambie. El objeto
parecer haber cambiado de clase solicitud() estado evento()
Aplicabilidad:
El comportamiento de un objeto depende de su EstadoConcreto1 EstadoConcreto2
{
estado y debe cambiar su comportamiento en estado.evento();
tiempo de ejecucin dependiendo de ese estado } evento() evento()
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 37 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 38
State (5) State (6)
Consecuencias Consecuencias (cont.)
Sin Garbage Collector es necesario asignar a Es simple agregar nuevos estados
alguien la responsabilidad de eliminar, luego de Sin embargo es necesario modificar estados
una transicin, la instancia que representa el concretos existentes para incluir transiciones al
estado nuevo
estado anterior
Existen diferentes variantes en la implementacin
Los estados concretos pueden tener estado propio de las transiciones
Si no lo tienen pueden ser diseados como El Contexto puede pasarse como parmetro en los
singletons eventos
En casos en que el Contexto tiene muchos Permite eliminar la lgica condicional del Contexto
estados la cantidad de clases (a causa de los El estado concreto actual puede usarse para
estados concretos) puede ser muy grande determinar el estado del Contexto
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 39 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 40
: Subject : Observer
1.1: add(o)
2*: notificar()
o : ObserverConcretoN
: Observer :Observer
Recordar: realiza la interfaz Observer
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 45 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 46
Observer (6) Observer (7)
Consecuencias Consecuencias (cont.)
No existe acoplamiento entre el Subject y Por defecto, el orden de notificacin es
los observadores concretos aleatorio
Este mecanismo es aplicable a la La notificacin es secuencial por lo que se
aguardar a que cada observador procese
realizacin de broadcasts la notificacin
Cambios inesperados en el Subject por La notificacin puede llevar parmetros
parte de un observador concreto puede En casos en que un observador observe a
causar notificaciones en cascada hacia los mas de un Subject a la vez puede ser
otros observadores concretos necesario que ste se identifique al
momento de notificar
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 47 Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 48
Patrones
Sugerencias
Pasos a seguir
Analizar las caractersticas del problema a resolver
(Aplicabilidad)
Determinar si existe algn patrn de diseo que
pueda ser aplicado Implementacin
Aplicar la solucin propuesta por el patrn en el GeneracindeCdigo
diseo existente (Estructura e Interacciones)
Errores comunes
Aplicar un patrn cuando no estn dadas las
condiciones para ello, porque no se entendi bien el
problema
Programacin 4 | Diseo: Patrones de Diseo www.fing.edu.uy/inco/cursos/prog4 | 2010 | 49
Contenido Introduccin
Introduccin Propsito:realizarlaimplementacindeuna
ImplementacindeunaColaboracin: partedeldiseo(unacolaboracin)
ImplementacindelaEstructura Elresultadoescdigofuenteenlaformade
ImplementacindelaInteraccin ElementosdeImplementacin
Sugerencias Unatareadeimplementacinseenfocaen
obtenerciertafuncionalidad(alimplementarla
realizacindeuncasodeuso)queimplicala
implementacindediferenteselementosde
diseoquecontribuyanadichafuncionalidad
ImplementarlaEstructura
ImplementacindeunaColab.
ImplementarInterfaces
Paraimplementarunacolaboracin(querealice Lasinterfacesseimplementandirectamentea
caso/sdeuso): partirdelDCD
Implementarlaestructuradelacolaboracin
Lasoperacionesseobtienendelapropia
Implementarinterfaces
Implementarclases
especificacindelainterfaz
Implementaratributos Advertencia:algunoslenguajesdeprogramacin
Implementaroperaciones
noproveenunaconstruccinparaimplementar
Implementarrelaciones
Implementargeneralizaciones directamenteinterfaces:
Implementarrealizaciones Enesoscasossesueleimplementarunaclaseabstracta,sin
Implementarasociaciones atributosycontodassusoperacionesabstractas
Implementarlasinteraccionesdelacolaboracin
Implementarmtodos
Programacin4Curso2013 Implementacin:GeneracindeCdigo 4 Programacin4Curso2013 Implementacin:GeneracindeCdigo 5
ImplementarlaEstructura ImplementarlaEstructura
ImplementarInterfaces(2) ImplementarClases
Laimplementacindelasclasessehaceenformadirecta
class IControladorUsuario { // interfaz
public: apartirdelDCD
virtual bool login(string usuario, string password) = 0; Loslenguajesdeprogramacinorientadosaobjetos
virtual void logout() = 0;
virtual bool actualizarPassword(string passwordAntiguo, incluyenunaconstruccinparaestefin(laclase)
string passwordNuevo) = 0; Losatributosyoperacionesseobtienendelapropia
virtual set<DataPermiso> permisos() = 0;
virtual set<DataUsuario> getAmigos() = 0;
especificacindelaclase
virtual DataUsuario getPerfil() = 0; Seincluyenlosconstructoresydestructor
// ...
Tambinlasoperacionesdeaccesoy/omodificacindelos
virtual ~IControladorUsuario(){}; // virtual y vaco atributos
};
ImplementarlaEstructura ImplementarlaEstructura
ImplementarClases(2) ImplementarRelaciones
class Tweet {
private: Lasrelacionesentreelementosdediseo
Usuario *usuario;
string contenido; empleadasson:
public:
// constructores Generalizaciones
Tweet(Usuario *u, contenido c);
Realizaciones
// mtodos de acceso
Usuario getUsuario(); Asociaciones
string getContenido();
Dependencias
// otros mtodos
void agregarHashtag(string hashtag);
/* ... */
private:
static set<string> parsearHashtags(string s);
/* ... */
public:
virtual ~Tweet();
};
ImplementarlaEstructura ImplementarlaEstructura
RelacionesAsociaciones RelacionesAsociaciones(2)
Loslenguajesdeprogramacingeneralmenteno SedefineunpseudoatributoenAsolamentesilaasociacin
proveenunaconstruccinespecficaparala esnavegablehaciaB
implementacindeasociaciones EltipodeunpseudoatributoparaAdependedelaclaseB,
ParaqueunaclaseApuedaestarasociadaaunaclaseB perotambindelamultiplicidadenelextremodela
asociacindelladodeB
sesueleincluirunatributoenA
Sedistinguendoscasosdependiendodelmximodedicha
Esteatributonopertenecealconjuntodeatributosdefinidos multiplicidad:
en el diseo por lo que se lo denomina pseudoatributo Sielmximoes1(0..11)
AtravsdelpseudoatributounainstanciadeApuede ElpseudoatributoesdetipoB*
mantenerunareferenciaaotradeByasimplementar Delocontrario(0..*;1..*;etc.)
Elpseudoatributoesdetipocoleccin(ICollection;set<B>;
ellink map<T,B>,etc.) dependiendodelasnecesidadesdenavegacin
ImplementarlaEstructura ImplementarlaEstructura
RelacionesAsociaciones(5) RelacionesAsociaciones(6)
Caso2: Caso2(cont.):
Empresa 0..1 * Persona
Unaempresatieneunacoleccindereferenciasapersonas
trabaja en
ImplementarlasInteracciones
ImplementarlasInteracciones
ImplementarMtodos
Laimplementacindelaestructuraconduceala Undiagramadecomunicacinnotienecomo
definicindeloselementosdediseojuntoconsus objetivoservirdepseudocdigo
relaciones
Sinembargogeneralmenteilustralalgicageneralde
Lasclasesincluyensusoperacionesperonolos
lasoperaciones
mtodosasociados
Estosignificaquenoexisteninvocacionesimplementadaspor Alimplementarelmtodoasociadoalaoperacin
loqueannohaycomportamiento op()enunaclaseA:
Apartirdelosdiagramasdeinteraccinseextrae Sebuscaeldiag.decomunicacinqueincluyaunmensaje
informacinparaimplementarlosmtodos op()llegandoaunainstanciadeA
Lainteraccinanidadaenesemensajedeberaresultarde
ayudaparaimplementarelmtodo
Sugerencias Sugerencias(2)
Antesdeimplementarunaclasedesdeceroes Ordendeimplementacindelasclases:
recomendableconsiderarsicdigoexistente Lasclasesdebenserimplementadascomenzandoporlas
puedeserreutilizadooadaptado menosacopladasyfinalizandoporlasmsacopladas
Deestaformalasclasesvandisponiendodetodoslos
Comprenderenqulugardelaarquitectura elementosnecesariosparasuimplementacin
encajalaimplementacinayudaa: Estopermitequealterminardeimplementarunaclasese
Identificaroportunidadesdereuso
puedatestearinmediatamente
Asegurarqueelcdigonuevoseacoherenteconeldel
restodelsistema
Programacin4Curso2013 Implementacin:ManejodeObjetos 2
Introduccin Referencias
Losobjetossonmanipuladosatravsdereferencias Entiempodeejecucinlosobjetosnoson
Dependiendodecmoloslenguajesde alojadosenelstacksinoenelheap
programacinlasimplementenaplicanciertas Laformadeaccederaunobjetoesmediante
consideracionestantoalamanipulacincomoala referencias
destruccindeobjetos
Unareferenciaesunavariable(tipada)quees
Laidentidadrequierequelosobjetossean
compartidos alojadaenelstack(oenelheapsiestdentrode
Estohacequelascopiasnecesitenserexaminadas
unobjeto)talque
endetalle Noidentificaaningnobjeto(void)
Identificaaunobjetoparticulardeunadeterminada
clase(attached)
Programacin4Curso2013 Implementacin:ManejodeObjetos 3 Programacin4Curso2013 Implementacin:ManejodeObjetos 4
Referencias(2) Referencias(3)
Ejemplo: Enalgunoslenguajesdeprogramacinlas
referenciasseimplementanexplcitamente
EnC++lasreferenciasseimplementanmediantepunteros
ClaseA *aPtr;
// referencia a un objeto de clase A
...
23A8 23A9 23AA 23AB 23AC 23AD 23AE 23AF ClaseA aObj;
Heap // variable en el stack
Stack
Programacin4Curso2013 Implementacin:ManejodeObjetos 5 Programacin4Curso2013 Implementacin:ManejodeObjetos 6
Referencias(4) Referencias(5)
Otroslenguajesmanejanreferenciasenforma Hacerqueunareferenciaseavoid
implcita EnC++:a = NULL
EnJavayC#:a = null
EnJavayC#noesposibledefinirobjetosenelstacksino
nicamentereferencias Hacerqueunareferenciaseaattached(encualquiera
delostreslenguajes)
ClaseA a; Crearunobjetoyadjuntarlareferenciaal
// a es una referencia a un objeto ClaseA *a = new A(); // en el heap
// de ClaseA y no un objeto ClaseA *b = null;
Adjuntarlareferenciaaunobjetoobtenidoatravsdeotra
referencia
a = b;
Asignacin de referencias (punteros)
Programacin4Curso2013 Implementacin:ManejodeObjetos 7 Programacin4Curso2013 Implementacin:ManejodeObjetos 8
ObjetosCompartidos ObjetosCompartidos(2)
Ensistemasorientadosaobjetosesusualqueun Ejemplo: Perez
CopiadeObjetos CopiadeObjetos(2)
Laidentidadylanecesidaddecompartirobjetoshaceque Endeterminadassituacionesesaceptablelacopia
engeneralnoseacorrectocopiarobjetos deobjetos
Recordarqueunacopiadeunobjetoesotroobjetoque Distinguiremostrescasos:
luegodelacopiatienepropiedadesigualesalasdeloriginal Objetosqueimplementandatavalues
Apartirdelacopiaamboselementosevolucionan Objetosquesoninstanciasdeclasesdeldiseo
independientemente Objetosquerepresentancolecciones
Asuvezdistinguimosdosenfoquesderealizar
copiasdeobjetos:
Copiaplana
Copiaenprofundidad
CopiadeObjetos(5) CopiadeObjetos(6)
CopiadeDataValues: CopiadeObjetos:
AlgunosDataTypesdebenserimplementadosmediante Losobjetossitienenidentidad
clasesporlocualsusinstanciassernformalmenteobjetos Encasoderequeriraunodesdemsdeunlugarsedebe
Estosobjetossepuedencopiardadoque compartirlo(noesaceptablecopiarlo)
Notienenidentidad(yaquesondatavalues) ComoreglageneralNOsedebecopiarobjetos
Sedeseadisponerdeunejemplardiferenteencadalugardondese Existencasoscontroladosdondeesposiblerealizarcopiasde
lorequiere
objetos
Lacopiadedatavaluesserealizaenprofundidad
sedebecopiarsolamentelaestructuradedatos(plana)
copia
Programacin4Curso2013 Implementacin:ManejodeObjetos 17 Programacin4Curso2013 Implementacin:ManejodeObjetos 18
DestruccindeObjetos DestruccindeObjetos(2)
Losobjetosalojadosenelheappermanecenall GarbageCollector:
hastaqueelprogramatermina(adiferenciade Formapartedelambientedeejecucindellenguajede
aquellosalojadosenelstack) programacin
Correenparaleloconelprograma
Cuandounobjetoyanoesdeutilidadselosuele Buscaobjetosenelheaptalesquenoexistaningunareferencia
retirardelheapparaliberarlamemoria adjuntaaellos
Cuandoencuentraunobjetotalloeliminayliberalamemoria
Existendosenfoquesparaello: questeocupa
Automtico,medianteelllamadoGarbageCollector(Java,C#) Permitealprogramadorsolicitarmemoriasintenerque
Manual(C++) preocuparse por devolverla
HaylibrerasqueimplementanGarbageCollectionenC++(libgc)
DestruccindeObjetos(5) DestruccindeObjetos(6)
DestruccinManual(cont.) Enfoquesparaladestruccinmanualdeobjetos
Referenciascolgantes:estoocurrecuandounobjetoes Desarrollarunaestrategiaparticular:enfuncindelas
compartidoysedestruyeatravsdeunadelasreferencias particularidades del problema el programador sabe
Ejemplo: cundoycmoeliminarunobjetoenformasegura
(tpicamentequiencreaelobjetoserquienlodestruya).
Empleado *colgante(){ Hayprogramasquepermitendetectarmemoryleaks,
Empleado * e1, *e2; referenciascolgantesperosonmuylentos(valgrind)
e1 = new Jornalero(); Nodestruirobjetos:Noesaplicableensistemasdondese
e2 = e1; creeunagrancantidaddeobjetos
delete e2;
Utilizarcontadoresdereferencias:cadaobjetocontiene
return e1;
}
uncontadordereferenciasadjuntasal.Nosolucionalos
Moraleja: cuidado al destruir objetos compartidos!!
ciclosdereferencias.
Programacin4Curso2013 Implementacin:ManejodeObjetos 23 Programacin4Curso2013 Implementacin:ManejodeObjetos 24
Contenido
Introduccin
ColeccionesdeObjetos
ColeccionesGenricas
Implementacin RealizacindeunaColeccinGenrica
Iteradores
Colecciones
Diccionarios
Bsquedas
ContenedoresSTL
Programacin4Curso2013 Implementacin:Colecciones 2
Introduccin Introduccin(2)
Laimplementacindeasociacionesusualmente Sedistinguendostiposdecoleccionesdependiendodesi
loselementoscontenidosposeenunaclavequelos
requieredelusodecoleccionesparapermitirlinks identifiqueono
conmuchosobjetos Ladefinicindelascoleccionesautilizarenla
Eltipodeloselementosdelascolecciones implementacinseestudiarincrementalmente
dependedelaclasecorrespondientealextremode Secomenzardefiniendounacoleccingenricade
elementossinclavelacualseraumentadapara:
asociacinnavegable
Permitiriteracionessobresuselementos
Portratarlasdemanerauniformestascomparten Soportarelusodeclaves
unamismaestructuraquepuedeserreutilizada Soportardiferentestiposdebsquedas
paragenerarlas
Programacin4Curso2013 Implementacin:Colecciones 3 Programacin4Curso2013 Implementacin:Colecciones 4
ColeccionesdeObjetos
Lascoleccionesdeobjetossonunaherramienta
fundamentalparalaimplementacindemuchasdelas
asociacionespresentesenundiseo
ColeccionesdeObjetos(2) ColeccionesdeObjetos(3)
Lascoleccionesdebenpermitir: Desarrollarcadacoleccinenformantegracadavez
Realizariteracionessobresuselementos quesenecesitaresultapocoprctico
Realizarbsquedasdeelementosporclave(encasode
Esposibledefinirunanicavezunainfraestructura
queloselementostenganuna)
comnquesirvadebaseparatodaslascolecciones
Realizarbsquedasdiversas
especficas:
Coleccionesparamtricas(templates):eltipodelelementoa
almacenaresdeclaradocomoparmetroqueserinstanciado
algenerarlacoleccinparticular
Coleccionesgenricas:puedenalmacenardirectamente
cualquiertipodeelemento
ColeccionesGenricas
ColeccionesGenricas
GenericidaddelaColeccin(2)
Encapsulamiento
Ejemplo: Cmosedefineunacoleccingenrica?
LaclasePersonadeberealizarlainterfazdemarca Lanocindecoleccinesindependientedesu
ICollectibleparapoderagregarpersonasauna implementacin
coleccingenrica Seseparalaespecificacindelaimplementacin:
SedefineunainterfazICollection
interface Unaciertacoleccingenricaserunaimplementacinque
ICollectible Una interfaz de marca no posee realiceestainterfaz
ninguna operacin, por lo que no
obliga a las clases que la
implementan a presentar ningn
servicio.
Persona
interface
ICollection
add(ICollectible)
interface remove(ICollectible)
interface
ICollection member(ICollectible)
ICollectible
isEmpty():Boolean
add(ICollectible)()
remove(ICollectible)()
member(ICollectible)()
isEmpty() : Boolean
Persona
ColeccionesGenricas
RealizacindeunaCol.Genrica
Realizaciones(3)
Estructuradeunacoleccingenrica: LainterfazICollectiondeclaraquserviciosdebe
proveerunacoleccin
: Node : Node : Node Esposiblerealizardichainterfazdediferentesmaneras
mediantediferentesestructurasdedatos
Realizacionesposibles:
: Persona : List
ArrayoVector
Listacomnodoblementeenlazada
p1: Persona p2: Persona p3: Persona Arbolbinario
Etc.
1:add(o) 1.1:create(o,first)
:List :Node
next 0..1
0..1
List Node
first 1.1:e:=getElem()
elem 1 1.2a*:[e<>o]e:=getNext()
Iteradores
Esmuycomnnecesitarrealizariteraciones
sobreloselementosdeunacoleccin
LainterfazICollectionesaumentadacon
lasiguienteoperacin:
getIterator():IIterator
Programacin4Curso2013 Implementacin:Colecciones 20
Iteradores
Iteradores(2) Estructura
Uniterador(sugeridoenelpatrndediseo
Iterator)esunobjetoquepermiterecorrerunoa
interface
unoloselementosdeunacoleccin IIterator
next()
Uniteradoresunobservadorexternodela current():ICollectible
hasCurrent():Boolean
coleccin(noenelsentidodelpatrnObserver)
Unacoleccinpuedetenerdiferentesiteradores
realizandodiferentesiteraciones ArrayIterator ListIterator DLListIterator BinTreeIterator
simultneamente
Iteradores Iteradores
UsodeIteradores RealizacindeIteradores
Comoejemploderealizacindeiteradoressepresenta
class Venta {
private: eldiseodeuniteradorsobrelistascomunes
ICollection *lineas;
public: LaclaseListIterator realizalainterfaz
float totalVenta();
virtual ~Venta(); IIterator
};
float Venta::totalVenta() {
float total = 0;
interface
ListIterator ICollectible
Iteradores Iteradores
RealizacindeIteradores(4) RealizacindeIteradores(5)
Interacciones(cont.): Ejemplo:
: Node : Node : Node
: ListIterator
1: b := hasCurrent()
b := (current <> null)
: ListIterator
realiza IIterator
Programacin4Curso2013 Implementacin:Colecciones 30
Diccionarios Diccionarios
UsodeClaves UsodeClaves(2)
Seesttratandolanocindediccionariogenrico
porloquelaclavequeidentificaaloselementos interface
IKey
debesertambingenrica
equals(IKey) : Boolean()
SedefinelainterfazIKey: Esta operacin siempre
castea el parmetro a
Debeserrealizadaporunaclasequerepresentalaclavede clase PersonaKey
loselementosaincluireneldiccionario
PersonaKey Esta clase no tiene
Contienenicamentelaoperacin nombre : String por qu ser la nica
equals(IKey):booleanutilizadaparacompararclaves equals(IKey) : Boolean() clave de Persona
concretas
interface
: Node : Node : Node
IDictionary
add(IKey,ICollectible)
remove(IKey)
member(IKey):Boolean : List
find(IKey):ICollectible
isEmpty():Boolean
List realiza IDictionary : Persona : Persona : Persona
y ya no ICollection
Diccionarios
IteracionesenDiccionarios
Undiccionarioesunacoleccinporloquetienesentido
necesitariterarsobresuselementos
SeincorporaalainterfazIDictionary:
getElemIterator():IIteratorquedevuelve
uniteradorsobreloselementoscontenidosenel
diccionario
getKeyIterator():IIteratorquedevuelveun
iteradorsobrelasclavesdeloselementoscontenidosenel
diccionario
Programacin4Curso2013 Implementacin:Colecciones 35
Bsquedas Bsquedas(2)
Lasbsquedasporclavenosonelnicotipodebsqueda Dadoqueestetipodebsquedasdependendecada
quesesuelerequerir coleccinnoseimplementanenlascoleccionesgenricas
Existeotrotipodebsquedasquenoinvolucran Deestaformasedefineunaoperacinporcadabsqueda
necesariamenteunaclave: necesaria:
Buscartodoslosempleadosmenoresdeuna Porejemploparabuscarlosempleadoscontratadosantesde
ciertaedad unafecha:
Buscartodoslosempleadoscontratados
antesdeunafechadada
selectContratadosAntes(Fecha):ICollection
Bsquedas(3) Bsquedas(4)
Lasoperacionesdebsquedasonmuysimilares
List * ClaseA::selectContratadosAntes(Fecha f) {
List * result = new List(); entres
ListIterator * it = coleccion->getIterator();
Lasbsquedasentodaslascoleccionesson
while(it.hasCurrent()) { similaressalvo:
if(((Persona*)it.current())->getFecha()<f)
Lacondicinquedeterminalainclusindeunelementoenel
result->add(it.current());
it.next(); resultado
} Losparmetros
return result;
} Eltipodeliteradorylacoleccinresultado
Bsquedas(7) Bsquedas(8)
Unaposibleimplementacindeselect()enuna Deestaformalasclasesqueimplementan
realizacindeICollectionsera: IConditionsonestrategiasconcretasqueel
select()utilizaparaconstruirlacoleccin
ICollection * List::select(ICondition * cond) { resultado
ICollection * result = new List();
IIterator * it = coleccion->getIterator();
EnestaaplicacindeStrategysedanlas
siguientescorrespondencias:
while(it->hasCurrent()) { ListContext
if(cond->holds(it->current())) IConditionEstrategia
result->add(it->current());
it->next();
select()solicitud()
} holds()algoritmo()
return result;
}
Programacin4Curso2013 Implementacin:Colecciones 43 Programacin4Curso2013 Implementacin:Colecciones 44
Bsquedas(9)
Ejemplode
condicin // CondEdad.h
concreta: class CondEdad : ICondition {
private:
int valorEdad;
public:
CondEdad(int i);
bool holds(ICollectible *ic);
class Persona : ICollectible { }
private: // CondEdad.cpp
String nombre; CondEdad::CondEdad(int i) {
int edad; valorEdad = i;
public: }
Persona(); bool CondEdad::holds(ICollectible *ic) {
String getNombre(); Persona * p = (Persona *)ic;
int getEdad(); return (p->getEdad() == valorEdad);
} }
Programacin4Curso2013 Implementacin:Colecciones 45
ContenedoresSTL ContenedoresSTL
Introduccin Introduccin(2)
Usualmenteloslenguajesdeprogramacinofrecen LaSTLproveecontenedores
bibliotecasparaelmanejodecolecciones Loscontenedoressonclasescuyopropsitoson
C++ofrecelaStandardTemplateLibrary,unconjuntode almacenarotrosobjetos
contenedores,iteradoresyotrasutilidadesparamanejar Algunoscontenedores
conjuntosdeobjetos. set<T>:Unacoleccindeobjetos. Permiteopcionalmente
Esunaalternativaaimplementarcoleccionesgenricas ordenamiento
(nosereinventalarueda) map<K,V>:UnDiccionariodeclavesdetipoKyvaloresde
tipoV
Otros:vector,queue,list,stack
Todosloscontendedoressonclasesparamtricas
ContenedoresSTL ContenedoresSTL
Iteradores Iteradores(2)
set<Empleado *> col;
Laoperacinbegin() devuelveuniteradoralprincipio Empleado *e1 = new Empleado("pato");
Empleado *e2 = new Empleado("poto");
delacoleccin Empleado *e3 = new Empleado("carlitos");
Empleado *f = new Empleado("peto");
end() devuelveuniteradorunlugardespusdelfinal
delacoleccin.Seutiliza col.insert(e1);
col.insert(e2);
Paramarcarelfinalenlasiteracionesfor() col.insert(e3);
col["gieco"]; // devuelve u2
col["sumo"]; // devuelve NULL
ContenedoresSTL ContenedoresSTL
Iteracinenmap Iteracinenmap(2)
Eliteradordemap<K,V>iterademaneraordenadaenlas map<char,int> dict;
map<char,int>::iterator it;
clavesycadaelementoesdetipoPair<K,V> Imprime
dict['b'] = 100; a => 200
LoselementosseiteranporelordendelaclaveKde b => 100
dict['a'] = 200;
menoramayor dict['c'] = 300; c => 300
for (it= dict.begin(); it!=dict.end(); ++it){
char clave = it->fist;
int valor = it->second;
cout << clave << " => " << valor << '\n';
}
SingletonEjemplo
Singleton
-instancia : Singleton
-Singleton()
+getInstancia() : Singleton
+operacion()
SingletonCdigo SingletonCdigo(2)
// Singleton.cpp
// Singleton.h #include "Singleton.h"
class Singleton { Singleton * Singleton::instancia = NULL;
private:
static Singleton * instancia; Singleton::Singleton() {...}
Singleton(); Singleton * Singleton::getInstancia() {
public: if (instancia == NULL)
static Singleton * getInstancia(); instancia = new Singleton();
void operacion(); return instancia;
}; }
void Singleton::operacion() {...}
SingletonCdigo(3)
// Ejemplo de uso
#include "Singleton.h"
int main() {
Singleton * ms;
ms = Singleton::getInstancia();
ms -> operacion();
return 0;
}
StateEjemplo StateEjemplo(2)
Puertaautomticacontroladaporuncontrolremotodeun
solobotn:
Control
abrir()
cerrar()
Abierto Cerrado
Motor maneja el motor
boton / m.abrir() que abre y cierra la puerta
StateCdigo StateCdigo(2)
// EstadoControl.h
#include "Motor.h" // Abierto.h
class EstadoControl { #include "EstadoControl.h"
public:
class Abierto : public EstadoControl {
virtual void boton(Motor * m, EstadoControl *&e) = 0;
public:
};
void boton(Motor * m, EstadoControl *&e);
};
StateCdigo(3) StateCdigo(4)
// Abierto.cpp
// Control.h
#include "EstadoControl.h"
#include "Motor.h" #include "EstadoControl.h
#include "Abierto.h" #include "Motor.h"
#include "Cerrado.h" class Control {
void Abierto::boton(Motor * m, EstadoControl *&e) { private:
// Cerramos la puerta EstadoControl * estadoActual;
m -> cerrar(); Motor * motor;
public:
// Pasamos al proximo estado Control();
e = new Cerrado(); void apretarBoton();
} };
StateCdigo(5) StateCdigo(6)
#include "Control.h" // Ejemplo de uso
#include "Cerrado.h"
#include "EstadoControl.h" #include "Control.h"
ObserverEjemplo ObserverEjemplo(2)
Unpuestodeventatienevariosproductosparavender,de
loscualessenecesitacontrolarsustock.Cuandoelstockde PuntoDeVenta
algunodeellosllegueacero,deberavisarsealdepsito * interfaz
+venderProducto(entrada idProd : int, entrada cant : int) IObserver
(paraquesepreparenarecibirlosnuevosproductos)yalos +agregarObservador(entrada o : IObserver) +notify(entrada idProd : int)
+eliminarObservador(entrada o : IObserver)
proveedores(paraqueproveandemsstock). -notificarObservadores(entrada idProd : int)
Deposito Proveedor
ObserverCdigo(3) ObserverCdigo(4)
// Deposito.h
// PuntoDeVenta.cpp (cont.) class Deposito : public IObserver {
private:
void PuestoDeVenta::agregarObservador(IObserver *o){ ...
observers->insert(o); public:
} void notify(int idProd);
void PuestoDeVenta::eliminarObservador(IObserver *o){ };
observers->erase(o); // Deposito.cpp
}
void Deposito::notify(int idProd) {
// hacer lugar para recibir
// nuevo stock de 'idProd'
}
ObserverCdigo(5) ObserverCdigo(6)
// Ejemplo de uso
// Proveedor.h
int Main() {
class Proveedor : public IObserver {
PuntoDeVenta * pdv = ...
private:
Deposito * deposito = ...
...
Proveedor * proveedor = ...
public:
void notify(int idProd); // Registramos los observadores
}; pdv -> agregarObservador(deposito);
// Proveedor.cpp pdv -> agregarObservador(proveedor);
ObserverAlternativas
Cuandoelsubjectpasalainformacinnecesariaa
losobservadores(comodatosenlosparmetros
delnotify),stosnodependerndel(comoenel
ejemplo).
Cuandoelsubjectsepasaasimismoalos
observadores(comothisenelnotify),stos
dependerndel.
FactoryEjemplo FactoryEjemplo(2)
FormPrincipal
Setieneunafbricadecontroladores
quepermiteelaccesoastosdesdela
presentacin,sinquestaquede singleton
interfaz Fabrica interfaz
acopladaaloscontroladores(mediante ISistema1
+oper1()
-instancia : Fabrica
+getISistema1() : ISistema1
ISistema2
+oper3()
Controlador1 Controlador2
+oper1() +oper3()
+oper2() +oper4()
FactoryCdigo
FactoryAlternativas // ------------ Alternativa 1 ------------
ISistema1 Fabrica::getISistema1() {
1. QueloscontroladoresseanSingletony return Controlador1.getInstancia();
simplementeseanaccedidosmediante }
getInstance()desdelaFbrica. // ------------ Alternativa 2 ------------
2. QueloscontroladoresnoseanSingletonyquela ISistema1 Fabrica::getISistema1() {
if (this->sistema1 == NULL)
Fbricamantengaunareferenciaacadaunode this->sistema1 = new Controlador1();
elloscontrolandosuunicidad. return this->sistema1;
3. QueloscontroladoresnoseanSingletonyquela }
Fbricanomantengareferencias,sinoque // ------------ Alternativa 3 ------------
devuelvaunanuevainstanciadelcontrolador ISistema1 Fabrica::getISistema1() {
return new Controlador1();
cadavez. }