Está en la página 1de 43

7

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

urante el análisis describimos el propósito del sistema.


Durante sistema. Esto da como resultado la identifi-
identifi-
cación de los objetos de aplicación que representan a los conceptos de los los usuarios.
usuarios. Durante
Durante el el
diseflo del
diseño del sistema
sistema describimos
describimos elel sistema
sistema desde
desde el
el punto
punto de vista de su
su arquitectura,
arquitectura, como
como su su
descomposición en subsistemas, su flujo Ia administración de la persistencia.
flujo de control global y la
Durante el diseño del sistema también definimos la plataforma de hardware y software software sobre
sobre la
la
construiremos el
que construiremos el sistema.
sistema. Esto da como resultado la selección de componentes hechos que
proporcionan un nivel de abstracción más elevado que el hardware.
hardware. Durante el diseño
diseflo de
de objetos
objetos
cerramos el hueco entre los objetos de aplicación y los componentes hechos,
hechos, identificando
identificando obje-
obje-
tos de solución adicionales y refinando los objetos existentes.
El diseño de objetos incluye:

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

7.1 Introducción: ejemplos de películas


peilculas
Considere los siguientes ejemplos:

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

desarrolladores realizan objetos personalizados, en forma similar similar a Ia


la toma de escenas de pelIculas.
películas.
Son implementados fuera de secuencia por desarrolladores diferentes diferentes y cambian varias
varias veces antes
veces antes
de que lleguen a su forma final.
final. Con frecuencia,
frecuencia, el
el que llama a una operación
operación sólo
solo tiene una especi-
ficación informal sobre Ia la operación y hace suposiciones acerca acerca de
de los
los efectos
efectos laterales
laterales yy sus
sus casos
casos
de frontera. Esto da lugar a faltas de concordancia entre el que llama y el liamado, llamado, comportamiento
comportamiento
faltante o comportamiento
faltante comportamiento incorrecto.
incorrecto. Para resolver
resolver estos
estos problemas,
problemas, los los desarrolladores
desarrolladores cons-
cons-
truyen especificaciones precisas de las clases, atributos y operaciones en en forma
forma de
de restricciones.
restricciones.
similar, los desarrolladores
De manera similar, desarrolladores ajustan y reutilizan
reutilizan componentes
componentes hechos,
hechos, comentados
comentados con con
especificaciones de
especificaciones de interfaz.
interfaz. Por ültimo,
último, los desarrolladores reestructuran y optimizan el modelo
desarrolladores reestructuran modelo
del diseño dede objetos
objetos para
para tratar
tratar los
los objetivos
objetivos de
de diseño,
diseño, como
como Iala mantenibilidad,
mantenibilidad, extensibilidad,
extensibilidad,
eficiencia, tiempo de respuesta o entrega a tiempo.
En la sección 7.2, la siguiente sección, proporcionamos un
sección, proporcionamos un panorama del del diseño
diseño dede objetos.
objetos.
En Iala sección
sección 7.3
7.3 definimos
definimos los conceptos
conceptos principales
principales del diseiio
diseño de objetos,
objetos, como
como las las restric-
restric-
ciones que se usan para la especificación de interfaces. En la sección 7.4 describimos con mayor
detalle las actividades del diseño de objetos.
objetos. En la la sección
sección 7.5
7.5 tratamos
tratamos los
los problemas
problemas adminis-
adminis-
trativos
trativos relacionados
relacionados con el diseño de objetos.
objetos. NoNo describimos
describimos actividades
actividades como la la implemen-
implemen-
tación de algoritmos
algoritmos yy estructuras
estructuras dede datos
datos oo el
el uso
uso de
delenguajes
lenguajesde deprogramación
programaciónespecIficos.
específicos.
Primero, suponemos que el lectorlector ya
ya tiene
tiene experiencia
experiencia en en esas
esas areas.
áreas. Segundo,
Segundo, esas
esas actividades
actividades
llegan a ser menos esenciales conforme
liegan conforme se se dispone
dispone cada
cada vez
vez de
de más
más componentes
componentes hechos
hechos yy se se les
les
reutiliza.

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\. \ - - - -~- - --

/ Objetos personalizados \.. \


I \ dis~ño de objetos
Hueco de diseflo
~
I
I
I

/ 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

Reestructuración. Las actividades


• Reestructuración. actividades de reestructuración manipulan el modelo del sistema
reestructuración manipulan sistema para
para
incrementar Ta
incrementar la reutilización
reutilización del
del código
código oo satisfacer
satisfacer otros
otros objetivos
objetivos de
de diseño.
diseño. Cada actividad de
reestructuración
reestructuración puede verseverse como una transformación
transformación gráfica
grafica de
de subconjuntos
subconjuntos de de un
un modelo
particular. Las actividades
particular. actividades tIpicas
típicas incluyen
incluyen Ta la transformación de asociaciones
asociaciones n-arias n-arias
en asociaciones binarias, Ta implementación de
la implementación de asociaciones
asociaciones binarias
binarias como
como referencias,
referencias,
Tacombinación
la combinación de de dos
dos clases
clases similares de dos subsistemas
subsistemas diferentes
diferentes enen una
unasola solaclase,
clase,Tala
descomposición en en atributos
atributos de
de clases
clases que
que no
notienen
tienencomportamiento
comportamientosignificativo,
significativo,Ta la division
división
de clases complejas
complejas en otras más simples, el reacomodo de clases y operaciones operaciones para incre-
mentar Tala herencia
herencia yy el empacado. Durante la reestructuración
el empacado. reestructuración tratamos
tratamos objetivos
objetivos de de diseño,
diseño,
como el mantenimiento, la legibilidad y la comprensibilidad del modelo del sistema.
Optimización. Las
• Optimización. Las actividades
actividades de de optimización
optimización tratan
tratan los requerimientos
requerimientos de desempeflo
desempeño
del modelo
modelo deldel sistema.
sistema. Esto
Esto incluye
incluye el cambio
cambio de de algoritmos
algoritmos para que respondan
respondan a los los
requerimientos de velocidad
velocidad o memoria,
memoria, la Ia reducción
reducción de de multiplicidades
multiplicidades en en asociaciones
asociaciones para para
agilizar las consultas, Tala adición
adicióndedeasociaciones
asociacionesredundantes
redundantes para
para eficiencia,
eficiencia, elel reacomodo
reacomodo del del
orden de ejecución, la adición de atributos derivados para mejorar el tiempo de acceso aa objetos objetos
y Ta apertura de
la apertura de Ta arquitectura;esto
la arquitectura; eso es, Ta adiciOnde
la adición de acceso
acceso aa capas
capas inferiores debido a
inferiores debido
requerimientos de desempeño.

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.

La visibilidad se indica en UML poniendo como prefijo el sImbolo:


símbolo: -- (privado),
(privado), # (protegido)
(protegido) o
+ (püblico)
(público) al nombre del atributo u operación. figura 7-3
operación. Por ejemplo, en la figura 7-3 especificamos
especificamos que
que el
el
nurnElementos de TablaHash
atributo numElementos TablaHash eses privado, mientras que todas las operaciones son públicas.
püblicas.

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

Por ejemplo, considere la la interfaz


interfaz Java para una
una TablaHash que se muestra en la figura 7-3.
Esta clase proporciona
proporciona un método
método poner
poner ()() para crear una
una entrada
entrada en la la tabla
tabla asociando
asociando una
una
dave
clave con
con un
un valor,
valor, un
un método
método obtener
obtener() () para buscar un valor
buscar un valor dando una dave,
dando una clave, un
un método
método
eliminar()
eliminar () para destruir una entrada de la TablaHash y un método claveHash claveHash() () que regresa
un valor booleano
hooleano que indica si existe o no una entrada.
ejemplo de
Un ejemplo de un
un invariante
invariante para la clase TablaHash es que Ia la cantidad de entradas en Tabla-
Hash siempre es no negativa. ejemplo, si el método eliminar
negativa. Por ejemplo, eliminar () () da como resultado un valor
numElementos, la implementación de TablaHash es incorrecta. Un
negativo de nuniElementos, Un ejemplo
ejemplo dedeuna
unapre-
pre-
condición para el método
método eliminar
eliminar () es que una entrada debe
() es debe estar
estar asociada
asociada con
con la
la clave
dave que
que se
se
parámetro. Un ejemplo de una poscondición para el método eliminar
pasa como parametro. eliminar () () es que la entrada
eliminada
eliminada ya no debe existir en la TablaHash despuésdespués de regrese el método eliminar (0.
de que regrese ). La
La
figura 7-4 muestra la clase TablaHash comentada con invariantes,
invariantes, precondiciones y poscondiciones.

/* 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 operación poner asume que is


/* La
/* clave especificada no se ha usado.
la cisve usado.
* Después
* de que
Después de que termina is operación
termina la operación poner se puede
poner se puede usar la clave
ussr la dave
especificada
especi fi cads
* para
* para recuperar is entrada con
la entrada con is operación obtener(ciave):
la operación obtener (clave) :
* @pre
* tcontieneC1ave(c1ave)
pre !contieneCiave(ciave)
* @post contieneCisve(ciave)
* contieneClave(clave)
* @post
* obtener(c1ave) ==
post obtener(ciave) entrada */
== entrads */
public void poner (Object clave,
poner (Object Object entrada)
dave, Object entrada) {oo.};
{...};

