SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
Construcción de Software
Capítulo 3
Patrones de diseño
2
Contenidos
1. Concepto de patrón
2. Clasificación de patrones
3. Estudio de algunos de los principales patrones GoF
• Adaptador
• Factoría
• Singleton
• Estrategia
• Composite
• Fachada
• Observador
3
Bibliografía
• [Larman 02] Larman, C. “UML y Patrones: Una
introducción al análisis y diseño orientado a
objetos y al proceso unificado”, Segunda Edición,
Prentice-Hall, 2002. Capítulo 23.
• [Larman 05] Larman, C. “Applying UML and
Patterns. An Introduction to Object-Oriented
Analysis and Design and Iterative Development”,
3rd edition, Prentice-Hall, 2005. Capítulo 26.
• [Gamma et al. 02] Gamma E., et al., Patrones de
Diseño, Addison-Wesley, 2002.
4
Arquitectura software y patrones
“Una arquitectura orientada a objetos bien
estructurada está llena de patrones. La calidad de un
sistema orientado a objetos se mide por la atención
que los diseñadores han prestado a las colaboraciones
entre sus objetos.”
“Los patrones conducen a arquitecturas más
pequeñas, más simples y más comprensibles”
G. Booch
5
Diseño orientado a objetos
• “Diseñar software orientado a objetos es difícil pero
diseñar software orientado a objetos reutilizable es
más difícil todavía. Diseños generales y flexibles son
muy difíciles de encontrar la primera vez”
• ¿Qué conoce un programador experto que desconoce
uno inexperto?
Reutilizar soluciones que funcionaron en el pasado:
EXPERIENCIA
6
Patrones
• Describen un problema recurrente y una solución.
• Cada patrón nombra, explica, evalúa un diseño
recurrente en sistemas OO.
• Elementos principales:
– Nombre
– Problema
– Solución: Descripción abstracta
– Consecuencias
7
Granularidad
• Patrones de Código
– Nivel de lenguaje de programación
• Frameworks
– Diseños específicos de un dominio de aplicaciones.
• Patrones de Diseño
– Descripciones de clases cuyas instancias colaboran entre sí
que deben ser adaptados para resolver problemas de diseño
generales en un contexto particular.
– Un patrón de diseño identifica: Clases, Instancias, Roles,
Colaboraciones y la Distribución de responsabilidades.
8
Patrones y frameworks
• Un framework es una colección organizada de
clases que constituyen un diseño reutilizable para un
dominio específico de software.
• Necesario adaptarlo a una aplicación particular.
• Establece la arquitectura de la aplicación
• Diferencias:
– Patrones son más abstractos que los frameworks
– Patrones son elementos arquitecturales más pequeños
– Patrones son menos especializados
9
Modelo-Vista-Control
(MVC paradigm o MVC framework)
• Utilizado para construir interfaces de usuario en
Smalltalk-80.
• Basado en tres tipos de objetos:
– Modelo: objetos del dominio
– Vista: objetos presentación en pantalla (interfaz de usuario)
– Controlador: define la forma en que la interfaz reacciona a
la entrada del usuario.
• Desacopla el modelo de las vistas.
0
10
20
30
40
50
60
70
80
90
1er trim. 2do trim. 3er trim. 4to trim.
Este
Oeste
Norte
1tr
3tr
4tr
2tr
1tr. 2tr. 3tr. 4tr.
Este 20 25 90 20
Oeste 30 38 32 32
Norte 47 47 45 45
Vistas
t1=20
t2=25
t3=90
t4=20
Modelo
11
Modelo-Vista-Control
• Utiliza los siguientes patrones:
– Observer
– Composite
– Strategy
– Decorator
– Factory method
12
Plantilla de definición
• Nombre del patrón
• Propósito
− ¿Qué hace? ¿Cuál es su razón y propósito? ¿Qué
cuestión de diseño particular o problema aborda?
• Sinónimos
• Motivación
− Escenario que ilustra un problema particular y cómo el
patrón lo resuelve.
13
Plantilla de definición
• Aplicabilidad
− ¿En qué situaciones puede aplicarse? ¿Cómo las
reconoces? Ejemplos de diseños que pueden mejorarse
• Estructura
− Diagramas de clases que ilustran la estructura
• Participantes
− Clases que participan y sus responsabilidades
• Colaboraciones
− Diagramas de interacción que muestran cómo
colaboran los participantes.
14
Plantilla de definición
• Consecuencias
– ¿Cómo alcanza el patrón sus objetivos? ¿Cuáles son los
compromisos y resultados de usar el patrón? Alternativas,
Costes y Beneficios
• Implementación
– Técnicas, heurísticas y consejos para la implementación
– ¿Hay cuestiones dependientes del lenguaje?
• Ejemplo de código
• Usos conocidos
• Patrones relacionados
15
Clasificación de patrones de diseño
Ámbito
Propósito
Estructural ComportamientoCreación
Clase
Objeto
Factory Method Adapter Interpreter
Template Method
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain of Responsability
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
16
Adaptador
En NuevaEra...
• La aplicación NuevaEra necesita soportar
diferentes tipos de servicios externos de terceras
partes, entre los que se encuentran los calculadores
de impuestos, servicios de autorización de pagos,
sistemas de inventario, y sistemas de contabilidad.
Cada uno tiene una API diferente, que no puede
ser cambiada.
• Una solución es añadir un nivel de indirección con
objetos que adapten las distintas interfaces
externas a una interfaz consistente que es la que se
utiliza en la aplicación.
17
Adaptador (GoF)
• Nombre: Adaptador (Adapter / Wrapper)
• Contexto/Problema: ¿Cómo resolver
interfaces incompatibles, o proporcionar
una interfaz estable para componentes
similares con diferentes interfaces?
• Solución (consejo): Convertir la interfaz
original de un componente en otra interfaz,
a través de un objeto adaptador intermedio.
18
Adaptador
TaxMasterAdapter
getTaxes( Sale ) : List of TaxLineItems
GoodAsGoldTaxPro
Adapter
getTaxes( Sale ) : List of TaxLineItems
«interface»
ITaxCalculatorAdapter
getTaxes( Sale ) : List of TaxLineItems
Adapters use interfaces and
polymorphism to add a level of
indirection to varying APIs in other
components.
SAPAccountingAdapter
postReceivable( CreditPayment )
postSale( Sale )
...
GreatNorthernAccountingAdapter
postReceivable( CreditPayment )
postSale( Sale )
...
«interface»
IAccountingAdapter
postReceivable( CreditPayment )
postSale( Sale )
...
«interface»
IInventoryAdapter
...
«interface»
ICreditAuthorizationService
Adapter
requestApproval(CreditPayment,TerminalID, MerchantID)
...
19
Adaptador
• Una instancia de adaptador será instanciada para el
servicio externo elegido, tal como
SAPAccountingAdapter, y adaptará la petición
postSale al interfaz externo, como p.ej. un interfaz
SOAP XML sobre HTTPS para un servicio Web
de intranet ofrecido por SAP.
• Guía: Es común es que el nombre del patrón se
inserte en los nombres de los tipos involucrados, de
forma que se transmita rápidamente qué patrones
están involucrados en un fragmento de código.
20
Adaptador
:Register : SAPAccountingAdapter
postSale( sale )
makePayment
the Adapter adapts to
interfaces in other components
SOAP over
HTTP
xxx
...
«actor»
: SAPSystem
21
Factoría
En NuevaEra...
• ¿Quién crea el adaptador? ¿Y cómo determinar
qué clase de adaptador crear?
• Si los creara algún objeto del dominio, las
responsabilidades de los objetos del dominio
excederían la lógica pura de la aplicación y
entrarían en cuestiones relacionadas con la
conexión con componentes software externos.
22
Factoría
• Nombre: Factoría concreta (Simple Factory /
Concrete Factory)
• Contexto/Problema: ¿Quién debe ser el
responsable de la creación de los objetos cuando
existen consideraciones especiales, como una
lógica de creación compleja, el deseo de separar
las responsabilidades de la creación para mejorar
la cohesión, etc.?
• Solución (consejo): Crear un objeto Fabricación
Pura (es decir, que no pertenece al modelo
conceptual) denominado Factoría que maneje la
creación.
23
Factoría
ServicesFactory
accountingAdapter : IAccountingAdapter
inventoryAdapter : IInventoryAdapter
taxCalculatorAdapter : ITaxCalculatorAdapter
getAccountingAdapter() : IAccountingAdapter
getInventoryAdapter() : IInventoryAdapter
getTaxCalculatorAdapter() : ITaxCalculatorAdapter
...
note that the factory methods
return objects typed to an
interface rather than a class, so
that the factory can return any
implementation of the interface
if ( taxCalculatorAdapter == null )
{
// a reflective or data-driven approach to finding the right class: read it from an
// external property
String className = System.getProperty( "taxcalculator.class.name" );
taxCalculatorAdapter = (ITaxCalculatorAdapter) Class.forName( className ).newInstance();
}
return taxCalculatorAdapter;
24
Factoría
Los objetos factoría tienen varias ventajas:
• Separan la responsabilidad de la creación
compleja en objetos de apoyo cohesivos.
• Ocultan la lógica de la creación
potencialmente compleja.
• Permiten introducir estrategias para mejorar
el rendimiento de la gestión de la memoria,
como objetos caché o de reciclaje.
25
Factoría
En NuevaEra…
• La lógica para decidir qué clase se crea se resuelve
leyendo el nombre de la clase de una fuente
externa (p.ej., por medio de una propiedad del
sistema, si se usa Java) y después se carga la clase
dinámicamente.
• Es un ejemplo de diseño dirigido por los datos.
• A menudo se accede a las factorías con el patrón
Singleton.
26
Singleton
En NuevaEra...
• ¿Quién crea la factoría de servicios y cómo
se accede?
– Sólo se necesita una instancia de la factoría en
el proceso.
– ¿Cómo conseguir visibilidad a la factoría?
⇒ Es preciso mantener visibilidad global a
una única instancia de una clase
27
Singleton (GoF)
• Nombre: Singleton
• Contexto / Problema: Se admite
exactamente una instancia de una clase –es
un “singleton”. Los objetos necesitan un
único punto de acceso global.
• Solución (consejo): Definir un método
estático de la clase que devuelva el
singleton.
28
Singleton
1
ServicesFactory
instance : ServicesFactory
accountingAdapter : IAccountingAdapter
inventoryAdapter : IInventoryAdapter
taxCalculatorAdapter : ITaxCalculatorAdapter
getInstance() : ServicesFactory
getAccountingAdapter() : IAccountingAdapter
getInventoryAdapter() : IInventoryAdapter
getTaxCalculatorAdapter() : ITaxCalculatorAdapter
...
singleton static
attribute
singleton
static
method
// static method
public static synchronized ServicesFactory getInstance()
{
if ( instance == null )
instance = new ServicesFactory()
return instance
}
UML notation: in a
class box, an
underlined attribute or
method indicates a
static (class level)
member, rather than
an instance member
UML notation: this '1' can optionally be used to
indicate that only one instance will be created (a
singleton)
29
Singleton
public class Register
{
public void initialize()
{
...hace algún trabajo...
// acceso a la Factoría Singleton mediante la llamada
// a “getInstancia”
accountingAdapter =
ServicesFactory.getInstance().getAccountingAdapter();
...hace algún trabajo...
}
// otros métodos
}
30
Singleton
:Register
1
:ServicesFactory
aa = getAccountingAdapter
initialize
...
the ‘1’ indicates that visibility
to this instance was achieved
via the Singleton pattern
31
Singleton
• Usualmente, inicialización perezosa:
public static synchronized ServicesFactory getInstance()
{
if ( instance == null )
{
// sección crítica si es una aplicación
// con varios hilos
instance = new ServicesFactory() ;
}
return instance ;
}
32
Servicios externos con diversas
interfaces – Visión general
:Register
accountingAdapter:
SAPAccountingAdapter
postSale( sale )
makePayment
SOAP over
HTTP
xxx
:Register
1
:ServicesFactory
accountingAdapter =
getAccountingAdapter
:Store
create
create
: SAPAccounting
Adapter
: Paymentcreate(cashTendered)
«actor»
: SAPSystem
create
33
Estrategia
En NuevaEra…
• La estrategia de fijación de precios de una venta
puede variar. Durante un periodo podría ser el
10% de descuento en todas las ventas, después
podría ser un descuento de 10€ si el total de la
venta es superior a 200€, y podrían ocurrir muchas
otras variaciones.
⇒ ¿Cómo diseñamos los diversos algoritmos de
fijación de precios?
34
Estrategia (GoF)
• Nombre: Estrategia.
• Contexto/Problema: ¿Cómo diseñar
diversos algoritmos o políticas que están
relacionadas? ¿Cómo diseñar que estos
algoritmos o políticas puedan cambiar?
• Solución (consejo): Definir cada
algoritmo/política/estrategia en una clase
independiente, con una interfaz común.
35
Estrategia
PercentDiscount
PricingStrategy
percentage : float
getTotal( s:Sale ) :
Money
AbsoluteDiscount
OverThreshold
PricingStrategy
discount : Money
threshold : Money
getTotal( s:Sale ) :
Money
«interface»
ISalePricingStrategy
getTotal( Sale ) : Money
{
return s.getPreDiscountTotal() * percentage
}
???
PricingStrategy
...
...
{
pdt := s.getPreDiscountTotal()
if ( pdt < threshold )
return pdt
else
return pdt - discount
}
36
Estrategia
• Un objeto estrategia se conecta a un objeto
de contexto –el objeto al que se aplica el
algoritmo, Venta en este caso.
• Es habitual que el objeto de contexto pase
una referencia a él mismo (this) al objeto
estrategia.
• El objeto de contexto necesita tener
visibilidad de atributo de su estrategia.
37
Estrategia
:PercentDiscount
PricingStrategy
s : Sale
st = getSubtotal
t = getTotal
lineItems[ i ] :
SalesLineItem
t = getTotal( s )
pdt = getPreDiscountTotal
{ t = pdt * percentage }
note that the Sale s is
passed to the Strategy so
that it has parameter
visibility to it for further
collaboration
loop
38
Estrategia
PercentDiscount
PricingStrategy
percentage : float
getTotal( Sale ) : Money
AbsoluteDiscount
OverThreshold
PricingStrategy
discount : Money
threshold : Money
getTotal( Sale ) : Money
«interface»
ISalePricingStrategy
getTotal( Sale ) : Money
Sale
date
...
getTotal()
...
1
Sale needs attribute
visibility to its Strategy
pricingStrategy
getTotal()
{
...
return pricingStrategy.getTotal( this )
}
39
Creación de una Estrategia
mediante una Factoría
1
PricingStrategyFactory
instance : PricingStrategyFactory
getInstance() : PricingStrategyFactory
getSalePricingStrategy() : ISalePricingStrategy
getSeniorPricingStrategy() : ISalePricingStrategy
...
{
String className = System.getProperty( "salepricingstrategy.class.name" );
strategy = (ISalePricingStrategy) Class.forName( className ).newInstance();
return strategy;
}
:Sale
1
:PricingStrategyFactory
ps =
getSalePricingStrategy
:Register
makeNewSale
create
create(percent) ps : PercentDiscount
PricingStrategy
40
Composite
En NuevaEra…
• ¿Cómo gestionar el caso de varias políticas contradictorias
de fijación de precios? En un momento dado pueden
coexistir múltiples estrategias, según el periodo de tiempo,
el tipo de producto, o el tipo de cliente.
• Se debe definir la estrategia de resolución de conflictos de
la tienda (normalmente, se aplica “lo mejor para el
cliente”, pero no es obligatorio).
• Necesitamos cambiar el diseño de forma que el objeto
Venta no conozca si está tratando con una o más
estrategias, y que se resuelvan los conflictos.
41
Composite (GoF)
• Nombre: Composite
• Contexto/Problema: ¿Cómo tratar un grupo
o una estructura compuesta del mismo
modo (polimórficamente) que un objeto no
compuesto (atómico)?
• Solución (consejo): Definir las clases para
los objetos compuestos y atómicos de
manera que implementen el mismo interfaz.
42
Composite
PercentageDiscount
PricingStrategy
percentage : float
getTotal( Sale ) : Money
AbsoluteDiscount
OverThreshold
PricingStrategy
discount : Money
threshold : Money
getTotal( Sale ) : Money
«interface»
ISalePricingStrategy
getTotal( Sale ) : Money
{
return sale.getPreDiscountTotal() *
percentage
}
Composite
PricingStrategy
add( ISalePricingStrategy )
getTotal( Sale ) : Money
{
lowestTotal = INTEGER.MAX
for each ISalePricingStrategy strat in pricingStrategies
{
total := strat.getTotal( sale )
lowestTotal = min( total, lowestTotal )
}
return lowestTotal
}
1..*
CompositeBestForCustomer
PricingStrategy
getTotal( Sale ) : Money
CompositeBestForStore
PricingStrategy
getTotal( Sale ) : Money
strategies
All composites maintain a list of
contained strategies. Therefore,
define a common superclass
CompositePricingStrategy that
defines this list (named strategies).
Sale
date
...
getTotal()
...
1
pricingStrategy
{
...
return pricingStrategy.getTotal( this )
}
43
Composite
:CompositeBestForCustomer
PricingStrategy
s : Sale
st = getSubtotal
t = getTotal
lineItems[ i ] :
SalesLineItem
t = getTotal( s )
the Sale object treats a Composite Strategy that contains
other strategies just like any other ISalePricingStrategy
x = getTotal( s )
strategies[ j ] :
: ISalePricingStrategy
UML: ISalePricingStrategy is an interface, not a class;
this is the way in UML 2 to indicate an object of an
unknown class, but that implements this interface
{ t = min(set of all x) }
loop
loop
44
Creación de múltiples instancias
EstrategiaFijarPreciosVenta
• Crear un Composite que contenga las políticas de descuento de la
tienda en el momento actual (inicialmente, 0% si no hay ninguna
activa).
:Sale
1
:PricingStrategyFactory
ps =
getSale
PricingStrategy
:Register
make
NewSale
create
create
ps :CompositeBestForCustomer
PricingStrategy
create( percent ) s : PercentageDiscount
PricingStrategy
add( s )
45
Creación de múltiples instancias
EstrategiaFijarPreciosVenta
• Para introducir el descuento según el tipo de cliente, es
preciso introducir un nueva operación del sistema:
s :Sale:Register
enterCustomerForDiscount( custID )
by Controller
by Expert and
IDs to Objects
:Store
c = getCustomer( custID )
enterCustomerForDiscount( c : Customer )
by Expert
ref Enter Customer
For Discount
46
Creación de múltiples instancias
EstrategiaFijarPreciosVenta
s :Sale
1
:PricingStrategy
Factory
addCustomer
PricingStrategy( s )
ps :CompositeBestForCustomer
PricingStrategy
create( pct ) s : PercentageDiscount
PricingStrategy
add( s )
by Expert
enterCustomer
ForDiscount( c : Customer )
c = getCustomer
by Factory and
High Cohesion
by Expert
ps = getPricing
Strategy
pct =
getCustomer
Percentage( c )
by High Cohesion
by Factory and Composite
Pass
Aggregate
Object as
Parameter
sd Enter Customer For Discount
47
Fachada
En NuevaEra…
• Se quiere dar soporte a reglas de negocio
conectables.
• Se desea definir un subsistema “motor de
reglas” que será responsable de evaluar un
conjunto de reglas contra una operación, e
indicar si alguna de las reglas invalida la
operación.
48
Fachada (GoF)
• Nombre: Fachada (Facade)
• Contexto/Problema: Se requiere una interfaz común,
unificada para un conjunto de implementaciones o
interfaces dispares –como en un subsistema. Podría no ser
conveniente acoplarse con muchas cosas del subsistema, o
la implementación del subsistema podría cambiar. ¿Qué
hacemos?
• Solución (consejo): Definir un punto único de conexión
con el subsistema –un objeto fachada que envuelve al
subsistema. Este objeto fachada presenta una única interfaz
unificada y es responsable de colaborar con los
componentes del subsistema.
49
Fachada
Domain
+ Sale + Register ...
POSRuleEngine
«interface»
- IRule
...
- Rule1
...
- Rule2
...
...
package name may be
shown in the tab
visibility of the package element (to
outside the package) can be shown
by preceding the element name with a
visibility symbol
+ POSRuleEngineFacade
instance : RuleEngineFacade
getInstance() : RuleEngineFacade
isInvalid( SalesLineItem, Sale )
isInvalid( Payment, Sale )
...
*
50
Fachada
public class Venta
{
public void crearLineaDeVenta( EspecificacionDelProducto espec, int
cantidad)
{
LineaDeVenta ldv = new LineaDeVenta( espec, cantidad );
// llamada a la fachada, obsérvese el uso de Singleton
if (FachadaMotorReglasPDV.getInstancia().esInvalido( ldv, this ))
return;
lineasDeVenta.add( ldv );
}
//…
} // final de la clase
51
Observador
En NuevaEra…
• Se pretende añadir la
capacidad de que
una ventana GUI
actualice la
información que
muestra sobre el
total de la venta
cuando éste cambia.
Goal: When the total of the sale
changes, refresh the display with
the new value
Sale
total
...
setTotal( newTotal )
...
52
Observador (GoF)
• Nombre: Observador / Observer / Publicar-Suscribir /
Modelo de delegación de eventos
• Contexto/Problema: Diferentes tipos de objetos
suscriptores están interesados en el cambio de estado o
eventos de un objeto emisor, y quieren reaccionar cada uno
a su manera cuando el emisor genere un evento. Además,
el emisor quiere mantener bajo acoplamiento con los
suscriptores. ¿Qué hacemos?
• Solución (consejo): Definir un interfaz “suscriptor” u
“oyente” (listener). Los suscriptores implementan este
interfaz. El emisor dinámicamente puede registrar
suscriptores que están interesados en un evento, y
notificarles cuando ocurre un evento.
53
Observador
En NuevaEra…¿porqué no vale la siguiente solución?
“Cuando la Venta cambia su total, el objeto Venta envía
un mensaje a la ventana, pidiéndole que actualice la
información que muestra.”
⇒El principio de separación Modelo-Vista disuade de
tales soluciones. Los objetos del modelo no deberían
conocer los objetos de la vista o presentación.
⇒De esa manera, se permite reemplazar la vista o capa de
presentación por una nueva sin afectar a los objetos que
no pertenecen a la interfaz de usuario.
54
Observador
«interface»
PropertyListener
onPropertyEvent( source, name, value )
SaleFrame1
onPropertyEvent( source, name, value )
initialize( Sale sale )
...
javax.swing.JFrame
...
setTitle()
setVisible()
...
{
if ( name.equals("sale.total") )
saleTextField.setText( value.toString() );
}
Sale
addPropertyListener( PropertyListener lis )
publishPropertyEvent( name, value )
setTotal( Money newTotal )
...
*propertyListeners
{
total = newTotal;
publishPropertyEvent( "sale.total", total );
}
{
propertyListeners.add( lis );
}
{
for each PropertyListener pl in propertyListeners
pl.onPropertyEvent( this, name, value );
}
{
sale.addPropertyListener( this )
...
}
55
Observador
Ideas y pasos fundamentales:
1. Se define una interfaz; en este caso, PropertyListener con la operación
onPropertyEvent.
2. Se define la ventana que implementa la interfaz
SaleFrame1 implementará el método onPropertyEvent.
3. Cuando se inicializa la ventana SaleFrame1, se le pasa la instancia de Sale
de la cual está mostrando el total.
4. La ventana SaleFrame1 se registra o suscribe a la instancia de Sale para que
le notifique acerca de los eventos sobre la propiedad, por medio del mensaje
addPropertyListener. Es decir, cuando una propiedad (como total) cambia,
la ventana quiere que se le notifique.
5. Obsérvese que Sale no conoce los objetos SaleFrame1; más bien sólo
conoce los objetos que implementan la interfaz PropertyListener. Esto
disminuye el acoplamiento entre la Venta y la ventana –se acopla sólo con
una interfaz, no con la clase de la GUI.
6. Por tanto, la instancia de Sale es un emisor de “eventos sobre la propiedad”.
Cuando cambia el total, itera sobre todos los objetos PropertyListener que
están suscritos, y se lo notifica a cada uno.
56
Observador
s : Salesf : SaleFrame1
initialize( s : Sale )
addPropertyListener( sf )
propertyListeners :
List<PropertyListener>
add( sf )
El observador SaleFrame1 se suscribe al emisor Sale:
57
Observador
s :Sale
setTotal( total )
onPropertyEvent( s, "sale.total", total )
publishPropertyEvent
( "sale.total", total )
propertylisteners[ i ] :
PropertyListener
loop
: SaleFrame1
onPropertyEvent( source, name, value )
saleTextField
: JTextField
setText( value.toString() )
Since this is a polymorphic operation implemented by
this class, show a new interaction diagram that starts
with this polymorphic version
UML notation: Note this little expression within the
parameter. This is legal and consise.
Sale publica un evento
sobre la propiedad a
todos sus suscriptores
El suscriptor SaleFrame1
recibe la notificación de
un evento publicado

