Académique Documents
Professionnel Documents
Culture Documents
y clasificacin
Criterios de modelado
con objetos y clases
Jordi Brnquez Jimnez
Miguel ngel Sicilia Urbn
PID_00161676
FUOC PID_00161676 Abstraccin y clasificacin
ndice
Introduccin ............................................................................................ 5
Objetivos ................................................................................................... 7
Resumen .................................................................................................... 31
Solucionario ............................................................................................. 34
FUOC PID_00161676 Abstraccin y clasificacin
Glosario ..................................................................................................... 35
Bibliografa .............................................................................................. 36
FUOC PID_00161676 5 Abstraccin y clasificacin
Introduccin
Ejemplo
En la orientacin a objetos, la informacin del dominio se representa en dos En el mdulo Clases y objetos, ya
hemos visto los conceptos de clase
y objeto.
niveles, objetos y clases. Los primeros son representaciones de entidades indi-
viduales concretas (por ejemplo, los estudiantes Juan y Mara) y las segundas
representaciones de colecciones de entidades que comparten unas caracters-
ticas determinadas (el concepto de estudiante, del cual son individuos o ins-
tancias concretas Juan y Mara). La estructura de las clases determina qu
informaciones se pueden representar mediante los objetos que pertenecen a
estas clases.
Por otra parte, los objetos raramente quedan aislados como entidades inde-
pendientes; al contrario, se suelen relacionar con otros objetos. Una de las re-
laciones ms comunes es el enlace. Un enlace representa una relacin
semntica explcita entre dos o ms objetos que es importante tener en
cuenta. Por ejemplo, si con nuestra aplicacin queremos obtener una lista de
los estudiantes de cada asignatura, es imprescindible almacenar la informa-
cin de qu estudiantes estn matriculados y en qu asignaturas. As, podremos
tener un enlace entre el alumno Juan Garca y la asignatura Programacin
orientada a objetos en la qu est matriculado.
As, podemos ver que todos los objetos que representan a estudiantes tienen
como valores el nombre y la fecha de nacimiento (entre otros). Esto nos lleva-
r a definir una clase, Estudiante, que representar el conjunto de todos los
estudiantes de nuestro sistema, es decir, ser una abstraccin de este conjunto.
Los valores comunes pasarn a ser atributos de la clase, con un tipo determi-
nado. Por ejemplo, tendremos un atributo nombre de tipo cadena de caracte-
res y un atributo fechaNacimiento de tipo fecha que formarn la clase
Estudiante. De la misma manera, definiramos una clase Asignatura con
los atributos numero y numeroCreditos. Adems, el conjunto de los enlaces
entre los estudiantes y las asignaturas concretas se abstrae en una relacin de
asociacin entre las clases Estudiante y Asignatura.
Objetivos
1. Complejidad y abstraccin
Esta complejidad hace que sea difcil incluso imposible para un nico
desarrollador comprender todos los detalles de los sistemas, excepto en el caso
de sistemas muy simples y especficos, como los desarrollados para resolver
una necesidad personal o los que cumplen finalidades muy sencillas.
El modelo que tenemos hasta ahora sirve para representar la informacin que
necesitamos, aunque plantea un par de inconvenientes:
Figura 3. Relacin entre instancias de las clases Warehouse (Almacen), Engine (Motor) y MotorType (TipoMotor)
Cada objeto de la clase Engine (Motor) se tiene que enlazar con el objeto
que representa el tipo de motor, EngineType (TipoMotor). De la misma ma-
nera, stos se tienen que enlazar con los objetos de tipo Warehouse (Almacen)
donde estn almacenados.
Con este ejemplo, hemos intentado ilustrar cmo modelos diferentes permiten Las asociaciones entre clases las
veremos ms detalladamente en los
representar distintas informaciones con diferentes grados de detalle. Por este apartados siguientes de este mdulo
didctico.
Ejemplo
Supongamos que se est modelando una herramienta de dibujo asistido por ordenador que
permite dibujar diferentes figuras geomtricas. Algunas de las clases que se tendrn que im-
plementar sern las correspondientes a cada una de las figuras geomtricas que se pueden
trazar: crculo, rectngulo, etc. Cada una de las figuras trazadas ser, por lo tanto, un objeto
de la clase correspondiente.
Imaginemos que hemos pintado un crculo (objeto c1), cuyo centro se encuentra en la
posicin (40, 30), tiene un radio de 5 mm, es de trazo continuo y es de color rojo. A con-
tinuacin, trazamos otro crculo con las mismas caractersticas (objeto c2), posicin, ra-
dio, etc., de manera que los dos objetos quedan superpuestos. Obviamente los dos
crculos son diferentes (c1 y c2), aunque sus atributos tienen todos los mismos valores.
Aunque usar campos clave es comn en determinados casos, como en las ba-
ses de datos relacionales, en la orientacin a objetos esto no es necesario, ya
que las relaciones entre los objetos se representan explcitamente con los en-
laces.
Como hemos visto, los objetos pertenecen a una clase determinada. En reali-
Java slo permite..
dad, conceptualmente, un objeto puede pertenecer a ms de una clase, todo
... que un objeto pertenezca a
depender de si el lenguaje de programacin que utilizamos tiene ms o me- una clase; en cambio, C++
permite que un objeto
nos limitaciones en este aspecto. De todos modos, trabajaremos con la premi- pertenezca a tantas clases
sa de que cada objeto slo pertenece a una clase. como sea necesario.
diagrama de clases, de manera que sirve para verificar que el modelo puede re-
presentar toda la informacin necesaria.
Para modelar nuestros problemas, utilizaremos un lenguaje de modelado de- Si queris saber ms sobre el UML,
podis visitar
http://www.uml.org
nominado UML (lenguaje de modelado unificado o Unified Modeling Language).
Este lenguaje nos sirve para representar diagramas de clases de una manera clara
que nos facilite su comprensin.
Los diagramas de clases son aqullos en los que estn todas las clases Hay otros lenguajes de
modelizacin, pero vista su claridad
y sencillez es el que utilizaremos en estos
del problema que queremos modelar (tambin se pueden hacer mdulos.
A partir del ejemplo anterior de los motores, podemos extraer del diagrama de
objetos el diagrama de clases siguiente:
Los diagramas de objetos son tiles para comprobar si un diagrama de clases El diagrama de objetos
correspondiente a este modelo lo
permite representar una informacin determinada creando ejemplos de posi- tenis en el apartado anterior.
En los ejemplos que hemos visto hasta ahora, no nos hemos centrado en iden-
tificar las operaciones de las clases (que al mismo tiempo son operaciones que
FUOC PID_00161676 17 Abstraccin y clasificacin
3.1.1. Cardinalidad
Dado que una asociacin binaria representa una interconexin entre instan-
cias de dos clases, hay que indicar cuntos objetos de cada clase pueden estar
involucrados en esta interconexin. En otras palabras, es necesario indicar la
FUOC PID_00161676 19 Abstraccin y clasificacin
Nmero exacto (1, 3, etc.). Expresa que una instancia de la clase ClassA * Por ejemplo, una persona tiene
nicamente un pas de origen; un
tiene que estar relacionada exactamente con el nmero indicado de instan- segmento tiene nicamente dos
puntos asociados (el de origen y el
cias de la clase ClassB.* de destino), etc.
Una vez definidas las cardinalidades de las dos clases implicadas en la asociacin,
aparecen infinidad de combinaciones posibles, pero las ms comunes son:
Representacin
de las instacias
Como podemos ver, este diagrama representa el que antes hemos dibujado
con objetos y hemos empezado a introducir con el diagrama de clases incom-
pleto.
3.1.2. Navegabilidad
En la mayora de las relaciones utilizaremos asociaciones bidireccionales, Hay que tener en cuenta...
pero hay que tener en cuenta que tambin podemos utilizar las unidireccio- ... que en algunos manuales de
UML podis encontrar que las
nales si nos conviene. La direccionalidad de las asociaciones est determinada asociaciones bidireccionales se
principalmente por las funcionalidades que unas clases necesitan de las otras, representan con un segmento
con los dos extremos en forma
es decir, si una instancia de la clase ClassA necesita poder invocar mtodos de punta de flecha. Son repre-
sentaciones equivalentes.
de una instancia de la clase ClassB, aparte de existir una asociacin entre las
FUOC PID_00161676 22 Abstraccin y clasificacin
3.1.3. Roles
Las asociaciones reflexivas son un tipo de asociacin binaria en la que las dos Como ejemplo tpico de aso-
ciaciones reflexivas, podemos
clases, origen y destino de la relacin, son la misma clase. No hay ninguna res- hablar de la relacin entre su-
bordinado (Employee) y jefe
triccin que impida que una instancia de una clase se relacione con otras ins- (Boss) dentro de una empre-
sa. Todas las personas son em-
tancias de la misma clase. pleados de la empresa, y entre
ellas se establece una relacin
en la que cada persona tiene
Se representan con una relacin que entra y sale de la misma clase y, como un jefe (a excepcin del jefe de
la empresa, que no tiene a na-
hemos comentado antes, para poder identificar correctamente los roles de los die por encima) y cada jefe tie-
ne un nmero indeterminado
dos extremos de la asociacin, hay que definirlos con un texto lo bastante de subordinados.
aclaratorio.
En las asociaciones binarias, se asume que las instancias de las dos clases son
independientes, en el sentido de que las instancias de una clase no dependen
de la existencia de las de la otra.
Agregaciones
En la asociacin de agregacin, se asume una subordinacin concep-
tual del tipo todo/parte o bien tiene-un. Por lo tanto, hay que tra- Podemos considerar que una
clase est formada por alum-
tarlas como un caso especial de asociacin binaria. nos, lo cual no implica que
cuando la clase se disuelva, al
final del semestre, los estudian-
tes tengan que desaparecer.
De la misma manera que sucede con las asociaciones de agregacin, las aso- Un libro est formado por p-
ginas, que nos puede interesar
ciaciones de composicin son un caso especial de asociaciones binarias. De almacenar si estn en blanco, si
son de inicio de captulo, si tie-
manera ms concreta, se trata de un caso especial de agregacin en el que se
nen grficos, si tienen imge-
requiere que una instancia de la clase que representa las partes est asociada, nes, etc. Estas pginas son de
este libro y no tiene sentido
como mximo, con una de las instancias que representan el todo (no puede que existan en ningn otro li-
bro. Por lo tanto, si se diera el
haber cardinalidad mltiple en el extremo del agregado). caso de que desapareciera el li-
bro, las pginas tambin ten-
dran que desaparecer.
En UML, las composiciones se representan con un rombo con el interior relle-
no en la clase que representa el todo.
Hasta ahora, hemos utilizado las asociaciones entre clases para expresar una
cierta relacin entre instancias de las clases relacionadas.
En UML, utilizaremos una lnea discontinua que unir la clase asociativa con
la relacin a la cual est asociada.
Clases asociativas
En el diagrama se representa
que una OrderLine
(LineaDePedido) almacena
la cantidad de elementos de
tipo Product (Producto) que
contiene el Order (Pedido).
Relacin de generalizacin/
especializacin
Hay muchos libros que proponen tcnicas para extraer clases que, aunque no
son infalibles, son un buen punto de partida cuando no se tiene demasiada ex-
periencia en el modelado de objetos. La que nosotros recomendamos es un ex-
tracto y una adaptacin de distintas tcnicas.
Hay que comentar que esta tcnica slo ser vlida en problemas pequeos y,
en nuestro caso, en el aprendizaje de la orientacin a objetos.
1) Enumerar las clases candidatas, todas las que aparezcan o se puedan dedu-
cir de la descripcin del problema. Las clases suelen aparecer como sustantivos
o frases nominales, por lo cual es til y recomendable subrayarlas en el texto.
Clases irrelevantes (que tengan poco que ver o nada con el problema).
La UOC quiere automatizar su departamento de envos y para esto nos ha pedido que
diseemos una aplicacin a partir de los requisitos siguientes:
Hay tres tipos de envos: envos normales, envos especiales y envos urgentes.
Al principio del curso, el sistema decide de manera automtica el contenido del envo
destinado a cada estudiante, ya que sabe las asignaturas de las que se ha matriculado
y los materiales que estn asociados a las mismas.
El sistema gestiona los envos a los consultores de las asignaturas y detecta que cierta
persona es consultora de ms de una asignatura, caso en el que le remite todos los ma-
teriales en un nico envo.
El sistema controla el caso de los consultores que son estudiantes de otras asignaturas
de la UOC para enviarles todo el material en un nico envo.
En todo momento, el receptor futuro del envo puede conectarse al campus e, intro-
duciendo su nombre de usuario, conocer el estado del envo (todava por empaquetar,
empaquetado o enviado por correo).
A partir de este texto, seguiremos los pasos para identificar correctamente las
clases que modelarn nuestro problema.
La UOC quiere automatizar su departamento de envos y para esto nos ha pedido que
diseemos una aplicacin a partir de los requisitos siguientes:
Hay tres tipos de envos: envos normales, envos especiales y envos urgentes.
Al principio del curso, el sistema decide, de manera automtica, el contenido del en-
vo destinado a cada estudiante, ya que sabe las asignaturas de las cuales se ha matri-
culado el alumno y los materiales que estn asociados a las mismas.
El sistema gestiona los envos a los consultores de las asignaturas y detecta que cierta
persona es consultora de ms de una asignatura, caso en el que le remite todos los ma-
teriales en un nico envo.
El sistema controla el caso de los consultores que son estudiantes de otras asignaturas
de la UOC para enviarles todo el material en un nico envo.
En todo momento, el receptor futuro del envo puede conectarse al campus e, intro-
duciendo su nombre de usuario, conocer el estado del envo (todava por empaque-
tar, empaquetado o enviado por correo).
FUOC PID_00161676 28 Abstraccin y clasificacin
Una vez enumeradas, confeccionamos una lista con las posibles candidatas:
UOC
Departamento de envos
Aplicacin
Envo
Envos normales
Envos especiales
Envos urgentes
Sistema
Asignaturas
Materiales asociados
Libros
Vdeos
CD
Materiales antiguos
Curso
Estudiante
Alumno
Consultores
Persona
Campus
Nombre de usuario
Envo por empaquetar
Envo empaquetado
Envo enviado por correo
Una vez realizados los comentarios anteriores, la lista de clases queda de la manera siguiente:
Envo
Asignatura
Material
Libro
Vdeo
CD
Curso
Estudiante
Consultor
Persona
Ahora slo faltara realizar el diagrama de las clases resultantes, poniendo los atributos
de cada clase y marcando las relaciones entre las mismas.
FUOC PID_00161676 29 Abstraccin y clasificacin
5. Tipos de clases
Hasta ahora, hemos tratado las clases como tipos de objetos que podemos ins-
tanciar en un programa. Sin embargo, para profundizar un poco ms en su co-
nocimiento es necesario ver que hay algunos tipos de clases ligeramente
diferentes de las vistas hasta el momento, y que tienen usos distintos en el di-
seo de aplicaciones.
En UML, para expresar que una clase es abstracta, tenemos que escribir el
nombre de la clase en letra cursiva.
Una vez acabada la etapa de diseo del modelo de nuestro problema, si nos
ponemos a programar, encontraremos que las clases abstractas sirven en gran
manera para permitir y facilitar la reutilizacin de cdigo.
Para entender un poco ms a qu denominamos nosotros contenedor, aqu tenis una lista
de algunos contenedores y una pequea explicacin de su comportamiento.
Lista: contenedor que almacena objetos, generalmente de manera ordenada (por or-
den de insercin, o por algn otro parmetro).
Pila: contenedor de objetos con un comportamiento LIFO (last in, first out; es decir,
el ltimo elemento almacenado es el primero que se recupera).
Vector: contenedor que implementa una matriz de tamao variable. Permite acceder
a los objetos por medio del ndice en el que estn almacenados.
Las clases definidas como finales tienen como propiedad que no se per-
mite su extensin mediante la especializacin.
Resumen
Las clases no estn aisladas en nuestros dominios, sino que se relacionan con
otras clases, relaciones que representamos en los diagramas como asociacio-
nes. Este concepto tiene muchos elementos que nos permiten definir el com-
portamiento de las asociaciones y es de los ms importantes en el paradigma
de la programacin orientada a objetos.
Unos tipos de clases que nos pueden servir en determinadas ocasiones para fa-
cilitar la tarea de modelizacin son las clases abstractas, las clases parametriza-
das y las clases finales. No hay que utilizarlas en todos los diseos, pero s que
es necesario conocerlas para poder utilizarlas cuando sea necesario.
FUOC PID_00161676 Abstraccin y clasificacin
FUOC PID_00161676 33 Abstraccin y clasificacin
Ejercicios de autoevaluacin
1. Razonad si en el modelado de una aplicacin de dibujo geomtrico se podran incluir las
clases siguientes:
Punto
Circulo
Elipse como especificacin de la clase Circulo
TrianguloRectangulo como especificacin de la clase Triangulo
FiguraGeometrica
FiguraGeometrica como clase abstracta
2. Explicad cmo se tendra que representar la relacin entre las novelas y los autores, como
una asociacin o como una agregacin?
Si todo el mundo debe tener algn padre biolgico en el mundo real, por qu razn tenemos
la cardinalidad 0..2 en el extremo de Parent? De dnde sale este 0 y por qu tiene sentido?
Ejercicios de modelado
1. Se quiere modelar un carrito de la compra para los usuarios registrados (mediante usuario
y contrasea) de una tienda virtual de venta de libros y CD musicales. Un carritode la compra...
De los libros es necesario que almacenis los autores y el ndice o tabla de contenidos es
... permite ir almacenando
decir, la lista de captulos y posibles subcaptulos; de los CD tambin es necesario que al- productos hasta que se decida
macenis al autor que, por ejemplo en el caso de las recopilaciones, puede ser ms de uno. realizar el pedido con los pro-
Un cliente puede tener varias direcciones postales y diferentes tarjetas de crdito (VISA, ductos guardados, y despus
Mastercard, AMEX, etc.). En el momento de realizar el pedido, tenis que permitir que se- queda vaco para volver a
leccione una de sus tarjetas para pagar y una de las direcciones postales que haya inserta- empezar.
do. Debis tener en cuenta que un cliente puede realizar varios pedidos con una direccin
postal y una tarjeta de crdito diferente para cada caso.
Slo es necesario que hagis el modelo de clases, no hace falta que modelis los distintos
pedidos que se generan a partir del contenido de los carritos. No es necesario que definis
todas las operaciones, slo
las ms importantes.
2. Se intenta realizar un modelo que sirva para mantener un registro de los resultados de la liga
de hockey sobre hielo. En este modelo, tenis que representar los partidos y los equipos, pero
no es necesario que almacenis ninguna informacin referente a los rbitros, estadios o a
otros elementos que no sean imprescindibles para cubrir las funcionalidades pedidas.
Las funcionalidades que se esperan del modelo son:
Obtener la tabla de clasificacin actual.
A partir de un equipo, obtener el calendario de los partidos que falta disputar.
Obtener al mximo goleador del campeonato hasta el momento y hacer la lista de los
goles anotados en cada partido, con el minuto en el que fue marcado. Supondremos
que los jugadores no cambian de equipo durante la temporada.
En el caso de que haya jugadores extranjeros, es necesario que almacenis su nacionalidad.
FUOC PID_00161676 34 Abstraccin y clasificacin
Solucionario
Ejercicios de autoevaluacin
1. Razonad si en el modelado de una aplicacin de dibujo geomtrico se podran incluir las
clases siguientes.
Punto: es una clase que se podra incluir, ya que un punto es una figura geomtrica.
Circulo: tambin se podra incluir, por las mismas razones que la clase Punto.
Elipse como especificacin de la clase Circulo: no tiene sentido porque una elipse no
es un caso especfico de crculo; por lo tanto, no tendra sentido crear una relacin de
especializacin.
TrianguloRectangulo como especificacin de la clase Triangulo: podra tener senti-
do, porque un tringulo rectngulo es, en esencia, un tringulo con una propiedad dife-
renciadora, pero habra que ver si esta distincin realmente es necesaria para la aplicacin.
FiguraGeometrica: en principio, no tendra ningn sentido ya que es un concepto abs-
tracto que no puede ser representado en un dibujo.
FiguraGeometrica como clase abstracta: en este caso s que tiene sentido tener una clase
abstracta que sirva para agrupar todas las formas geomtricas posibles y definir unas pro-
piedades y funcionalidades comunes.
2. La asociacin entre novelas y autores siempre ser una asociacin, ya que no hay ninguna
relacin semntica todo/parte entre los mismos. Aparte, los objetos que representen las
novelas y los autores no tienen por qu tener unos tiempos de vida coincidentes.
3. En este caso, la cardinalidad 0..2 nos indica que, aunque en el mundo real toda persona
necesita a un hombre y una mujer para nacer, se puede dar el caso de que en nuestra apli-
cacin no almacenemos los datos de ambos, porque desconocemos los datos, porque no
nos interesan para nuestro dominio o por cualquier otra razn.
El 0 se puede interpretar de muchas maneras, pero la ms sencilla es la falta de los datos
de los padres de una persona.
Ejercicios de modelado
2. Puesto que nos piden que almacenemos la mnima cantidad de informacin posible, hay
que ver cules son los datos que necesitamos para poder ofrecer las funcionalidades que
nos piden.
La nica cosa necesaria para poder mantener una clasificacin son los equipos y los resul-
tados de los partidos que juegan entre s. El resultado se puede almacenar como el valor
de los goles del partido y despus calcularemos su resultado, sabiendo cul es el equipo
local y el visitante.
Es necesario que el partido est relacionado con los equipos que juegan con dos roles para
distinguir el equipo local y el visitante.
Para saber quin es el mximo goleador y poder realizar todas las operaciones pedidas, hay
que asociar a los jugadores con los equipos, y tambin con todos los partidos en los que haya
marcado goles. Y mediante una clase asociativa, el registro del minuto en el que los marc.
Finalmente, para saber la nacionalidad de los jugadores extranjeros, necesitaremos una
clase que herede de Jugador y que almacene el nombre del pas.
Glosario
abstraccin f Capacidad de concebir un concepto sin pensar en ningn ejemplo especfico.
asociacin asociativa f Relacin entre dos instancias de clases diferentes en la que se de-
ben almacenar datos de esta relacin.
asociacin de agregacin f Relacin entre dos clases de objetos en la que una contiene
una unin de entidades de la otra.
asociacin de composicin f Relacin entre dos clases de objetos en la que una contiene
un grupo de entidades de la otra y en la que stas no tienen sentido fuera de la relacin.
cardinalidad f Manera de describir el nmero de entidades con el que est relacionada cada
instancia de una relacin.
clase f Concepto que permite definir entidades con propiedades comunes mediante la abs-
traccin.
clase abstracta f Clase que queda definida, pero que no acepta instancias concretas.
clase parametrizada f Clase que define el comportamiento sin que se tenga en cuenta el
tipo objeto sobre el cual se actuar.
FUOC PID_00161676 36 Abstraccin y clasificacin
generacin f Accin de crear una clase mediante otras buscando los trminos comunes.
Bibliografa
Booch, G.; Jacobson, I.; Rumbaugh, J. (1999). El lenguaje unificado de modelado. Madrid:
Addison Wesley.
Gamma, E.; Helm, R.; Johnson, R.; Vlissides, J. (1995). Design patterns. Elements of
reusable object-oriented design. Addison Wesley.
Rumbaugh, J.; Blaha, M.; Premernali, W.; Eddy, F.; Lorensen, W. (1996). Modelado
y diseo orientado a objetos. Madrid: Prentice Hall.