Ignacio Zahonero Martínez, Luis Joyanes Aguilar
description
Transcript of Ignacio Zahonero Martínez, Luis Joyanes Aguilar
CURSO Programación Orientada a Objetos
Parte 2
RELACIONES ENTRE CLASES (UML, Lenguaje Unificado de Modelado)
Ignacio Zahonero Martínez, Luis Joyanes Aguilar
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
2
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
3
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:
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
Cajero lee
Tarjeta Coche lleva Copiloto
participa en
Jugador Equipo
Gestiona ficha
Entrenador
lleva
Varias clases se pueden conectar a una. Por ejemplo Jugador, Entrenador y Equipo
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
4
ASOCIACIONES(II)
Una asociación puede contener atributos y operaciones. Cuando esto ocurre se tiene una clase de asociaciones
Camarero trabaja en
Restaurante
Contrato 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
5
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
6
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:
* PermisoConducirPersona 1
* PermisoConducirPersona 1
Alternativamente, la multiplicidad * se representa mediante un contenedor, una lista, que almacena los objetos:
Lista
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
7
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
8
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:
Una persona posee cero o muchos coches.
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).
posee 0..*
Persona Coche
operación
Cajero * * Cliente
propietario password
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
9
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
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.
Orquesta 1..* Profesor
Batería 6..12 Cañón
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
10
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.
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.
Universidad * Facultad
Parking
Barrera Ascensor Plaza2 2 1 .. *
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
11
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
12
JERARQUÍAS DE GENERALIZACÍON
Cuenta
Cuenta
corriente
Cuenta
vivienda
Cuenta
de valores
Registro
Registro
de vuelo
Registro
de pasajero
vuelo
compartido
vuelo
operacional
pasajero
turista
pasajero
de empresa
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
13
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
14
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
15
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
16
HERENCIA MÚLTIPLE
Motor
- potencia
MotorElectrico
- intensidad
MotorGas
- tiempoExplos
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
17
HERENCIA SIMPLE
Artículo
Vídeo
Audio
Radio
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.
Amplificador CD
Altavoz
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
18
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 { class Movil extends Telef{ class Fijo extends Telef {
public void sonar() { public void sonar() { public void sonar() {
System.out.print(" rin rin "); cancion.audio(); 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
19
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
20
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 class claseB { {
protected claseB objB; protected claseA objA;
Posiblemente se necesite definir un método de la clase para establecer la asociación con otra clase.
class claseA class claseB
{ {
protected claseB objB; protected claseA objA;
public setEnlace(claseB x) public setEnlace(claseA q)
{ {
objB = x; objA = q;
x.setEnlace(this); ...
} }
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
21
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 public void setPax(Pasajero p) { { {
int contador; contador ++;
; protected Pasajero [] pd; // validar capacidad
} public Vuelo(int capacidad) pd[contador] = p; { }
contador = 0;
pd = new Pasajero[capacidad];
}
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
22
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 Espectáculo
Contenedor Espectáculo
0..n
Se representa como:
Teatro Espectáculo0..n
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
23
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 class claseB { {
protected claseB objB; protected claseA objA;
Para multiplicidades rango:
class Biblioteca class Persona { {
private ListaSocio sc; private Biblioteca[] bl;
Biblioteca Persona1..n
socio
1..8
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
24
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
25
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
26
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
27
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
28
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
Cliente
HojaMovimiento
Sistema
mostrarHoja()
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.
EJEMPLOSMODELADO DE OBJETOS
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
30
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
31
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
32
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
33
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
34
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
35
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
36
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
37
EJERCICIO 1 DE MODELADO DE CLASESSistema 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
Verbos mostrar estar compuesta
visualizar
reconfigurar
añadir
eliminar
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
38
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
39
EJERCICIO 1, Sistema de monitorización (III)
Red
añadirNodo
quitarNodo
Nodo
identif
Monitor
EnAnillo EnEstrella EnBus
1 .. *
darAlta
darBaja
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
40
EJERCICIO 2 DE MODELADO DE CLASESEncuestas (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
41
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
42
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
43
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
Usuario
Cuestionario Pregunta Respuesta
Encuesta
Selección
1..*
0..*
1..* 4
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
44
EJERCICIO 2, Encuestas (V)
El diagrama de clases más refinado:
Tema
-nombre
+getNom
Usuario
- nombre
- apell
- correo
- clave
Cuestionario
- numPreguntas
PreguntaTest Respuesta
Encuesta
-fecha
- numResp
Selección
1..*
0..*
1..* 4
Contestación
-orden
+getTexto
Pregunta
1..*1..*
1..*
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
45
EJERCICIO 3 DE MODELADO DE CLASESOrganigramas(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. NombresAplicación
Organigrama
Color
Elemento
Línea
Círculo,
Óvalo
Rectángulo
Rectángulo redondeado
Línea recta
Texto
Sistema
Cliente
Verbosimplementar
realizar
borrar
mover
dibujar
guardar
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
46
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
47
EJERCICIO 3, Organigramas(III)
El diagrama de clases (realmente sería un primer modelo)
Elemento
- color
+ mover()
+ borrar()
+ dibujar()
Colección
+ añadir()
+ eliminar()
+ grabar()
+ recuperar()
Línea
-orig
-dest
+ borrar()
+ dibujar()
Rectángulo
-orig
-fin
+ borrar()
+ dibujar()
Óvalo
-ejeMy
- ejeMn
+ borrar()
+ dibujar()
DeTexto
-literal
-tipo
+ borrar()
+ dibujar()
Línea
Recta
+dibujar()
RectRedondo
+dibujar()
Círculo
+dibujar()
Organigrama
+mover()
+borrar()
dibujar()
1..*
1..*
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
48
EJERCICIO 4 DE MODELADO DE CLASESBiblioteca (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
Catálogo
Titulo
Autor
Isbn
Ejemplar
NumeroAcceso
Socio
Biblioteca
Verbosregistrar nombre ...
solicitar
mantener registro
Clave
Préstamo
Nombre
Dirección
Sistema
FechaDevolución
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
49
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)
EJERCICIO 4, Biblioteca (II)
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
50
Relaciones
Catálogo "necesita" relacionarse (asociarse) con Libro para conocer sus detalles.
EJERCICIO 4, Biblioteca (III)
Catalogo Libro*
Catalogo Contenedor
Libro
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
51
Ejemplar tiene las mismas propiedades que un Libro, además el atributo propio número de acceso.
EJERCICIO 4, Biblioteca (IV)
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 Ejemplar
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
52
Con el fin de mantener información del sistema, habrá dos tipos de listas, una de socios y otra de préstamos.
EJERCICIO 4, Biblioteca (V)
Lista
ListaSocioSocio Prestamo ListaPrestamo
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
53
EJERCICIO 4, Biblioteca (VI)
Lista
ListaSocio
SocioPrestamo
ListaPrestamo
Libro
Ejemplar
Catalogo *
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
54
EJERCICIO 5 DE MODELADO DE CLASESTelé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
Fijo
Móvil
Centralita local
Centralita puente
Operador
Antena
Verbostransformar msges
marcar
mantener registro
liberar canal
Canal
Ordenador
Red
Base datos
Cliente
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
55
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.
EJERCICIO 5, Teléfonos (II)
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
56
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
57
EJERCICIO 5, Teléfonos (IV)
Centralita
Puente Local
Telefono
Tlf_Movil Tlf_Fijo
Antena
n1
Ordenador
Llamada
BaseDatos
Red
Canal
Curso de Programación Orientada a Objetos en Java Ignacio Zahonero Martínez Luis Joyanes Aguilar
58
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
59
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
60
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.