Más contenido relacionado

La actualidad más candente

DiseñO Orientado A Objetos
DiseñO Orientado A ObjetosDiseñO Orientado A Objetos
DiseñO Orientado A ObjetosFrancisco Godoy
 
Unidad 2 diseño orientado a objetos
Unidad 2 diseño orientado a objetosUnidad 2 diseño orientado a objetos
Unidad 2 diseño orientado a objetosRene Guaman-Quinche
 
Análisis orientado a objetos y uml
Análisis orientado a objetos y umlAnálisis orientado a objetos y uml
Análisis orientado a objetos y umlSena
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoGermania Rodriguez
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetosjose_rob
 
Estilos y Patrones Aplicables a la Arquitectura de Software
Estilos y Patrones Aplicables a la Arquitectura de SoftwareEstilos y Patrones Aplicables a la Arquitectura de Software
Estilos y Patrones Aplicables a la Arquitectura de SoftwareDiego Plascencia Lara
 
UML. un analisis comparativo para la diagramación de software
UML.  un analisis comparativo para la diagramación de softwareUML.  un analisis comparativo para la diagramación de software
UML. un analisis comparativo para la diagramación de softwareYaskelly Yedra
 
Introduccion a UML
Introduccion a UMLIntroduccion a UML
Introduccion a UMLJuan Antonio
 
