Download Relaciones

Document related concepts
no text concepts found
Transcript
CURSO
Programación Orientada a Objetos
Parte 2
RELACIONES ENTRE CLASES
(UML, Lenguaje Unificado de Modelado)
Ignacio Zahonero Martínez, Luis Joyanes Aguilar
RELACIONES ENTRE CLASES

Las clases y objetos no pueden existir aislados y en consecuencia existirán relaciones entre ellos. Al igual que
ocurre con los conceptos, entes del mundo real, que entre ellos hay relaciones de distinto tipo.

Las relaciones se expresan frecuentemente utilizando verbos o frases con verbo del lenguaje natural, tales como
vive-en, participa-en, trabaja-para, está compuesto de. Por ejemplo:
Periodista participa en Tertulia
Gerente paga la Factura
Semáforo controla Trafico

Las relaciones entre clase pueden indicar alguna forma de compartir, así como algún tipo de conexión semántica.

Los tipos de relaciones entre clases:
•
Asociación
•
Agregación
•
Generalización/especialización
•
Dependencias
Cada relación tiene una representación gráfica en UML

Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
2
ASOCIACIONES(I)

La asociación es la relación más común entre clases.

Una asociación es una conexión conceptual entre clases. Describe un grupo de enlaces con estructura y
semántica comunes. Por ejemplo:
Cajero
lee
Tarjeta
Coche
lleva
Copiloto

Las conexiones que describe una asociación dan lugar a interacciones entre los objetos de una colaboración.

Las asociaciones más comunes son las binarias, esto es, intervienen dos clases
participa en
Jugador
Equipo
Gestiona ficha
Entrenador
 Varias clases se pueden conectar a una. Por
ejemplo Jugador, Entrenador y Equipo
lleva
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
3
ASOCIACIONES(II)
 Una asociación puede contener atributos y operaciones. Cuando esto ocurre se tiene una clase de asociaciones
Camarero
trabaja en
Contrato

Restaurante
negociado
Gerente
Las asociaciones son inherentemente bidireccionales, pueden recorrerse en ambas direcciones. Por ejemplo:
Supermercado recibe pedidos telefónicos de Clientes
Cliente hace su pedido por teléfono al Supermecado

En ocasiones es deseable que la navegación sea unidireccional. Gráficamente, cuando es unidireccional, la línea
que une las dos clases termina en punta de flecha.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
4
INFORMACION DE LAS ASOCIACIONES

Una asociación tiene un nombre, con frecuencia un verbo. El nombre de la asociación se escribe en la línea que
representa la asociación. Por ejemplo:
Usuario utiliza Computadora
Estudiante recibe un Curso
Piloto controla Avión

Es posible utilizar una punta de flecha para indicar el sentido en que se lee. Puede tener nombres diferentes,
uno por cada dirección.

Cada extremo de una asociación es un rol (papel que juega). Cada rol puede tener un nombre que indica cómo
es visualizada la clase por la otra. Por ejemplo, una Empresa visualiza a Persona como un empleado.

Los roles deben ser únicos.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
5
INFORMACION DE LAS ASOCIACIONES

Multiplicidad: es el número de objetos de un extremo de la asociación que están enlazados con un objeto del
otro extremo. Por ejemplo, una Empresa puede emplear a muchas Personas. La multiplicidad de Empresa con
Persona es "una a muchos": 1 .. *.
Otro ejemplo: una Persona puede tener muchos Permisos de conducir. Un Permiso sólo pertenece a una
Persona. La representación gráfica:
Persona
1
*
PermisoConducir
Alternativamente, la multiplicidad * se representa mediante un contenedor, una lista, que almacena los objetos:
Persona
1
Lista
Curso de Programación Orientada a Objetos en Java
*
PermisoConducir
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
6
NAVEGACIÓN

La navegación indica si es posible atravesar una asociación binaria desde un objeto de
un extremo para llegar a uno o más objetos del otro extremo.

La navegación suele ser bidireccional. En ocasiones es deseable que sea unidireccional.

Para atravesar las asociaciones se utilizan expresiones de la clase origen que permiten
obtener el objeto o conjunto de objetos asociados con una instancia de la misma.

Un factor a tener en cuenta para determinar el tipo de navegación es conocer la
necesidad de colaborar una clase con otra para realizar un requisito del contexto del
problema.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
7
MULTIPLICIDAD

Indica el número de objetos de una clase que se relacionan con un objeto de la otra clase de la asociación ( o
agregación). Por ejemplo:
posee
0..*
Persona
Una persona posee cero o muchos coches.
Coche

La multiplicidad se muestra en los extremos de la asociación, en las clases donde es aplicable.

Los valores, rango, de multiplicidad son los siguientes:
•
•
•
•
•
Exactamente 1 (1). Un número finito. (Estudiante (1) dispone de un Carnet)
Cero ó 1, se indica 0 .. 1, opcionalidad. (El Medico visita a Paciente acompañado, o no, de ATS)
Cero a muchos, se indica 0 .. *
Uno a muchos, se indica 1 .. * .
Rangos fijos, 1 .. 4, o varios números (2, 5, 6,7).
operación
Cajero
*
propietario
Curso de Programación Orientada a Objetos en Java
*
Cliente
password
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
8
AGREGACIÓN

La relación entre clases de agregación se considera un caso especial de asociación. Es una relación Todo-Parte
entre una clase agregada (el todo) y una de las partes que los forman. Da lugar a jerarquías de agregación.

