ignacio zahonero martínez, luis joyanes aguilar

60
CURSO Programación Orientada a Objetos Parte 2 RELACIONES ENTRE CLASES (UML, Lenguaje Unificado de Modelado) Ignacio Zahonero Martínez, Luis Joyanes Aguilar

Upload: nira

Post on 14-Jan-2016

106 views

Category:

Documents


2 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 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

Page 2: 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

Page 3: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 4: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 5: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 6: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 7: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 8: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 9: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 10: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 11: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 12: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 13: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 14: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 15: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 16: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 17: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 18: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

}

Page 19: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 20: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

} }

Page 21: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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];

}

Page 22: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 23: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 24: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 25: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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 }

Page 26: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 27: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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;

}

Page 28: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 29: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

EJEMPLOSMODELADO DE OBJETOS

Page 30: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 31: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 32: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 33: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 34: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 35: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 36: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 37: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 38: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 39: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 40: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 41: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 42: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 43: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 44: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 45: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 46: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 47: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 48: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 49: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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)

Page 50: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 51: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 52: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 53: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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 *

Page 54: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 55: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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)

Page 56: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 57: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 58: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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

Page 59: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.

Page 60: Ignacio Zahonero Martínez, Luis Joyanes Aguilar

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.