Programa UML- Clase 1
Programa UML- Clase 1Programa UML- Clase 1
Programa UML- Clase 1Carlos_lvm
 
Introduccion uml
Introduccion umlIntroduccion uml
Introduccion umlninguna
 
Metodologã­a orientada-a-objetos-omt.-rumbaugh
Metodologã­a orientada-a-objetos-omt.-rumbaughMetodologã­a orientada-a-objetos-omt.-rumbaugh
Metodologã­a orientada-a-objetos-omt.-rumbaughviisistemas
 
Análisis y diseño orientado a objetos
Análisis y diseño orientado a objetosAnálisis y diseño orientado a objetos
Análisis y diseño orientado a objetosChristian Leon
 
Analisis y diseño de sistemas
Analisis y diseño de sistemasAnalisis y diseño de sistemas
Analisis y diseño de sistemasjoalmerca6
 
Unidad 6 Mad Modelado Analsis Diagrama De Secuencia Del Sistema
Unidad 6 Mad Modelado Analsis    Diagrama De Secuencia Del SistemaUnidad 6 Mad Modelado Analsis    Diagrama De Secuencia Del Sistema
Unidad 6 Mad Modelado Analsis Diagrama De Secuencia Del SistemaSergio Sanchez
 

La actualidad más candente (18)