Ejemplo 1, un Elemento de dibujo es un todo formado por las partes: Linea, FiguraSimple y FiguraCompuesta

Ejemplo 2: un Equipo multidisciplinar(el todo) está formado por un Pedagogo, dos Psicologos y tres Educadores
Orquesta
1..*
Profesor
Batería

Propiedades:
•
Transitiva (A es parte de B, B es parte de C -> A es parte (subparte) de C)
•
Antisimétrica: un objeto no puede ser el todo y la parte simultáneamente.

La agregación se representa por un rombo en la parte del todo.

Al ser un caso especial de asociación, puede haber multiplicidad.
Curso de Programación Orientada a Objetos en Java
6..12
Cañón
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
9
TIPOS DE AGREGACIÓN



Agregación simple o compartida: la parte puede pertenecer a más de un agregado. Es decir las partes
pueden ser partes de cualquier todo. La destrucción del Todo no implica la destrucción de las partes.
Las partes, en este tipo de agregación, pueden existir independientemente del todo.
Ejemplo : un Equipo de trabajo se compone de diferentes Personas. Una misma Persona puede ser miembro de
más de un equipo de trabajo.
Universidad
*
Facultad

La agregación compartida se representa con el rombo.

Composición (agregación fuerte): el todo "contiene" a las partes. Las partes y el todo se crean y destruyen
en el todo. Forma jerarquías de partes.
Un objeto sólo puede ser parte de una composición.
Se representa con un rombo sombreado en el extremo del todo.


Parking
2
Barrera
2
Ascensor
Curso de Programación Orientada a Objetos en Java
Plaza
1 .. *
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
10
GENERALIZACIÓN/ESPECIALIZACIÓN

Una generalización se conoce como una relación es-un, es-un-tipo-de. Es una relación entre clases
especializadas de una clase general. Un Vendedor es-un Empleado, una Opera es-un Espectáculo, un Rectángulo
es un tipo de Forma.

La generalización es una relación entre una clase general y una clase específica. La clase específica, denominada
subclase, hereda de la clase general. Se heredan los atributos y las operaciones.

La clase general agrupa los atributos y los métodos comunes a las clases especializadas.

La generalización se representa con una línea de la clase más específica a la clase más general con un triángulo
vacío en el extremo de la línea de la superclase.

Una subclase o clase hija puede ser a su vez clase base de otra lo que produce jerarquías de clases.

En las jerarquías de generalización/especialización, hacia arriba se generaliza. La clase más alta en la jerarquía
es la clase más general. la clase base.

La implementación de la generalización en un lenguaje de programación se conoce como herencia.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
11
JERARQUÍAS DE GENERALIZACÍON
Cuenta
Cuenta
Cuenta
corriente
vivienda
Cuenta
de valores
Registro
Registro
Registro
de pasajero
de vuelo
vuelo
compartido
vuelo
operacional
Curso de Programación Orientada a Objetos en Java
pasajero
turista
pasajero
de empresa
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
12
CONCEPTOS ESENCIALES

La creación de una clase a partir de una existente se denomina derivación.

A la capacidad de definir una clase a partir de otra clase ya existente y de añadirle comportamiento y estado se
conoce como extensión de la clase original (Java).