/* 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).

La sintaxis del OCL es similar a la de los lenguajes orientados


orientados aa objetos
objetos como
como C++C++ oo Java.
Java.
En el caso de
de un
un invariante,
invariante, el
el contexto
contexto para
para la
la expresión
expresión es
es lalaclase
claseasociada
asociadaconconelelinvariante.
invariante.
La palabra
palabra dave
clave self (por ejemplo,
ejemplo, self .numElementos en
self.nurnElementos en la figura
figura 7-5)
7-5) indica
indica cualquier
cualquier
instancia de la clase. SeSe tiene
tiene acceso
acceso aa los
los atributos
atributos yy operaciones
operaciones usando
usando lala notación
notación de de punto
punto
(por ejemplo, self.
self . atributo
atributo O 0 self
self.. operación
operaciOn (parámetros)). palabra clave
(parémetros)). La palabra dave self puede
se presenta
omitirse si no se presenta ambigUedad.
ambigüedad. (Observe que OeL OCL usa la palabra dave clave self para repre-
sentar el
el mismo
mismo concepto
concepto queque la
la palabra
palabra clave
dave this en Java y C++.) Para una precondiciOn
precondición o una
poscondición, los
poscondición, los parametros
parámetrosquequesesepasan
pasanaalalaoperaciOn
operación asociada
asociadapueden
puedenusarse
usarseenenlalaexpresiOn
expresión

www.elsolucionario.org
Actividades
Actividades del
del diseño
diseño de
de objetos 241

OCL. Para las poscondiciones el sufijo


GCL. sufijo @pre indica el valor de un parámetro 0o Ufl un atributo antes
de la ejecución de la la operación.
operación. Por
Por ejemplo,
ejemplo, una poscondición
poscondición de la operación poner poner (clave
(dave,I

entrada), que expresa que la cantidadcantidad de entradas


entradas en lala tabla
tabla se
se incrementa
incrementa enen uno,
uno, pUede
puede
representarse como
como numElementos numElementos@pre ++ 1.
nunE1ementos == nurriElementos@pre lo
Al añadir expresiones
expresiones GCLOCL a los diagramas
diagramas puede
puede presentarse
presentarse un un amontonamiento.
amontonamiento. Por Por
esta razón existe
existe la alternativa
alternativa de manifestar en forma textual las expresiones OCL. GCL. La palabra
dave context
clave context introduce
introduce un nuevo
nuevo contexto para una expresión OCL. La palabra que está a con-
expresión GCL.
tinuación de la palabra daveclave context
context se se refiere
refiere a una
una clase,
clase, un
un atributo
atributo o una
una operación.
operación. Luego
sigue alguna de las palabras dave mv, pre y
sigue alguna de las palabras clave inv, pre y post, que corresponden a los estereotipos UML
estereotipos UML
«invariante», «precondición» y «poscondición», respectivamente.
<<invariante>>, <<precondición>> y <<poscondición>>, Luego sigue la
respectivamente. Luego
expresión OCL
GCL en si. sí. Por ejemplo,
ejemplo, el
el invariante
invariante para la clase TablaHash
TablaHash y y las restricciones para
la operación TablaHash.
TablaHash . poner () se escriben de la siguiente manera:
poner () manera:

context Hashtable mv:


inv:
numElementos >=
numElementos >= 0O

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)

Las actividades de selección de componentes incluyen:

• Identificación y ajuste de bibliotecas de clase (sección 7.4.5)


• Identificación y ajuste de marcos de aplicación (sección 7.4.6)
• Un ejemplo
ejemplo dede marco:
marco: WebObjects (sección 7.4.7)
WebObjects (sección

Las actividades de reestructuración


reestructuración incluyen:
incluyen:

• Realización de asociaciones (sección 7.4.8)


• Incremento de la reutilización (sección 7.4.9)
• Eliminación de dependencias de implementación (sección 7.4.10)

www.elsolucionario.org
242
242 CapItulo
Capítulo 77 • Diseño
Diseño de
de objetos
objetos

Las actividades de optimización incluyen:

• 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

Figura 7-6 Mapa con fronteras poilticas


políticas yy fuentes
fuentes de
de emisión
emisión(maqueta
(maquetade
deJEWEL).
JEWEL).

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

CapaCantino CapaAgua CapaPolitica

Autopista CaininoSecundario Estado Municipio


*

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.

2. El usuario final selecciona un punto del mapa usando el ratón y haciendo


haciendo clic
dic con
con
el botón izquierdo o derecho del ratón. El punto
punto seleccionado
seleccionado por
por el
el usuario
usuario se
se
convertirá en el nuevo centro del mapa.
mapa.

3. El usuario final hace dic


clic con el botón izquierdo del ratón para solicitar
solicitar un
un
incremento en el nivel de detalle (es decir, acercamiento) o con el botón derecho
del ratón para solicitar un decremento del nivel
nivel de detalle (es decir, alejamiento).
alej amiento).

4. El sistema calcula el nuevo cuadro lirnitante puntos yy


limitante y recupera del GIS los puntos
ilneas
líneas correspondientes para cada capa visible.
visible.

5. Luego el sistema despliega cada capa usando un color predefinido en el nuevo


cuadro limitante.
Condición final El mapa se desplaza y escala a la posición y nivel
nivel de detalle solicitados.

Figura 7-8
Figura Caso de uso AcercamientoMapa de JEWEL.

subsistema Visualización especifica


subsistema Visualización especificaelelfive!
nivelde
dedetalle
detalleyyelelcuadro
cuadrolimitante
limitante del
del mapa,
mapa, yy el
el GIS
GIS
realiza el acercamiento y recorte
recorte yy regresa
regresa sOlo
sólo los puntos que necesitan trazarse. Esto minimiza
minimiza lala
cantidad de datos que hay que transferir entre subsistemas. Aunque el modelo de diseño
diseflo del
del sistema
sistema
está cercano a la máquina, todavIa
todavía tenemos que describir con detalle
detalle la
la interfaz
interfaz del GIS.
GIS.
Las actividades de especificación durante el diseño de objetos incluyen:

• Identificación de atributos y operaciones faltantes (sección 7.4.1)


• Especificación del tipo de firmas
firmas y visibilidad (sección 7.4.2)
• Especificación de restricciones (sección 7.4.3)
• Especificación de excepciones (sección 7.4.4)

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

ModeladoEmisión El subsistema ModeladoEmisión es responsable del ajuste de simulaciones


simulaciones yy
la administración
administración de
de sus
sus resultados.
resultados.
GIS mantiene información
El GIS mantiene información geografica
geográfica para
para Visualización para el
visualización y para
ModeladoEmi
Mode ladoEmi sS ión.
ion.

Simulación SimulaciOn es responsable de la simulación de emisiones.


El subsistema Simulación
Almacenamiento
Almacenainiento Almacenamiento es responsable de todos los datos persistentes
El subsistema Almacenamiento
incluyendo los
en el sistema, incluyendo los datos
datos geograficos
geográficos yy de
de emisión.
emisión.
Visualización
visualización El subsistema es responsable
subsistema Visualización es responsable del
del desplegado
desplegado de datos
datos
geográficos y de emisiones ante
ante el
el usuario.
usuario.

Figura 7-10
Figura Descomposición de subsistemas
subsistemas de
de JEWEL
JEWEL (diagrama de clase UML).
UML).

7.4.1 Identificación de atributos y operaciones faltantes


Durante este paso examinamos la descripción de servicios
servicios del subsistema
subsistema ee identificamos
identificamos
atributos y operaciones faltantes. Durante el análisis podemos haber
atributos haber olvidado
olvidado muchos
muchos atributos
atributos
debido a que nos enfocamos en la funcionalidad del sistema.
sistema. Además describimos la la funcionali-
funcionali-
dad del
dad del sistema principalmente
principalmente con
con el
el modelo
modelo dede caso
caso de
de uso
uso (y
(y no
no con
con el modelo
modelo dede objetos).
objetos).
Cuando construimos
Cuando construimos elel modelo
modelo dede objetos
objetos nos
nos enfocamos
enfocamos en el modelo
modelo dede aplicación
aplicación y,
y, por
por
tanto, ignoramos detalles
detalles relacionados con el sistema que son
relacionados con son independientes
independientes del dominio
dominio dede
aplicación.
En el ejemplo
En ejemplo JEWEL,
JEWEL, laIacreación,
creación,borrado
borradoyy organización
organizaciónde de capas
capas yy de
de elementos
elementos de
capas ya está soportado
soportado por
por la
la clase
clase Capa.
Capa. Sin embargo, necesitamos identificar las operaciones

www.elsolucionario.org
246
246 CapItulo
Capítulo 77 • Diseño de
de objetos

para realizar los servicios de recorte y acercamiento. El recorte no no es


es unun concepto
concepto que
que esté
esté rela-
rela-
cionado con el dominio de aplicación
cionado con aplicación sino que está
está relacionado
relacionado con la interfaz
interfaz de
de usuario
usuario del
del
sistema y, por tanto, es parte del dominio de solución.
Trazamos un diagrama de secuencia que representa el flujo de control y datos necesario para
ealizar la operación
-realizar operación de
de acercamiento
acercamiento (figura
(figura 7-1 1). Nos enfocamos en especial
7-11). especial en
en la
la clase
clase Capa.
Capa.
Cuar.do
Cuando trazamos el diagrama de secuencia nos nos damos
damos cuenta que
que una
una Capa necesita tener acceso a
todos los elementos contenidos para recopilar su geometria
geometría para el recorte y acercamiento. Obser- Obser-
vamos que el recorte puede realizarse
vamos que en forma
realizarse en independiente del
forma independiente del tipo
tipo de
de elemento
elemento que que se
se está
está
desplegando; segmentos de
desplegando; esto es, el recorte de segmentos de línea
lInea que
que están
están asociados
asociados concon un
un camino
camino o0 un río
Ufl rio
puede hacerse usando la la misma
misma operación.
operación. En
En consecuencia,
consecuencia, identificamos
identificamos unauna nueva
nueva clase,
clase, lala
clase abstracta ElementoCapa (yea(vea la figura 7-12), la cual proporciona operaciones para todos los
elementos
elementos queque son
son parte
parte de una
una Capa (es decir,
decir, Autopista, CaminoSecundarlo,
CaminoSecundario, Rio, Río, Lago,
Lago,
Estado yy Municipio).
Estado

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).

Visualizacián traduce luego las coordenadas


Visualización coordenadas de GIS
GIS a coordenadas
coordenadas de
de pantalla,
pantalla, ajustando
ajustando Ia
la
escala y el desplazamiento, yy traza
traza los
los segmentos
segmentos dede lInea
línea en
en Ta pantalla.
la pantalla.
Durante una
Durante una revisión
revision del
del modelo
modelo de de objetos
objetos nos
nos damos
damos cuenta que el algoritmo
algoritmo de acer-
acer-
camiento de
camiento de la operación
operación ElementoCapa.
ElementoCapa. obtenerContorno
obtenerContorno() () no es trivial:
trivial: no
no es
es suficiente
suficiente
seleccionar un subconjunto de puntos del
seleccionar del ElementoCapa y escalar sus coordenadas. Debido a
que diferentes
diferentes ElementoCapa puedenpueden compartir
compartir puntos
puntos (por(por ejemplo,
ejemplo, dos dos caminos
caminos queque se
conectan,
conectan, dos municipios
municipios vecinos)
vecinos) es necesario seleccionar el mismo conjunto de puntos puntos para
para
mantener una imagen visual consistente para el usuariousuario final.
final.
figura 7-13
Por ejemplo, la figura 7-13 muestra ejemplos
ejemplos dede un
un algoritmo sencillo para Ia la selección de
puntos aplicado a caminos que se conectan y municipios vecinos. La columna izquierda muestra muestra
los puntos que se seleccionan para un nivel de detalle alto. alto. La columna derecha muestra los pun-
tos que se seleccionan
seleccionan para un nivel de detalle bajo. bajo. En este caso,
caso, el
el algoritmo
algoritmo selecciona
selecciona en
forma arbitraria puntos
puntos alternados
alternados sin
sin tomar
tomar enen cuenta
cuenta sisilos
los puntos
puntos sese comparten
comparten oo no.
no. Esto
Esto da
da
lugar a elementos que no están conectados cuando se despliegan en niveles de detalle bajos.
Para resolver este problema decidimos
decidimos incluir
incluir más
más inteligencia
inteligencia enen las
las clases
clases PoliLInea,
PoliLínea,
Polígono
PolIgono y y Punto 7-14). Primero,
Punto (figura 7-14). Primero, decidimos
decidimos representar los puntos compartidos exacta-
mente por un objeto
mente objeto Punto; esto es, si si dos
dos lIneas
líneas comparten
comparten un un punto,
punto, ambos
ambos objetos
objetos Línea
Linea
tienen una referencia al mismo objeto Punto. Esto es manejado por el constructor Punto Punto(x,(x, y),

www.elsolucionario.org
248 CapItulo
Capítulo 7 • Diseño de objetos
objetos

Detalle alto Detalle


Detalle bajo
bajo
(l)

'"
(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.

7.4.2 Especificacion de tipo,


Especificación tipo, firmas
firmas y visibilidad
Durante este paso especificamos los tipos de los atributos, las firmas
firmas de las operaciones
operaciones yy
la visibilidad de atributos y operaciones. La especificación
especificación de
de los
los tipos
tipos refina
refina el
el modelo
modelo de
de di-
di-
seño de objetos de dos maneras. Primero, añadimos detalle al modelo especificando el rango de
cada atributo.
atributo. Por ejemplo, mediante la determinación
ejemplo, mediante del tipo de coordenadas tomamos
determinación del deci-
tomamos deci-
siones acerca
siones acerca de la posición del punto de origen
origen (Punto 0, 0)O) yYlos
los valores
valores máximo
máximo yy mInimo
mínimo
para todas las
las coordenadas.
coordenadas. Mediante la selección
selección de un
un factor
factor de
de punto
punto flotante
flotante yy doble
doble pre-
pre-

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).

cisión para los niveles


niveles detailados,
detallados, calculamos coordenadas
coordenadas en en diferentes
diferentes niveles
niveles dede detalle tan
solo
sólo multiplicando ci el nivel
nivel de detaile
detalle por
por las
las coordenadas.
coordenadas. Segundo,
Segundo, establecemos
establecemos lalacorrespon-
correspon-
dencia entre clases y atributos del modelo de objetos objetos para
para los
los tipos
tipos integrados
integrados proporcionados
proporcionados
por el ambiente de desarrollo. Por ejemplo, mediante la selección de String para representar el
atributo etiqueta de Capa ElementoCapa podemos
Capa y ElementoCapa podemos usar todas las operaciones proporciona-
string para manipular valores de etiqueta.
das por la clase String
Durante este paso
paso también
también consideramos
consideramos la la relaciOn
relación entre las ciases
clases que identificamos yy las
que identificamos las
clases
clases de los componentes hechos.hechos. Por ejemplo,
ejemplo, varias clases que implementan
varias clases colecciones se
implementan colecciones se
proporcionan
proporcionan en ci el paquete
paquete java. util. La interfaz
java. util. proporciona una
interfaz Enumeration proporciona una forma para
tener acceso a una
una colecciOn
colección ordenada de objetos. La interfaz Set proporciona una abstracción de
conjuntos matemáticos impiementada
implementada por varias clases, conlo como HashSet. Seleccionamos la interfaz
Enumeration para el regreso de contornoscontornos y la la interfaz
interfaz Set del paquete java util para la
java.. util
representación
representacion de los atributos
atributos enNivelesDetalle
enNivelesDetalle y
y noEnNivelesDetalle.
noEnNivelesDetalle.
Por ültimo,
último, durante este paso determinamos
determinamos la visibilidad de cada atributo y operación.
Al hacerlo determinamos
determinamos cuálescuáles atributos
atributos son
son manejados
manejados por por completo
completo por por una
una clase,
clase, cuáles
cuáles
deben ser accesibles solosólo mediante
mediante laslas operaciones
operaciones de de la
la clase
clase yy cuáles
cuáles atributos
atributos son
son püblicos
públicos
y pueden ser modificados por cualquier otra clase. En forma similar, la visibilidad de las ope- ope-
raciones nos permite distinguir entre las las operaciones
operaciones que que son
son parte
parte dede la
la interfaz
interfaz de
de Ia
la clase
clase yy
aquellas que son métodos
métodos de utilerfa los que sólo
utilería a los solo puede tener accesoacceso la clase.
clase. En el caso de
clases abstractas y clases que se se pretende
pretende que
que sese refinen,
refinen, también
también definimos
definimos atributos
atributos yy métodos
métodos
protegidos para uso ilnico
protegidos único de las subclases.
subclases. La La figura
figura 7-15
7-15 muestra
muestra la la especificación
especificación refinada
refinada
de las clases Capa,
Capa, ElementoCapa, PoliLinea y Punto
ElementoCapa, PoliLínea después de
Punto después de que
que se han asignado los
tipos, firmas
firmas y visibilidad.
Una vez que hemos especificado
especificado el el tipo
tipo de cada atributo,
atributo, la firma
firma dede cada operación y su
visibilidad, nos enfocamos
visibilidad, nos enfocamos en la especificación
especificación del del comportamiento
comportamiento yy los los casos
casos de frontera de
cada clase usando contratos.

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) *

Figura 7-15 Adición de información


información de
de tipo
tipo a!
al modelo de objetos de GIS (diagrama
(diagrama de
de clase
claseUML).
UML).SOlo
Sólo
unas clases seleccionadas por brevedad.
se muestran unas

7.4.3 Especificación de restricciones


Durante este
Durante este paso
paso añadimos
añadimos restricciones
restricciones aa las
las clases
clases y operaciones especificar con
operaciones para especificar con
precision su comportamiento y casos de frontera. Nuestro objetivo principal es eliminar
mayor precisión eliminar la la
mayor cantidad
mayor cantidad dede ambiguedad posible del
ambigüedad posible del modelo.
modelo. Especificamos contratos de
Especificamos contratos de clase
clase usando
usando
tres tipos
tres tipos de restricciones.
restricciones. Los invariantes representan condiciones
invariantes representan condiciones de de los
los atributos
atributos de una clase
que siempre son ciertas. Las precondiciones representan condiciones
condiciones queque deben ser satisfechas
general, por quien llama) antes
(por lo general, antes de
de llamar
liamar aa una operación
operación dada.
dada. Las
Las poscondiciones
poscondiciones repre-
repre-
sentan condiciones
sentan condiciones queque están
están garantizadas
garantizadas por
por quien
quien fue
fue llamado
ilamado después
después dede que
que termina
termina la la
operación. Como
operación. Como se se describió
describió en
en las secciones 7.3.3
7.3.3 y 7.3.4, podemos usar OCL OeL [0MG,
[OMG, 1998]
1998]
para afladir restricciones a los modelos UML.
añadir restricciones
En el ejemplo JEWEL,
JEWEL, elelcomportamiento
comportamientomás máscomplejo
complejoestáestáawciado
aociado con
con el
el recorte
recorte yy acer-
acer-
camiento; en particular las operaciones obtenerContorno
obtenerConto:rno() () de las clases Capa
Capa y ElementoCapa.
ElementoCapa.
A continuación
continuación desarrollamos restricciones para
desarrollamos restricciones para aclarar
aclarar las operaciones obtenerContorno (0,
operaciones obtenerConto:rno ),
enfocándonos en
enfocándonos en el comportamiento asociado con
comportamiento asociado con los
los puntos
puntos compartidos.
compartidos. DeDe manera
manera más más con-
con-
creta, estamos interesados en especificar las siguientes restricciones.

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

3. A lo mucho, unun Punto en el sistema representa una coordenada (x,y) dada.


4. Un
Un nivel de detalle no
nivel de no puede
puede ser
ser paste
parte de
de loslos conjuntos
conjuntos enNivelesDetalle
enNivelesfletalle y
noEnNivelesDetalle al mismo tiempo.
noEnNivelesfletalle
5. Para un nivel de detalle
detalie dado, ElementoCapa
ElementoCapa. . obtenerContorno
obtenerContorno () () solo
sólo puede regresar
Punt' que contengan el five!
Puntr) nivel detalle en su atributo de conjunto enNivelesfetalle.
enNivelesDetalle.
6. Los conjuntos
conjuntos enNivelesfetalle
enNivelesDetalle yy noEnNivelesfletalie
nOEnNivelesDetalle sólo solo pueden
pueden crecer a conse-
conse-
obtenerContorno 0.
cuencia de ElementoCapa. obtenerContorno ( ) .En
Enotras
otraspalabras,
palabras, una
una vez
vez que
que un
un nivel
nivel
de detalle está en alguno de esos conjuntos no puede ser eliminado.

Primero nos enfocamos en en el


el recorte.
recorte. Tomando ElementoCapa dado, Ia
Tomando un ElernentoCapa la enumeración de los
puntos regresados
puntos por la operación
regresados por operación obtenerContorno debe estar
(cuadroLim, detalle) debe
obtenerContorno (cuadroLim,
especificado. Además,
dentro del rectángulo cuadroLim especificado. Además, cualquier punto regresado por obte-
obte-
nerContorno()
nerContorno debe estar
() debe asociado con ElementoCapa. Representamos
estar asociado esto usando
Representamos esto usando una
poscondición sobre la operación
operación obtenerContorno
obtenerContorno () Observe que,
() de ElementoCapa. Observe que, debido
debido a
que actualmente nos enfocamos en el recorte, ignoramos
ignoramos el
el parametro
parámetro detalle.

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))

El campo resultado representa el resultado de la operación obtenerContorno (0.). La


operación obtenerContorno Laconstrue-
construc-
ción forAll de OCL aplica la restricción
restncción a todos los puntos de resul tado. Por último,
resultado. ültimo, la restricción
expresa que todos los puntos de resultado deben estar contenidos
contenidos enen un
un rectángulo
rectángulo cuadroLim
pasado como parámetro y deben estar incluidos
incluidos en la
la asociación
asociación de agregación puntos de la
de agregación
figura 7-15.
Luego definimos la operación obtenerContorno
obtenerContorno () () sobre una Capa como la concatenación
de las enumeraciones
enumeraciones regresadas
regresadas por la operación
operación obtenerContorno
obtenerContorno() () de ElementoCapa. En
OCL usamos la construcción terate sobre colecciones para avanzar por cada ElementoCapa
construcción iiterate ElementoCapa yy
recopilar su contorno en una sola
sola enumeraciOn.
enumeración. La construcción including añade sus parámetros
La construcción
colección. OCL aplana de manera automática la colección resultante.
a la colección. resultante.

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)))

Luego nos enfocamos en las restricciones relacionadas con el acercamiento.


acercamiento. Recuerde
Recuerde que
que aña-
aña-
dimos atributos
atributos y operaciones
operaciones a Ia clase Punto para representar
la clase representar puntos compartidos.
compartidos. Primero
especificamos la unicidad de Punto con un invariante
invariante aplicado a todas las instancias de Punto:

/* 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.

7.4.4 Especificación de excepciones


Durante este paso especificamos restricciones
Durante restricciones que necesita satisfacer quien llamallama antes
antes de
de
llamar
liamar una operación. En otras palabras, especificamos
especificamos condiciones
condiciones que
que las
las operaciones detectan y
operaciones detectan
tratan como errores elevando una excepción.
excepción. Los lenguajes como Java y Ada tienen mecanismos mecanismos
integrados
integrados para el manejo de excepciones. Otros lenguajes como el C y las las primeras
primeras versiones
versiones dede
C++ no soportan
C++ soportan elel manejo
manejo explIcito
explícito de
de excepciones,
excepciones, yy por
por eso
esolos
losdesarrolladores
desarrolladores necesitan
necesitan
establecer convenciones
establecer convenciones yy mecanismos
mecanismos parapara el manejo de excepciones
excepciones (por ejemplo,
ejemplo, valores
valores dede
retorno o un subsistema especializado).
retomo excepcionales se asocian,
especializado). Las condiciones excepcionales asocian, por lo general,
con la violación de precondiciones.
precondiciones. En UML añadimos
añadimos precondiciones OCL a las las operaciones
operaciones yy
asociamos la precondición con unauna dependencia
dependencia hacia
hacia un
un objeto
objeto de
de excepción.
excepción.
En el ejemplo
ejemplo JEWEL
JEWEL (figura
(figura 7-16)
7-16) especificamos
especificamos que
que el parámetro cuadroLim de la la ope-
ope-
ración Capa. obtenerContorno
obtenerContorno () debe tener
() debe tener anchura
anchura y altura positivas,
positivas, yy que el el parámetro
parámetro
detalle debe ser
detalle ser positivo.
positivo. Asociamos
Asociamos laslas excepciones
excepciones CuadroLimitanteCero
CuadroLimi tanteCero y DetalleCero
con cada condició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.

Las excepciones pueden encontrarse de manera sistemática examinando cada parámetro de la


operación y examinando los estados enen los
los que
que puede
puede ser
ser invocada
invocada la
la operación.
operación. Para
Para cada
cada parámetro
parámetro
parámetros identificamos
y conjunto de parámetrós identificamos valores o combinaciones de de valores
valores que no
no deben
deben aceptarse.
aceptarse.
Por ejemplo,
ejemplo, para el nivel
nivel de
de detalle
detalle rechazamos
rechazamos valores
valores que no
no sean
sean positivos
positivos debido a que
que elel
parámelro de detalle
parámetro de representa un
detalle representa un factor
factor de
de multiplicación. Un valor
multiplicación. Un valor cero
cero para
para el
el parámetro
parámetro dede
www.elsolucionario.org
Actividades del diseño de objetos 253

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

7.4.5 Identificación yy ajuste


ajuste de
de bibliotecas
bibliotecas de
de clase
clase
Supongamos que
Supongamos que seleccionamos
seleccionamos las las clases
clases fundamentales
fundamentales Java Java (JFC,
(JFC, por
por sus
sus siglas en en
ingles)
inglés) [JFC, 19991como
[JFC, 1999] comocomponente
componentehecho hechopara
paralaTa realización
realización deldel subsistemavisualizacion.
subsistema Visualización.
Necesitamos desplegar
desplegar el
el mapa
mapa como
comouna unaserie
seriededepolilmneas
polilíneas yy polígonos
polIgonos regresados por por lala ope-
ope-
ración Capa. obtenerContorno
ración Capa. obtenerContorno ( ). Esto, Esto, por To
. general, no
lo general, no es
es directo,
directo, ya
ya que tenemos que re- re-
conciliar Ta funcionalidad proporcionada
la funcionalidad proporcionada por GIS y las JFC para
por el GIS para realizar
realizar los
los servicios
servicios de de
Visualización. Por
Visualización. ejemplo,
Por ejemplo, esto
estopuede
puedeintroducir
introducirTala necesidad
necesidad de de objetos personalizados
personalizados cuya cuya
ünica
única función es convertir datos de un subsistema hacia otro.
desplegado de gráficos,
Para el desplegado las JFC proporcionan varios componentes reutilizables para
gráficos, las
la composición de una interfaz
interfaz de usuario.
usuario. Las
Las JFC
JFC acomodan
acomodan los los componentes
componentes en en una
una jerarquIa
jerarquía
contenedora que restringe elel orden
orden enen el
el que
que éstos
éstossesedibujan.
dibujan.Las
LasJFCJFCtrazan
trazanaTal ültimo
último elel compo-
compo-
nente que está más cercano a la parte inferior de la jerarquIa
jerarquía (por lo general, componentes
componentes atómi- atómi-
cos) para que aparezcan
aparezcan por encima
encima de de todos
todos los
los demás
demás componentes.
componentes. Un Un JFrame,
JFrame, también
también cono-
cono-
cido como
como ventana
ventana principal,
principal, define
define un
un area
áreaque
quees
espropiedad
propiedadexciusiva
exclusivade
deTala aplicación. Un
Un JFrame
JFrame
a menudo se compone de varios varios JPanel,
JPanel, donde
donde cada
cada uno
uno es
es responsable
responsable de
de lala capa
capa de
de varios
varios corn-
com-
ponentes atómicos. Un
ponentes atómicos. Un JScrollPane
JScrollPane proporciona
proporciona unauna vista
vista desplazable
desplazable de de un
un componente.
componente.
Permite que un usuario yea vea un subconjunto de un componente que es demasiado grande para
desplegarlo por completo.
Para el subsistema
Para el subsistemaVisualización
Visualización de de JEWEL (vea
(yea la
Tafigura
figura7-17)
7-17) seleccionamos
seleccionamos un un JFrame
JFraine
como contenedor de nivel
nivel superior,
superior,un
unJToolbar
JToolbar yy dos
dos cmutton
JButtonpara
paraagrandamiento
agrandamientoyy achicamiento
achicamiento
y Un JScrollPane para
un JScrollPane paraeleldesplazamiento
desplazamientodel delmapa.
mapa.Realizamos
Realizamoselelmapa
mapapropiamente
propiamenteconconTala clase
clase
AreaNapa, la cual refina a JPanel y sobrepone Ta operación paintContents 0. La nueva
ÁreaMapa, la cual refina a JPanel sobrepone la operación paintContents ( ) . La nueva operación operación

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.

II del paquete java.awt


II java.awt
class Graphics
/l ...
II.
void drawPolyline(int[]
drawPolyline(int[] xPoints,
xPoints, int[]
int[} yPoints,
yPoints, int nPoints)
mt nPoints) {oo.};
{...};

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.

• Los marcos de de infraestructura


infraestructuraayudan
ayudana simplificar
a simplificarelelproceso
procesodededesarrollo
desarrollode
desoftware.
software.
esto incluyen
Ejemplos de esto incluyen marcos
marcos para
parasistemas
sistemas operativos
operativos [Campbell-Islam,
[Campbell-Islarn, 1993],
1993], depura-
depura-
dores
dores [Bruegge el al., 1993],
etal., 1993], tareas
tareas de comunicación [Schmidt, 1997] y diseño de interfaces de
usuario
usuario [Weinand
[Weinand el et al., 1988].
1988]. Los marcos
marcos dede infraestructura
infraestructura de sistema
sistema se usan
usan en
en forma
forma
software y, por lo general, no se entregan al cliente.
interna dentro de un proceso de software
• Los
Los marcos middleware
middlewareseseusan
usanpara
paraintegrar
integraraplicaciones
aplicaciones yy componentes
componentes distribuidos
distribuidos
existentes. Ejemplos comunes
existentes. Ejemplos comunes incluyen
incluyen las
las MFC
MFC y DCOM de Microsoft,
Microsoft, RMI
RMI de
de Java,
Java,
WebObjects [Wilson
WebObjects [Wilson yy Ostrem,
Ostrem, 1999],
1999], las
las implementaciones
implementaciones de de CORBA
CORBA [OMG,
[0MG, 1995] y
bases de datos transaccionales.
• Los marcos de aplicación
aplicaciónempresariales
empresarialesson sonespecfficos
específicosde
de la
la aplicación,
aplicación, y se enfocan en
dominios como
dominios como las telecomunicaciones,
telecomunicaciones, lala aviónica,
aviónica, el
el modelado
modelado ambiental [Bruegge y
ambiental [Bruegge
1994], las manufacturas, Ia
Riedel, 1994], la ingenierfa
ingeniería financiera
financiera [Birrer,
[Birrer, 1993]
1993] yy las
las actividades
actividades de
de
negocios empresariales.

Los marcos de infraestructura y middleware son esenciales para crear


crear en
en forma
forma rápida
rápida sistemas
sistemas
de software de alta calidad, pero por lo general no son solicitados clientes externos.
solicitados por los clientes externos. Sin
Sin
embargo, los
embargo, los marcos
marcos empresariales soportan el
empresariales soportan el desarrollo
desarrollo de aplicaciones
aplicaciones de usuario final.
final. En
consecuencia, la compra de marcos de infraestructura y middleware
middleware es es más
más efectiva
efectiva en
en costo
costo que
que
su construcción [Fayad y Hamu, 1997].

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.

Los marcos de de caja


caja blanca
blancarequieren
requierenununconocimiento
conocimientomntimo
íntimo de de la
la estructura
estructurainterna
internadel
delmar-
mar-
co. Los marcos de caja
caja blanca
blanca producen
producen sistemas
sistemas que
que están
están fuertemente
fuertemente acoplados
acoplados concon los
los detalles
detalles
especIficos
específicos dede las jerarquías
jerarquIas de
de herencia del marco y, por tanto, los cambios
cambios deldel marco
marco pueden
pueden
requerir que se vuelva a compilar la aplicación. Los marcos de de caja
caja negra
negra son
son más
más fáciles
fáciles de
de usar
usar
que los
que los de caja blanca,
blanca, debido
debido a que se apoyan
apoyan en la delegación
delegación en vez de en la la herencia.
herencia. Sin
Sin
embargo, los
embargo, los marcos
marcos dede caja negra
negra son más dificiles
difíciles de desarrollar, debido a que requieren
desarrollar, debido requieren la Ia
definición de
definición de interfaces
interfaces yy ganchos
ganchos que
que anticipen
anticipen unun amplio
amplio rango
rango dede casos
casos de uso potenciales.
potenciales.
Además, es
Además, es más fácil extender y reconfigurar marcos de caja negra negra en forma
forma dinámica,
dinámica, ya ya que
que
las relaciones de objetos dinámicas en vez de las relaciones de clase estáticas [Johnson
enfatizan las
et al.,
el aL, 1988].
Intimamente con
Los marcos se relacionan íntimamente con los
los patrones
patrones dede diseño,
diseño, laslas bibliotecas
bibliotecas de
de clases
clases
y los componentes.

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

Componentes frente a marcos. Los Los componentes


componentes son instancias
instancias de
de clases
clases autocontenidas
autocontenidas
que se conectan
conectan para
para formar
formar aplicaciones
aplicaciones completas.
completas. En términos
términos de reutilización,
reutilización, un
un compo-
compo-
nente es
nente es una caja negra que define
define un conjunto
conjunto de operaciones
operaciones cohesivo
cohesivo queque puede
puede ser usado
basándose ünicamente
únicamente en el conocimiento de la sintaxis y semántica de su interfaz. Comparados
con los marcos, los componentes están acoplados con menos
con menos fuerza
fuerza ee incluso
incluso pueden
pueden utilizarse
utilizarse
en el nivel
nivel de
de codigo
código binario.
binario. Esto
Esto es,
es, las
lasaplicaciones
aplicaciones pueden
pueden reutilizar
reutilizar los
los componentes
componentes sinsin
tener que hacer subclases a partir de clases base existentes. La ventaja es que las aplicaciones no
siempre tienen que volver a compilarse
compilarse cuando
cuando cambian
cambian los los componentes.
componentes.La Larelación
relaciónentre
entremar-
mar-
cos y componentes no está predeterminada. Por un lado, pueden usarse los marcos para desarro-
liar componentes,
llar donde la interfaz del
componentes, donde del componente
componente proporciona
proporciona un un patrOn
patrón de fachada parapara la
la
estructura de clases interna del
del marco.
marco. Por
Por otro
otro lado,
lado, los
los componentes
componentespueden
puedenconectarse
conectarseaamar-
mar-
cos de caja negra.
negra. En general, los marcos
marcos se usanusan para
para simplificar
simplificar el desanollo
desarrollo dede software
software dede
infraestructura yy middleware,
infraestructura mientras que
middleware, mientras que los
los componentes
componentes se usan usan para
para simplificar
simplificar el
el desa-
desa-
. rrollo de software
software de
de aplicaciones
aplicaciones de
de usuario
usuario final.
final.

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.

1. Por desgracia, "WebObjects" es el nombre tanto del


del ambiente de
de desarrollo
desarrollo completo
completo como
como del
del marco
marco Web.
Web. Cuando
Cuando
nos referimos al marco siempre usamos
usamos la
la frase
frase marco
marco WebObjects.
WebObjects, Cuando
Cuando nos
nos referimos
referimosa!
al ambiente
ambientede
dedesarrollo
desarrollo
simplemente usamos el término WebObjects.

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).

Una abstracción daveclaveproporcionada


proporcionadapor porelelmarco
marcoWebObjects
WebObjects es es una extension
extensión a! al proto-
cob HTTP
colo HTTPparaparamanejar
manejar elel estado.
estado. El
El HTTP
HTTP es es un
un protocolo
protocolo de petición
petición y respuesta sin estados;
esto es, se formula una respuesta para cada petición pero no se conserva ningün ningún estado entre peti-
ciones sucesivas. Sin embargo, en muchas aplicaciones
aplicaciones basadas
basadas enen Web
Web es necesario mantener
mantener el el
estado entre peticiones. PorPor ejemplo,
ejemplo, enenJEWEL
JEWEL loslos cálculos
cálculos de emisiones pueden ilevarse
llevarse 3030 dIas.
días.
El usuario final
final debe poder supervisar y tener acceso a! al estado de los cálculos de las emisiones
aunque vuelva a arrancar su navegador Web. Web. Se han propuesto varias tdcnicas
técnicas para llevar cuenta de
la información de estado en aplicaciones
aplicaciones Web,
Web, incluyendo URL generadosgenerados en forma dinámica,
cookies y campos
campos HTMLHTML ocultos. WebObjects propor~iona
ocultos. WebObjects proporciona laslas clases
clases que
que se
se muestran en Ia la figura
7-20 para lograr el mismo propósito.
La clase WOApplication representa
clase woApplication representa la aplicación
aplicación que está ejecutando
ejecutando en el WebServer,
Webserver,
esperando peticiones del WebBrowser asociado. Cada vez vez que
que elel WOAdaptor recibe una petición
inicia un
HTTP entrante se inicia un ciclo
ciclo de peticiones
peticiones yy respuestas. El WOAdaptor empaca esta petición en
respuestas. El
WORequest yy lo pasa al objeto
objeto WORequest
un objeto objeto de
de aplicación
aplicación dede la clase WOApplication. Las peti-
la clase peti-
ciones siempre son activadas por un URL enviado por el WebBrowser. Un URL de nivel más alto
representa una petición especial y causa la creación de una una nueva
nueva instancia del tipotipo WOSession.
La clase WOSession encapsula el estado de una sesión sesión individual,
individual, lo lo que
que permite
permite elel seguimiento
seguimiento
de diferentes usuarios, aun dentro de una sola aplicación. Una WOSession WOSess ion consta de uno o más
WOComponent, los
WOCoiuponent, los cuales representan
representan una página Web Web reutilizable,
reutilizable, o parte de una una página
página Web
Web
desplegarla dentro
para desplegaria dentro de
de una
una sesión
sesión individual. WOcomponent puede contener elementos dinámicos.
individual. WOComponent
Cuando una ap!icación tiene acceso
aplicación tiene acceso a la base de datos,
datos, uno o más de los elementos dinámicos de
un componente
componente se lienan
llenan con información recuperada de
información recuperada de la
la base
base dede datos.
datos. El WOSessionStore
proporciona persistencia para los objetos WOSession: guarda sesiones en ci
objetos wosession: el servidor
servidor yy las
las res-
res-
taura para Ia
la aplicación cuando las solicitan.

www.elsolucionario.org
Actividades
Actividades del
del diseno
diseño de
de objetos 259
259

WOAdaptor

WoRequest WebServer WOSessionStore

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:

• Realización de asociaciones (sección 7.4.8).


Revision de la herencia para incrementar la reutilización (sección 7.4.9).
• Revisión
Revision de
• Revisión de la·herencia
laherencia para
para eliminar
eliminar dependencias de implementación (sección 7.4.10).
7.4.10).

7.4.8 Real ización de


Realización de asociaciones
asociaciones
Las asociaciones
Las asociaciones son conceptos UML que indicanindican colecciones
colecciones dede vInculos
vínculos bidireccionales
bidireccionales
entre dos o más
más objetos. Sin embargo, los lenguajes de programación orientados a objetos no pro-
porcionan el concepto de asociación.
asociación. En vez
vez de
de ello
ello proporcionan
proporcionan referencias
referencias en
en donde
donde unun objeto
objeto
guarda una manija hacia otro
otro objeto.
objeto. Las
Las referencias
referencias son
son unidireccionales
unidireccionales y se
se realizan
realizan entre
entre dos
dos
objetos. Durante el diseño de objetos realizamos asociaciones desde el punto de de vista
vista de
de referencias,
referencias,

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.

diseño de objetos antes de la transformación


Modelo de diseflo

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).

La creación de una asociación


creación de entre AcciónAcercamiento
asociación entre AcciónAcercamiento yy AreaMapa
ÁreaMapa se traduce
traduce en la
especificación del
especificación del atributo
atributo mapaDestino
mapanestino para
paraque
quehaga
hagareferencia
referenciaa!alobjeto
objetoAreaiviapa
ÁreaMapa correcto.
Debido a que cada objeto AcciónAcercamiento
Debido AcciónAcercamientoestá estáasociado
asociadoexactamente
exactamente conconununAreaNapa,
ÁreaMapa,
solo
sólo puede
puede suceder
suceder un valor nulo para el atributo
valor nub atributo mapaDestino cuando
cuando se está
está creando
creando un
un
objeto AcciónAcercamiento.
objeto AcciónAcercamiento. En En los
los demás casos, un
un mapaDestino
mapaDestino nubnulo se considera un error.

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

AreaNapa asigna elel atributo


ÁreaMapa asigna atributoacercamiento
acercamiento de de su
su panimetro
parámetro yy luego
luego llama
llama aa asignarMapaDes-
asignarMapaDes-
tino ()() de
tino deAcciónAcercamiento
AcciónAcercamientopara paracambiar
cambiarsu suatributo mapaDestino. 2 Por
atributo mapaDestino.2 Por ültimo,
último, necesita-
necesita-
mos tratar
mos Tainiciación
tratar la iniciacióndedelalaasociación
asociaciónyysusudestrucción
destrucciónllamando
liamandoa aasignarMapaDestino
asignarMapajestino ()() yy
asignarAcciónAcercamiento ()()cuando
asignarAcciónAcercamiento cuandosesecrean
creany ydestruyen
destruyenlos
losobjetos
objetosAreai'Iapa
ÁreaMapa y Acción-
Acercarniento. Estoasegura
Acercamiento.Esto aseguraque
queambos
ambosatributos
atributosde
dereferencia
referenciasean
seanconsistentes
consistentestodo
todoeleltiempo.
tiempo.

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 _

Modelo de diseño de objetos


objetos después
después
de la transformación
*
AcciónAcercamiento
AccióriAcercainiento ÁreaMapa
AreaMapa
-mapaDestino:AreaMapa
-mapaDestino : AreaNapa -acercamiento:Acción-
-acercainiento :Acción-
+obtenerMapaDestino()
+obtenerMapaDestino () Acercamiento
Acercainiento
+asignarMapaDestino(mapa)
+asignarMapaDestino (mapa) +obtenerAcción-
+obtenerAcción-
Acercamiento ()
Acerca.miento ()
+asignarAcción-
+ as i gnarAcc ion-
Acercamiento (acción)
Acercamiento (acción)

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);
}

class AcciónAcercamiento extends AbstractAction


AbstractAction {
private AreaMapa
ÁreaMapa MapaDestino;
MapaDestino;
/* Se
/* Se omiten
omiten otros métodos */ */
void asignarMapaDestino
asignarMapaDestino(mapa:ÁreaMapa)
(mapa:AreaMapa) {

(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).

2. Observe que los métodos asignarAcciónAcercamiento


asignarAcciónAcercamiento ()( )yy asignarMapaDestino
asignarMapaDestino() ( ) necesitan revisar
inodificarse antes de llamar
primero si el atributo necesita modificarse liamar al
a! otro método para que
que eviten una recursión
recursion infinita (vea
(yea
el código en la figura 7-22).

www.elsolucionario.org
262 CapItulo
Capítulo 7 • Diseño de
de objetos

La dirección de una asociación a menudo


menudo puede
puede cambiar
cambiar durante
durante el desarrollo
desarrollo del
del sistema.
sistema.
Las asociaciones
asociaciones unidireccionales pueden realizarse
unidireccionales pueden realizarse de manera mucho
mucho más
más simple.
simple. Las
Las asocia-
asocia-
ciones bidireccionales
ciones son más
bidireccionales son más complejas
complejas e introducen
introducen dependencias mutuas entre
dependencias mutuas entre clases.
clases. Por
ejemplo, en
ejemplo, en la figura 7-22 las dos clases, ÁreaMapa yy AcciónAcercamiento, necesitan volver a
clases, AreaNapa
compilarse y probarse cuando cambiamos alguna de ellas. En el el caso
caso de
de una
una asociación
asociación unidirec-
unidirec-
cional de
cional de la clase AcciónAcercamiento hacia hacia Ta AreaNapa, no necesitamos preocuparnos
la clase ÁreaMapa, preocuparnos
acerca de
de Ta Area.iviapa cuando cambiamos la clase AcciónAcercamiento. Sin embargo, las
la clase ÁreaMapa
asociaciones bidireccionales son,
son, a veces, necesarias en el caso de clases pares que necesitan
necesitan traba-
traba-
jar en forma
forma muy
muy estrecha.
estrecha. La
LaseTección
selección entre una asociación
asociación unidireccionaT
unidireccional oo bidireccional
bidireccional eses un
un
compromiso que tenemos que evaluar en el contexto de un par especIficoespecífico de clases. Sin embargo,
para facilitar el compromiso
compromiso podemos
podemos hacer
hacerdedemanera
manerasistemática
sistemáticaque
quetodos
todoslos
losatributos
atributossean
seanpri-
pri-
vados y proporcionar las operaciones asignarAtributo
asignarAtributo () y obtenerAtributo
() y obtenerAtributo () () para modificar
la referencia. Esto minimiza los cambios a las interfaces de clases cuando hacemos que que una
una asocia-
asocia-
ción unidireccional sea
sea bidireccional
bidireccional (y
(y viceversa).
viceversa).

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.

Modelo de diseño de objetos antes de la transformación

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.

Asociaciones de muchos a muchos. En En este caso,


caso, ambas
ambas clases
clases terminales
terminales tienen
tienen atributos
atributos
que son
son colecciones
colecciones de de referencias
referencias yy operaciones
operaciones para
para mantener
mantener consistentes
consistentes estas
estas colecciones.
colecciones.
PoliLínea del GIS de JEWEL
Por ejemplo, las clase PoliLInea tieneuna
JEWEL tiene unaasociación
asociación ordenada
ordenada de muchos a
muchos con la la clase asociación se
clase Punto. Esta asociación se realiza usando
usando un
un atributo
atributo Vector en cada clase,
el cual
cual es
es modificado
modificado por por las operaciones añadirPunto (0,
lasoperaciones ), eliminarPunto
eliminarPunto (0, ), afiadirPo-
añadirPo-
lilínea ()
lilmnea () yy eliminarPolilínea
eliminarPolilInea () (yea la figura
() (vea figura 7-24). Al igual que en el
7-24). Al el ejemplo
ejemplo anterior,
anterior,
estas operaciones
operaciones aseguran
aseguran que ambos Vector sean consistentes.
que ambos consistentes. Sin embargo, observe que la la
asociación entre PoliLInea
PoliLínea y Punto debe ser unidireccional, tomando en cuenta
y Punto cuenta que ninguna
ninguna de
de
las operaciones
operaciones de de Punto necesita tener acceso a las PoliLíneaPoliLInea que incluyen
incluyen Unun Punto dado.
Podemos entonces eliminar el atributo polilíneas y sus métodos relacionados y, en este caso,
atributo polilIneas
una asociación
asociación unidireccional
unidireccional de de muchos
muchos a muchos o una una asociación
asociación unidireccional
unidireccional de 'uno
'uno a
muchos ilega
llega aa ser
ser idéntica
idéntica en
en el
el nivel
nivel del
del diseflo
diseño de
de objetos.
objetos.

Modelo de diseflo
diseño de objetos antes de la transformación
{ ordenado }
PoliLínea
Pol iLmnea ¡_¡OrdenadO) Punto

-1

diseño de objetos después de Ia


Modelo de diseno
PoliLínea
Pol
-puntos:Vector
-puntos
iLinea
:Vector
+elementos()
+elementos ()
la transformación

*
Punto
-polilíneas:Vector
-polilIneas :Vector
+elementos'
+elementos()()
+añadirPunto(p) +añadirPolilínea(l)
+afiadirPoli].Inea (1)
+eliminarPunto(p)
.i-eliminarPunto(p) +eliminarPolilínea(l)
+eliminarPo].ilinea (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).