DiseñO Orientado A Objetos
DiseñO Orientado A ObjetosDiseñO Orientado A Objetos
DiseñO Orientado A Objetos
 
Unidad 2 diseño orientado a objetos
Unidad 2 diseño orientado a objetosUnidad 2 diseño orientado a objetos
Unidad 2 diseño orientado a objetos
 
Análisis orientado a objetos y uml
Análisis orientado a objetos y umlAnálisis orientado a objetos y uml
Análisis orientado a objetos y uml
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseño
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetos
 
Patrones de Diseño
Patrones de DiseñoPatrones de Diseño
Patrones de Diseño
 
Modelo dinamico
Modelo dinamicoModelo dinamico
Modelo dinamico
 
Estilos y Patrones Aplicables a la Arquitectura de Software
Estilos y Patrones Aplicables a la Arquitectura de SoftwareEstilos y Patrones Aplicables a la Arquitectura de Software
Estilos y Patrones Aplicables a la Arquitectura de Software
 
UML. un analisis comparativo para la diagramación de software
UML.  un analisis comparativo para la diagramación de softwareUML.  un analisis comparativo para la diagramación de software
UML. un analisis comparativo para la diagramación de software
 
Introduccion a UML
Introduccion a UMLIntroduccion a UML
Introduccion a UML
 
Programa UML- Clase 1
Programa UML- Clase 1Programa UML- Clase 1
Programa UML- Clase 1
 
Introduccion uml
Introduccion umlIntroduccion uml
Introduccion uml
 
Patrones diseño de software
Patrones diseño de softwarePatrones diseño de software
Patrones diseño de software
 
Curso Uml 1 Introduccion
Curso Uml   1 IntroduccionCurso Uml   1 Introduccion
Curso Uml 1 Introduccion
 
Metodologã­a orientada-a-objetos-omt.-rumbaugh
Metodologã­a orientada-a-objetos-omt.-rumbaughMetodologã­a orientada-a-objetos-omt.-rumbaugh
Metodologã­a orientada-a-objetos-omt.-rumbaugh
 
Análisis y diseño orientado a objetos
Análisis y diseño orientado a objetosAnálisis y diseño orientado a objetos
Análisis y diseño orientado a objetos
 
Analisis y diseño de sistemas
Analisis y diseño de sistemasAnalisis y diseño de sistemas
Analisis y diseño de sistemas
 
Unidad 6 Mad Modelado Analsis Diagrama De Secuencia Del Sistema
Unidad 6 Mad Modelado Analsis    Diagrama De Secuencia Del SistemaUnidad 6 Mad Modelado Analsis    Diagrama De Secuencia Del Sistema
Unidad 6 Mad Modelado Analsis Diagrama De Secuencia Del Sistema
 

Destacado

Anterior entre y posterior-1º
Anterior entre y posterior-1ºAnterior entre y posterior-1º
Anterior entre y posterior-1ºmisslourdes21
 
Representación de números decimales en la semirrecta numérica
Representación de números decimales en la semirrecta numéricaRepresentación de números decimales en la semirrecta numérica
Representación de números decimales en la semirrecta numérica28052809
 
Consideraciones en el diseño de revistas
Consideraciones en el diseño de revistasConsideraciones en el diseño de revistas
Consideraciones en el diseño de revistasoscar hernandez
 
Comparación de números
Comparación de númerosComparación de números
Comparación de númeroslatino_h
 
Aprendizaje vivencial del valor posicional de las cifras
Aprendizaje vivencial del valor posicional de las cifrasAprendizaje vivencial del valor posicional de las cifras
Aprendizaje vivencial del valor posicional de las cifrasEdwin Riascos
 
Unidades no convencionales
Unidades no convencionalesUnidades no convencionales
Unidades no convencionalesmakaciencia
 
PHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseñoPHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseñoRightster
 
Conjuntos y subconjuntos
Conjuntos y subconjuntos Conjuntos y subconjuntos
Conjuntos y subconjuntos Giovanni Vielma
 
Carteles de la Guerra Civil española
Carteles de la Guerra Civil españolaCarteles de la Guerra Civil española
Carteles de la Guerra Civil españolaguest0348df
 
El Anuncio Publicitario
El Anuncio PublicitarioEl Anuncio Publicitario
El Anuncio PublicitarioChris Ztar
 
Lo básico sobre los fonemas del español
Lo básico sobre los fonemas del españolLo básico sobre los fonemas del español
Lo básico sobre los fonemas del españolMaría José Aqueveque
 
Intención comunicativa y tipos de textos
Intención comunicativa y tipos de textosIntención comunicativa y tipos de textos
Intención comunicativa y tipos de textoscarlos_apuertas
 
Matemática de Segundo Año de EGB
Matemática de Segundo Año de EGBMatemática de Segundo Año de EGB
Matemática de Segundo Año de EGBEDISON
 

Destacado (20)

Tantan
TantanTantan
Tantan
 