El comportamiento de una clase se puede extender mediante un mecanismo que recibe el nombre de herencia.
class BilleteElectronico extends Billete
{

La clase BilleteElectonico extiende de Billete. Por consiguiente, BilleteElectronico es una subclase de
Billete y Billete es la superclase (clase base) de BilleteElectronico.

Al crear un objeto de tipo BilleteElectronico se crea un único objeto que consta del objeto de tipo Billete
extendido con los atributos propios de BilleteElectronico. Todos los métodos (no privados) de Billete y de
BilleteElectronico se pueden invocar directamente desde el objeto BilleteElectronico.
BilleteElectronico e = new BilleteElectronico("Ignacio", 233, "Madrid", visa);

Todo objeto de la clase BilleteElectronico es-un objeto de tipo Billete.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
13
HERENCIA

La orientación a objetos se caracteriza, además de por la encapsulación y la ocultación de información, por
incorporar la característica de la herencia.

Mediante la propiedad de herencia se permite a los objetos ser construidos a partir de otros objetos. Por
ejemplo, un objeto ventana de texto se construye a partir del objeto ventana.

Otra forma de expresar la propiedad de herencia, la capacidad de un objeto para utilizar las estructuras de datos
y los métodos de objetos ascendientes o antepasados.

El objetivo final es la reutilización, es decir, reutilizar el código anteriormente desarrollado.

La herencia implica una clase base y una jerarquía de clases que contienen las clases derivadas de la clase base.
Las clases derivadas heredan el código de su clase base, añadiendo su propio código especial, incluso cambian
aquellos elementos de la clase base que necesita sean diferentes.

La herencia se apoya en el significado de ese concepto en la vida ordinaria. La clases básicas se dividen en
subclases. La clase electrodoméstico se divide en subclase lavadora, cocina, lavavajillas, etc. La jerarquía
comparte características comunes; si bien una lavadora tiene características especiales que la diferencian de una
cocina.

Las características y comportamiento comunes se definen en la clase base.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
14
TIPOS DE HERENCIA

Hay dos de tipos de herencia: herencia simple y herencia múltiple.

La herencia simple es aquella en la que cada clase hereda de una única clase.

La herencia múltiple es la transmisión de métodos y datos de más de una clase base a la clase derivada.

Por ejemplo, en el contexto de una simulación la clase Concurre ( representa actividades concurrentes ) puede
tener dos clase base, la clase Tarea y la clase Dato.

Dos problemas se pueden presentar cuando se diseñan clases con herencia múltiple:
• Colisiones de nombres de diferentes clases base.
• Herencia repetida de una misma clase base.

Las jerarquías de herencia múltiple pueden ser complejas de gestionar. De hecho, no todos los
lenguajes OO la implementan.

Java, C# y Smalltalk no implementa la herencia múltiple. Eiffel y C++ admiten herencia simple y
múltiple.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
15
HERENCIA MÚLTIPLE
Motor
- potencia
MotorGas
MotorElectrico
- tiempoExplos
- intensidad
MotorHíbrido
 Esta jerarquía con herencia múltiple presenta el problema de repetición del atributo potencia en la clase
MotorHibrido.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
16
HERENCIA SIMPLE
Artículo
Audio
Vídeo
Radio
Altavoz
Amplificador
CD
 En esta jerarquía cada clase tiene como máximo una sola superclase. La herencia simple permite que una
clase herede las propiedades de su superclase jerárquica.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
17
SUSTITUCIÓN/REDEFINICIÓN

Los atributos y métodos definidos en la superclase se heredan por las subclases. Si la propiedad se define
nuevamente en la subclase, entonces esta definición es la utilizada en la subclase.

La capacidad de una clase derivada (subclase) para definir un miembro con el mismo nombre que un miembro
heredado se denomina redefinición (anulación o sustitución son términos equivalentes).
class Telef {
public void sonar() {
System.out.print(" rin rin ");
}
class Movil extends Telef{
public void sonar() {
cancion.audio();
}
class Fijo extends Telef {
public void sonar() {
System.out.
print(" ron ron ");
}

Cuando se referencia al miembro redefinido desde un objeto de la subclase, se usará el miembro definido por
dicha subclase.

El miembro heredado de la superclase no se pierde por ser redefinido, es posible acceder a dicho miembro
cualificándolo (en Java con super).

La clase Fijo puede redefinir sonar(), añadiendo a las características de sonar() de Telef las propias de Fijo:
public void sonar() {
super.sonar();
System.out.print(" ron ron ")
}
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
18
CLASES ABSTRACTAS

Las clases abstractas definen un concepto o tipo generalizado y sirven para describir nuevas clases. Una clase
abstracta no se puede instanciar y sólo tiene significado como clase base de otras clases.

En las jerarquías de clases, las superclases que se crean a partir de subclases con atributos y comportamientos
comunes, y que sirven para derivar otras clases que comparten sus características, son clases abstractas.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
19
IMPLEMENTACIÓN DE ASOCIACIONES

La implementación de la relación de asociación depende de la multiplicidad y de la navegación.

En general, en Java se implementa definiendo un atributo que permita acceder al, o a los, objetos con que está
relacionado.

Por ejemplo, si la clase claseA tiene una relación de asociación bidireccional con la clase claseB, de
multiplicidad 1 a 1 la implementación en Java:
class claseA
{
protected claseB objB;

class claseB
{
protected claseA objA;
Posiblemente se necesite definir un método de la clase para establecer la asociación con otra clase.
class claseA
{
protected claseB objB;
public setEnlace(claseB x)
{
objB = x;
x.setEnlace(this);
}
Curso de Programación Orientada a Objetos en Java
class claseB
{
protected claseA objA;
public setEnlace(claseA q)
{
objA = q;
...
}
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
20
ASOCIACIONES UNIDIRECCIONALES(I)

Multiplicidad uno (1): se añade un atributo de tipo referencia a objeto de la clase destino.
class Radio
{
protected Emisora actual = null;
public void setCanal(int dial)
{
actual = new Emisora(dial);
}

Multiplicidad uno a muchos: se añade un atributo que permita almacenar una colección de objetos. Si el número
de objetos relacionados tiene un límite fijo, la colección puede ser un array, ..., en general un contenedor.
class Pasajero
{
;
}
class Vuelo
{
int contador;
protected Pasajero [] pd;
public Vuelo(int capacidad)
{
contador = 0;
pd = new Pasajero[capacidad];
}
Curso de Programación Orientada a Objetos en Java
public void setPax(Pasajero p)
{
contador ++;
// validar capacidad
pd[contador] = p;
}
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
21
ASOCIACIONES UNIDIRECCIONALES(II)

Multiplicidad uno a muchos. Si el extremo "muchos" no es un límite conocido se utiliza un
contenedor dinámico (una lista, un vector ...).
Teatro
0..n
Espectáculo
Se representa como:
Teatro
Contenedor Espectáculo
Curso de Programación Orientada a Objetos en Java
0..n
Espectáculo
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
22
IMPLEMENTACIÓN DE ASOCIACIONES BIDIRECCIONALES

Cuando la relación de asociación entre dos clases es navegable en ambos sentidos, en general se implementa
igual que una asociación unidireccional pero en ambos sentidos.

En el caso de multiplicidad uno a uno:
class claseA
{
protected claseB objB;

class claseB
{
protected claseA objA;
Para multiplicidades rango:
Biblioteca
1..n
1..8
Persona
socio
class Biblioteca
{
private ListaSocio sc;
Curso de Programación Orientada a Objetos en Java
class Persona
{
private Biblioteca[] bl;
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
23
IMPLEMENTACIÓN DE HERENCIA



La técnica de crear nuevas clases a partir de las antiguas se conoce como derivación. La nueva clase se denomina
clase derivada y la clase antigua es la clase base.
En Java la herencia se conoce como derivación o extensión. Se emplea la palabra reservada extends.
Sintaxis
:
class Base { ... }
class Derivada extends Base
{
// atributos nuevos de Derivada
// métodos nuevos de Derivada
}

Los miembros privados de la clase base nunca son visibles en la clase derivada.

En la clase derivada se pueden invocar a las versiones originales de los métodos redefinidos utilizando super.

En general, super hace referencia a la porción del objeto Padre que tiene el objeto Hijo.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
24
REGLAS DE ACCESO A LA CLASE BASE

Los miembros públicos de la clase base son también miembros públicos de la clase derivada, los miembros
protegidos de la clase base se convierten en protegidos de la clase derivada, y los miembros privados de la clase
base no son visibles en la clase derivada.
class Cartilla
{
private String tit;
protected double saldo;
public void ingresar(double q)
{
saldo += q;
}
class Ahorrro extends Cartilla
{
private int duracion;
public void informe()
{
if (saldo > 0 ...// heredado
System.out.println(tit);
}
// error, no visible
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
25
CONSTRUCTOR DE UN OBJETO DERIVADO

La información para construir una parte del objeto derivado reside en la clase base. Por esa razón antes de aplicar
el constructor de la clase derivada se aplica el constructor de la clase base. Por ejemplo, al crear un objeto
Profesional primero se crea la parte de Persona y, a continuación la parte de Profesional.

Si la clase base fuese, a su vez, derivada de otra clase base, antes de crearse la porción del objeto correspondiente
a esta se crearía la parte de su clase base. Y así sucesivamente.

El constructor de una clase debe inicializar sólo los datos que dicha clase añada a la jerarquía.

La inicialización de los datos de la clase base se realiza llamando explícitamente al constructor de la clase base.

En Java, la llamada al constructor de la clase base desde el constructor de la clase derivada se realiza con
super() proporcionando los argumentos requeridos por dicho constructor.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
26
OBJETO DERIVADO
class Lampara
{
private int pot;
protected String desr;
public Lampara(int pot, String d)
{
this.pot = pot;
desr = d;
}
// ...
class LamparaGas extends Lampara
{
private double cd;
public LamparaGas(int pt, String ds, double can)
{
super (pt, ds);
cd = can;
}
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
27
RELACIONES DE DEPENDENCIA

La relación de dependencia es una conexión semántica entre dos elementos del modelo, uno independiente y un
elemento dependiente

Se caracteriza esta relación porque un cambio en el elemento independiente afecta al elemento dependiente.

El elemento puede ser una clase, un paquete, un caso de uso, etc.

Un ejemplo de dependencia es el de una clase con un método que toma un objeto de otra clase para realizar
una operación.

La relación de dependencia se representa con una línea punteada terminada en una flecha.
Proveedor
HojaMovimiento
 La clase Sistema tiene la operación
mostrarHoja() que tiene el argumento
HojaMovimiento.
 La relación de dependencia se
considera que es una relación de uso.
Cliente
Sistema
mostrarHoja()
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
28
EJEMPLOS
MODELADO DE OBJETOS
BÚSQUEDA DE CLASES

Un problema desarrollado con técnicas O.O., en primer lugar debe responder a esta pregunta: ¿cuáles son los
objetos del programa?.

Los objetos son instancias de clases, entonces la primera etapa en el desarrollo O.O. exige la identificación de
clases, y posteriormente sus atributos y comportamiento (métodos).

La localización de clases debe pertenecer al dominio del problema y darles nombres que representen su
responsabilidad en la aplicación.

Coad y Yourdon proponen seguir un método que consta de dos etapas:
•
•

Primero buscar las clases candidatas. Se identifica un conjunto amplio de clases candidatas.
En segundo lugar, seleccionar de entre ellas las clases válidas. Aquellas que sean aplicables al dominio de
nuestro problema.
Bertrand Meyer: "No existe una receta milagrosa para identificar clases que pueda sustituir a la destreza individual
o al experiencia del propio desarrollador de aplicaciones."
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
30
IDENTIFICAR LAS CLASES(I)

Existen diversos criterios para identificar clases candidatas. El sistema que propone UML:
En conversaciones con el cliente del sistema a desarrollar, preste atención a los sustantivos que
utiliza para describir las entidades de su negocio, ya que dichos sustantivos se convertirán en clases
candidatas de su modelo. También preste atención a los verbos que escuche, constituirán
operaciones de sus clases. Los atributos surgirán como sustantivos relacionados con los nombres de
las clase.
Una vez que tenga una lista básica de las clases, pregunte a los clientes qué es lo que cada clase
hace dentro del negocio  responsabilidades de la clase.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
31
IDENTIFICAR LAS CLASES(II)

Cuando se parte de un documento con los requisitos del problema, el mejor sistema para identificar
clases, o mejor clases candidatas:
Lea la definición o descripción de las especificaciones del problema y localice los nombres o frases
con nombre y verbos o frases con verbos. Los nombres son buenos indicadores de la existencia
de objetos en el modelo OO y los verbos son candidatos a métodos.

Después de encontrar todos los nombres, se examina lista y se decide qué nombres son realmente
clases en nuestro sistema. Pueden aparecer nombres que simplemente sean atributos de una clase,
por ejemplo un nombre que no puede ser clase es el número de nómina. Es un dato que no
contiene acciones, será un atributo de la clase Empleado.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
32
CONCEPTOS QUE IDENTIFICAN CLASES

Cuando se buscan clases candidatas en el documento de requisitos las siguientes cuestiones ayudan a
identificarlas:
•
¿Se dispone de información que se pueda analizar o almacenar?. En definitiva eventos a recordar. La
información puede ser concepto que se debe registrar en el sistema y por consiguiente clase en el dominio
del problema. Por ejemplo: fecha y hora de acceso de un coche a un parking, compra con una tarjeta.
•
¿Existen sistemas externos?. Sistemas con los que interactúa el sistema en desarrollo. Si es así, serán
considerados clases.
•
¿Existen dispositivos que el sistema puede manejar?. Cualquier dispositivo externo conectado al sistema se
convierte en clase candidata. Por ejemplo, barrera automática, sensor de temperatura, etc.
•
¿Existen partes organizacionales?. Sucursal, departamento, comité etc, siempre que haya que guardar
información específica.
•
¿ Qué roles juegan los actores en la aplicación?. Gerente, Oficinista, Supervisor, etc, son diferentes roles que
una persona puede desempeñar en un trabajo. Jefe de Estudios, Alumno, Director, Profesor, son roles que
desempeñan personas en un Consejo Escolar. Estos roles se pueden ver como clases.
•
¿Hay lugares de los que se necesite guardar información?. Si es así serán candidatos a clases.
•
¿Hay componentes, bibliotecas de clases de proyectos anteriores ?. Normalmente contendrán clases
candidatas.

Regla: convertir en clase candidata todo aquel concepto del que haya que almacenar información
en el sistema, bien a corto o a largo plazo.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
33
EJEMPLO: FLOTA DE VEHÍCULOS(I)

Controlar la gestión de una flota de diferentes vehículos: coches, camiones, aviones, helicópteros. Cada vehículo
dispone de un radio de acción y una capacidad de carga total. En un instante dado, un vehículo puede encontrarse
en un cierto lugar con una determinada carga.

Identificar clases. Del análisis del enunciado se extrae la siguiente lista de nombres y frases con nombre que
son clases candidatas:
Flota
Vehículo
Coche
Camión
Avión
Helicóptero
Radio de acción
Capacidad de carga
Lugar
Carga
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
34
EJEMPLO: FLOTA DE VEHÍCULOS(II)



Una vez realizada la primera lista de clases candidatas, se realiza un proceso de refinamiento que trate de evitar
una proliferación inútil de clases.
En esta aplicación parece que no es necesario declarar clases para gestionar el radio de acción y la capacidad de
carga. Estas características se pueden fijar como atributos de vehículo y son comunes a todo tipo de vehículo.
También, es lógico pensar que existen dos tipos de vehículos: terrestres y aéreos. Entonces la lista de clases:
Flota
Vehículo
Vehículo Terrestre
Vehículo Aéreo
Coche
Camión
Avión
Helicóptero
Lugar
Carga
Relaciones. Un flota contiene vehículos (agregación). Cada vehículo contiene una carga (agregación) y se
encuentra actualmente en un lugar. Hay diferentes tipos de vehículos que comparten propiedades y
comportamiento (generalización/especialización):
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
35
CRITERIOS PARA ELEGIR CLASES VÁLIDAS

A partir de la lista de clases candidatas, para seleccionar las clases válidas se pueden seguir los
siguientes criterios:
•
Necesidad de recordar. La clase debe tener información asociada.
•
Necesidad de comportamiento. Las clases deben tener operaciones. Un clase sin operaciones puede
existir pero es conveniente una reflexión sobre su utilidad.
•
Mas de un atributo. Una clase con un solo atributo es sospechosa de no ser clase, sino atributo de otra.
•
Atributos y métodos siempre aplicables. Todos los objetos de una clase deben tener los mismos
atributos y métodos. Si se encuentra objetos de la misma clase con atributos, o métodos, diferentes, puede
ser que en realidad exista más de una clase, las cuales se relacionarán mediante generalización.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
36
EJERCICIO 1 DE MODELADO DE CLASES
Sistema de monitorización

Realice el análisis de un sistema de monitorización de redes que realiza la información y visualización de un grupo
de redes. Cada monitor muestra la configuración de una red en un momento específico. Existen tres tipos de
redes: en anillo, en bus y en estrella. Las redes están compuestas por nodos independientemente de su topología,
los cuales tienen un identificador de red único que los distingue. El sistema debe poder reconfigurar los nodos
añadiendo o quitando desde el monitor que la visualiza.

Identificar clases. Del análisis del enunciado se extrae la siguiente lista de nombres y frases con nombre que
son clases candidatas: Y de verbos que pueden indicar operaciones.
Nombres
Sistema
Red
Monitor
Red en anillo
Red en bus
Red en estrella
Nodo
Identificador
Curso de Programación Orientada a Objetos en Java
Verbos
mostrar
estar compuesta
visualizar
reconfigurar
añadir
eliminar
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
37
EJERCICIO 1, Sistema de monitorización (II)

A continuación se realiza un proceso de refinamiento. Parece que no es necesario declarar una clase para
representar el identificador de nodo. Estas característica se pueden fijar como atributo de nodo. En el enunciado
del texto aparece Sistema para referirse al problema, no tiene una responsabilidad en el dominio del problema.

Relaciones. Un red está compuesta de nodos (agregación).. Hay diferentes tipos de redes que comparten
propiedades y comportamiento (generalización/especialización). El monitor está relacionado con la red para
realizar su funcionalidad, es necesario establecer una relación de asociación entre monitor y red.

Las operaciones que se pueden identificar en la aplicación :




Monitor puede mostrar la configuración de la red.
Dar de alta un nodo.
Dar de baja un nodo.
Operaciones de navegación ...
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
38
EJERCICIO 1, Sistema de monitorización (III)
Red
Monitor
darAlta
1 .. *
identif
añadirNodo
darBaja
Nodo
quitarNodo
EnAnillo
Curso de Programación Orientada a Objetos en Java
EnEstrella
EnBus
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
39
EJERCICIO 2 DE MODELADO DE CLASES
Encuestas (I)

Se desea desarrollar un sistema de recogida de encuestas a través de internet. Cualquier persona desde su
navegador puede inscribirse en el sistema rellenando un formulario. El formulario recoge los siguientes datos
obligatorios del nuevo usuario:
•
•
•
•
Apellidos y nombre.
Alias de usuario para acceder al sistema.
Dirección de correo electrónico.
Temas en los que está interesado (seleccionando uno o más de los que se le ofrecen). Para cada uno de
estos temas, especificará un grado de preferencia en una escala de 1 a 10, según el grado de interés.
Una vez validados los datos, el sistema le devuelve al usuario una palabra clave única que le permitirá acceder al
sistema, junto al nombre de usuario. Periódicamente, el usuario recibirá por correo un cuestionario sobre uno de
los temas que seleccionó en su inscripción. Deberá rellenarlo y devolverlo por la misma vía. Para contestar al
cuestionario el usuario marcará una y sólo una de las cuatro propuestas a cada pregunta, pero en el futuro se
permitirá también hacer preguntas de otros tipos, como preguntas abiertas, y se debe acomodar el análisis a esta
circunstancia. A partir de todos los cuestionarios recogidos sobre un tema, el sistema publicará unos resultados
estadísticos que podrán ser consultados desde una página Web.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
40
EJERCICIO 2, Encuestas (II)

Identificar clases. Del análisis del enunciado se extrae la siguiente lista de nombres y frases con nombre que
son clases candidatas: Y de verbos que pueden indicar operaciones.
Sistema
Encuesta
Persona
Formulario
Usuario
Apellido
Nombre
Alias
Correo
Tema
Escala
Clave
Cuestionario
Pregunta
Respuesta
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
41
EJERCICIO 2, Encuestas (III)

Antes de realizar el proceso de refinamiento, recordemos la regla de oro: convertir en clase candidata todo
aquel concepto del que haya que almacenar información en el sistema, bien a corto o a largo plazo.
En un principio se puede considerar que Formulario es una forma de agrupar Nombre, Apellido, alias y dirección
de correo. Tema sí tiene entidad para ser una clase, guarda información y tiene operaciones para manejar el
contenido . La selección de un tema tiene la característica (atributo) de el grado de interés. Usuario es el rol de
Persona en este contesto. En el enunciado del texto aparece Sistema para referirse a la aplicación. Entonces la
lista de clases:
Encuesta
Usuario
Tema
Selección
Cuestionario
Pregunta
Respuesta
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
42
EJERCICIO 2, Encuestas (IV)


Relaciones. El usuario realiza una o más selecciones, cada elección se corresponde con un tema (relaciones de
asociación). Cada Cuestionario está formado por un rango de preguntas, y cada pregunta por 4 respuestas
(agregación). El usuario puede participar en un número de encuestas indeterminado. Para elaborar una encuesta
se evalúan las contestaciones recibidas.
Diagrama de clases:
Tema
Selección
Cuestionario
1..*
1..*
Usuario
Pregunta
Respuesta
4
0..*
Encuesta
 El diagrama no recoge la contestación a las preguntas del formulario. Se mejora con una nueva clase: Contestación,
asociada con Encuesta. Además, para tener en cuenta la posibilidad de preguntas abiertas, se introduce la clase
PreguntaTest, que incorpora la peculiaridades de este tipo de preguntas.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
43
EJERCICIO 2, Encuestas (V)

El diagrama de clases más refinado:
Pregunta
Tema
-nombre
+getNom
Selección
Cuestionario
1..*
- numPreguntas
Respuesta
PreguntaTest
4
1..*
1..*
1..*
Usuario
- nombre
- apell
- correo
0..*
Encuesta
-fecha
- numResp
1..*
Contestación
-orden
+getTexto
- clave
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
44
EJERCICIO 3 DE MODELADO DE CLASES
Organigramas(I)


Se desea implementar una aplicación que permita realizar organigramas en color. Los elementos de que consta un
organigrama en este momento son líneas, círculos, óvalos, rectángulos, rectángulos con esquinas redondeadas,
líneas rectas y texto. El sistema puede experimentar cambios por incorporación de nuevos elementos. Se sabe que
el cliente quiere que se pueda borrar, mover y por supuesto dibujar todos los elementos del organigrama. También
se ha de poder guardar y recuperar desde un almacenamiento permanente.
Identificar clases. Del análisis del enunciado se extrae la siguiente lista de nombres y frases con nombre que
son clases candidatas: Y de verbos que pueden indicar operaciones.
Nombres
Aplicación
Organigrama
Color
Elemento
Línea
Círculo,
Óvalo
Rectángulo
Rectángulo redondeado
Línea recta
Texto
Sistema
Cliente
Curso de Programación Orientada a Objetos en Java
Verbos
implementar
realizar
borrar
mover
dibujar
guardar
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
45
EJERCICIO 3, Organigramas(II)

Los conceptos, nombres puestos en negrita, se pueden considerar claves en el dominio del problema. Además es
lógico pensar en una clase que almacene organigramas, será la clase Colección.

Relaciones. Leyendo con detención el documento de requisitos, resulta que los conceptos clave Línea, Óvalo. .. ,
se pueden plantear que son un tipo-de, o bien es-un, con respecto a Elemento gráfico. Cuando esto ocurre se
establece una relación jerárquica generalización/especialización.
Un Organigrama está formado por muchos componentes de tipo Línea, Rectángulo, ... , en general de tipo
Elemento. Se establecerá una relación de agregación (todo-parte) entre Elemento y Organigrama.
Un razonamiento similar al anterior nos lleva a establecer una agregación entre Organigrama y Colección.
Una colección agrupa muchos organigramas.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
46
EJERCICIO 3, Organigramas(III)

El diagrama de clases (realmente sería un primer modelo)
Colección
Elemento
- color
Organigrama
1..*
+ añadir()
+ mover()
+mover()
+ borrar()
+ dibujar()
+ grabar()
dibujar()
+ recuperar()
Rectángulo
Óvalo
DeTexto
-orig
-orig
-ejeMy
-literal
-dest
-fin
- ejeMn
-tipo
+ borrar()
+ borrar()
+ borrar()
+ borrar()
+ dibujar()
+ dibujar()
+ dibujar()
+ dibujar()
Recta
+dibujar()
Rect
Redondo
+dibujar()
+ eliminar()
+borrar()
Línea
Línea
1..*
Círculo
+dibujar()
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
47
EJERCICIO 4 DE MODELADO DE CLASES
Biblioteca (nº 7)(I)
Encontrar las clases, relaciones y realizar un diagrama de clases del siguiente documento relativo a una biblioteca: por
cada libro existente el catálogo contiene el título, el autor y el número ISBN. Puede haber varios ejemplares de un libro.
Cada ejemplar de un libro tiene un único número de acceso. Los socios de la biblioteca tiene una clave para préstamo.
El sistema registra el nombre, dirección del lector y el número de clave por cada préstamo. Los socios sólo pueden
solicitar un libro en préstamo, el sistema mantiene un registro de los libros que un socio ha tenido en préstamo, junto
con la fecha de devolución.
Clases candidatas
Libro
Clave
Catálogo
Préstamo
Titulo
Nombre
Autor
Dirección
Isbn
Sistema
Ejemplar
FechaDevolución
Verbos
registrar nombre ...
solicitar
mantener registro
NumeroAcceso
Socio
Biblioteca
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
48
EJERCICIO 4, Biblioteca (II)
 Regla de oro: convertir en clase candidata todo aquel concepto del que haya que almacenar
información en el sistema, bien a corto o a largo plazo.
 Clases en el dominio del problema (clases válidas):
Libro (atributos: título, autor, isbn)
Catálogo (atributos: número de libros, detalles de cada libro)
Ejemplar (atributos: número de acceso, título ....)
Socio (atributos: clave, nombre, dirección)
Préstamo (atributos: fecha de entrega, fecha devolución, detalles del socio y del ejemplar)
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
49
EJERCICIO 4, Biblioteca (III)
 Relaciones
Catálogo "necesita" relacionarse (asociarse) con Libro para conocer sus detalles.
Catalogo
Catalogo
*
Libro
Contenedor
Curso de Programación Orientada a Objetos en Java
Libro
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
50
EJERCICIO 4, Biblioteca (IV)
Ejemplar tiene las mismas propiedades que un Libro, además el atributo propio número de acceso.
Libro
Ejemplar
Un Préstamo se puede considerar que es una interacción entre Socio y Ejemplar . El socio toma un
ejemplar de un libro, los detalles del socio y del ejemplar son de interés para realizar el préstamo, así
como la fecha de entrega.
Socio
Prestamo
Curso de Programación Orientada a Objetos en Java
Ejemplar
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
51
EJERCICIO 4, Biblioteca (V)
Con el fin de mantener información del sistema, habrá dos tipos de listas, una de socios y otra de
préstamos.
Lista
Socio
ListaSocio
Curso de Programación Orientada a Objetos en Java
ListaPrestamo
Prestamo
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
52
EJERCICIO 4, Biblioteca (VI)
Catalogo
*
Lista
Libro
ListaPrestamo
ListaSocio
Ejemplar
Prestamo
Curso de Programación Orientada a Objetos en Java
Socio
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
53
EJERCICIO 5 DE MODELADO DE CLASES
Teléfonos (nº 8)(I)
En un sistema telefónico se utilizan teléfonos fijos y teléfonos móviles. Los fijos están conectados directamente a las
centralitas locales y los móviles a su centralita local a través de unas antenas intermedias. Además, para cuando se
realizan llamadas entre diversas operadoras, existen centralitas puente encargadas de la transformación de mensajes.
Cuando un usuario marca un número de teléfono, la centralita local pide un canal al ordenador central. La búsqueda
del teléfono destino se realiza por toda la red de centralitas a través de dicho canal, hasta llegar al destino final. Una
vez terminada la llamada y cerrada la conexión, la centralita local le indica al ordenador que puede liberar el canal y le
pasa la información de la llamada. El ordenador almacena esa información en la base de datos de clientes.
Clases candidatas
Teléfono
Canal
Fijo
Ordenador
Móvil
Red
Centralita local
Base datos
Centralita puente
Cliente
Verbos
transformar msges
marcar
mantener registro
liberar canal
Operador
Antena
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
54
EJERCICIO 5, Teléfonos (II)
 Clases en el dominio del problema (clases válidas):
Teléfono, Teléfono Fijo, Teléfono Móvil, Centralita local, Llamada, Centralita puente, Antena, Canal
Ordenador, Base datos, Red.
Operador: no tiene responsabilidad en el dominio del problema.
Llamada: clase que guarda información sobre el tiempo de llamada, teléfono, hora, ...
Base de datos: agrupa llamadas y, es de suponer, clientes.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
55
EJERCICIO 5, Teléfonos (III)
 Relaciones
• En el dominio del problema se aprecian dos tipos de teléfonos, con comportamientos distintos.
También, dos tipos de centralitas (realmente habría que profundizar en esto, conocer si tienes
distintas funcionalidades ...). Entonces, se diseñan dos jerarquías generalización/especialización.
• Los tlfnos fijo se relacionan (asociación) con centralita local. Los móviles se relacionan con
antenas, y estas con la centralita local.
• Una llamada es la interacción entre teléfono y centralita. Esta utiliza el ordenador para llegar al
teléfono destino, para lo cual crea un objeto canal con el fin de realizar la búsqueda del tlf
destino. Los detalles de la llamada se guardan en una base de datos (agregación).
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
56
EJERCICIO 5, Teléfonos (IV)
BaseDatos
Llamada
Telefono
Tlf_Fijo
Tlf_Movil
Centralita
1
Antena
Puente
Local
n
Red
Ordenador
Canal
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
57
EJERCICIOS(1)
1.
Encontrar y representar las relaciones de clases , mostrar multiplicidad si es necesario, entre las siguientes
clases de objetos:
Director, consejo escolar, alumno, profesor, equipo directivo, jefe de estudios, administrativo, padre
2.
Preparar un diagrama de clases que muestre las relaciones entre las siguientes clases de objetos:
Castillo, foso, puente levadizo, torre, fantasma, escalera, mazmorra, señor, señora y cocinero.
3.
Encontrar y representar las relaciones de clases , mostrar multiplicidad si es necesario, entre las siguientes
clases de objetos:
Expresión, constante, variable, función, lista de argumentos, operador relacional, término, operador aritmético,
programa, sentencia, operador relacional
4.
Encontrar y representar las relaciones de clases , mostrar multiplicidad si es necesario, entre las siguientes
clases de objetos:
Sistema de ficheros, fichero, directorio, fichero ASCI, fichero ejecutable, disco, pista, sector
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
58
EJERCICIOS(2)
5.
Encontrar y representar las relaciones de clases , mostrar multiplicidad si es necesario, entre las siguientes
clases de objetos:
Tablero, pieza de ajedrez, fila, columna, cuadrado, movimiento, posición.
6.
Encontrar relaciones entre las clases de objetos del siguiente documento:
se quiere diseñar un sistema para simplificar los marcadores de competiciones, tales como gimnasia, salto de
palanca, y barra fija. Existen distintas pruebas y distintos competidores. Todo competidor puede participar en
distintas pruebas y toda prueba tiene muchos competidores. Cada prueba tiene varios jueces que califican al
competidor de la prueba. En algunos casos, un juez puede calificar más de una prueba. Cada competidor realiza
tres intentos, que es calificado por el conjunto de jueces de la prueba.
7.
Encontrar las clases, relacionarlas y dibujar esa relaciones en el siguiente documento relativo a una biblioteca:
Por cada libro existente el catálogo contiene el título, el autor y el número ISBN. Puede haber varios ejemplares
de un libro. Cada ejemplar de un libro tuene un único número de acceso. Los socios de la biblioteca tiene una
clave para préstamo. El sistema registra el nombre, dirección del lector y el número de clave por cada préstamo.
Los socios sólo pueden solicitar un libro en préstamo, el sistema mantiene un registro de los libros que un socio
ha tenido en préstamo, junto con la fecha de devolución.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
59
EJERCICIOS(3)
8.
Encontrar las clases, establecer relaciones entre ellas, multiplicidad y dibujar el diagrama de clases utilizando la
notación UML:
En un sistema telefónico se utilizan teléfonos fijos y teléfonos móviles. Los fijos están conectados directamente
a las centralitas locales y los móviles a su centralita local a través de unas antenas intermedias. Además, para
cuando se realizan llamadas entre diversas operadoras, existen centralitas puente encargadas de la
transformación de mensajes.
Cuando un usuario marca un número de teléfono, la centralita local pide un canal al ordenador central. La
búsqueda del teléfono destino se realiza por toda la red de centralitas a través de dicho canal, hasta llegar al
destino final. Una vez terminada la llamada y cerrada la conexión, la centralita local le indica al ordenador que
puede liberar el canal y le pasa la información de la llamada. El ordenador almacena esa información en la base
de datos de clientes.
9.
Encontrar las clases, establecer relaciones entre ellas, multiplicidad y dibujar el diagrama de clases utilizando la
notación UML:
El dueño de un concesionario vende varias marcas de vehículos, quiere informatizar la gestión. Actualmente
vende camiones Barreiros, coches Seat, Ford y Nariba, y motos Ducatti. Se desea obteber un informe que
muestre qué tipo, así como la descripción de cada uno, es decir marca, número máximo de ocupantes, si tiene
airbag, gps, si es de gasolina y el peso que es capaz de transportar.
Curso de Programación Orientada a Objetos en Java
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
60