Las asociaciones como objetos separados. En UML las


las asociaciones
asociaciones pueden
pueden estar
estar asociadas
asociadas
asociación que
con una clase de asociación que guarda
guarda los
los atributos
atributos yy operaciones
operaciones de
de la
laasociación.
asociación. Primero
Primerotrans-
trans-
formamos la la clase de asociación
asociación en
en un
un objeto
objeto separado
separado yy varias
varias asociaciones
asociaciones binarias.
binarias. Por
Por ejemplo,
ejemplo,
considere la asociación Ej ecutarSimulación en JEWEL
EjecutarSimulación JEWEL (figura
(figura 7-25).
7-25). Una EjecutarSimulación
Ej ecutarSimulación
F'uenteEmisión y un objeto ResultadoSimulación.
relaciona un objeto FuenteEmisión Resul tadoSimulación. La clase de asociación
asociación
ecutarsimulación también guarda atributos especIficos
Ej ecutarSimulación específicos de la corrida, como la fecha en en que
que
se creó, el usuario
usuario que ejecutó
ejecutó la simulación
simulación y el tiempo
tiempo de CPU
CPU que
que se
se requirió
requirió para
para terminar
terminar la
la

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 ' "

di,eño de objetos después


Modelo de diseño después de
de la tranSfon aciÓ~
la transformación

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.