Anterior entre y posterior-1º
Anterior entre y posterior-1ºAnterior entre y posterior-1º
Anterior entre y posterior-1º
 
Entrega 3
Entrega 3Entrega 3
Entrega 3
 
La Contabilidad
La ContabilidadLa Contabilidad
La Contabilidad
 
Representación de números decimales en la semirrecta numérica
Representación de números decimales en la semirrecta numéricaRepresentación de números decimales en la semirrecta numérica
Representación de números decimales en la semirrecta numérica
 
Consideraciones en el diseño de revistas
Consideraciones en el diseño de revistasConsideraciones en el diseño de revistas
Consideraciones en el diseño de revistas
 
Sustracción
SustracciónSustracción
Sustracción
 
Comparación de números
Comparación de númerosComparación de números
Comparación de números
 
Aprendizaje vivencial del valor posicional de las cifras
Aprendizaje vivencial del valor posicional de las cifrasAprendizaje vivencial del valor posicional de las cifras
Aprendizaje vivencial del valor posicional de las cifras
 
Unidades no convencionales
Unidades no convencionalesUnidades no convencionales
Unidades no convencionales
 
PHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseñoPHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseño
 
Los números ordinales 1
Los números ordinales 1Los números ordinales 1
Los números ordinales 1
 
Conjuntos y subconjuntos
Conjuntos y subconjuntos Conjuntos y subconjuntos
Conjuntos y subconjuntos
 
Carteles Sobre La Tolerancia Para Los NiñOs
Carteles Sobre La Tolerancia Para Los NiñOsCarteles Sobre La Tolerancia Para Los NiñOs
Carteles Sobre La Tolerancia Para Los NiñOs
 
Carteles de la Guerra Civil española
Carteles de la Guerra Civil españolaCarteles de la Guerra Civil española
Carteles de la Guerra Civil española
 
El Anuncio Publicitario
El Anuncio PublicitarioEl Anuncio Publicitario
El Anuncio Publicitario
 
Lo básico sobre los fonemas del español
Lo básico sobre los fonemas del españolLo básico sobre los fonemas del español
Lo básico sobre los fonemas del español
 
Intención comunicativa y tipos de textos
Intención comunicativa y tipos de textosIntención comunicativa y tipos de textos
Intención comunicativa y tipos de textos
 
Matemática de Segundo Año de EGB
Matemática de Segundo Año de EGBMatemática de Segundo Año de EGB
Matemática de Segundo Año de EGB
 
Lengua 2 1
Lengua 2 1Lengua 2 1
Lengua 2 1
 

Similar a Construcción de Software (Patrones)

Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño Ijjegonzalezf
 
Desarrollo De Software Para Internet
Desarrollo De Software Para InternetDesarrollo De Software Para Internet
Desarrollo De Software Para Internetsamgeo
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseñoJuanes Alzt
 
6 arquitectura desoftware
6 arquitectura desoftware6 arquitectura desoftware
6 arquitectura desoftwaregaston6711
 
050608 architect academy webcast 1
050608 architect academy webcast 1050608 architect academy webcast 1
050608 architect academy webcast 1juliank13
 
Unidad 2 - Arquitectura.pptx
Unidad 2 - Arquitectura.pptxUnidad 2 - Arquitectura.pptx
Unidad 2 - Arquitectura.pptxRunayli
 
Sem 8 Modelo De Analisis
Sem 8 Modelo De AnalisisSem 8 Modelo De Analisis
Sem 8 Modelo De Analisisguest0a6e49
 
Tipos de modelos de procesos
Tipos de modelos de procesosTipos de modelos de procesos
Tipos de modelos de procesosEIYSC
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño IIkaolong
 
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdfArquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdfErnestoAmillano1
 
Terminología y conceptos en Arquitecturas dirigidas por Modelos
Terminología y conceptos en Arquitecturas dirigidas por ModelosTerminología y conceptos en Arquitecturas dirigidas por Modelos
Terminología y conceptos en Arquitecturas dirigidas por ModelosRicardo Tesoriero
 
Sesión 9 y 10 - Modelado de procesos de Software (1).pdf
Sesión 9 y 10 - Modelado de procesos de Software (1).pdfSesión 9 y 10 - Modelado de procesos de Software (1).pdf
Sesión 9 y 10 - Modelado de procesos de Software (1).pdfAndersonHernandezara
 
Comunidad emagister 63082_63082-convertido
Comunidad emagister 63082_63082-convertidoComunidad emagister 63082_63082-convertido
Comunidad emagister 63082_63082-convertidoJamil Cajamarca
 

Similar a Construcción de Software (Patrones) (20)

Ingenieria de Software
Ingenieria de SoftwareIngenieria de Software
Ingenieria de Software
 
6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
OOSE
OOSEOOSE
OOSE
 
Desarrollo De Software Para Internet
Desarrollo De Software Para InternetDesarrollo De Software Para Internet
Desarrollo De Software Para Internet
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
1127082.ppt
1127082.ppt1127082.ppt
1127082.ppt
 
Patrones diseño y arquitectura
Patrones diseño y arquitecturaPatrones diseño y arquitectura
Patrones diseño y arquitectura
 
patronesdiseño2009.ppt
patronesdiseño2009.pptpatronesdiseño2009.ppt
patronesdiseño2009.ppt
 
6 arquitectura desoftware
6 arquitectura desoftware6 arquitectura desoftware
6 arquitectura desoftware
 
Diseño de Objetos
Diseño de ObjetosDiseño de Objetos
Diseño de Objetos
 
050608 architect academy webcast 1
050608 architect academy webcast 1050608 architect academy webcast 1
050608 architect academy webcast 1
 
Unidad 2 - Arquitectura.pptx
Unidad 2 - Arquitectura.pptxUnidad 2 - Arquitectura.pptx
Unidad 2 - Arquitectura.pptx
 
Sem 8 Modelo De Analisis
Sem 8 Modelo De AnalisisSem 8 Modelo De Analisis
Sem 8 Modelo De Analisis
 
Tipos de modelos de procesos
Tipos de modelos de procesosTipos de modelos de procesos
Tipos de modelos de procesos
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
 
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdfArquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
 
Terminología y conceptos en Arquitecturas dirigidas por Modelos
Terminología y conceptos en Arquitecturas dirigidas por ModelosTerminología y conceptos en Arquitecturas dirigidas por Modelos
Terminología y conceptos en Arquitecturas dirigidas por Modelos
 
Sesión 9 y 10 - Modelado de procesos de Software (1).pdf
Sesión 9 y 10 - Modelado de procesos de Software (1).pdfSesión 9 y 10 - Modelado de procesos de Software (1).pdf
Sesión 9 y 10 - Modelado de procesos de Software (1).pdf
 
Comunidad emagister 63082_63082-convertido
Comunidad emagister 63082_63082-convertidoComunidad emagister 63082_63082-convertido
Comunidad emagister 63082_63082-convertido
 

Último

MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfJosé Hecht
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)jlorentemartos
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docxMagalyDacostaPea
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías productommartinezmarquez30
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfmiriamguevara21
 
Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.monthuerta17
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajeKattyMoran3
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.profandrearivero
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfssuser50d1252
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxFabianValenciaJabo
 
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfPROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfMaritza438836
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
El PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/F
El PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/FEl PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/F
El PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/FJulio Lozano
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectosTrishGutirrez
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfsolidalilaalvaradoro
 

Último (20)

Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
TEMA 13. LOS GOBIERNOS DEMOCRÁTICOS (1982-2018)
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías producto
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdf
 
Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.Si cuidamos el mundo, tendremos un mundo mejor.
Si cuidamos el mundo, tendremos un mundo mejor.
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguaje
 
Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.Abregú, Podestá. Directores.Líderes en Acción.
Abregú, Podestá. Directores.Líderes en Acción.
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
 
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdfPROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
PROGRAMACIÓN CURRICULAR - DPCC- 5°-2024.pdf
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
El PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/F
El PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/FEl PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/F
El PROGRAMA DE TUTORÍAS PARA EL APRENDIZAJE Y LA FORMACIÓN INTEGRAL PTA/F
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
 

