Está en la página 1de 12

Tcnicas de Programacin - Curso 2008/09

(Esther Guerra Snchez)


Patrones de diseo
Patrn bsico Handler
Objetivos:
Diseo especfico para el problema, pero general para
poder adecuarse a futuros requisitos
Evitar el rediseo en la medida de lo posible
Evitar resolver cada problema partiendo de cero
Reutilizar soluciones que han sido tiles en el pasado
Idea:
Patrones recurrentes de clases y comunicacin entre
objetos en muchas soluciones de diseo
Reutilizar diseos abstractos que no incluyan detalles
de la implementacin
Patrones de diseo
Introduccin
Qu son:
Descripcin del problema y la esencia de su solucin,
que se puede reutilizar en casos distintos
Solucin adecuada a un problema comn
Documentar la experiencia en el diseo
Tipos:
De creacin: implica el proceso de instanciar objetos
Estructurales: composicin de objetos
De comportamiento: cmo se comunican los objetos,
cooperan y distribuyen las responsabilidades para
lograr sus objetivos
Patrones de diseo
Introduccin
Nombre del patrn
Describe el problema de diseo, soluciones y consecuencias
Vocabulario de diseo
Problema
Describe cundo aplicar el patrn (aplicabilidad)
Explica el problema y su contexto (motivacin)
Solucin
Elementos que forman el diseo, relaciones, responsabilidades
No un diseo concreto, sino una plantilla que puede aplicarse en
muchas situaciones distintas
Consecuencias
Resultados, ventajas e inconvenientes de aplicar el patrn
Por ejemplo: relacin entre eficiencia en espacio y tiempo,
cuestiones de implementacin, etc.
Patrones de diseo
Estructura de un patrn
Patrn bsico Handler
Propsito
Sirve para manejar identificadores de objetos de manera
independiente a su implementacin
Permite cambiar fcilmente la implementacin de un identificador (i nt ,
St r i ng, ...) a cualquier tipo bsico o clase primitiva, sea sencilla o
compuesta
Motivacin
A veces una clase tiene un identificador de cierto tipo, y puede que el
tipo cambie en futuras versiones de la clase
Subclases de una clase comn usan identificadores de distinto tipo
Patrn bsico Handler
Motivacin
Ej: Una aplicacin de gestin de alumnos
Los alumnos se identifican por un NIA de 10 dgitos
cl ass Al umno {
pr i vat e l ong ni a;
publ i c Al umno ( l ong ni a) {
t hi s. ni a = ni a;
}
publ i c l ong get Ni a ( ) {
r et ur n t hi s. ni a;
}
publ i c bool ean esMenor ( Al umno ot r o) {
i f ( t hi s. ni a < ot r o. get Ni a( ) )
r et ur n t r ue;
el se r et ur n f al se;
}
. . .
}
Alumno
-nia: long
+ esMenor (Alumno otro): boolean
Patrn bsico Handler
Motivacin
Ej: Una aplicacin de gestin de alumnos
Los alumnos se identifican por un NIA de 10 dgitos y una letra
cl ass Al umno {
pr i vat e l ong ni a;
publ i c Al umno ( l ong ni a) {
t hi s. ni a = ni a;
}
publ i c l ong get Ni a ( ) {
r et ur n t hi s. ni a;
}
publ i c bool ean esMenor ( Al umno ot r o) {
i f ( t hi s. ni a < ot r o. get Ni a( ) )
r et ur n t r ue;
el se r et ur n f al se;
}
. . .
}
Alumno
-nia: long
+ esMenor (Alumno otro): boolean
cl ass Al umno {
pr i vat e St r i ng ni a;
publ i c Al umno ( St r i ng ni a) {
t hi s. ni a = ni a;
}
publ i c St r i ng get Ni a ( ) {
r et ur n t hi s. ni a;
}
publ i c bool ean esMenor ( Al umno ot r o) {
i f ( t hi s. ni a. compar eTo( ot r o. get Ni a( ) ) )
r et ur n t r ue;
el se r et ur n f al se;
}
. . .
}
Alumno
-nia: String
+ esMenor (Alumno otro): boolean
Patrn bsico Handler
Motivacin
Solucin:
usar atributo del tipo especificado: no es flexible, si el tipo
cambia puede requerir muchos cambios en el resto del sistema
definir una clase de envoltura para el identificador
Alumno
- nia: NIA
NIA
+ comparar (NIA) : boolean
NIALong
- id: long
+ NIALong (long)
+ NIALong (NIA)
NIAString
- id: String
+ NIAString (String)
+ NIAString (NIA)
NIAArray
- id: String [2]
+ NIAArray (String[2])
+ NIAArray (NIA)
cl ass Al umno {
pr i vat e NI A ni a;
publ i c Al umno ( NI A ni a) {
t hi s. ni a = ni a;
}
publ i c NI A get Ni a ( ) {
r et ur n t hi s. ni a;
}
publ i c bool ean esMenor ( Al umno ot r o) {
i f ( t hi s. ni a. compar ar ( ot r o. get Ni a( ) ) )
r et ur n t r ue;
el se r et ur n f al se;
}
. . .
}
Patrn bsico Handler
Aplicabilidad
Usa el patrn Handler cuando:
tienes alguna clase que usa algn tipo de identificador
Estructura
Patrn bsico Handler
Participantes
Identifiable (Alumno): clase cliente que necesita
identificar a sus objetos a travs de un atributo
identificador
Handler (NIA): interfaz para declarar los
identificadores de los objetos de la clase
I dent i f i abl e
ConcreteHandler (NIALong, NIAString,
NIAArray): implementacin concreta de la
interfaz Handl er
Patrn bsico Handler
Ejemplo de Implementacin
i nt er f ace Handl er {
St r i ng t oSt r i ng( ) ;
i nt compar eTo( Handl er ot r o) ;
}
cl ass Concr et eHandl er 1 i mpl ement s Handl er {
pr i vat e i nt _i d;
Concr et eHandl er 1 ( St r i ng i d) t hr ows Number For mat Except i on {
_i d = new I nt eger ( i d) . i nt Val ue( ) ;
}
Concr et eHandl er 1 ( Handl er ot r o) t hr ows Number For mat Except i on {
_i d = new I nt eger ( ot r o. t oSt r i ng( ) ) . i nt Val ue( ) ;
}
publ i c St r i ng t oSt r i ng( ) { r et ur n new I nt eger ( _i d) . t oSt r i ng( ) ; }
publ i c i nt compar eTo ( Handl er ot r o) {
r et ur n t oSt r i ng( ) . compar eTo( ot r o. t oSt r i ng( ) ) ;
}
}
cl ass I dent i f i abl e {
pr i vat e Handl er _i d;
publ i c I dent i f i abl e( St r i ng i d) { _i d = new Concr et eHandl er 1( i d) ; }
}
Patrn bsico Handler
En java
j ava. l ang. Compar abl e
Implementado por clases de envoltura (I nt eger , Long, etc.), St r i ng,
Fi l e, Dat e,
publ i c i nt compar eTo ( Obj ect o) t hr ows Cl assCast Except i on
Invariantes:
sgn( x. compar eTo( y) ) = - sgn( y. compar eTo( x) )
( x. compar eTo( y) >0 and y. compar eTo( z) >0) x. compar eTo( z) >0
x. compar eTo( y) =0 sgn( x. compar eTo( z) ) =sgn( y. compar eTo( z) ) par a t odo z
Consistente con equals:
( x. compar eTo( y) =0) = ( x. equal s( y) )

También podría gustarte