simulación. Primero convertimos la asociación en un objeto, ilamado Ej ecutarsimulaciOn, y dos


llamado EjecutarSimulación,
asociaciones binarias entre el objeto
objeto Ej
Ej ecutarSimulación
ecutarSimulaciOn y y los
los demás
demás objetos. Luego podemos
usar las técnicas tratadas antes para convertir cada asociación binaria en un conjunto de atributos de
referencia.

Asociaciones calificadas. En este caso, uno o ambos


ambos extremos
extremos de
de la
la asociación
asociación están
están asociados
asociados
con una dave
clave que
quese
seusa
usapara
paradiferenciar
diferenciarentre
entreasociaciones.
asociaciones.Las
Lasasociaciones
asociacionescalificadas
calificadasseserealizan
realizan
en la misma forma que las asociaciones uno a muchos yy muchos aa muchos,
muchos, a excepciOn
excepción deldel uso
uso de
de un
un
objeto Hashtable en el extremo calificado (a diferencia de un un Vector
Vector 0 oUfl
un Set).
Set). Por ejemplo, con-
sidere la asociación
asociación entre
entre Escenario
Escenario y y EjecutarSimulación
Ej ecutarSimulación en JEWEL (figura 7-26).
JEWEL (figura 7-26). Un
Un Esce-
nario representa una situación que están investigando los usuarios (por
(por ejemplo,
ejemplo, unauna fuga
fuga en
en un
un reac-
reac-
tor nuclear).
nuclear). Para cada Escenario los usuarios pueden crear varias EjecutarSirruilación,
EjecutarSimulación, usando
cada una
una un
un conjunto
conjunto diferente
diferente de
de FuenteEmisión
FuenteErnisión o Un ModeloEmisión diferente.
un ModeloEmisiOn diferente. Tomando
Tomando en
Ej ecutarSimulación es costoso, los usuarios
cuenta que EjecutarSimulación usuanos también reutilizai
reutilizan las
las ejecuciones
ejecuciones aa través
de Escenario similares.
similares. El extremo de la asociación de Escenario está calificado con un nombre nombre
que permite
permite al
al usuario
usuario distinguir
distinguir entre
entre varias ecutarSimulaciOn con
varias Ej ecutarSimulación con el mismo
mismo Escenario.
www.elsolucionario.org
Actividades del
del diseño
diseño de
de objetos 265