Construcción de Software (Patrones)

  • 1. Construcción de Software Capítulo 3 Patrones de diseño
  • 2. 2 Contenidos 1. Concepto de patrón 2. Clasificación de patrones 3. Estudio de algunos de los principales patrones GoF • Adaptador • Factoría • Singleton • Estrategia • Composite • Fachada • Observador
  • 3. 3 Bibliografía • [Larman 02] Larman, C. “UML y Patrones: Una introducción al análisis y diseño orientado a objetos y al proceso unificado”, Segunda Edición, Prentice-Hall, 2002. Capítulo 23. • [Larman 05] Larman, C. “Applying UML and Patterns. An Introduction to Object-Oriented Analysis and Design and Iterative Development”, 3rd edition, Prentice-Hall, 2005. Capítulo 26. • [Gamma et al. 02] Gamma E., et al., Patrones de Diseño, Addison-Wesley, 2002.
  • 4. 4 Arquitectura software y patrones “Una arquitectura orientada a objetos bien estructurada está llena de patrones. La calidad de un sistema orientado a objetos se mide por la atención que los diseñadores han prestado a las colaboraciones entre sus objetos.” “Los patrones conducen a arquitecturas más pequeñas, más simples y más comprensibles” G. Booch
  • 5. 5 Diseño orientado a objetos • “Diseñar software orientado a objetos es difícil pero diseñar software orientado a objetos reutilizable es más difícil todavía. Diseños generales y flexibles son muy difíciles de encontrar la primera vez” • ¿Qué conoce un programador experto que desconoce uno inexperto? Reutilizar soluciones que funcionaron en el pasado: EXPERIENCIA
  • 6. 6 Patrones • Describen un problema recurrente y una solución. • Cada patrón nombra, explica, evalúa un diseño recurrente en sistemas OO. • Elementos principales: – Nombre – Problema – Solución: Descripción abstracta – Consecuencias
  • 7. 7 Granularidad • Patrones de Código – Nivel de lenguaje de programación • Frameworks – Diseños específicos de un dominio de aplicaciones. • Patrones de Diseño – Descripciones de clases cuyas instancias colaboran entre sí que deben ser adaptados para resolver problemas de diseño generales en un contexto particular. – Un patrón de diseño identifica: Clases, Instancias, Roles, Colaboraciones y la Distribución de responsabilidades.
  • 8. 8 Patrones y frameworks • Un framework es una colección organizada de clases que constituyen un diseño reutilizable para un dominio específico de software. • Necesario adaptarlo a una aplicación particular. • Establece la arquitectura de la aplicación • Diferencias: – Patrones son más abstractos que los frameworks – Patrones son elementos arquitecturales más pequeños – Patrones son menos especializados
  • 9. 9 Modelo-Vista-Control (MVC paradigm o MVC framework) • Utilizado para construir interfaces de usuario en Smalltalk-80. • Basado en tres tipos de objetos: – Modelo: objetos del dominio – Vista: objetos presentación en pantalla (interfaz de usuario) – Controlador: define la forma en que la interfaz reacciona a la entrada del usuario. • Desacopla el modelo de las vistas.
  • 10. 0 10 20 30 40 50 60 70 80 90 1er trim. 2do trim. 3er trim. 4to trim. Este Oeste Norte 1tr 3tr 4tr 2tr 1tr. 2tr. 3tr. 4tr. Este 20 25 90 20 Oeste 30 38 32 32 Norte 47 47 45 45 Vistas t1=20 t2=25 t3=90 t4=20 Modelo
  • 11. 11 Modelo-Vista-Control • Utiliza los siguientes patrones: – Observer – Composite – Strategy – Decorator – Factory method
  • 12. 12 Plantilla de definición • Nombre del patrón • Propósito − ¿Qué hace? ¿Cuál es su razón y propósito? ¿Qué cuestión de diseño particular o problema aborda? • Sinónimos • Motivación − Escenario que ilustra un problema particular y cómo el patrón lo resuelve.
  • 13. 13 Plantilla de definición • Aplicabilidad − ¿En qué situaciones puede aplicarse? ¿Cómo las reconoces? Ejemplos de diseños que pueden mejorarse • Estructura − Diagramas de clases que ilustran la estructura • Participantes − Clases que participan y sus responsabilidades • Colaboraciones − Diagramas de interacción que muestran cómo colaboran los participantes.
  • 14. 14 Plantilla de definición • Consecuencias – ¿Cómo alcanza el patrón sus objetivos? ¿Cuáles son los compromisos y resultados de usar el patrón? Alternativas, Costes y Beneficios • Implementación – Técnicas, heurísticas y consejos para la implementación – ¿Hay cuestiones dependientes del lenguaje? • Ejemplo de código • Usos conocidos • Patrones relacionados
  • 15. 15 Clasificación de patrones de diseño Ámbito Propósito Estructural ComportamientoCreación Clase Objeto Factory Method Adapter Interpreter Template Method Abstract Factory Builder Prototype Singleton Adapter Bridge Composite Decorator Facade Flyweight Proxy Chain of Responsability Command Iterator Mediator Memento Observer State Strategy Visitor
  • 16. 16 Adaptador En NuevaEra... • La aplicación NuevaEra necesita soportar diferentes tipos de servicios externos de terceras partes, entre los que se encuentran los calculadores de impuestos, servicios de autorización de pagos, sistemas de inventario, y sistemas de contabilidad. Cada uno tiene una API diferente, que no puede ser cambiada. • Una solución es añadir un nivel de indirección con objetos que adapten las distintas interfaces externas a una interfaz consistente que es la que se utiliza en la aplicación.
  • 17. 17 Adaptador (GoF) • Nombre: Adaptador (Adapter / Wrapper) • Contexto/Problema: ¿Cómo resolver interfaces incompatibles, o proporcionar una interfaz estable para componentes similares con diferentes interfaces? • Solución (consejo): Convertir la interfaz original de un componente en otra interfaz, a través de un objeto adaptador intermedio.
  • 18. 18 Adaptador TaxMasterAdapter getTaxes( Sale ) : List of TaxLineItems GoodAsGoldTaxPro Adapter getTaxes( Sale ) : List of TaxLineItems «interface» ITaxCalculatorAdapter getTaxes( Sale ) : List of TaxLineItems Adapters use interfaces and polymorphism to add a level of indirection to varying APIs in other components. SAPAccountingAdapter postReceivable( CreditPayment ) postSale( Sale ) ... GreatNorthernAccountingAdapter postReceivable( CreditPayment ) postSale( Sale ) ... «interface» IAccountingAdapter postReceivable( CreditPayment ) postSale( Sale ) ... «interface» IInventoryAdapter ... «interface» ICreditAuthorizationService Adapter requestApproval(CreditPayment,TerminalID, MerchantID) ...
  • 19. 19 Adaptador • Una instancia de adaptador será instanciada para el servicio externo elegido, tal como SAPAccountingAdapter, y adaptará la petición postSale al interfaz externo, como p.ej. un interfaz SOAP XML sobre HTTPS para un servicio Web de intranet ofrecido por SAP. • Guía: Es común es que el nombre del patrón se inserte en los nombres de los tipos involucrados, de forma que se transmita rápidamente qué patrones están involucrados en un fragmento de código.
  • 20. 20 Adaptador :Register : SAPAccountingAdapter postSale( sale ) makePayment the Adapter adapts to interfaces in other components SOAP over HTTP xxx ... «actor» : SAPSystem
  • 21. 21 Factoría En NuevaEra... • ¿Quién crea el adaptador? ¿Y cómo determinar qué clase de adaptador crear? • Si los creara algún objeto del dominio, las responsabilidades de los objetos del dominio excederían la lógica pura de la aplicación y entrarían en cuestiones relacionadas con la conexión con componentes software externos.
  • 22. 22 Factoría • Nombre: Factoría concreta (Simple Factory / Concrete Factory) • Contexto/Problema: ¿Quién debe ser el responsable de la creación de los objetos cuando existen consideraciones especiales, como una lógica de creación compleja, el deseo de separar las responsabilidades de la creación para mejorar la cohesión, etc.? • Solución (consejo): Crear un objeto Fabricación Pura (es decir, que no pertenece al modelo conceptual) denominado Factoría que maneje la creación.
  • 23. 23 Factoría ServicesFactory accountingAdapter : IAccountingAdapter inventoryAdapter : IInventoryAdapter taxCalculatorAdapter : ITaxCalculatorAdapter getAccountingAdapter() : IAccountingAdapter getInventoryAdapter() : IInventoryAdapter getTaxCalculatorAdapter() : ITaxCalculatorAdapter ... note that the factory methods return objects typed to an interface rather than a class, so that the factory can return any implementation of the interface if ( taxCalculatorAdapter == null ) { // a reflective or data-driven approach to finding the right class: read it from an // external property String className = System.getProperty( "taxcalculator.class.name" ); taxCalculatorAdapter = (ITaxCalculatorAdapter) Class.forName( className ).newInstance(); } return taxCalculatorAdapter;
  • 24. 24 Factoría Los objetos factoría tienen varias ventajas: • Separan la responsabilidad de la creación compleja en objetos de apoyo cohesivos. • Ocultan la lógica de la creación potencialmente compleja. • Permiten introducir estrategias para mejorar el rendimiento de la gestión de la memoria, como objetos caché o de reciclaje.
  • 25. 25 Factoría En NuevaEra… • La lógica para decidir qué clase se crea se resuelve leyendo el nombre de la clase de una fuente externa (p.ej., por medio de una propiedad del sistema, si se usa Java) y después se carga la clase dinámicamente. • Es un ejemplo de diseño dirigido por los datos. • A menudo se accede a las factorías con el patrón Singleton.
  • 26. 26 Singleton En NuevaEra... • ¿Quién crea la factoría de servicios y cómo se accede? – Sólo se necesita una instancia de la factoría en el proceso. – ¿Cómo conseguir visibilidad a la factoría? ⇒ Es preciso mantener visibilidad global a una única instancia de una clase
  • 27. 27 Singleton (GoF) • Nombre: Singleton • Contexto / Problema: Se admite exactamente una instancia de una clase –es un “singleton”. Los objetos necesitan un único punto de acceso global. • Solución (consejo): Definir un método estático de la clase que devuelva el singleton.
  • 28. 28 Singleton 1 ServicesFactory instance : ServicesFactory accountingAdapter : IAccountingAdapter inventoryAdapter : IInventoryAdapter taxCalculatorAdapter : ITaxCalculatorAdapter getInstance() : ServicesFactory getAccountingAdapter() : IAccountingAdapter getInventoryAdapter() : IInventoryAdapter getTaxCalculatorAdapter() : ITaxCalculatorAdapter ... singleton static attribute singleton static method // static method public static synchronized ServicesFactory getInstance() { if ( instance == null ) instance = new ServicesFactory() return instance } UML notation: in a class box, an underlined attribute or method indicates a static (class level) member, rather than an instance member UML notation: this '1' can optionally be used to indicate that only one instance will be created (a singleton)
  • 29. 29 Singleton public class Register { public void initialize() { ...hace algún trabajo... // acceso a la Factoría Singleton mediante la llamada // a “getInstancia” accountingAdapter = ServicesFactory.getInstance().getAccountingAdapter(); ...hace algún trabajo... } // otros métodos }
  • 30. 30 Singleton :Register 1 :ServicesFactory aa = getAccountingAdapter initialize ... the ‘1’ indicates that visibility to this instance was achieved via the Singleton pattern
  • 31. 31 Singleton • Usualmente, inicialización perezosa: public static synchronized ServicesFactory getInstance() { if ( instance == null ) { // sección crítica si es una aplicación // con varios hilos instance = new ServicesFactory() ; } return instance ; }
  • 32. 32 Servicios externos con diversas interfaces – Visión general :Register accountingAdapter: SAPAccountingAdapter postSale( sale ) makePayment SOAP over HTTP xxx :Register 1 :ServicesFactory accountingAdapter = getAccountingAdapter :Store create create : SAPAccounting Adapter : Paymentcreate(cashTendered) «actor» : SAPSystem create
  • 33. 33 Estrategia En NuevaEra… • La estrategia de fijación de precios de una venta puede variar. Durante un periodo podría ser el 10% de descuento en todas las ventas, después podría ser un descuento de 10€ si el total de la venta es superior a 200€, y podrían ocurrir muchas otras variaciones. ⇒ ¿Cómo diseñamos los diversos algoritmos de fijación de precios?
  • 34. 34 Estrategia (GoF) • Nombre: Estrategia. • Contexto/Problema: ¿Cómo diseñar diversos algoritmos o políticas que están relacionadas? ¿Cómo diseñar que estos algoritmos o políticas puedan cambiar? • Solución (consejo): Definir cada algoritmo/política/estrategia en una clase independiente, con una interfaz común.
  • 35. 35 Estrategia PercentDiscount PricingStrategy percentage : float getTotal( s:Sale ) : Money AbsoluteDiscount OverThreshold PricingStrategy discount : Money threshold : Money getTotal( s:Sale ) : Money «interface» ISalePricingStrategy getTotal( Sale ) : Money { return s.getPreDiscountTotal() * percentage } ??? PricingStrategy ... ... { pdt := s.getPreDiscountTotal() if ( pdt < threshold ) return pdt else return pdt - discount }
  • 36. 36 Estrategia • Un objeto estrategia se conecta a un objeto de contexto –el objeto al que se aplica el algoritmo, Venta en este caso. • Es habitual que el objeto de contexto pase una referencia a él mismo (this) al objeto estrategia. • El objeto de contexto necesita tener visibilidad de atributo de su estrategia.
  • 37. 37 Estrategia :PercentDiscount PricingStrategy s : Sale st = getSubtotal t = getTotal lineItems[ i ] : SalesLineItem t = getTotal( s ) pdt = getPreDiscountTotal { t = pdt * percentage } note that the Sale s is passed to the Strategy so that it has parameter visibility to it for further collaboration loop
  • 38. 38 Estrategia PercentDiscount PricingStrategy percentage : float getTotal( Sale ) : Money AbsoluteDiscount OverThreshold PricingStrategy discount : Money threshold : Money getTotal( Sale ) : Money «interface» ISalePricingStrategy getTotal( Sale ) : Money Sale date ... getTotal() ... 1 Sale needs attribute visibility to its Strategy pricingStrategy getTotal() { ... return pricingStrategy.getTotal( this ) }
  • 39. 39 Creación de una Estrategia mediante una Factoría 1 PricingStrategyFactory instance : PricingStrategyFactory getInstance() : PricingStrategyFactory getSalePricingStrategy() : ISalePricingStrategy getSeniorPricingStrategy() : ISalePricingStrategy ... { String className = System.getProperty( "salepricingstrategy.class.name" ); strategy = (ISalePricingStrategy) Class.forName( className ).newInstance(); return strategy; } :Sale 1 :PricingStrategyFactory ps = getSalePricingStrategy :Register makeNewSale create create(percent) ps : PercentDiscount PricingStrategy
  • 40. 40 Composite En NuevaEra… • ¿Cómo gestionar el caso de varias políticas contradictorias de fijación de precios? En un momento dado pueden coexistir múltiples estrategias, según el periodo de tiempo, el tipo de producto, o el tipo de cliente. • Se debe definir la estrategia de resolución de conflictos de la tienda (normalmente, se aplica “lo mejor para el cliente”, pero no es obligatorio). • Necesitamos cambiar el diseño de forma que el objeto Venta no conozca si está tratando con una o más estrategias, y que se resuelvan los conflictos.
  • 41. 41 Composite (GoF) • Nombre: Composite • Contexto/Problema: ¿Cómo tratar un grupo o una estructura compuesta del mismo modo (polimórficamente) que un objeto no compuesto (atómico)? • Solución (consejo): Definir las clases para los objetos compuestos y atómicos de manera que implementen el mismo interfaz.
  • 42. 42 Composite PercentageDiscount PricingStrategy percentage : float getTotal( Sale ) : Money AbsoluteDiscount OverThreshold PricingStrategy discount : Money threshold : Money getTotal( Sale ) : Money «interface» ISalePricingStrategy getTotal( Sale ) : Money { return sale.getPreDiscountTotal() * percentage } Composite PricingStrategy add( ISalePricingStrategy ) getTotal( Sale ) : Money { lowestTotal = INTEGER.MAX for each ISalePricingStrategy strat in pricingStrategies { total := strat.getTotal( sale ) lowestTotal = min( total, lowestTotal ) } return lowestTotal } 1..* CompositeBestForCustomer PricingStrategy getTotal( Sale ) : Money CompositeBestForStore PricingStrategy getTotal( Sale ) : Money strategies All composites maintain a list of contained strategies. Therefore, define a common superclass CompositePricingStrategy that defines this list (named strategies). Sale date ... getTotal() ... 1 pricingStrategy { ... return pricingStrategy.getTotal( this ) }
  • 43. 43 Composite :CompositeBestForCustomer PricingStrategy s : Sale st = getSubtotal t = getTotal lineItems[ i ] : SalesLineItem t = getTotal( s ) the Sale object treats a Composite Strategy that contains other strategies just like any other ISalePricingStrategy x = getTotal( s ) strategies[ j ] : : ISalePricingStrategy UML: ISalePricingStrategy is an interface, not a class; this is the way in UML 2 to indicate an object of an unknown class, but that implements this interface { t = min(set of all x) } loop loop
  • 44. 44 Creación de múltiples instancias EstrategiaFijarPreciosVenta • Crear un Composite que contenga las políticas de descuento de la tienda en el momento actual (inicialmente, 0% si no hay ninguna activa). :Sale 1 :PricingStrategyFactory ps = getSale PricingStrategy :Register make NewSale create create ps :CompositeBestForCustomer PricingStrategy create( percent ) s : PercentageDiscount PricingStrategy add( s )
  • 45. 45 Creación de múltiples instancias EstrategiaFijarPreciosVenta • Para introducir el descuento según el tipo de cliente, es preciso introducir un nueva operación del sistema: s :Sale:Register enterCustomerForDiscount( custID ) by Controller by Expert and IDs to Objects :Store c = getCustomer( custID ) enterCustomerForDiscount( c : Customer ) by Expert ref Enter Customer For Discount
  • 46. 46 Creación de múltiples instancias EstrategiaFijarPreciosVenta s :Sale 1 :PricingStrategy Factory addCustomer PricingStrategy( s ) ps :CompositeBestForCustomer PricingStrategy create( pct ) s : PercentageDiscount PricingStrategy add( s ) by Expert enterCustomer ForDiscount( c : Customer ) c = getCustomer by Factory and High Cohesion by Expert ps = getPricing Strategy pct = getCustomer Percentage( c ) by High Cohesion by Factory and Composite Pass Aggregate Object as Parameter sd Enter Customer For Discount
  • 47. 47 Fachada En NuevaEra… • Se quiere dar soporte a reglas de negocio conectables. • Se desea definir un subsistema “motor de reglas” que será responsable de evaluar un conjunto de reglas contra una operación, e indicar si alguna de las reglas invalida la operación.
  • 48. 48 Fachada (GoF) • Nombre: Fachada (Facade) • Contexto/Problema: Se requiere una interfaz común, unificada para un conjunto de implementaciones o interfaces dispares –como en un subsistema. Podría no ser conveniente acoplarse con muchas cosas del subsistema, o la implementación del subsistema podría cambiar. ¿Qué hacemos? • Solución (consejo): Definir un punto único de conexión con el subsistema –un objeto fachada que envuelve al subsistema. Este objeto fachada presenta una única interfaz unificada y es responsable de colaborar con los componentes del subsistema.
  • 49. 49 Fachada Domain + Sale + Register ... POSRuleEngine «interface» - IRule ... - Rule1 ... - Rule2 ... ... package name may be shown in the tab visibility of the package element (to outside the package) can be shown by preceding the element name with a visibility symbol + POSRuleEngineFacade instance : RuleEngineFacade getInstance() : RuleEngineFacade isInvalid( SalesLineItem, Sale ) isInvalid( Payment, Sale ) ... *
  • 50. 50 Fachada public class Venta { public void crearLineaDeVenta( EspecificacionDelProducto espec, int cantidad) { LineaDeVenta ldv = new LineaDeVenta( espec, cantidad ); // llamada a la fachada, obsérvese el uso de Singleton if (FachadaMotorReglasPDV.getInstancia().esInvalido( ldv, this )) return; lineasDeVenta.add( ldv ); } //… } // final de la clase
  • 51. 51 Observador En NuevaEra… • Se pretende añadir la capacidad de que una ventana GUI actualice la información que muestra sobre el total de la venta cuando éste cambia. Goal: When the total of the sale changes, refresh the display with the new value Sale total ... setTotal( newTotal ) ...
  • 52. 52 Observador (GoF) • Nombre: Observador / Observer / Publicar-Suscribir / Modelo de delegación de eventos • Contexto/Problema: Diferentes tipos de objetos suscriptores están interesados en el cambio de estado o eventos de un objeto emisor, y quieren reaccionar cada uno a su manera cuando el emisor genere un evento. Además, el emisor quiere mantener bajo acoplamiento con los suscriptores. ¿Qué hacemos? • Solución (consejo): Definir un interfaz “suscriptor” u “oyente” (listener). Los suscriptores implementan este interfaz. El emisor dinámicamente puede registrar suscriptores que están interesados en un evento, y notificarles cuando ocurre un evento.
  • 53. 53 Observador En NuevaEra…¿porqué no vale la siguiente solución? “Cuando la Venta cambia su total, el objeto Venta envía un mensaje a la ventana, pidiéndole que actualice la información que muestra.” ⇒El principio de separación Modelo-Vista disuade de tales soluciones. Los objetos del modelo no deberían conocer los objetos de la vista o presentación. ⇒De esa manera, se permite reemplazar la vista o capa de presentación por una nueva sin afectar a los objetos que no pertenecen a la interfaz de usuario.
  • 54. 54 Observador «interface» PropertyListener onPropertyEvent( source, name, value ) SaleFrame1 onPropertyEvent( source, name, value ) initialize( Sale sale ) ... javax.swing.JFrame ... setTitle() setVisible() ... { if ( name.equals("sale.total") ) saleTextField.setText( value.toString() ); } Sale addPropertyListener( PropertyListener lis ) publishPropertyEvent( name, value ) setTotal( Money newTotal ) ... *propertyListeners { total = newTotal; publishPropertyEvent( "sale.total", total ); } { propertyListeners.add( lis ); } { for each PropertyListener pl in propertyListeners pl.onPropertyEvent( this, name, value ); } { sale.addPropertyListener( this ) ... }
  • 55. 55 Observador Ideas y pasos fundamentales: 1. Se define una interfaz; en este caso, PropertyListener con la operación onPropertyEvent. 2. Se define la ventana que implementa la interfaz SaleFrame1 implementará el método onPropertyEvent. 3. Cuando se inicializa la ventana SaleFrame1, se le pasa la instancia de Sale de la cual está mostrando el total. 4. La ventana SaleFrame1 se registra o suscribe a la instancia de Sale para que le notifique acerca de los eventos sobre la propiedad, por medio del mensaje addPropertyListener. Es decir, cuando una propiedad (como total) cambia, la ventana quiere que se le notifique. 5. Obsérvese que Sale no conoce los objetos SaleFrame1; más bien sólo conoce los objetos que implementan la interfaz PropertyListener. Esto disminuye el acoplamiento entre la Venta y la ventana –se acopla sólo con una interfaz, no con la clase de la GUI. 6. Por tanto, la instancia de Sale es un emisor de “eventos sobre la propiedad”. Cuando cambia el total, itera sobre todos los objetos PropertyListener que están suscritos, y se lo notifica a cada uno.
  • 56. 56 Observador s : Salesf : SaleFrame1 initialize( s : Sale ) addPropertyListener( sf ) propertyListeners : List<PropertyListener> add( sf ) El observador SaleFrame1 se suscribe al emisor Sale:
  • 57. 57 Observador s :Sale setTotal( total ) onPropertyEvent( s, "sale.total", total ) publishPropertyEvent ( "sale.total", total ) propertylisteners[ i ] : PropertyListener loop : SaleFrame1 onPropertyEvent( source, name, value ) saleTextField : JTextField setText( value.toString() ) Since this is a polymorphic operation implemented by this class, show a new interaction diagram that starts with this polymorphic version UML notation: Note this little expression within the parameter. This is legal and consise. Sale publica un evento sobre la propiedad a todos sus suscriptores El suscriptor SaleFrame1 recibe la notificación de un evento publicado