Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseño de objetos
Si tiene
tiene un
un procedimiento
procedimiento con
con 10
10parámetros,
parámetros, es
es probable
probable
que se le escapen algunos.
Alan
-AlanPenis,
Perlis,Epigrams
EpigramsininProgramming
Programming
EspecificaciOnde
• Especificación deservicios,
servicios, durante
durante la
la cual
cual describimos
describimos concon precisión
precision cada interfaz de clase.
Selección de
• Selección de componentes,
componentes, durante
durante la
la cual
cual identificamos
identificamos componentes
componentes hechos
hechos yy objetos
objetos de
de
solución adicionales.
Reestructuración del
• Reestructuración del modelo
modelo de de objetos,
objetos, durante
durante la
la cual
cual transformamos
transformamos el el modelo
modelo de de
e;xtensibilidad.
diseño de objetos para mejorar su comprensibilidad y extensibilidad.
Optimización del
• Optimización del modelo
modelo de de objetos,
objetos, durante
durante la cual transformamos
transformamos el modelo de diseflodiseño
de objetos para tratar criterios de desempeño, como el tiempo de respuesta
respuesta oo la
la utilización
utilización de
de
la memoria.
El diseño de
de objetos,
objetos, a!
al igual
igual que
que el
el diseño
diseñodel
del sistema,
sistema,no
noesesalgorftmico.
algorítmico.En Eneste
estecapItulo
capítulomos-
mos-
tramos la manera de aplicar patrones existentes y componentes concretos en el proceso de reso-
lución del problema. Tratamos estos bloques de construcción yy sus sus actividades
actividades relacionadas.
relacionadas.
Concluimos tratando los
Concluimos tratando los asuntos
asuntos administrativos asociadoscon
administrativos asociados con elel diseño
diseño de
de objetos.
objetos. En
En este
capItulo
capítulo usamos Java y tecnologIas
tecnologías basadas en Java. Sin embargo, las técnicas que describimos
describimos
también son aplicables a otros lenguajes.
231
www.elsolucionario.org
232 CapItulo
Capítulo 7 • Diseño
Diseno de
de objetos
Speed
Speed (1994)
Harry, un policIa
Harry, un policía de Los Angeles,
Ángeles, es
es tornado
tomado como
como rehén
rehén por
por Howard,
Howard, un un bombardero
bombardero loco.
loco. Jack,
Jack, el
el
cornpanero
compañero de Harry, le dispara a Harry en en la
la pierna
pierna para
para hacer
hacermás
más lento
lentoelel avance
avance de
deHoward.
Howard. AAHarry
Harry
lo hieren en la pierna derecha. A lo largo de la pelIcula
película Harry cojea de la pierna izquierda.
Trilogla
Trilogía de
de Ia
la guerra
guerrade
delas
lasgalaxias
galaxias(1977, 1980 yY1983)
(1977,1980 1983)
Al final del episodio
final del episodio v:
v: El imperio
imperio contraataca
contraataca (1980),
(1980), Han
Han Solo es capturado y congelado en en carbonita
carbonita
para enviárselo Jaba. Al
enviárselo a Jaba. Al inicio
inicio del
del episodio
episodio VI,
vi, El
El regreso
regreso dél
dl Jedi
Jedi(1983),
(1983), elelcongelado
congelado Han
Han Solo
Solo es
es
recuperado por sus amigos y descongelado para que vuelva a la vida. vida. Cuando
Cuando lo lo congelaron
congelaron Solo
Solo usaba
usaba
una chaqueta. Cuando lo lo descongelan
descongelan viste
viste una
una camisa
camisa blanca.
blanca.
Titanic
Titanic (1997)
(1997)
Jack, un trotamundos, está enseflando
enseñando a Rose, una darna
dama de la alta sociedad, a escupir. Se lo demuestra
poniéndole el ejernplo
ejemplo y motiva a Rose para que lo haga tambidn.
también. Durante la lección liega
llega de improviso
madre de
la madre de Rose.
Rose. Cuando Jack comienza
cornienza aa girar para enfrentar a la madre
madre dede Rose
Rose no hay saliva en
en su
su
cara. Cuando termina el giro
giro tiene
tiene saliva
saliva en el mentón.
Speed, El
Los presupuestos para Speed, El imperio
imperio contraataca,
contraataca, El
El regreso
regreso del
del Jedi
Jedi yy Titanic
Titanic fueron 30, 18, 32.5 Y
y
200 millones de dólares, respectivarnente.
respectivamente.
Las películas,
Las pelIculas, al
al igual que el software,
software, son sistemas
sistemas complejos
complejos que contienen
contienen errores (a (a veces
veces
muchos) cuando se entregan a los clientes. Es sorprendente, considerando su su costo
costo de
de producción,
producción,
que cualesquiera errores obvios permanezcan en el producto producto final.
final. Sin embargo, las pelIculas
películas son
como los sistemas de software: son más complejos de lo que parecen.
Muchos factores conspiran para introducir errores en en una
una pelIcula:
película: las
las pelIculas
películas requieren la la
colaboración de
colaboración de muchas
muchas personas
personas diferentes, las escenas se
diferentes, las se filman
filman fuera
fuera de
de secuencia,
secuencia, algunas
algunas
escenas se
escenas se vuelven
vuelven a filmar fuera de
filmar fuera de lo planeado, detalles como
planeado, detalles como loslos accesorios
accesorios yy el vestuario
vestuario se
cambian durante la producción, la presión de la fecha de lanzamiento
lanzamiento es es alta
alta durante
durante elel proceso
proceso
de edición
de cuando se
edición cuando se integran todas las
integran todas las partes.
partes. Cuando
Cuando se se filma
filma una
una escena,
escena, el el estado
estado dede cada
cada
uno de los objetos y actores en escena necesita ser consistente con las escenas escenas precedentes
precedentes y subsi-
subsi-
guientes. Esto puede incluir la pose de cada actor, la condición de su vestuario, joyería,
guientes. joyeria, maquillaje
y peinado,
peinado, el contenido de los vasos,
vasos, si están bebiendo (por ejemplo, vino blanco o tinto), el nivel
de los vasos (por ejemplo, llenos, medio vacIos),
vacíos), etcetera.
etcétera. Cuando se combinan
combinan diferentes
diferentes segmen-
segmen-
tos en una sola
tos sola escena,
escena, un
un editor,
editor, llamado
llamado editor
editor de
de continuidad,
continuidad, necesita
necesita asegurarse
asegurarse queque tales
tales
detalles se hayan restaurado
detalles restaurado de manera adecuada.
adecuada. Cuando suceden
suceden cambios, como la adición o
cambios, como
eliminación de un accesorio, el cambio no debe interferir con otras escenas. escenas.
Los sistemas de software, al igual que las pelIculas,
películas, son complejos, están sujetos a cambios
continuos, se integran bajo presiones de tiempo y se desarrollan en forma no lineal. Durante Durante elel
diseflo de
diseño de objetos,
objetos, los
los desarrolladores
desarrolladores cierran el hueco entre los objetos de aplicación identificados
identificados
durante el
durante el análisis
análisis y la
la plataforma
plataforma de de hardware
hardware yy software
software seleccionada
seleccionada durante
durante el diseño
diseño del
del
sistema.
sistema. Los desarrolladores
desarrolladores identifican
identifican y construyen
construyen objetos
objetos dede solución
solución personalizados
personalizados cuyocuyo
propósito
propósito es realizar cualquier funcionalidad
funcionalidad queque falte
falte y cerrar el hueco entre los objetos de apli- apli-
cación y la plataforma
cación plataforma de hardware
hardware yy software
software seleccionada.
seleccionada. Durante
Durante el diseño de objetos,
objetos, los
los
www.elsolucionario.org
Un panorama
Un panorama del
del diseño
diseño de
de objetos
objetos 233
7.2
7.2 Un
Unpanorama
panorama del
del diseño
diseño de
de objetos
Desde el punto de vista
vista conceptual,
conceptual, vemos
vemos el desarrollo
desarrollo de
de sistemas
sistemas como
como elel relleno
relleno del
del hueco
hueco
la máquina. Las actividades de desarrollo del sistema cierran de manera incre-
entre el problema y Ia
mental ese hueco al identificar y definir objetos que realizan
realizan parte
parte del
del sistema
sistema(figura
(figura 7-1).
7-1).
El análisis reduce elel hueco
hueco entre
entre el
el problema
problema yy Iala máquina,
máquina, identificando
identificando objetos
objetos que
que
representan conceptos visibles
representan conceptos visibles para el usuario.
usuario. Durante
Durante el el análisis
análisis describimos
describimos el el sistema
sistema
desde el punto de vista
vista del
del comportamiento
comportamiento externo, como su funcionalidad (modelo de caso
de uso), los conceptos del dominio de aplicación que maneja (modelo (modelo de objetos),
objetos), su compor-
compor-
tamiento desde el punto de vista de laslas interacciones
interacciones (modelo dinámico)
dinámico) y sus
sus requerimientos
requerimientos no
fiincionales.
fu·ncionales.
El diseño del sistema
sistema reduce
reduce el hueco
hueco entre elel problema
problema yy lala máquina
máquina definiendo
definiendo una
plataforma de hardware y software que proporciona
proporciona un
un nivel
nivel de abstracción másmás alto
alto que
que el
el hard-
hard-
ware de la computadora.
computadora. Esto
Esto se
se realiza
realiza seleccionando
seleccionando componentes
componentes hechos
hechos para
paralalarealizaciOn
realización
de servicios estándar, como el middleware,
middleware, juegos de herramientas
herramientas dede interfaz
interfaz de
de usuario,
usuario, mar-
mar-
cos de aplicación y bibliotecas de clases.
Durante el diseño de objetos refinamos
refinamos los modelos de análisis
análisis yy de
de diseño
diseño del
del sistema,
sistema,
nuevos objetos y cerramos el hueco entre los
identificamos nuevos los objetos
objetos de
de aplicaciOn
aplicación y los corn-
com-
ponentes hechos. Esto
Esto incluye
incluye la
la identificaciOn de objetos personalizados,
identificación de personalizados, el ajuste
ajuste de
de los
los
componentes hechos y la especificación precisa de de cada interfaz de subsistema y clase. Como
resultado, el modelo
modelo de diseño de objetos puede particionarse en conjuntos de clases que pueden
implernentados por desarrolladores individuales.
ser implementados
www.elsolucionario.org
234 CapItulo
Capítulo 7
7 • Diseño de objetos
Problema
/ Sistema
Si sterna \.
-~-
/ObJetos
{Objetos de aPlicación\.
apiicación\
I
I I Hueco de re~uerimientos
Hueco de reuerimientos
~ I
I J
I r I I I
/Obetos
¡'Objetos de solución
solución\. \ - - - -~- - --
/ Componentes
Contponentes hechos
hechos \.. - - - -~- - --
I I
I ............... diseno del sistema
Hueco de diseño
I
__t \j/ _
Máquina
Figura
Figura 7-1
7-1 El diseño dede objetos
objetos cierra
cierra el
el hueco
hueco entre
entre los
los objetos
objetosde
deaplicaciOn
aplicación identificados
identificados durante
durante los
los
requenmientos
requerimientos y los
los componentes
componentes hechos seleccionados durante el diseño del sistema (diagrama de clase
UML estilizado).
estilizado).
diseflo de
El diseño de objetos incluye cuatro grupos de actividades
actividades (yea
(vea la
la figura
figura 7-2):
7-2):
• Especficación
Especificación de servicios.
servicios. Durante
Durante elel diseflo
diseño dede objetos
objetos especificamos
especificamos loslos servicios
servIcIOs çle
¡;le
subsistemas (identificados
(identificados durante
durante el diseño
diseflo del sistema) desde el punto de vistavista de
de interfaces
interfaces
de clase, incluyendo
de incluyendo operaciones, argumentos, firmas
operaciones, argumentos, firmas de
de tipo
tipo y excepciones.
excepciones. Durante esta
actividad también encontramos operaciones faltantes
actividad faltantes y objetos necesarios para transferir datos
entre subsistemas.
entre subsistemas. El El resultado de la especificación
resultado de especificación de servicios
servicios es una
una especificación
especificación de
interfaz completa
interfaz completa parapara cada subsistema.
subsistema. A la especificación
especificación de servicios
servicios de
de subsistema
subsistema concon
frecuencia se
frecuencia le llama API (siglas en inglés de interfaz de programación
se le programación de aplicaciones)
aplicaciones) de de
subsistema.
• Selección
Selección dede componentes.
componentes. Durante el diseño de objetos usamos y adaptamos los componentes
hechos identificados
hechos identificados durante
durante el diseño del sistema
sistema para
para realizar
realizar cada
cada subsistema.
subsistema. Selecciona-
Selecciona-
mos bibliotecas
mos bibliotecas de clase y componentes
componentes adicionales
adicionales para las
las estructuras
estructuras de datos
datos yy servicios
servicios
básicos. A
básicos. A menudo necesitamos ajustar los componentes que seleccionamos
necesitamos ajustar seleccionamos antes de poder poder
envolviendo objetos
usarlos envolviendo objetos personalizados
personalizados alrededor
airededor de ellos o refinándolos usando herencia.
actividades enfrentamos
Durante esas actividades enfrentamos el el mismo
mismo compromiso
compromiso de compra frente frente a construcción
que encaramos durante el diseño del sistema.
www.elsolucionario.org
objetos
Conceptos del diseño de objetos 235
El diseflo de objetos
diseño de objetos nono es lineal.
lineal. Aunque
Aunque cada una de las las actividades
actividades que describimos
describimos antesantes
aborda un problema especIfico
específico de diseño de objetos, necesitan suceder en forma concurrente. Un Un
componente hecho especIfico
específico puede restringir Ta cantidad de
la cantidad de tipos
tipos de
de excepciones
excepciones mencionadas
en Ta especificaciónde
la especificación deuna
una operación
operaciOny,y,porportanto,
tanto,puede
puedetener
tenerimpacto
impactoen en lala interfaz
interfaz del
del sub-
sub-
sistema.
sistema. La selección
selección de un componente
componente puede reducir el trabajotrabajo dede implementación
implementación mientrasmientras
nuevos objetos
introduce nuevos objetos "de unión",
union", los cuales también tienen que especificarse.
especificarse. Por último,
ültimo, la
reestructuración y Ta
reestructuración optimización pueden
la optimización pueden reducir
reducir la
Tacantidad
cantidadde deobjetos
objetos aa implementar,
implementar, incre-
incre-
mentando Ta cantidad de
la cantidad de reutilización
reutilización en el sistema.
La mayor cantidad de objetos
objetos yy desarrolladores,
desarrolladores, Ta alta tasa
la alta tasa de
de cambio
cambio y la cantidad
cantidad dede
decisiones concurrentes
decisiones concurrentes que se toman durante el diseño de objetos hacen hacen que
que esta
esta actividad
actividad sea
sea
mucho más compleja que eT análisisooeleldiseño
el análisis diseñodel
delsistema.
sistema.Esto
Estorepresenta
representa un un reto
reto de
de adminis-
adminis-
tración, ya que muchas decisiones importantes
importantes tienden aa resolverse en forma independiente
independiente yy no no
se comunican
se comunican aT resto del
al resto del proyecto.
proyecto. ElEl diseño
diseño de objetos
objetos requiere
requiere queque mucha
mucha informaciOn
información se
ponga a disposición de los desarrolladores para para que puedan tomarse
tomarse laslas decisiones
decisiones en en forma
forma con-
con-
sistente con
sistente con las
las decisiones
decisiones tomadas
tomadas por los demás desarrolladores
desarrolladores y con los los objetivos
objetivos de di-di-
seño. El Documento de Diseño
Diseño dede Objetos,
Objetos,un undocumento
documentovivo vivoquequedescribe
describeTa laespecificaciOn
especificación de de
clase, apoya este intercambio de información.
cada clase,
7.3 Conceptos
7.3 Conceptos del
del diseño
diseño de
de objetos
En esta sección presentamos los principales
principales conceptos del diseño
diseño de
de objetos:
objetos:
• Objetos de aplicaciOn
aplicación frente a objetos de soluciOn
solución (sección 7.3.1)
• Tipos, firmas y visibilidad
visibilidad (secciOn
(sección 7.3.2)
• Precondiciones, poscondiciones e invariantes (sección 7.3.3)
• El lenguaje de restricción de objetos de UML
UML (sección
(sección 7.3.4)
7.3.4)
www.elsolucionario.org
236 CapItulo 7 • Diseño de objetos
Capítulo
Especificación
JIdentificación de atributos
Identificación de atributo\
y operaciones
y operaciones faltantes
faltantes JoE:------------------------,
Especificación de
visibilidad
vigibilidad
Especificación de
restricciones
Especificación de
tipos y firmas
y firmas
Especificación de
excepciones
excepcioneg
Selección de
//Selección componentes
de componentes\1
Identificación de
(Identificación de componentes
componentes<
Ajuste de componentes
Ajuste de componentes <
Reestructuración \
/ Reestructuración
Realización de
asociaciones
asociaciones
>1 Revisión de
Revision
la
la herencia
herencia
(
Optimización
OptimizaciOn \
Cacheo de
( Cacheo de cálculos
cálculos
complejos
>1 Optimización
OptintizaciOn de
rutas de acceso
comp].ejos
)
-<I
Retraso de
( Retraso de cálculos
cálculos '
Descomposición de
( Descoxnposición de
complejos
complej os clases
c lases
L>.
Figura 7-2
Figura 7·2 Actividades del diseño de objetos (diagrama de actividad UML).
www.elsolucionario.org
Conceptos del diseño de objetos 237
7.31
7.3.1 Revision de los objetos de aplicaciOn
Revisión frente aa los
aplicación frente los objetos
objetos de solución
Como vimos en el el capItulo
capítulo 2,
2, Modelado
Modelado concon UML,
UML, pueden usarse los diagramas
diagramas de de clase
clase
para modelar el dominio
dominio dede aplicación
aplicación yy el
el dominio
dominio dede solución.
solución.Los
Losobjetos
objetos de
de aplicación,
aplicación, tam-
bién llamados objetos de dominio,
dominio, representan
representan conceptos del dominio
dominio que que manipula
manipula el el sistema.
sistema.
Los objetos
objetos de
de solución
soluciónrepresentan
representan componentes
componentes de de apoyo
apoyo que
que nono tienen
tienen una
una contraparte
contraparte en en el
el
dominio de aplicación, como
como loslos almacenes
almacenes dede datos
datos persistentes,
persistentes, los
los objetos
objetos de
de interfaz
interfaz dede usuario
usuario
o el middleware.
Durante el análisis
análisis identificamos los objetos de aplicación,
aplicación, sus
sus relaciones
relaciones yy atributos,
atributos, yy sus
sus
operaciones. Durante el diseño del sistema identificamos subsistemas y los objetos de solución más
importantes.
importantes. Durante el diseño de objetos
objetos refinamos y detallamos ambos conjuntos de objetos, objetos, ee
identificamos cualesquier objetos de solución
solución faltantes
faltantes necesarios
necesarios para
para completar
completar el
el sistema.
sistema.
7.3.2 RevisiOn de
Revisión detipos,
tipos, firmas
firmas yy visibilidad
visibilidad
Durante el análisis
análisis identificamos atributos y operaciones
identificamos atributos operaciones sin especificar
especificar su su tipo oo pará-
pará-
metros. Durante el
el diseño
diseño dede objetos
objetos refinamos
refinamos los
los modelos
modelos de de análisis
análisis yy diseño
diseño del
del sistema
sistemaaña-
aña-
diendo información
información de tipo y visibilidad.
visibilidad. El tipo
tipo de
de un
un atributo
atributo especifica
especifica el el rango
rango dedevalores
valores
que puede tomar el atributo y las operaciones que pueden
pueden aplicarse
aplicarse alal atributo.
atributo. Por
Por ejemplo,
ejemplo, con-
con-
sidere
sidere el atributo
atributo nuniElementos
numElementos de de la clase TablaHash
TablaHash (yea (vea la
la figura
figura 7-3).
7-3). nuinElementos
numElementos
representa el número
representa el nümero actual
actual de
de entradas
entradas enen una
unaTablaHash
TablaHash dada. dada.Su Sutipo
tipoeses int,
int, indicando
indicando
es un
que es un nUmero
número entero.
entero. El tipo del atributo numElementos
nuinElementos también
también indica las las operaciones que
pueden aplicarse aa este
este atributo:
atributo: podemos
podemos sumar
sumar0orestar
restarotros
otrosenteros
enterosaanurilElementos.
numElementos.
operación y los
A los parámetros de operaciOn los valores
valores de
de retomo
retorno se les asigna tipo de la misma forma
que a los atributos. El tipo restringe el rango de valores
valores que
que puede
puede tomar el el parámetro
parámetro o el el valor
valor de
de
retorno.
retomo. Para toda operación,
operación, al
a! tuplo
tuplo compuesto
compuesto por
por los
los tipos
tipos de
de sus
sus parámetros
parámetros yy elel tipo
tipo de
de valor
valor
de retorno
retomo se le llama firma de de la la operación.
operación. Por ejemplo,
ejemplo, la la operación
operación poner
poner ()() de TablaHash
toma dos parámetros
parámetros dede tipo
tipo Obj
Object ect y no
no tiene
tiene valor
valor de
de retorno.
retorno. ElEl tipo
tipode
defirma
firmapara
paraponer
poner ()() es
es
entonces (Object,
entonces (Obj ect, Object)
Obj ect) :void.
: void. EnEn forma
forma similar,
similar, lala operación
operaciónobtener
obtenero () dede TablaHash
TablaHash
toma un parámetro
toma un parámetro ObjObject
ect y regresa
regresa unun Obj
Object.
ect. El
El tipo
tipo dede firma
firma de obtener
obtener() () esesentonces
entonces
(Object) :Object.
La visibilidad
visibilidadde
de un
un atributo
atributo oo una
una operación
operación especifica
especifica si
si puede ser
ser usada por otras clases
niveles de visibilidad:
o no. UML define tres niveles visibilidad:
• Privado. Solo
Sólo puede tener acceso a un atributo privado la clase en la que está definido.
definido. En
forma
forma similar,
similar, una operaciOn privadasólo
operación privada solopuede
puedeser
serllamada
ilamadaporporlala clase
claseenen la
la que
que está
definida.
definida. Las subclases u otras clases no pueden tener acceso
acceso aa los
los atributos
atributos yy operaciones
operaciones
privados.
• Protegido.
Protegido. La
La clase
clase en
en Ia
la que
que están
están definidos
definidos y cualquier descendiente pueden
descendiente de la clase pueden
tener acceso a un atributo u operación protegidos.
• Puiblico. püblico.
Público. Cualquier clase puede tener acceso a un atributo u operación público.
www.elsolucionario.org
238 CapItulo
Capítulo 7 • Diseño de
de objetos
objetos
TablaHash
-numElementos:int
-nuinElementos : mt
+poner (dave
+poner (clave:Object,
: Object, entrada:Object)
entrada Obj ect)
+obtener(clave:Object):Object
+obtener(clave:Object) :Object
+eliminar(clave:Object)
+eliminar (c].ave : Obj ect)
+contieneClave(clave:Object):boolean
+contieneClave (dave Obj ect) : boolean
+tamaño():int
+tamafio() :int
class TablaHash
TablaHash {{
private int
private mt numElementos;
numElementos;
/* Se
/* Se omiten
omiten los
los Constructores
Constructores */ */
public
public void poner (Object clave,
poner (Object Object entrada)
dave, Object entrada) {... };
{...};
public
public Object
Object obtener (Object clave)
obtener(Object dave) {... };
{...};
public void
void eliminar
eliminar (Object
(Object clave)
dave) {... };
{...};
public
public boolean contieneClave (Object clave)
contieneClave(Object {... };
dave) {...};
public
public int tamaño () {...
mt tamano() };
{...};
/* Se
/* Se omiten
omiten otros
otros métodos
métodos */
*/
}
Figura
Figura 7-3 Declaracionespara
7-3 Declaraciones paraLa clase TablaHash (modelo de clase UML yy fragmentos
la clase fragmentos Java).
Con frecuencia, la información del tipo por sIsí sola no es suficiente para especificar
especificar el
el rango
rango
de valores
valores legItimos.
legítimos. En elel ejemplo TablaHash el tipo mt
ejemplo Ta)DlaHash permite que nurnElernentos
int permite nurnElementos tome
valores negativos, los
valores negativos, los cuales
cuales nono son
son válidos
válidos para
para este
este atributo.
atributo. A
A continuación
continuación tratamos
tratamos esta
esta
cuestión con contratos.
7.3.3
7.3.3 invariantes, precondiciones
Contratos: invariantes, precondiciones yy poscondiciones
poscondiciones
Los contratos
contratos son
sonrestricciones
restricciones sobre
sobre una
una clase
clase que
que permiten
permiten que el liamador
llamador y el llamado
Ilamado
compartan
compartan las mismas
mismas suposiciones
suposiciones acerca
acerca de
de lalaclase
claseIjMeyer,
[Meyer, 1997].
1997]. UnUn contrato
contratoespecifica
especifica
restricciones que debe satisfacer el llamador antes de usar la clase, asIasí como las restricciones que
asegura cumplir el liamado
llamado cuando se le usa. Los contratos incluyen
incluyen tres
tres tipos
tipos de
de restricciones:
restricciones:
invariante es
• Un invariante esun
unpredicado
predicadoque
que siempre
siempre es
es cierto
cierto para
para todas
todas las
las instancias
instancias de
de una
una clase.
clase.
Los invariantes
Los invariantes son
son restricciones
restricciones asociadas con clases o interfaces. Los invariantes se usan
para especificar restricciones de consistencia entre atributos de clase.
Una precondición
• Una precondición es es un
un predicado que debe
predicado que debe ser
ser cierto
cierto antes
antes dede que
que se
se liame
llame a unauna
operación.
operación. Las
Las precondiciones están asociadas
precondiciones están asociadas con con una
una operación
operación especIfica.
específica. Las Las
precondiciones sese usan
usan para
para especificar
especificar restricciones que
que debe
debe satisfacer
satisfacer el
el llamador
llamador antes
antes
ilamar a una operación.
de llamar
• Una poscondición es un un predicado
predicado que
que debe
debe ser cierto después
después de de que
que se llama
llama a una
una
operación. Las
operación. Las poscondiciones están asociadas
poscondiciones están asociadas concon unauna operación
operación especIfica.
específica. Las Las
poscondiciones se usan para especificar restricciones que el objeto debe asegurar después
de la invocación de la operación.
www.elsolucionario.org
Conceptos del diseño de objetos 239
/* Clase
/* Tab1aHash. Mantiene
Ciase TabiaHash. claves ünicas
la correspondencia entre ciaves
Mantiene is únicas yy objetos
arbitrarios */
*/
class Hashtable {
/* La cantidad de elementos de
de elementos Tab1aHash es
de TsbisHash es no negativa todo
no negativa todo el tiempo.
el tiempo.
** @inv >= 0O */
numE1ementos >=
inv numElementos /
private mt
int numElementos;
omiten los
/* Se omit:en los constructores
constructores */
*/
/* La
/* Ls operación
operación obtener
obtener asume
asume que
que la
ia clave especificada corresponde
dave especificads corresponde
* aa una entrada de
* de la TablaHash.
la TabisHash.
* @pre
* contieneClave(clave) */
pre contieneCisve(cisve) */
public
public Object
Object obtener (Object clave)
obtener(Object dave) {...};
{.oo};
La operación
/* La
/* opersdión eliminar
eiiminsr asume
ssume que is clave
que la cisve especificada
especificsda existe
* en
* Tab1aHash.
la TsbisHssh.
en is
** @pre contieneC1ave(c1ave)
pre contieneCisve(ciave)
** @post tcontieneC1ave(c1ave)
@post !contieneCiave(ciave) */
*/
public void
void eliminar(Object
eliminar (ObjectciLave)
clave) {oo.};
{...};
/* Se
/* Se omiten
omiten otros
otros métodos
métodos */
*/
}
Figura
Figura 7-4 Declaración de
7-4 Declaración de métodos
métodos para
para la clase
clase TablaHash
TablaHash comentada
comentada con
conprecondiciones,
precondiciones,
(Java, restricciones
poscondiciones e invariantes (Java, restricciones en
en la
la sintaxis
sintaxis ¡Contraet
Contract [iContract]).
www.elsolucionario.org
240 Capítulo 77 • Diseño de objetos
Caputulo
Usamos
Usamos invariantes,
invariantes, precondiciones
precondiciones yy poscondiciones
poscondiciones para especificar
especificar sin ambiguedades
ambigüedades
casos especiales
especiales o excepcionales.
excepcionales. Por ejemplo,
ejemplo, las restricciones
restricciones en Iala figura
figura 7-4 indican
indican queque el
el
método eliminar
eliminar() () debe ser llamado
liamado solo tabla. En forma similar,
sólo para entradas que existen en la tabla. similar,
el método poner
poner()() debe ser llamado sOlo
sólo si
si no
no se
se está
está usando
usando la clave.
dave. En
En la
la mayoria
mayoría dede los
los casos,
casos,
también es posible usar restricciones para especificar por completo el comportamiento de una ope- ope-
raciOn. Sin embargo,
ración. Sin embargo, tal
tal uso
uso de
de restricciones,
restricciones, llamado
ilamado especificación
especificación basada
basada en restricciones,
restricciones, eses
difícil y puede ser más complicado que la implementación de la operación misma [Horn,
difIcil [Hom, 1992].
1992]. En
este capftulo describiremos especificaciones
capítulo no describiremos especificaciones basadas
basadas en
en restricciones
restriccionespuras.
puras.EnEn vez
vez de
de ello
ello nos
nos
enfocaremos en la especificación de operaciones
operaciones usando
usando restricciones
restricciones yyel
el lenguaje
lenguajenatural,
natural, enfa-
enfa-
frontera.
tizando los casos de frontera.
7.3.4
7.3.4 de restricción de
Lenguaje de de objetos
objetos de
de UML
UML
En UML las restricciones se expresan usandousando OCL [OMG,
[0MG, 1998].
1998]. OCL
OCL es un lenguaje que
permite que se especifiquen de manera formal las restricciones en elementos tinicos únicos del modelo
(por ejemplo, atributos, operaciones, clases) o en grupos de de elementos
elementos deldel modelo
modelo (por
(por ejemplo,
ejemplo,
asociaciones
asociaciones y clases participantes). Una restricción se expresa como una restricción restricción OCL
OCL que
que
regresa el valor cierto o falso.
falso. OCL
OCL nono es
es un
un lenguaje
lenguaje procedural
procedural y,y, por
por tanto,
tanto, no
no puede
puede usarse
usarse
para indicar el flujo
flujo de
de control.
control. En
En este
este capItulo
capítulo nos
nos enfocamos
enfocamos exclusivamente
exclusivamente en en los
los aspectos
aspectos
de OCL relacionados con invariantes, precondiciones y poscondiciones.
Una restricción puede mostrarse
mostrarse como una nota nota asociada
asociada alal elemento
elemento UML UML restringido
restringido
mediante una relación de de dependencia.
dependencia. Una
Una restricción
restricción puede
puede expresarse
expresarse en en lenguaje
lenguaje natural
natural oo
en un
un lenguaje
lenguaje formal,
formal, como
como OCL.
OCL. LaLa figura
figura 7-5
7-5 muestra
muestra unun diagrama
diagrama de de clase
clase del
delejemplo
ejemplo
TablaHash
TablaHash dede la
la figura
figura 7-4
7-4 usando
usando UML
UML yy OCL.
GeL.
.--
J self.numElementos
I
<<invariante>>
«invariante» DI
>=O
self.numElementos>=O
I
.-- .--
TablaHasli
TablaHash -~
<<poscondición>> L
<<precondición>>
!contieneClave(clave) nuinElementos: mt
numElementos:int
poner(clave, entrada:Object) --
poner(clave,entrada:Object)~
- «poscondici ón»
obtener(clave)==entrada
obtener(clave)== entrada
<<precondiciOn>>
«I?recondición» .obtener(c1ave) :Object
obtener(clave):Object
contieneClave(clave)
contIeneClave(clave) - eliminar (dave Object)..
eliminar(clave:Object)~
-contieneClave(clave:Objeet~
contieneClave (c].ave : Object) _
<<precondición>>
«I?recondición»
contieneClave(clave)
contIeneClave(clave)
boolean
:boolean
tainaflo() :int
tamaño():int
-- <<poscondición>>
«poscondici ón»
!contieneClave( clave)
!contieneClave(clave)
Figura
Figura 7-5
7-5 Ejemplos de invariantes, precondiciones y poscondiciones
poscondiciones en
en OCL (diagrama de
OeL (diagrama de clase UML).
www.elsolucionario.org
Actividades
Actividades del
del diseño
diseño de
de objetos 241
context TablaHash:
TablaHash: :poner(clave,
:poner(clave, entrada) pre:
entrada) pre:
! contieneClave
contieneClave (clave)
(dave)
context TablaHash:
TablaHash: :poner(clave,
:poner(clave, entrada) post:
entrada) post:
contieneClave(clave) and obtener(clave)
contieneClave(clave) = entrada
obtener (clave) =
7.4
7.4 Actividades
Actividadesdel
del diseño
diseño de
de objetos
Como ya se mencionó
mencionó en lala introducción,
introducción, el diseño
diseño de
de objetos
objetos incluye
incluye cuatro
cuatro grupos
grupos de
de activi-
activi-
dades: especificación, selección de componentes, reestructuración y optimización.
especificación incluyen:
Las actividades de especificación incluyen:
Identificación de
• Identificación de atributos
atributos yy operaciones
operaciones faltantes
faltantes (Sección
(Sección 7.4.1)
7.4.1)
• Especificación de tipos de
de firma
firma y visibilidad
visibilidad (sección
(sección 7.4.2)
7.4.2)
• Especificación de restricciones (sección 7.4.3)
• Especificación de excepciones (sección 7.4.4)
www.elsolucionario.org
242
242 CapItulo
Capítulo 77 • Diseño
Diseño de
de objetos
objetos
• Revision
Revisión de las rutas de acceso (sección 7.4.11)
• Descomposición de objetos: conversion
conversión de objetos en atributos (sección 7.4.12)
• Cacheo del resultado de cálculos costosos (sección 7.4.13)
7.4.13)
Retraso de cálculos costosos (sección 7.4.14)
• Retraso
Para
Para ilustrar
ilustrar con mayor
mayor detalle
detalle estos
estos cuatro
cuatro grupos
grupos de de actividades
actividades usamos
usamos comocomo ejemplo
ejemplo unun
sistema de
sistema de modelado de emisiones
emisiones liamado
llamado JEWEL (tallerambiental
JEWEL (taller ambientalconjunto
conjunto yy laboratorio
laboratorio de
de
emisiones
emisiones [Bruegge et el al.,
al., 1995],
1995], [Kompanek
[Kompanek etelal.,al.,1996]).
1996]).JEWEL
JEWEL permite que que los
los usuarios
usuarios
finales
finales simulen y visualicen Ia la contaminación del aire aire como
como función
función dede fuentes
fuentes puntuales
puntuales (por
(por
ejemplo, fábricas, plantas eléctricas), fuentes de areaárea (por
(por ejemplo,
ejemplo, ciudades)
ciudades) yy fuentes
fuentes móviles
móviles
(por ejemplo,
(por ejemplo, automóviles,
automóviles, camiones,
camiones, trenes).
trenes). El
El área
area bajo estudio está dividida
dividida en celdas
celdas de
de
cuadrIcula.
cuadrícula. Luego se estiman las condiciones para cada celda celda de
de cuadrIcula
cuadrícula y parapara cada
cada hora
hora del
del
dIa.
día. Una vez que termina la simulación,
simulación, el usuario
usuario final
final puede
puede visualizar
visualizar lala concentración
concentración de de
varios contaminantes en un un mapa,
mapa, junto
junto con
con las
las fuentes
fuentes dedeemisión
emisión(yea
(vealalafigura
figura7-6).
7-6).JEWEL
JEWEL
está destinado
destinado a agencias
agencias gubernamentales
gubernamentales que que regulan
regulan lala calidad
calidad del
del aire
aire yy tratan
tratan de
de que
que las
areas pobladas
áreas pobladas que tienen problemas se apeguen a los reglamentos.
Tomando en cuenta
cuenta su
su enfoque
enfoque sobre
sobrelalavisualización
visualizacióndededatos
datosgeograficos,
geográficos,JEWEL
JEWEL incluye
incluye
un subsistema de información geográfica
geográfica (GIS,
(GIS, por sussus siglas
siglas en inglés)
ingles) que es responsable
responsable deldel
almacenamiento y la manipulación de mapas. El GIS de JEWEL JEWEL administra
administra la
la información
informaciOn geográ-
fica como
fica como conjuntos
conjuntos dede polígonos
polIgonos y segmentos.
segmentos. Diferentes tipos de información, como caminos,
rIos
ríos y fronteras polfticas,
políticas, están organizados en capas diferentes que pueden pueden mostrarse
mostrarse en
en forma
forma
independiente. Además, los datos están organizados de tal tal forma
forma queque pueden
pueden verse
verse en
en diferentes
diferentes
niveles de abstracción. Por ejemplo,
ejemplo, una
una vista
vista de
de alto
altonivel
nivel de
deununmapa
mapasOlo
sólo contiene
contiene los
los caminos
caminos
mientras que
principales, mientras que una
una vista
vista detallada
detallada también
también incluye
incluyeloslos secundarios.
secundarios. El
El GIS es Un
un ejem-
plo ideal para el diseflo
diseño de objetos, tomando en cuenta su su rico
rico dominio
dominio dede aplicación
aplicación yy su
su corn-
com-
plejo dominio de solución. Primero comenzamos con con lala especificación
especificación del GIS.
Session
Session I New ".
Iayer
layer fader
1
www.elsolucionario.org
Actividades del diseño de objetos 243
243
Actividades de espec:ficación
especificación
En la figura 7-7 el modelo
modelo de
de objetos
objetos para el GIS de JEWEL describe una
para el una organización
organización enen tres
tres
capas (es decir, la capa de
de caminos,
caminos, Ta capa de
la capa agua y la capa política).
de agua polftica). Cada capa está compuesta
de elementos. Algunos de de estos
estos elementos,
elementos, como
como las
las autopistas,
autopistas, caminos secundariosyyrIos,
caminossecundarios ríos,sesedes-
des-
pliegan con lIneas
líneas compuestas por varios segmentos. Otros, como los lagos, estados y condados, se
despliegan corno polIgonos, que
como polígonos, que también
también son representados
representados como
como una colección de segmentos de
líneas.
lIneas.
Capa
etiqueta
Rio Lago
*
* *
*
PoliLínea
Pol iLinea Polígono
Poligono
Figura
Figura 7-7
7-7 Modelo de objetos para el GIS de JEWEL (diagrama de clase UML).
El caso de uso
uso AcercamientoMapa (figura 7-8)
AcercarnientoMapa (figura 7-8) describe
describe la
la manera
manera en en que
que los
los usuarios
usuarios
pueden acercarse o alejarse airededor
alrededor de un punto seleccionado del del mapa.
mapa. El modelo de de análisis
análisis
todavIa es abstracto.
todavía es abstracto. Por ejemplo,
ejemplo, en este momento no contiene ninguna información sobre la
manera en que se incrementa el acercamiento o cómo se seleccionan los los puntos.
El modelo de diseño
diseño del
del sistema
sistema se
se enfoca
enfoca en
en la
la descomposición
descomposición en en subsistemas
subsistem.as yy las
las deci-
deci-
siones de sistema globales, como la correspondencia entre hardware y software,
software, el almacenamiento
persistente
persistente o el control de acceso.
acceso. Identificamos
Identificamos los subsistemas de nivel superior y los definimos
definimos
desde el punto de vista de los servicios que proporciona. En JEWEL, por ejemplo (figuras 7-9 yY7-10),
7-10),
identificamosaT
identificamos al GIS proporcionando servicios para Ta creación, almacenamiento
la creación, almacenamiento y borrado de ele-
mentos geográficos, su organización
geográficos, su organización en capas yy la recuperación
en capas reduperación dede su
su contorno
contorno como
como una
una serie
serie de
de
puntos. Estos servicios los usa el subsistema Visualización, el cual recupera información geográ-
fica para el trazado de mapas. Los datos geográficos se proporcionan como un conjunto de archivos
archivos
pianos
planos y son tratados por JEWEL como datos estáticos. En consecuencia, no necesitamos soportar la
edición interactiva de datos geográficos. A partir de los casos de uso de JEWEL también sabemos que
los usuarios necesitan ver los datos geográficos con diferentes criterios de acercamiento. Durante el
diseño del sistema
diseño sistema decidimos que elel GIS proporcione
proporcione los servicios de acercamiento
acercamiento y recorte.
recorte. El
El
www.elsolucionario.org
244 CapItulo
Capítulo 7 • Diseño de objetos
Nombre del
Nombre caso AcercamientoMapa
del caso
de uso
Condición inicial
Condición El mapa se despliega en una ventana y es visible al menos una capa.
Flujo de eventos 1. El
1. El usuario
usuario final
final selecciona
selecciona la herramienta Acercamiento desde
desde la barra de
de
herramientas. El sistema cambia el cursor aa una
una lupa.
lupa.
Figura 7-8
Figura Caso de uso AcercamientoMapa de JEWEL.
GIS de JEWEL
JEWEL
Propósito
• Almacenar y mantener
mantener la
la informaciOn
información geográfica para JEWEL
Serviclo
Servicio
• Creación y borrado de elementos geográficos (caminos, rios,
ríos, lagos y fronteras)
• Organización de los elementos en capas
• Acercamiento (selección de puntos en un nivel
nivel de detalle dado)
• Recorte (selección de puntos dentro de un
un cuadro
cuadro limitante
limitante dado)
dado)
Figura
Figura 7-9
7-9 Descripción de subsistemas para el GIS de JEWEL.
www.elsolucionario.org
Actividades del diseño de objetos 245
Visualización
Visua].ización
/
/
/ ModeladoEmisión
/
E~G~I~~
.-/ '-...
\
\
\ Simulación
Almacenamiento
Almacenainieuto
Figura 7-10
Figura Descomposición de subsistemas
subsistemas de
de JEWEL
JEWEL (diagrama de clase UML).
UML).
www.elsolucionario.org
246
246 CapItulo
Capítulo 77 • Diseño de
de objetos
Clase
Clase recién
recién
identificada
:UsuarioFinal
UsuarioFinal :Visualización
:Visualizacién
I
I I- - - - -:Capa
r-----
EleinentoCapa
acercar(x,y) I I
calcularcuadroLimit¡nte(x,y)
CalcularCuadroLimitffte (x, y)
-
*ObtenerContorno(r,~)
*ObtenerContorno (r, d
*Obtenercontorno(rld)
*ObtenerContorno (r ,Id)
puntos
_p~n~s_
puntos
Figura 7-11
Figura 7-11 Un diagrama de secuencia para la operación acercar
acercar() (diagrama de secuencia
() (diagrama secuencia UML).
UML). Este
Este
diagrama de secuencia conduce aa la
la identificación
identificación de
de una
una nueva
nueva clase,
clase, ElementoCapa. Debido a que nos
estamos enfocando en el GIS, tratamos al subsistema Visua~ización
Visua]ización como un solo objeto.
Identificamos Ia
Identificamos la operación
operación obtenerContorno
obtenerContorno() () de la clase
clase ElementoCapa, la cual es es
responsable del escalamiento y recorte de líneas lIneas y polígonos
polIgonos de
de elementos
elementos individuales
individuales de
de acuerdo
acuerdo
con Ufl cuadro limitante y Ufl
un cuadro nivel de
un nivel de detalle
detalle dados.
dados. La operación
operación obtenercontorno
obtenerContorno() () usa el
nivel de detalle para
para escalar
escalar cada línea yypolígono
cada imnea polIgono yy para
para reducir
reducir la cantidad de puntos para
para five-
nive-
les de detalle más bajos. Por ejemplo, cuando el usuario reduce el mapa por un factor de 2, el GIS
regresa sólo
regresa solo la mitad de La cantidad de
la cantidad de puntos
puntos para
para un
un elemento
elemento de de capa
capa dado,
dado, debido
debido a que se
necesita menos detalle. Luego identificamos la operación obtenerContorno
obtenerContorno () () de la clase Capa,
la cual es responsable del llamado
llamado dede la
la operaciOn
operación obtenerContorno
obtenerContorno () () de cada ElementoCapa
y de recopilar todas las
recopilar todas las líneas
Ilneas yy polígonos
polIgonos de la la capa
capa en
en una
una sola
sola estructura
estructura de datos. Ambas
Ambas
operaciones obtenerContorno
obtenerContorno () regresan colecciones
() regresan colecciones de lmneas
líneas yy polígonos.
polfgonos. ElEl subsistema
subsistema
www.elsolucionario.org
Actividades del diseño de objetos 247
Capa p
etiqueta
et iqueta
obtenerContorno
obt enerContorno
(cuadroLim,
(cuadroLim, detalle)
~
I I
CapaCamino
CapaCaiuino CapaAgua CapaPolítica
CapaPoiltica
I I I I I I
elementos
ElementoCapa
EleinentoCapa
etiqueta
**
ElementoCapa(polilínea)
ElementoCapa (polilInea)
ElementoCapa(polígono)
ElementoCapa(poligono)
obtenerContorno
(cuadroLim, detalle)
(cuadroLim,
[),
I I I
I
Autopista
Autopi sta I Icaminosecundariol
CaininoSecundario
I
Estado Municipio
I
I
I
Río
RIo
11
Lago
I
I
"
Figura 7-12
7·12 Adición de operaciones
operaciones aT modelo de
al modelo de objetos
objetos de GIS de JEWEL
JEWEL para
para realizar
realizar acercamiento
acercamiento yy
recorte (diagrama de clase UML).
www.elsolucionario.org
248 CapItulo
Capítulo 7 • Diseño de objetos
objetos
'"
(l)
:::l
O'c::
o
'" ......
«:l
._ c:: (l)
u
a c::
«:l o
U U
'"o
o
0
00
.
00 .
Figura 7-13
Figura 7-13 Un algoritmo de selección de puntos sencillo para el GIS.
GIS. La columna izquierda representa
un cruce de caminos y dos municipios vecinos.
vecinos. La columna
columna derecha
derecha muestra
muestra que
que el
el cruce
cruce de
de caminos
caminos yy
los municipios vecinos pueden mostrarse en forma incorrecta cuando no se se tiene
tiene cuidado en
en la
la selección
selección
de puntos.
el cual revisa
revisa para
para ver
ver sisi las
las coordenadas
coordenadas especificadas
especificadas corresponden
corresponden a un punto
punto existente.
existente.
Segundo, añadimos atributos a los objetos objetos Punto para guardar los niveles
niveles de detalle en los que
participa.
participa. El atributo
atributo enNivelesDetalle es es un conjunto
conjunto de todos
todos los niveles
niveles dede detalle
detalle en los
cuales participa este Punto. El atributo nOEnNivelesDetalle
noEnNivelesfletalle es un un conjunto
conjunto de
de todos
todos loslos nive-
five-
les de detalle en los que este punto ha sido excluido. Si un nivel de detalle no está en ninguno de
estos conjuntos, significa que este Punto todavíatodavIa no ha sido considerado para el nivel
nivel dede detalle
detalle
dado.
dado. Los atributos enNivelesfletalle y noEnNivelesDetalle (y
atributos enNivelesDetalle y noEnNivelesDetalle (y sus operaciones asociadas)
asociadas)
son
son usados
usados luego por la la operación
operación ElementoCapa. obtenerContorno()
ElementoCapa. obtenerContorno () para seleccionar
seleccionar los los
puntos compartidos y mantener la conectividad.
Hasta este momento
momento hemos hemos identificado
identificado los
los atributos
atributos yy operaciones
operaciones faltantes
faltantes necesarios
necesarios
para soportar el acercamiento y recorte de ElementoCapa. Volveremos a revisar algunos de estos
problemas
problemas más adelante cuando seleccionemos
seleccionemos componentes existentes o realicemos
realicemos el el diseflo
diseño
los subsistemas
de objetos de los subsistemas dependientes.
dependientes. AA continuación,
continuación, procedemos
procedemos aaespecificar
especificarIa
la interfaz
interfaz de
de
cada una de las clases usando tipos, firmas, contratos y visibilidad.
www.elsolucionario.org
Actividades del diseño de objetos 249
PoliLínea
PoliLmnea Polígono
PolIgono
añadirPunto(punto)
afladirPunto (punto) añadirPunto(punto)
afiadirPunto (punto)
obtenerPuntos(cuadroLim)
obtenerPuntos (cuadroLim) obtenerPuntos(cuadroLim)
obtenerPuntos (cuadroLim)
( * *
*<>
Punto
'----
* x, y
x, y -
**
enNivelesDetalle
eriNivelesDetal le
noEnNivelesDetalle
y)
Punto (x, y)
Punto(x,
incluyeEnNivel(nivel)
incluyeEnNivel (nivel)
excluyeDeNivel(nivel)
excluyeDeNivel (nivel)
Figura 7-14
Figura 7-14 Atributos y métodos adicionales para la clase Punto a fin de soportar la selección inteligente
de puntos y el acercamiento (diagrama de clase UML).
www.elsolucionario.org
250 CapItulo
Capítulo 7 Diseno de objetos
7 • Diseño
Capa <::
1
+etiqueta:String
+etiqueta: String
+Capa (etiqueta:String)
+Capa(etiqueta String)
elementos **
+obt~nerContorno(cuadroLim
+obtenerContorno (cuadroLim
::Rectangle2D,
Rectangle2D,
detalle:double):Enumeration
detalle :double) :Enuineration ElementoCapa
+etiqueta:String
+etiqueta: String
+ElementoCapa(polilínea
+ElementoCapa (polilinea
: PoliLInea)
PoliLínea)
+obtenerContorno(cuadroLim
+obtenerContorno (cuadroLim
: Rectangle2D,
detalle:double):Enumeration
detalle double) : Enumeration
1
1 polilínea
polilInea
PoliLínea
Pol iLInea
+etiqueta:String
+etiqueta:String
Punto +PoliLínea()
+PoliLInea ()
+obtenerPuntos():Enumeration
+obtenerpuntos () :Enuzneration
-x, y:double
-x, y:double
-enNivelesDetalle:Set
-enNivelesDetalle Set **
-noEnNivelesDetalle:Set
-noEnNivelesDetalle : Set
+Punto (x, y:double)
+Punto(x, puntos
+incluirEnNivel(nivel:double)
+incluirEnNivel (nivel :double) *
+excluirDeNivel(nivel:double)
+exclujrDeNjvel (nivel :double) *
Todos los
l. Todos los puntos
puntos regresados
regresados por Capa. obtenerContorno
obtenerContorno () están dentro
() están dentro del cuadro
cuadro
limitante especificado.
El resultado
2. El resultado de
de Capa. obtenerContorno
obtenercontorno () es la
() es la concatenación de la invocación
concatenación de invocación de
de
ElementoCapa. obtenerContorno()
ElementoCapa. obtenerContorno () sobre sus elementos.
www.elsolucionario.org
Actividades del diseño de objetos 251
1* Restricción 11 */
/* */
context ElementoCapa:
ElementoCapa: :obtenerContorno(cuadroLim, detalle)
detalle) post:
post:
resultado->forAll(p:PuntolcuadroLim.contiene(p) and
resultado->forAll(p:PuntojcuadroLim.contiene(p) and puntos->incluye(p))
puntos->incluye(p))
1* Restricción 22 *//
/*
context Capa:
Capa::obtenerContorno(cuadroLim,
:obtenerContorno (cuadroLim, detalle)
detalle) post:
elementos->iterate(ec:ElementoCapa; Enumeration I
resultado::Enumeration
elementos->iterate (ec : ElementoCapa; resultado
resultado->including(ec.obtenerCapa(cuadroLim,detalle)
resultado->including (ec . obtenerCapa (cuadrobim, detalle)))
/* Restricción 33 *1
/* Restricción */
context
context Punto
Punto inv:
mv:
Punto.alllnstances->forAll(pl, p2:Punto I
Punto.alllnstances->forAll(pl,
(pl.x =
(pl.x = p2.x
p2.x and
and pl.y = p2.y)
pl.y = pl = p2)
p2.y) implica p1 p2)
www.elsolucionario.org
252
252 CapItulo 7 • Diseno
Capítulo Diseño de objetos
Dejamos
Dejamos la derivación de las
derivación de las tres
tres ültimas
últimas restricciones como ejercicio
ejercicio al
al lector (yea
(vea el ejer-
2).
cicio 2).
Con estas seis
seis restricciones
restricciones describimos
describimos con
con más
más precision
precisión elel comportamiento
comportamientode
delas
lasopera-
opera-
ciones obtenerContorno
obtenerContorno () () y su
su relación
relación con los
los atributos
atributos y operaciones
operaciones dede la clase
clase Punto.
Punto.
Observe
Observe que no hemos descrito en ninguna forma el algoritmo por el cual ElementoCapa selec- selec-
ciona Punto en un five!
nivel de
de detalle
detalle dado. Dejamos esta decision
decisión a la actividad de implementación
implementación
del diseño de objetos.
A continuación describimos las excepciones que puede presentar cada operación.
«excepción»
<<excepción>>
CuadroLimitanteCero
CuadroLimitanteCero
Capa
+etiqueta:String
+etiqueta: String
+capa(etiqueta:String)
+Capa (etiqueta: String)
<<precondición>>
«precondición»
... cuadroLim.anchura > O 0y
+obtenerContorno(cuadrOLim
+obtenerContorno (cuadroLim
::Rectangle2D,
Rectangle2D, cuadroLim.altura>
cuadroLim.altura > 0O
<
detalle:double):Enumeration
detalle:doub].e) :Enuineration
<<precondición>>
«precondición»
detalle> 0
O
«excepción»
<<excepción>>
DetalleCero
Figura
Figura 7-16 del GIS
7-16 Ejemplos de precondiciones y excepciones para la clase Capa del cis de
deJEWEL.
JEWEL.
detalle daría
detalle darla como resultado el colapso de todas las coordenadas
coordenadas en el el origen.
origen. Un
Un nivel
nivel de
de detalle
detalle
negativo darla como resultado una imagen
negativo daría imagen invertida.
invertida. Observe que elel descubrimiento
descubrimiento sistemático
sistemático dede
todas las excepciones para todas las operaciones es un ejercicio que consume tiempo pero que que es
es ütil.
útil.
Para los sistemas
sistemas en
en los
los cuales
cuales lalaconfiabilidad
confiabilidadno noesesun
unobjetivo
objetivode
dediseflo
diseñoprincipal,
principal,Ta
la especificación
especificación
de excepciones puede
puede limitarse
limitarse aa la
la interfaz
interfaz ptIblica
pública de
de los
los subsistemas.
subsistemas.
Actividades para
para la selección de componentes
En este punto
punto del
del diseño
diseño de
de objetos
objetos seleccionamos
seleccionamos Ta la plataforma de software yy hardware
hardware
en Ta que se
la que se ejecutará
ejecutará el
el sistema.
sistema. Esta plataforma incluye componentes
componentes hechos
hechos como
como los
los siste-
siste-
mas de administración de base de datos, marcos
marcos middleware,
middleware, marcos
marcos de
de infraestructura
infraestructura oo marcos
marcos
de aplicación
aplicación empresarial. El objetivo
empresarial. El principal en
objetivo principal en la selección
selección de
de componentes
componentes hechos es es la
la
reutilización de
reutilización de la mayor
mayor cantidad
cantidad de
de objetos
objetos posible,
posible, minimizando
minimizando asIasí la
la cantidad
cantidad de
de objetos
objetos
personalizados que es necesario desarrollar.
desarrollar. Es
Es más,
más, un
un componente
componente hecho
hecho proporciona,
proporciona, con
con fre-
fre-
cuencia, una solución
cuencia, solución más
más confiable
confiable yy eficiente
eficiente que
que Ta
la que
que podrIa
podría esperar
esperar producir
producir cualquier
cualquier
desarrollador en
desarrollador en el
el contexto
contexto de
de un solo sistema.
sistema. Una biblioteca de clases de interfaz, por ejem-
plo, pone
plo, pone mucha
mucha atención
atención aa un
un algoritmo
algoritmo de desplegado eficiente oo a buenos
desplegado eficiente buenos tiempos
tiempos dede
respuesta. Además,
respuesta. Además, un
un componente
componente hecho
hecho ha
ha sido
sido usado
usado por
por mucho
mucho más
más sistemas
sistemas y usuarios y,
y,
por tanto, es más robusto. Sin embargo, los componentes hechos tienen un costo. Su propósito
propósito es
es
soportar una amplia variedad de sistemas y, en consecuencia,
soportar consecuencia, normalmente
normalmente son complejos. El
uso de un
uso un componente
componente hecho
hecho requiere
requiere una
una inversion
inversión en su
su aprendizaje
aprendizaje y,
y, aa menudo,
menudo, requiere
requiere
algün grado
algún grado de personalización. El uso
personalización. El uso de componentes hechos es, por To
componentes hechos general, una
lo general, una mejor
mejor
del sistema completo a partir de cero.
alternativa que la construcción del
www.elsolucionario.org
254 CapItulo
Capítulo 77 • Diseño de objetos
objetos
«JFC»
<<JFC>>
:JFrame
JFraine
«JFC»
<<JFC>>
: JPanel
JPane].
«JFC»
<<JFC>> «JFC»
<<JFC>>
: JScrollPane :JToolbar
JToolbar
: AreaNaa
ÁreaMapa
«JFC»
<<JFC>> «JFC»
<<JFC>>
detalle zoomIn:JButton
zoomln: JBut ton zoomOut:: JButton
zoomOut 7Button
paintContents()
paintContents ()
Figura
Figura 7-17 Componentes de
7·17 Componentes de las
las JFC
JFC para elel subsistema
subsistema Visualización de JEWEL
JEWEL (diagrama de de
objetos UML). Las asociaciones
asociaciones indican
indican la
la jerarquIa
jerarquía contenedora usada
usada para
para ordenar
ordenar los
los componentes
componentes del
del
trazado. Usamos estereotipos para distinguir entre las clases de JEWEL
trazado. JEWEL yy las
las proporcionadas
proporcionadas por las
las JFC.
JFC.
paintContents
paintContents ()()calcula
calculaelelcuadro
cuadrolimitante
limitantevisible
visible a partir dede atributos
atributosde deJScrollPane,
JScrollPane, recupera
recupera
listas de
de puntos
puntos de
de las
las clases Capa,las
clasesCapa, escalayylas
lasescala lastraza.
traza.LaLaclase AreNapatambién
claseÁreaMapa tambiénmantiene
mantieneelelnivel
nvel
de detalle actual.
actual. Las
Las acciones
acciones asociadas
asociadascon
con zoomIn:
zoornln JButton
: JButtonyy zoornOut:
zoornOutJButton
JButton tienen acceso
acceso aa
operaciones AreaNapa para incrementar y decrementar el nivel
operaciones en ÁreaMapa nivel de detalle, respectivamente.
respectivamente. Esto
activa la
la operación repaint ()()dedeAreaiviapa,
operación repaint ÁreaMapa,lalacual
cualrefresca
refrescaeleldesplegado
desplegado del
del mapa.
mapa.
Cuando examinamos
Cuando examinamos los los primitivos
primitivos dede trazado
trazado proporcionados
proporcionados por por las JFC nosnos damos
damos
cuenta que
cuenta que las JFC y el GIS GIS representan las líneas
representan las lIneas enen forma
forma diferente.
diferente. Por
Por un
un lado,
lado, las opera-
ciones drawPoligon
ciones drawPoligon()() yy drawPolyline () () de
de lala clase
clase Graphics
Graphicsaceptan
aceptan dos dos arreglos
arreglos dede
coordenadas (uno para las coordenadas x de los puntos y el el otro
otro para
para las
las coordenadas
coordenadas y, y, yea
vea la
la
figura 7-18).
figura 7-18). Por
Porotro
otrolado,
lado,lalaoperación
operaciónobtenerContorno
obtenerContorno () del GIS regresa una
GIS regresa una Enumeration
Enumeration
de Punto (yea
de (vea la
la figura
figura 7-16).
7-16). Hay
Hay dos
dos enfoques
enfoques para para resolver
resolver esta
esta falta
falta de
de concordancia.
concordancia.
Podemos escribir un método de utilerIa utilería en la clase AreaMapa
ÁreaMapa para para traducir
traducir entre
entre las dos estruc-
turas de datos diferentes o podemos pedirle aa los desarrolladores
desarrolladores responsables
responsables del delGIS
GIS que cam-
bien la
la interfaz
interfaz de
de la
la clase
claseCapa.
Capa.
void drawPolygon(int[]
drawPolygon(int[J xPoints,
xPo±nts, int[]
int[J yPoints,
yPoints, int nPoints)
mt nPoints) {oo.};
{...};
Figura
Figura 7-18
7·18 Declaración para las operaciones drawPolyline () yy drawPolygon
drawPolyline() () [JFC,
drawPolygon() 1999].
IJFC. 19991.
www.elsolucionario.org
Actividades del diseño de objetos 255
Debemos cambiar la API de la clase Capa Si tenemos control sobre ella. Sin embargo, en
si tenemos en el
el
general, con frecuencia es
caso general, es necesario
necesario escribir
escribir operaciones
operaciones dede unión
union yy clases.
clases. Por
Por ejemplo,
ejemplo, sisi
también estuviera establecido con componentes hechos, no
el GIS también no podrIamos
podríamos cambiar
cambiar su su API.
API.
Podemos usar el patrón pararesolver
patron Adaptador para resolveresta
esta falta
falta de de concordancia
concordancia (vea(yea Ta sección
la sección 6.4.4 6.4.4
en eT
el capítulo 6, Diseño
capItulo 6, Diseño del sistema).
7.4.6 Identificación
Identificación yy ajuste
ajuste de
de marcos
marcos de aplicación
Un marco
marco dede aplicación
aplicaciónesesuna
unaaplicación
aplicaciónparcial
parcialreutilizable
reutilizable que
que puede
puede especializarse
especializarse para
producir aplicaciones personalizadas [Johnson
aplicaciones personalizadas [Johnsonetet al.,
al., 19881.
1988]. AA diferencia
diferencia de
de las
las bibliotecas de
bibliotecas de
clase, los marcos están orientados hacia tecnologías
tecnologIas particulares, como el procesamiento de datos o
celulares, o hacia dominios de aplicación, como las interfaces de usuario o la
las comunicaciones celulares, la
real. Los beneficios
aviónica en tiempo real. beneficios principales
principales dede los
los marcos
marcos dede aplicación
aplicación son
son la
la reutilización
reutilización
y la extensibilidad. La reutilización de los marcos se apoya en el conocimiento del dominio de apli-
cación y los esfuerzos
cación esfuerzos anteriores
anteriores de desarrolladores
desarrolladores experimentados
experimentados para para evitar
evitar volver
volver a crear y
validar soluciones recurrentes. UnUn marco
marco de de aplicación
aplicación mejora
mejora lalaextensibilidad
extensibilidadproporcionando
proporcionando
métodos gancho,
métodos gancho,que
queson
sonsobrepuestos
sobrepuestospor porlalaaplicación
aplicaciónpara
para extender
extender elel marco
marco de aplicación. Los
métodos
métodos gancho
gancho desacoplan
desacoplan en en forma
forma sistemática las interfaces
sistemática las interfaces y los
los comportamientos
comportamientos de un un
aplicación con
dominio de aplicación con respecto
respecto aa las
las variaciones
variaciones requeridas
requeridas por
por una
una aplicación
aplicación en
en unun contexto
contexto
particular. La extensibilidad de los marcos es esencial para asegurar la personalización
personalización oportuna
oportuna dede
características de
nuevos servicios y caracteristicas de Ia
la aplicación.
Los marcos pueden
pueden clasificarse
clasificarse por
por su
su posición
posición en
eneT
el proceso de desarrollo del software.
software.
www.elsolucionario.org
256 CapItulo
Capítulo 7 • Diseño de objetos
objetos
Los marcos también pueden clasificarse por las técnicas que se usan para extenderlos.
Los
• Los
Los marcos
marcos de caja
caja blanca
blancaseseapoyan
apoyan en
enlalaherencia
herencia yyelelenlace
enlace dinámico
dinámico para
para Ia
la
extensibilidad.
extensibilidad. La funcionalidad
funcionalidad existente se extiende
extiende haciendo
haciendo subclases
subclases con
con las
las clases
clases
básicas del marco
marco yy sobreponiendo
sobreponiendo métodos
métodos gancho
gancho predefinidos,
predefinidos, usando
usando patrones
patrones como
como
el patron
patrón de método de
de plantilla
plantilla [Gamma
[Gamma et al., 1994].
el al., 1994].
• Los
Los marcos
marcos dede caja
cajanegra
negrasoportan
soportanlalaextensibilidad
extensibilidaddefiniendo
definiendo interfaces
interfaces para
para los
los
componentes que pueden
componentes que enchufarse en
pueden enchufarse en el marco.
marco. La
La funcionalidad
funcionalidad existente
existente se reutiliza
reutiliza
mediante
mediante la definición
definición de
de componentes
componentes que se apegan a una interfaz particular e integrando
delegación.
estos componentes con el marco usando delegacion.
Patrones de diseño frente a marcos. La principal diferencia entre los marcos y los los patrones
patrones
es que
es que los
los marcos
marcos se enfocan en la reutilización de diseños, algoritmos e implementaciones
concretos en un lenguaje de programación particular. Por el
el contrario,
contrario, los
los patrones
patrones se
se enfocan
enfocan en
en
Ia reutilización
la reutilización de un diseflo
diseño abstracto y en
en pequenas
pequeñas colecciones
colecciones dede clases
clases cooperativas.
cooperativas. Los
Los
marcos se
marcos se enfocan en un dominio de aplicación particular, mientras que los patrones de diseflo
diseño
pueden ser vistos más como bloques de construcción de marcos.
Bibliotecas de de clase
clase frente
frente a marcos. Las clases en un marco cooperan cooperan para
para proporcionar
proporcionar un un
esqueleto arquitectónico reutilizable para
esqueleto arquitectónico reutilizable para una familia de aplicaciones relacionadas.
relacionadas. Por el con-
trario, las bibliotecas de clases son menos especIficas
específicas del dominio y proporcionan un un alcance
alcance de de
reutilización más pequeno. Por ejemplo, los componentes de bibliotecas de clases,
reutilización más pequeño. Por ejemplo, los componentes de bibliotecas de clases, como las
clases para cadenas, nümeros arreglos y conjuntos de bits, pueden usarse a través de .
números complejos, arreglos
muchos dominios de aplicación. Las bibliotecas de de clases,
clases, por
por lo
lo general,
general, son
son pasivas;
pasivas; esto
esto es, no
es, no
restringen el
implementan ni restringen el flujo
flujo de
de control.
control. Sin
Sin embargo,
embargo,los losmarcos
marcossonsonactivos;
activos;esesdecir,
decir,con-
con-
trolan el flujo
trolan flujo de
de control
control dentro
dentro de de una
una aplicación.
aplicación. En En la práctica,
práctica, los
los marcos
marcos y las
las bibliotecas
bibliotecas
de clases son tecnologIas
de complementarias. Por ejemplo,
tecnologías complementarias. ejemplo, los marcos usan bibliotecas de clases
en forma
en forma interna,
interna, como
como las clases fundamentales,
fundamentales, parapara simplificar
simplificar el el desarrollo
desarrollo del
del marco.
marco. EnEn
forma similar, el código especIfico
específico de la aplicación, ilamado
llamado por los manej adores de
manejadores de eventos
eventos del
del
marco, usan
marco, usan bibliotecas
bibliotecas de
de clases
clases para realizar tareas
tareas básicas,
básicas, como
como el procesamiento
procesamiento de de cade-
cade-
nas, administración de archivos y análisis numérico.
nas,
www.elsolucionario.org
diseno de objetos
Actividades del diseño 257
7.4.7
7.4.7 Un ejemplo de marco: WebObjects
Un
es un conj
WebObjects es untode
conjunto de marcos
marcos para
para el
el desarrollo
desarrollo de
de aplicaciones
aplicaciones Web
Web que
que tienen
tienen
acceso a datos existentes en bases
bases de
de datos
datos relacionales.
relacionales. WebObjects consta de dos marcos
marcos de
de
infraestructura. El marco WebObjects 1 maneja la interacción entre los
marco WebObjects1 los navegadores
navegadores Web y los
servidores Web. El
servidores Web. El marco
marco dede objetos
objetos empresarial (EOF, por
empresarial (EOF, por sus
sus siglas
siglas en inglés)
inglés) maneja
maneja lala
interacción entre los servidores
servidores Web
Web y las bases de datos relacionales. El El EOF
EOF soporta
soporta adapta-
adapta-
dores de bases de datos que permiten que las aplicaciones se conecten con sistemas de admi-
dores
nistración de
nistración de bases
bases de datos
datos de
de vendedores
vendedores particulares. Por ejemplo,
particulares. Por ejemplo, el EOF proporciona
proporciona
adaptadores para servidores Informix, Oracle y SyBase, y adaptadores apegados a ODBC para
bases de datos que ejecutan en la
bases la plataforma
plataforma Windows. A continuación nos concentramos en
el marco WebObjects. EnEn [Wilson
[Wilson yy Ostrem,
Ostrem, 1999]
19991podrá'
podráencontrar más información
encontrar más información acerca
acerca
del EOF.
La figura
La 7-19 muestra
figura 7-19 muestra un un ejemplo de un sitio
ejemplo de sitio de
de edición
edición dinámico
dinámico construido
construido con
petición HTTP
WebObjects. El WebBrowser origina una petición HTTP en en forma
forma dede un
un URL,
URL, la cual se envIa
envía
WebServer detecta que la petición es una página HTML estática la pasa al
al WebServer. Si el Webserver
objeto StaticHTML, el cual selecciona
selecciona yy envfa
envía Ia
la página
página de de regreso
regreso a!
al navegador
navegador Web
Web como
como
respuesta. El navegador Web entonces ante el
Web la presenta entonces el usuario.
usuario. Si
Si el WebServer detecta que
la petición requiere una página HTML dinámica pasa la petición al WOAdaptor de WebObjects.
empaca la
El WOAdaptor empaca la petición
petición HTML
HTML entrante
entrante yy la
la pasa
pasa al
al objeto
objeto WebObj
WebObj ectsApplica-
ectsApplica-
tion. Con base en Template definidas por el desarrollador y datos relevantes
relevantes recuperados
recuperados de
de
WebObj ectsApplication genera
RelationalDatabase, la WebObjectsApplication genera una página HTML de respuesta,
respuesta,
la cual
cual se
se pasa
pasa mediante
mediante el hacia el WebServer. El WebServer envía
el WOAdaptor hacia envIa luego
luego la
página al WebBrowser, el cual Ia la presenta ante el usuario.
usuario.
www.elsolucionario.org
258 Capitulo 77 • Diseño
Capítulo Diseño de
de objetos
objetos
WebBrowser
;;
/'
/'
/'
WebObjectsApplication
WebObj ectsAppl icat ion
I
íl
WebServer
WebServer
WOAdaptor
IWORequest
WORequest I
WoRequest
I StaticHTML
StaticHTML 1I WoRequast I Template
Template I1 EOF I
I
RelationalDatabase
Figura 7-19
Figura Un ejemplo de un sitio dinámico con WebObjects (diagrama de componentes UML).
www.elsolucionario.org
Actividades
Actividades del
del diseno
diseño de
de objetos 259
259
WOAdaptor
WOApplicat ion
**
* *
WOSession WOComponent 1-----*--1 DynamicElement
DynamicEleiuent
Figura
Figura 7-20 Clases ge
7-20 Clases cle administración
administración de
de estado
estado de
de WebObjects. El protocolo
WebObjects. El protocolo HTTP
HTTP no tiene
tiene estados
estados
inherentes.
inherentes. Las Clases
Clases de
de administración
administración de
de estado
estadopermiten
permitenconservar
conservarinformación
información entre
entrepeticiones
peticiones
individuales.
La esencia
esencia de
de Iala construcción
construccióndedeaplicaciones
aplicacionesdedeWebObjects
WebObjects es refinar las clases
clases WOApplica-
Wocomponent e interceptar el flujo
WOSession yy WOComponent
tion, WOSession
tion, de peticiones enviadas y recibidas por ellas.
Los métodos
métodos heredados
heredados de esas
esas clases
clases sese sobreponen
sobreponen cuando
cuando elel desarrollador
desarrollador necesita
necesita extender
extender elel
predeterminado. El primer punto de control para la
comportamiento predeterminado. la refinación
refinación dede objetos
objetos de
de tipo
tipo
WOApplication es cuando se les construye. El iiitimo último punto de control es cuando termina el objeto
de aplicación. Mediante la adición de de código al al constructor
constructor del
del objeto
objeto de
de aplicación,
aplicación, oo mediante
mediante la la
sobreposición del método terminate
terminate () () de WOApplication, el desarrollador puede personalizar
personalizar el
comportamiento
comportamiento de de lalaaplicación WebObjects como
aplicaciónWebObjects como lo desee.
modelo de
Una vez que se ha extendido el modelo de diseño
diseño de
de objetos
objetos con
con componentes
componentes hechos
hechos yy sus
sus
clases relacionadas reestructuramos
reestructuramos el el modelo
modelo para
paramejorar
mejorarIala reutilizabilidad
reutilizabilidadyy lalaextensibilidad.
extensibilidad.
Actividades
Actividades dede reestructuración
reestructuración
Una vez que especificamos
especificamos las interfaces
interfaces de subsistemas,
subsistemas, identificamos
identificamos clases de
de solución
solución
adicionales,
adicionales, seleccionamos componentes yy los
seleccionamos componentes los adaptamos
adaptamos para que se ajusten a nuestra
nuestra solución,
solución,
necesitamos transformar
transformar el
el modelo
modelo de
de diseño
diseño de
de objetos
objetos hacia
hacia una
una representación
representación que
que esté
esté más
más cer-
cer-
cana a la máquina de destino. En esta sección describimos tres actividades de reestructuración:
reestructuración:
www.elsolucionario.org
260 CapItulo 7 • Diseño de objetos
Capítulo
tomando en cuenta
cuenta La multiplicidad de
la multiplicidad de las
las asociaciones y susu dirección.
dirección. Observe
Observe queque muchas
muchas
herramientas de modelado UML realizan la
herramientas la transformación
transformación de
de asociaciones
asociaciones hacia
hacia referencias
referencias en
en
forma automática. Aunque una herramienta realice esta transformación, sigue siendo importante que
los desarrolladores
los desarrolladores comprendan su fundamentación,
fundamentación, ya que tiene que ver con
con el
el código
codigo generado.
generado.
Asociaciones
Asociaciones unidireccionales de uno a uno. La asociación más simple es la de uno a uno.
uno. Por
ejemplo, AcciónAcercamiento,
ejemplo, AcciónAcercamiento, elelobjeto
objeto de
de control
control que
que implementa
implementa el caso de uso Acercamiento,
Acercan1iento,
tiene
tiene una
una asociación de uno
asociación de uno aa uno
uno con el AreaNapa cuyo nivel
ÁreaMapa cuyo nivel de
de detalle
detalle modifica
modificaelelobjeto
objeto
AcciónAcercainiento (figura
AcciónAcercamiento (figura 7-21).
7-21). Además,
Además, supongamos
supongamos que
que esta
estaasociación
asociación es
esunidireccional;
unidireccional;
esto es,
esto es, un
UnAcciánAcercamiento
AcciónAcercarniento tiene
tiene acceso
acceso a!
al AreaNapa
ÁreaMapa correspondiente,
correspondiente, pero un ÁreaMapa
AreaNapa nono
necesita tener acceso al
a! objeto
objeto AcciónAcercamiento correspondiente.En
AcciónAcercamiento correspondiente. Eneste
esteCaso
caso realizamos
realizamos esta
esta
asociacidn usando
asociación usando una referencia
referencia desde
desde AcciónAcercamiento;
AcciónAcercarniento; esto
estoes,
es,un
unatributo
atributode
deAcc±ónAcer-
AcciónAcer-
camiento liamado
camiento llamado mapaDestino
mapaDestinode detipo
tipo AreaNapa.
ÁreaMapa.
I AcciónAcercainiento
AcciÓDAcercamiento l AreaMapa
ÁreaMapa
' 11-----~
*
Modelo de diseño
diseno de objetos después de la transformación
AccióriAcercainiento
AcciónAcercamiento AreaNapa
ÁreaNapa
mapaDestino AreaMapa
mapaDestino:AreaMapa
7·21 Realización
Figura 7-21
Figura Realización dede una
una asociación unidireccional de
asociación unidireccional de uno
uno aa uno
uno (diagrama de clase UML;
(diagrama de UML; la
flecha indica La transforrnación del
la transfonnación del modelo de objetos).
Asociaciones
Asociaciones bidireccionales
bidireccionales de
de uno
uno aa uno. Supongamos
Supongamos que modificamos
modificamos la clase AreaNapa
ÁreaMapa
para que el usuario pueda hacer acercamientos simplemente haciendo clic en el mapa con los botones
izquierdo y derecho.
derecho. En este caso, un ÁreaMapa
Areai'xapanecesita
necesitaacceder
accederaasusuobjeto
objetoAcciónAcercamiento
AcciónAcercainiento
correspondiente. consecuencia, la asociación
correspondiente. Por consecuencia, asociación entre estos dos objetos necesita ser bidireccional.
bidireccional.
Afiadimos
Añadimos el el atributo
atributo acercamiento
acercamiento aaAreaNapa
ÁreaMapa(figura
(figura 7-22).
7-22). Sin
Sin embargo,
embargo, esto
esto no
no es
es suficiente:
suficiente:
mediante la adición de un segundo atributo para realizar la asociación introducimos redundancia
a!
al modelo.
modelo. Necesitamos asegurarnos que si si un
un AreaMapa
ÁreaMapa dada tiene una una referencia
referencia hacia
hacia Un
un
AcciónAcercamiento especIfico, el AcciónAcercamiento tenga
específico, el tenga una
una referencia
referencia hacia la la misma
misma
AreaNapa. Para asegurar la
ÁreaMapa. Ia consistencia
consistencia cambiamos
cambiamos la la visibilidad
visibilidad del
del atributo
atributo aa privada
privada yy añadimos
añadimos
dos métodos cada clase
métodos a cada clase para
para acceder
accederaaellas
ellasyymodificarlas.
modificarlas.asignarAcciónAcercamiento
asignarAcciónAcercamiento () () en
en
www.elsolucionario.org
Actividades del diseño de objetos 261
Modelo de diseño
diseño de
de objetos
objetos antes
antes de
de Ia
la transformación
transformación
I AcciónAcercainiento
AcciónAcercomiento 11 11 AreaMapa
Á_r_e_aM_a_p_a _
class
class AreaMapa extends
ÁreaMapa JPanel JPanel {{
extends
acercamiento;
private AcciónAcercamiento acercamiento;
/* Se
/* Se omiten otros métodos */ */
(acción:AcciónAcercamiento)
void asignarAcciónAcercamiento (acción:AcciónAcercamiento) {
if (acercamiento != acción)
if (acercamiento
acercamiento = acción;
acercamiento.asignarMapaDestino (this);
acercarniento.asignarMapaDestino (this);
}
(MapaDestino !=
if (MapaDestino mapa) {
!= mapa)
MapaDestino == mapa;
mapa;
MapaDestino.asignarAcciónAcercamiento
MapaDestino (this);
asignarAcciónAcercamiento (this);
}
.}
}
Realización de
Figura 7-22 Realización
Figura de una
una asociaclOn
asociación bidireccional
bidireccionaldedeuno
unoaa uno
uno (diagrama
(diagrama de
de clase
clase UML
UML yy
fragmentos Java; la flecha indica la transformación del modelo de diseño
diseño de
de objetos).
objetos).
www.elsolucionario.org
262 CapItulo
Capítulo 7 • Diseño de
de objetos
Asociaciones de
Asociaciones de uno a muchos. Las asociaciones de uno a muchos, muchos, aa diferencia
diferencia dede las
las asocia-
asocia-
ciones de uno a uno, no puedenpueden realizarse usando una sola referencia
referencia o0 un par de referencias.
referencias. En
vez de eTTo,
ello, realizamos
realizamoslalaparte
partedede"muchos"
"muchos" usando una colección
colección de
de referencias.
referencias.Por
PorejempTo,
ejemplo, Tala
clase Capa del GIS de JEWEL tiene tiene una asociación
asociación de uno a muchos con la clase clase ElementoCapa.
Debido a que ElementoCapa no no tiene un orden
orden especIfico
específico con respecto a Capa,
Capa, y debido a que que
ElementoCapa puede ser parte, a lo sumo, de una Capa a la
ElementoCapa Tavez,
vez,usamos
usamosun unconjunto
conjunto dede referencias
referencias
parte "muchos"
para modelar la parte "muchos" de deTala asociación. Además, decidimos reaTizar
realizar esta
esta asociación
asociación como
como
una asociación bidireccional
bidireccional y,y, por tanto,
tanto, añadimos los métodos añadirElemento
afiadirElemento (0, ), eliminar-
eliminar-
Elemento0,
Elemento ( ), obtenerCapa
obtenerCapa ()() yyasigriarCapa
asignarCapa() () a Tas
las clases Capa ElementoCapa para
Capa y ElementoCapa para aCtua-
actua-
lizar los atributos
atnbutos elementosCapa
elementoscapa y contenidoEn
contenidoEn (vea
(yea la figura 7-23). Al igual que en el ejemplo
de uno a uno,
uno, eses necesario
necesario iniciar
iniciar yy destruir
destruirTa
la asociación cuando se crean yy destruyen
destruyen los
los objetos
objetos
Capa y
Capa y ElementoCapa.
ElementoCapa.
Capa ElementoCapa
ElementoCapa
I Capa 1" *1-----
diseflo de
Modelo de di",ño de objeto,
objetos d"pué,
después de la
la tranSfonnaciói
transformación
Capa ElementoCapa
EleinentoCapa
-elementosCapa:Set
-elementosCapa: Set -contenidoEn:Capa
-contenidoEn: Capa
+elementos()
+elementos () +obtenerCapa()
+obtenerCapa ()
+añadirElemento(ec)
+afadirE1emento (ec) +asignarCapa(c)
+asignarCapa (C)
+eleminarElemento(ec)
+eleminarEleinento (ec)
Figura
Figura 7-23
7-23 Realización de una asociación bidireccional
bidireccional de
de uno a muchos (diagrama de clase UML; la
flecha indica la transformación del modelo de diseño de
de objetos).
objetos).
www.elsolucionario.org
Actividades del
del diseño
diseño de objetos 263
del lado
Observe que la colección del lado "muchos" de la asociación depende de
de las
las restricciones
restricciones de
de
ElementoCapa de una Capa necesita estar ordenado (por ejemplo,
si el ElementoCapa
la asociación. Por ejemplo, Si
para indicar el orden en que deben trazarse), necesitamos usar un Array o Un
Array 0 un Vector en vez de un
Set. En forma similar, si una asociación
Seto calificada usamos una Hashtable para guardar las
asociación está calificada
referencias.
Modelo de diseflo
diseño de objetos antes de la transformación
{ ordenado }
PoliLínea
Pol iLmnea ¡_¡OrdenadO) Punto
-1
Figura
Figura 7-24
7-24 Realización de una asociación bidireccional
bidireccional de muchos
muchos aa muchos
muchos (diagrama
(diagrama de
de clase
clase UML;
UML;
modelo de
la flecha indica la transformación del modelo de diseño
diseño de
de objetos).
objetos).
www.elsolucionario.org
264 CapItulo 7 • Diseño de objetos
Capítulo
Modelo de diseno
diseño de objetos antes
antes de la transformación
transformación
EjecutarSimulación
Ej ecutarSimulación
fecha
autor
tiempoCPU
obtenerPerfil()
obtenerPerf ii ()
FuenteEmi sión
FuenteEmisión I
ResultadoSimulación
1 1r-_R_e_S_U_l_t_a_d_O_S_i_m_n_l_a_C_i_ó_n_
- - - - i ' "
EjecutarSimulación
Ej ecutarSimulación
fecha
autor
tiempoCPU
ii C)
obtenerPerfil()
obtenerPerf
~1 1
L
FuenteEmisión
FuenteEmi sión ResultadoSimulación
ResultadoSimulación
* 1
'"
Figura
Figura 7-25 Transformacióndede una
7-25 Transformación una clase
clase de
de asociación en un
asociaclOn en un objeto
objeto yy dos
dosasociaciones
aSOCIaCIOnes binarias
binarias
(diagrama de clase UML;
UML; La flecha indica
la flecha indica la
la transformación
transformación del modelo de diseño de objetos). Una
Una vez
vez que
que
el modelo contiene solo
sólo asociaciones binarias, cada asociación
asociaciones binarias, asociación se
se realiza
realiza usando
usando atributos
atributos de
de referencia
referencia yy
colecciones de referencias.
Figura
Figura 7-26 Realización de
7-26 Realización de una asociación bidireccional calificada
asociación bidireccional calificada (diagrama
(diagrama de
de clase UML; la flecha
indica la transformación del modelo de diseño de objetos).
7.4.9 Incremento de la
Ia reutilización
La herencia permite que los desanolladores
desarrolladores reutilicen
reutilicen el código
código aa travds
través de varias
varias clases
similares. Por ejemplo, las
las JFC,
JFC, al
al igual
igual que
que la
la mayorIa
mayoría de
de los
los juegos
juegos de
de herramientas
herramientas dede interfaz
interfaz
de usuario, proporcionan cuatro tipos de botones:
IAbstractButtonI
AstractButton
/7\
JRadioButton JCheckBox
Figura 7-27
Figura 7-27 Un ejemplo de reutilización de codigo
código con herencia (diagrama
(diagrama de
de clase
clase UML).
UML).
Cliente ~- - >
-~ FábricaAbstracta
FábricaAbstracta
crearVentana()
crearVentana ()
crearBotón ()
crearBotón ()
~
I I
r
I- -
- FábricaMotif
FábricaMot if f- - - -
- --, r
r - FábricaMac f- ---,
-
I
crearVentana()
crearVentana ()
r -
-+ .J
crearVentana()
crearVentana ()
I crearBotón ()
crearBotón () I I crearBotón ()
crearBotón ()
I I I
-l
LJ.
L -1- _1_
I I I
L_4>
L
-+ VentanaAbstracta I I Botón.Abstracto
I I I
V
Vent anaMot if VentanaMac BotónMot if BotónNac
Figura
Figura 7-28
7-28 Patron diseño FábricaAbstracta (diagrama de clase UML, las dependencias representan
Patrón de diseflo representan
patron de diseño usa herencia para soportar diferentes
«llama»). Este patrón
relaciones <<llama>>). diferentes apariencias (por ejemplo,
ejemplo,
Motif y Macintosh). Si se aflade
añade una nueva especialización no es necesario cambiar al cliente.
por la clase
clase BotónMac y Ia
BotOnJYlac y BotónMotif. La interfaz
la clase BotánNotif. interfaz FábricaAbstracta proporciona
una operación
operación crearBotón
crearBotón() () para crear un
un botón.
botón. Una
Una fábrica
fábrica concreta
concreta implementa
implementa Iala interfaz
interfaz
FábricaAbstracta para para cada
cada opción.
opción. ElEl método
método FábricaMotif.
Fábricallotif . crearBotón
crearBotón ()() regresa Un un
BotónMotif, mientras que el método FábricaNac
BotónNotif, FábricaMac. . crearBotón
crearBotón () regresa Un
() regresa un BotónMac.
BotOnNac. Observe
que ambos métodos
métodos crearBotón
crearBotón () tienen la misma
() tienen misma interfaz
interfaz para
para ambas
ambas especializaciones.
especializaciones. EnEn
consecuencia, quien
consecuencia, quien llama solo
sólo accede a la interfaz
interfaz Fábrical-thstracta
FábricaAbstracta y y las clases abstractas y, y,
por tanto, está escudado
escudado ante
ante las
las implementaciones concretas. Además,
implementaciones concretas. Además, esto
esto permite
permite que
que enen el
futuro se implementen
implementen nuevas
nuevas fábricas
fábricas (por
(por ejemplo,
ejemplo, FébricaBeOS BotónBeOS) sin cambiar la
FábricaBeOS yy BotOnBeOS)
aplicación.
7.4.10
7.4.10 Eliminación
Eliminaciónde
delas
las dependencias
dependencias de
de implementación
En el modelado
modelado del
del sistema
sistema usamos
usamos relaciones
relaciones de generalización
generalización para clasificar
clasificar a los
objetos
objetos en jerarquIas
jerarquías de generalizacion/especificación.
generalización/especificación. EstoEsto nos
nos permite diferenciar el corn-
com-
portamiento comtmn
común deldelcaso
casogeneral
generalcon
conrespecto
respecto alal comportamiento
comportamiento queque es específico
especIfico de los
objetos especializados. En un lenguaje de programación
programación orientado
orientado aa objetos
objetos la
la generalizacion
generalización
se realiza mediante
mediante la herencia.
herencia. Esto
Esto nos permite
permite reutilizar
reutilizar los
los atributos
atributos y operaciones
operaciones de
clases de más alto nivel. Por un lado, Ia
la herencia, cuando se usa como mecanismo de generali-
www.elsolucionario.org
268 CapItulo 7 • Diseño
Capítulo Diseño de
de objetos
www.elsolucionario.org
Actividades
Actividades del
del diseño
diseño de
de objetos
objetos 269
Modelo de diseflo
diseño de objetos antes
antes de
de Ia
la transformaciOn
transformación Modelo de diseno
diseño de
de objetos
objetos después
después de
delalatransformaciOn
transformación
Hashtable Hashtable
put(key,element)
put (key, element) put(key,element)
put(key, element)
get(key):Object
get (key) :Object get(key):Object
get(key) :Object
containsKey(key):boolean
containsKey(key) : boolean containsKey
containsKey(key):boolean
(key): boolean
containsValue (element): boolean
containsValue(element):boolean containsValue
containsValue(element):boolean
(element) : boolean
A
T ... tabla 1
1
1
MiConjunto
MiConj unto MiConjunto
MiConj unto
insertar
insertar (elemento) insertar
insertar (elemento)
contiene
contiene(elemento):boolean
(elemento) :boolean contiene (elemento) :boolean
contiene(elemento):boolean
Implementacidn de MiConjunto
/* Implementación
/* MiConjunto usando /* Implementación dede MiConjunto
MiConjunto usando
usando
herencia */
*/ delegación */
delegación */
class MiConjunto extends
extends Hashtable
Hashtable { class
class MiConjunto {{
/* Se
/* Se omite
omite el
el constructor */
*/ Hashtable table;
table;
MiConjunto ()
MiConjunto() MiConjunto() {{
} tabla == Hashtable();
tabla Hashtable;
}
void insert
insert(Object
(Object rlement) { insertar(Object elemento)
void insertar(Object elemento) { {
(this.get(element) ==
if (this.get(element) == null){
null) { if (tabla.get(elemento)==null) {
if (tabla.get(elemento)==null)
this);
this.put(element, this); tabla.put(elemento,this)
tabla . put (elemento, this);;
} }
} }
boolean contains(Object element){
element) { boolean contiene
boolean contiene(Object
(Object elemento) {
return return
(this.get(element) !=null);
(this.get(element) !=null) (tabla.get(elemento) !=!= null);
}} }
Figura
Figura 7-29
7-29 UnUn
ejemplo dedeherencia
ejemplo herenciadedeimplementaciOn.
implementación.La
Lacolumna
columna izquierda
izquierda muestra
muestra una
una implemen-
implemen-
tación cuestionable de MiConj unto usando herencia de implementación. La columna derecha muestra una
MiConjunto
implementación mejorada usando
usando delegación (diagrama
(diagrama de
de clase UML
UML yy Java).
Java).
www.elsolucionario.org
270
270 CapItulo 7 • Diseño
Capítulo Diseño de
de objetos
objetos
optimización
Actividades de optimización
La traducción directa del
del modelo
modelo de
de análisis
análisis da
da como
como resultado
resultado un
un modelo
modelo que
quecon
confrecuen-
frecuen-
cia es ineficiente.
ineficiente. Durante
Durante el diseño
diseño de objetos optimizamos
optimizamos el modelo de objetos
modelo de objetos de acuerdo a
objetivos de diseño, como la minimización del tiempo de respuesta, tiempo de ejecución
ejecución oo recursos
de memoria. En esta sección describimos cuatro optimizaciones simples:
7.4.11 Revision
Revisión de las rutas de acceso
Una fuente comtmn
común del
deldesempeño
desempeñoineficiente
ineficientedel
del sistema
sistema es
es el
el recorrido repetido de asocia-
asocia-
ciones múltiples
ciones multiples cuando
cuando se
se tiene acceso a la
la información
información que
que se
se necesita.
necesita. Para
Para identificar
identificar las
las
rutas de
de acceso
acceso ineficientes
ineficientes los
los diseñadores
diseñadores dede objetos
objetos deben
deben hacerse
hacerse las
lassiguientes
siguientespreguntas
preguntas
[Rumbaugh
[Rumbaugh el etal.,
al., 1991]:
1991]:
• Para cadaoperación:
Para cada operación:j,Con
¿Concuánta
cuántafrecuencia
frecuencia se
se llama
llama aa la
la operación?
operación? tCuáles
¿Cuáles asociacio-
asociacio-
nes tiene que recorrer la operación para obtener
obtener la información
información que
que necesita'?
necesita? Las operaciones
frecuentes no deben requerir muchos recorridos, sino que deben
frecuentes deben tener
tener una
una conexión
conexión directa
directa
entre el objeto
entre objeto que consulta
consulta yy elel objeto
objeto consultado.
consultado. Si
Si falta
falta esa
esa conexión
conexión directa
directa deberá
deberá
añadirse
afladirse una asociación adicional entre esos dos objetos.
Para cada
• Para cada asociación:
asociación: SiSitiene
tiene una
una asociación
asociación de "muchos"
"muchos" en en uno
uno oo ambos
ambos lados,
lados,¿se,se
necesita
necesita la multiplicidad? ,Con cuánta frecuencia
multiplicidad? ¿Con frecuencia está involucrado
involucrado el el lado "muchos" de
una asociación en una büsqueda?
búsqueda? Si esto es frecuente el el diseflador
diseñador de objetos deberá tratar
de reducir
de reducir "muchos"
"muchos" aa "uno".
"uno". Si no no se
se puede,
puede, ,deberá
¿deberá ordenarse
ordenarse oo indexarse
indexarse elel lado
lado
mejorar el
"muchos" para mejorar el tiempo de de acceso?
acceso?
www.elsolucionario.org
Actividades del diseño de objetos 271
Para cada
• Para cadaatributo:
atributo:,Cuáles
¿Cuálesoperaciones
operacionesusan
usan el
el atributo? ,Son asignar
atributo? ¿Son asignar() () yy obtener ()
obtener ()
las únicas
iinicas operaciones que se realizan sobre ese atributo? Si es así,
asI, ¿en
,en realidad
realidad pertenece
pertenece
este atributo a este objeto oo debe
debe movérsele
movérsele aT objeto que
al objeto que lo
lo llama?
El examen sistemático
sIstemático del modelo de objetos usando las preguntas anteriores debe conducir a
un modelo con asociaciones redundantes seleccionadas, con menos asociaciones de muchos
a muchos ineficientes
ineficientes y menos
menos clases.
clases.
7.4.12
7.4.12 Descomposición
Descomposición de
de objetos:
objetos: conversion
conversión de objetos en
en atributos
atributos
Durante el análisis los desarrolladores identifican muchas clases
identifican muchas clases que
que están asociadas
asociadas con
conceptos de
conceptos de dominio.
dominio. Durante
Durante elel diseño
diseño del
del sistema
sistema yy el
el diseño
diseño de objetos
objetos se reestructura
reestructura y
optimiza el modelo de objetos, y a menudo deja a algunas de estas clases con sólo solo unos cuantos
atributos y poco comportamiento.
atributos Tales clases,
comportamiento. Tales clases, cuando
cuando sese asocian
asocian solo
sólo con otra clase,
clase, pueden
pueden
descomponerse hacia un atributo, reduciendo, por tanto, la complejidad general del modelo.
Considere, por ejemplo, un modelo
Considere, modelo de objetos
objetos que
que incluye
incluye Persona identificadas
identificadas por
por un
objeto SeguroSocial. PuedePuede ser
set que se hayan identificado dos clases durante el análisis. Cada
Persona está asociada con una clase SeguroSocial, la cual guarda una cadena de ID único ünico que
identifica a la Persona. El modelado adicional no revela
identifica revela ningOn comportamiento adicional
ningún comportamiento adicional del
ninguna otra clase tiene asociaciones con la
objeto SeguroSocial. Además, ninguna la clase
clase SeguroSocial.
Segurosocial.
este caso,
En este caso, Ta
la clase SeguroSocial
Segurosocial debe descomponerse en un atributo de la clase Persona (yea (vea
la figura 7-30).
Modelo de diseno
diseño de obietos
ob'~etos antes
an t es de
de la
1a transformación
t rans ormaClOn
SeguroSocial
SeguroSoc ial
Persona I
I I ID: String
ID:String
Persona
NSS:String
Figura
Figura 7-30
7-30 Representaciones alternas de un identificador dnico
único para una Persona (diagramas de clase
UML).
www.elsolucionario.org
272 CapItulo
Capítulo 7
7 • Diseño de objetos
7.4.13 Cacheo
7.4.13 Cacheo de
de resultados de cálculos costosos
costosos
7.4.14 Retraso
7.4.14 Retraso de cálculos costosos
www.elsolucionario.org