Modelo de diseño de objetos antes de Ia


la transformación
* 0. .1
Escenario
Escenario nonthresim
nombresim Ej ecutarSimulación
EjecutarSimulación

Modelo de diseño de objetos después de Ia


la transformación +
*
Escenario Ej ecutarSimulación
EjecutarSimulación
-ej ecuciones : Hashtable
-ejecuciones:Hashtable -escenarios :Vector
-escenarios:Vector
+elementos
+elementos() () +elementos ()
+elementos()
+afladirEjecución(nombresim,
+añadirEjecución(nombresim, +afjadirEscenarjo-
+añadirEscenario-
es : Ej ecutarSimulación)
eS:EjecutarSimulación) (e:Escenario)
(e:Escenario)
+eliminarEj ecución (nonibresim,
+eliminarEjecución(nombresim, +el iininarEscenario-
+eliminarEscenario-
es :EjecutarSimu].ación)
eS:EjecutarSimulación) (e:Escenario)
(e:Escenario)

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).

Realizamos esta asociación calificada creando un atributo


atributo ejecuciones
ej ecuciones en Escenario yy Unun atri-
atri-
buto escenarios en Ej ecutarSimulación. El atributo ejecuciones
EjecutarSimulación. ej ecuciones es una Hashtable que está
indexada por el nombre de una Ej ecutarSimulación. Debido a que ci
Ej ecutarSimulación. el nombre está guardado en la
Hashtable, una Ej ecutarsimuiación especIfica
Ej ecutarSimulación puede tener varios
específica puede varios nombres diferentes a través
través
realiza, como antes, como un Vector en la
ecutarSimulación se realiza,
de Escenario. El extremo Ej ecutarSimulación
ciase
clase Ej
Ej ecutarSimulación.
ecutarSimulacidn.

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:

• Un botón oprimible (JButton)


(JBut ton) que activa una acción cuando el usuario final hace clic en el
botón.
Un botón
• Un botón de radio
radio (JRadioButton) que que permite
permite que
que un
un usuario
usuario final
final seleccione
seleccione una
opción entre un conjunto
conjunto de
de opciones.
opciones.
(JCheckBox) que permite que un usuario final active o desactive
• Un cuadro de verificación (JcheckBox)
una opción.
menú (JMenultem) que activa una acción cuando se le selecciona
• Un concepto de menu selecciona en un
un
menu
menú despiegable
desplegable oo emergente.
emergente.

Estos cuatro botones comparten un conjunto de atributos ejemplo, un rótulo,


atributos (por ejemplo, rótulo, un icono) y un
comportamiento (por ejemplo, aigoalgo sucede cuando los selecciona
selecciona ciel usuario
usuario final).
final). Sin embargo,
el comportamiento de cada tipo de botón es ligeramente diferente. Para acomodar estas diferencias,
y a!
al mismo tiempo reutilizar la mayor
mayor cantidad
cantidad dede codigo
código posible,
posible, las
las JFC
JFC introducen
introducen dos dos clases
clases
JToggleButton, y organiza
AbstractButton yy JToggleButton,
abstractas, AbstractButton organiza estos duatro tipos de botones
cuatro tipos botones en la
jerarquIa
jerarquía de herencia que se muestra
muestra en lala figura
figura 7-27.
7-27. La
La clase
clase AbstractButton define ci el corn-
com-
portamiento compartido
portamiento compartido por
por todos
todoswww.elsolucionario.org
los botones
los botones de las JFC. JToggleButton define ci el comporta-
comporta-
por los dos
miento compartido por dos botones
botones de
de estado
estado (es decir, JRadioButton
(es decir, JCheckBox).
JRadioButton VV JCheckBox).
266 Capít",lo 77 • Diseno
Capitulo Diseño de objetos
objetos

IAbstractButtonI
AstractButton

JEutton JMenultem JToggle3utton

/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).

Hay dos ventajas principales


principales enen Ta utilización de
la utilización de una jerarquía
jerarquIa de
de herencia bien diseflada.
diseñada. La
primera es que se reutiliza más código, y esto conduce a menos redundancias y, tanto, a menos
y, por tanto,
oportunidades para que haya defectos. La segunda segunda es queque el
el código
código eses extensible,
extensible, incluyendo
incluyendo unauna
interfaz bien documentada
documentada parapara Ta creación de
la creación de especializaciones
especializaciones futuras
futuras (por ejemplo, nuevos tipos
de botones en el el caso
caso de
de las
las JFC).
JFC). Sin
Sinembargo,
embargo,Ta la reutilización mediante herencia
herencia tiene
tiene un
un costo.
costo.
Los desarrolladores deben anticipar en forma correcta correcta cuál
cuál comportamiento
comportamiento deberádeberá compartirse
compartirse yy
cuál será
será refinado
refinado por
por Ta especialización, a menudo sin
la especialización, sin conocer
conocer todas
todas las
las especializaciones
especializaciones posi-
posi-
bles. Además,
Además, una vez que los los desarrolladores
desarrolladores definen una jerarquIa
jerarquía de herencia y un un paradigma
paradigma
para la comparticiOn
compartición del del código,
código, las interfaces de las clases abstractas se hacen hacen cada
cada vez
vez más
más rIgi-
rígi-
das ante el cambio conforme cada vez vez más clases
clases cliente
cliente dependen
dependen de ellas. El diseñodiseño dede objetos
objetos
representa la iiltima
última oportunidad durante
durante eT desarrollo para
el desarrollo para revisar las
las jerarquías
jerarquIas de de herencia entre
objetos
objetos de aplicación
aplicación y de de solución.
solución. Cualquier
Cualquier cambio
cambio posterior
posterior enen el
el proceso
proceso puede
puede introducir
introducir
errores difIciles
difíciles de detectar e incrementa de manera considerable el costo del sistema. sistema.
principales para el
Hay dos enfoques principales el diseño
diseño de
de una
unajerarquIa
jerarquía de herencia a fin de reutilizarla.
fin de reutilizarla.
Primero, podemos examinar varias
varias clases
clases similares
similares yy abstraer su comportamiento común.
comdn. El ejem-
ejem-
plo AbstractButton
plo AbstractButton de la figura 7-27 es un ejemplo de este enfoque.
enfoque. Segundo,
Segundo, podemos
podemos desa-
desa-
coplar una clase cliente de un cambio anticipado introduciendo un nivel de abstracción. La mayoríamayoria
de los patrones de diseño [Gamma
[Gamma et al., 19941,
el al., 1994], incluyendo a! patrón FábricaAbstracta que se
al patron
anticipado.
muestra a continuación, usan herencia para protegerse contra un cambio anticipado.
Considere el problema de escribir una sola aplicación que
que funcione con
con varios
varios estilos
estilos de
de yenta-
venta-
nas (por ejemplo, Windows,
Windows, Macintosh
Macintosh yy Motif).
Motif). Tomando
Tomando unauna plataforma
plataforma dada,
dada, el
el usuario
usuario trabaja
trabaja
con un conjunto consistente de ventanas,
ventanas, barras
barras de desplazamientQ, botones y menús.
desplazamiento, botones mends. La aplicación
misma no
misma no debe
debe saber
saber oo depender
depender de
de un
un apariencia
aparienciaespecífica.
especIfica.ElElpatrón
patronFábrica
Fabrica Abstracta
Abstracta (fi-
(fi-
gura 7-28) resuelve este problema proporcionando una clase abstracta para cada objeto que puede
ser sustituido (por ejemplo, Ventanabstracta BotónAbstracto) yy proporcionando una interfaz
VentanaAbstractayy Bot6nbstracto)
para Ia
la creación de grupos de objetos (es decir, FábricaAbstracta). Clases concretas imple-
decir, la FábricaZthstracta). imple-
mentan cada clase abstracta para cada fábrica. Por
Por ejemplo,
ejemplo, la
la clase
clase BotónAbstracto está refinada
www.elsolucionario.org
Actividades del diseño de objetos 267

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

zación, da como resultado menor cantidad de dependencias. Por ejemplo, en el


zación, el patron
patrón de de diseño
diseño
FábricaAbstracta (figura
FâbricaAstracta 7-28), las
(figura 7-28), las dependencias
dependencias entre la aplicación y una apariencia especI- especí-
fica se
fica se eliminan
eliminan usando
usando las las clases
clases abstractas
abstractas FábricaPbstracta, BotónAbstracto yy yen-
FábricaAbstracta, BotónPbstracto Ven-
tanaAbstracta. Por otro lado, la herencia introduce dependencias a lo largo
tanaPbstracta. largo de de lala jerarquIa.
jerarquía.
Por ejemplo,
ejemplo, laslas clases Ventanallotif yy VentanaWindows
clases VentanaMotif VentanaWindows están están fuertemente
fuertemente acopladas
acopladas con
VentanaAbstracta. En el caso caso de de Ta generalizacion esto
la generalización esto es
es aceptable,
aceptable, tomando
tomando en cuenta
que VentanaAbstracta, VentanaMotif VentanaMotif y VentanaMac VentanaMac son conceptos fuertemente fuertemente relaciona-
relaciona-
dos.
dos. Estas dependencias
dependencias fuertes fuertes pueden
pueden llegar
ilegar aa ser un problema
problema cuando
cuando se usa usa la la herencia
herencia
propósitos diferentes
para propósitos diferentes a la generalización.
generalización. Considere el siguiente siguiente ejemplo.
ejemplo.
Supongamos por un momento que Java no proporciona una abstracción abstracción SetSet y y que necesita-
mos escribir una nuestra. Decidimos reutilizar la clase java. java. util. Hashtable para implementar
util .Hashtable
una abstracción
abstracción de conjunto
conjunto a la la que
que liamaremos MiConj unto. La inserción de un elemento
llamaremos MiConjunto. elemento en
MiConj unto
MiConj equivale aa revisar
unto equivale revisar si si existe
existe la la clave
dave correspondiente
correspondiente en la tabla y Ia la creación
creación de
una entrada si es necesario. Revisar si un elemento está en NiConj MiConjuntounto equivale a revisar si una
entrada está asociada
asociada con con Ta dave correspondiente
la clave correspondiente (yea (veaTa figura 7-29, columna izquierda).
la figura
Dicha implementación
implementación de de Un
un Set nos permite reutilizar código y nos proporciona ci el compor-
tamiento deseado. Sin embargo, también también nos nos proporciona
proporcionacomportamiento
comportamientono nodeseado.
deseado.Por Porejem-
ejem-
plo, Hashtable implementa la operación containsKey containsKey() () para revisar si existe el objeto especifi- especifi-
cado como una dave clave en enTa Hashtable y la operación containsValue
la Hashtable containsValue () () para revisar si el objeto objeto
especificado existe
especificado existe como
como una una entrada.
entrada. EstasEstas dos
dos operaciones
operaciones son heredadas
heredadas por MiConj MiConjunto. unto.
Tomando en cuenta nuestra
Tomando nuestra implementación,
implementación, la operación operación containsValue
containsValue () () invocada sobre un un
objeto MiConj
MiConjuntounto siempre regresa null, lo cual es contrario a lo esperado. esperado. Lo Lo que
que serfa
sería peor,
peor,
un desarrollador que usara MiConjunto
MiConj unto podria podría confundir con facilidad las operaciones contains contains () ()
yy containsValue
containsValue () () e introducir una una falTa
falla en
en el
ci sistema que es difIcil difícil de detectar.
detectar. ParaPara tratar
tratar este
este
podriamos sobreponer todas las operaciones
asunto podríamos operaciones heredadas
heredadas de de Hashtable que no deben usarse
en MiConjunto.
MiConj unto. Esto conducirla
conduciríaaauna unacTase
clase MiConj
MiConjunto unto que serlasería difIcil
difícil de comprender y reutilizar.
fundamental en este ejemplo es que, aunque Hashtable proporciona
El problema fundamental comporta-
proporciona comporta-
miento queque nos
nos gustarla
gustaríareutiTizar
reutilizar enen la
la impTementaciOn
implementación de Set, debido a que nos ahorrarla
de Set, ahorraría tiempo, ci el
concepto Set no es un refinamiento del concepto Hashtable. Por el contrario, la clase VentanaMac
del ejemplo FábricaAijstracta
FábricaAbstracta sí si es un refinamiento de la clase VentanaAbstracta.
Al uso de lala herencia
herencia con coneT ünico propósito de
el único de la
la reutiiización
reutilizacióndeldelcOdigo
código le le iTamamos
llamamos heren- heren-
cia de implementación.
implementación.La Laherencia
herenciadedeimplementaciOn
implementaciónpermite permitequequelos
los desarroTladores reutilicen
desarrolladores reutilicen
cOdigo haciendo
código haciendo con
con rapidez
rapidez subclases
subclases de una clase existente yy refinando refinando su su comportamiento.
comportamiento. Un Un
Set implementado por herencia de una Hashtable es un ejemplo de de herencia
herencia de de implementaciOn.
implementación.
Por ciel contrario,
contrario, aa Lala clasificaciOn
clasificación de de conceptos en jerarquIas
jerarquías de de especiaTizaciOn-gcneraiización
especialización-generalización
se le llama herencia
herencia de deinterfaz.
interfaz.La Laherencia
herenciade deinterfaz
interfazseseusa usapara
paramanejar
manejarlalacomplejidad
complejidadque que sese
presenta para gran nümero
número de de conceptos
conceptosrelacionados.
relacionados.AATa la herencia de interfaz también
también se se lele llama
llama
subtipeado y,y, en
en este
este caso,
caso, aa la
la superclase
superclase se selelellama supertipo y a la subclase se le
llamasupertipo Ic llama
llama subtipo.
subtipo.
Por ejemplo, Real e Integer son subtipos de Number. Nunber.ÁreaMapareaNapa es un subtipo de JPanel.
Debe evitarse la herencia
herencia de de implementaciOn.
implementación. Aunque Aunque proporciona un mecanismo tentador
para la reutilizaciOn cOdigo, sólo
reutilización del código, sOloproduce
producebeneficios
beneficiosde de corto piazo y da como resultado siste-
corto plazo siste-
mas que son difíciles
difIciies de modificar.
modificar. La La delegación
delegación es una mejor alternativa, en vez de la herencia de de
implementaciOn,
implementación, sisi se se puede
puede reutilizar
reutilizar el el código.
cOdigo. Se Se dice
dice queque una clase delega hacia otra otra clase
clase sisi
implementa una operaciOn
operación simpTemente reenviando un
simplemente reenviando un mensaje a otra otra clase.
clase. La
LadelegaciOn
delegación hace hace

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);
}} }

/* Se omiten otros métodos */


*/ /* Se
/* Se omiten
omiten otros
otros métodos
métodos */
*/
} }

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).

explfcitas las dependencias


explícitas las dependencias entre
entre la clase reutilizada y la nueva clase.
clase. La columna derecha de la
figura 7-29 muestra una implementación de MiConj unto usando
MiConjunto usando delegación
delegación en vez
vez de herencia de
implementación. Observe queque la
la iInica
única adición significativa es el atributo tabla y su iniciación en el
MiConj unto ().
constructor MiConjunto 0.
Para una exposición amplia de los los intercambios
intercambios relacionados
relacionados con
con lala herencia
herencia yy Ia
la delega-
delega-
ción el lector deberá consultar [Meyer, 1997].

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:

• La adición de asociaciones para


para la
la optimización
optimización de
de rutas
rutas de
de acceso.
acceso.
• La descomposición de objetos en atributos.
atributos.
• El cacheo de resultados de cálculos
cálculos costosos.
costosos.
• El retraso de cálculos costosos.
costosos.

Cuando se aplican optimizaciones, los desarrolladores deben establecer


desarrolladores deben establecer un
un equilibrio
equilibrio entre
entre la efi-
efi-
optimizaciones incrementan
ciencia y la claridad. Las optimizaciones incrementan la
la eficiencia
eficiencia del
del sistema,
sistema, pero
pero también
también hacen
hacen
difícil la comprensión de los modelos del sistema.
que sea más compleja y difIcil

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?

reingeniería, las estimaciones para


En proyectos de interfaz y reingenierIa, para la
la frecuencia
frecuencia de
de las
las rutas
rutas de
de acceso
acceso
pueden derivarse del sistema heredado. En proyectos de ingenierIa
ingeniería greenfield (es decir, sistemas
que se desarrollan
desarrollan a partir de cero y que no se pretende que reemplacen heredado)
reemplacen a un sistema heredado)
es más difIcil
difícil estimar la frecuencia de las rutas dede acceso.
acceso. En
En este
este caso
caso no
no deben
deben añadirse
añadirse aso-
aso-
ciaciones redundantes
ciaciones redundantes antes
antes de
de que
que un análisis
análisis dinámico
dinámico del
del sistema
sistema completo,
completo, por por ejemplo,
ejemplo,
durante las pruebas del sistema, haya determinado cuálescuáles asociaciones
asociaciones participan
participan enen los
los cuellos
cuellos
de botella del desempeflo.
desempeño.
Otra fuente deldel desempeno
desempeño ineficiente
ineficiente del sistema
sistema es
es el
el modelado
modelado excesivo.
excesivo. Durante
Durante elel
análisis se identifican muchas clases que no tienen comportamiento interesante.
interesante. En
En este
este caso
caso los
los
diseñadores de objetos deben preguntarse:

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

Modelo de diseflo de objetos después de la


diseño de Ia transformación
transformación

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

decision de descomponer clases no siempre es obvia. En el caso de un sistema de segu-


La decisión
ridad social,
ridad la clase
social, la clase Segurosocial
SeguroSocialpuede
puedetener
tenermucho
muchomásmáscomportamiento,
comportamiento, como
como rutinas
rutinas
especializadas para la generación de nuevos números
niImeros basados
basados en
en fechas
fechas de
de nacimiento
nacimiento y laIa ubi-
ubi-
cación de la inscripción original. En general, los desarrolladores deberán
deberán retrasar las
las decisiones
decisiones
de descomposición hasta el inicio de la implementación cuando se tienen claras las responsabili-
dades de cada clase.

7.4.13 Cacheo
7.4.13 Cacheo de
de resultados de cálculos costosos
costosos

Con frecuencia los cálculos costosos sOlo necesitan realizarse


sólo necesitan realizarse una
una vez,
vez, debido
debido aa que
que los
los
valores con los que se realiza el cálculo no cambian o lo hacen despacio. despacio. En tales casos se puede
cachear el resultado del cálculo como un atributo privado. Considere, por ejemplo, la operacion operación
Capa
Capa. .obtenerContorno
obtenerContorno 0. ( ).Supongamos
Supongamosque quetodos
todoslos
losElementoCapa
ElementoCapase sedefinen
definen una
unasola
solavez
vez
como parte de la configuración del sistema y no cambian durante la ejecución. Entonces, el el vec-
vec-
tor de Punto regresado
regresado por la operación Capa.obtenerContorno
operación Capa. obtenerContorno () siempresiempre es es el
el mismo
mismo para
para
un cuadroLirn detalie dados.
cuadroLim y detalle dados.Además,
Además,los losusuarios
usuariosfinales
finalestienen
tienenlalatendencia
tendenciaaaenfocarse
enfocarse en en
una cantidad limitada de puntos alrededor
airededor del mapa conforme
conforme se enfocan
enfocan en en una ciudad o re-
gión especffica. Tomando en
específica. Tomando en cuenta estas observaciones, una optimizaciOn
optimización simple es añadir un
atributo privado puntoscacheados a alalaclase
privado puntosCacheados claseCapa,
Capa,elelcual
cualrecuerda
recuerda ciel resultado
resultado de
de la
la operación
operación
obtenerContorno ()
obtenerContorno () para
para un
un par dado
dado de
de cuadroLim
cuadroLimyydetalle.
detaile. Luego
Luego Ia operaciónobtener-
la operación obtener-
Contorno (())revisa
revisaprimero
primeroelelatributo
atributopuntosCacheados
puntoscacheados yy si si lo encuentra regresa el
encuentra regresa el Vector
Punto correspondiente,
Punto correspondiente, yy en en caso
caso contrario
contrariollama
llamaaalala operación
operaciónobtenerContorno
obtenerContorno ()() sobre sobre
cada ElementoCapa contenido. Observe que
contenido. Observe que este enfoque incluye
incluye unun intercambio:
intercambio: porpor un
un lado
mejoramos elci tiempo
mejoramos tiempode derespuesta
respuestaparaparalalaoperación
operaciónobtenerContorno
obtenerContorno (0,) , peropero por
por el
el otro
otro con-
con-
sumimos espacio de memoria guardando información redundante.
sumimos

7.4.14 Retraso
7.4.14 Retraso de cálculos costosos

Un enfoque alterno para los cálculos


cálculos costosos
costosos es retrasarlos
retrasarlos lo más
más posible.
posible. Por
Por ejemplo,
ejemplo,
considere
considere unun objeto que representa
representa a una imagen guardada como un archivo. archivo. La carga desde ci el
archivo de todos los pixeles que constituyen la imagen es costosa. Sin embargo, los datos de la
archivo de todos los pixeles que constituyen la imagen es costosa. Sin embargo, los datos de Ia
imagen no necesitan cargarse sino hasta que se vaya a despiegar desplegar la imagen. Podemos realizar esta
optimización usando un
optimización usando un patrón
patron Apoderado
Apoderado [Gamma
[Gamma et al., al., 1994].
1994]. Un objeto ApoderadoImagen
Apoderadolmagen
toma ci
el lugar de Irnagen
Imagen y proporciona
proporciona la la misma
misma interfaz
interfaz que
que el
el objeto
objeto Irnagen
Imagen (figura
(figura 7-31).
7-31). Las
Las
operacionessimples
operaciones simples(como
(comoanchura
anchura()()yyaltura
altura 0)())son
sonmanejadas
manejadas porpor Apoderadolmagen.
ApoderadoImagen. Sin Sin
embargo, cuando se necesita trazar la Irnagen, Apoderadolmagen carga los datos desde el disco y
Imagen, ApoderadoImagen
crea un objeto
objeto ImagenReal.
ImagenReal. Si el cliente no llama
cliente no llama a la operaciOn trazar ()() no
operación trazar nosesecrea
creaelelobjeto
objeto
ahorrando, por
ImagenReal, ahorrando, por tanto,
tanto, mucho
mucho tiempo
tiempo de de cálculos.
cálculos. Las
Las clases
clases liamadoras
llamadoras sOlo
sólo acceden
al ApoderadoImagen
Apoderadolmagen y a la Irnageniea1 mediantelalainterfaz
ImagenRealmediante interfaz de
de Irnagen.
Imagen.

www.elsolucionario.org

También podría gustarte