Está en la página 1de 60

CURSO

Programacin Orientada a Objetos

Parte 2

RELACIONES ENTRE CLASES


(UML, Lenguaje Unificado de Modelado)

Ignacio Zahonero Martnez, Luis Joyanes Aguilar


RELACIONES ENTRE CLASES
Las clases y objetos no pueden existir aislados y en consecuencia existirn 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
Semforo controla Trafico

Las relaciones entre clase pueden indicar alguna forma de compartir, as como algn tipo de
conexin semntica.

Lostipos de relaciones entre clases:


Asociacin
Agregacin
Generalizacin/especializacin
Dependencias
Cada relacin tiene una representacin grfica en UML

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
2
ASOCIACIONES(I)
La asociacin es la relacin ms comn entre clases.

Una asociacin es una conexin conceptual entre clases. Describe un grupo de enlaces con
estructura y semntica comunes. Por ejemplo:

lee Coche lleva Copiloto


Cajero Tarjeta

Las conexiones que describe una asociacin dan lugar a interacciones entre los objetos de una
colaboracin.

Las asociaciones ms comunes son las binarias, esto es, intervienen dos clases

participa en
Varias clases se pueden conectar a una.
Jugador Equipo Por ejemplo Jugador, Entrenador y Equipo
Gestiona ficha
lleva
Entrenador

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
3
ASOCIACIONES(II)
Una asociacin puede contener atributos y operaciones. Cuando esto ocurre se tiene una clase de
asociaciones

trabaja en
Camarero Restaurante

Contrato negociado Gerente

Las asociaciones son inherentemente bidireccionales, pueden recorrerse en ambas direcciones.


Por ejemplo:
Supermercado recibe pedidos telefnicos de Clientes
Cliente hace su pedido por telfono al Supermecado

En ocasiones es deseable que la navegacin sea unidireccional. Grficamente, cuando es


unidireccional, la lnea
que une las dos clases termina en punta de flecha.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
4
INFORMACION DE LAS ASOCIACIONES

Una asociacin tiene un nombre, con frecuencia un verbo. El nombre de la asociacin se escribe
en la lnea que representa la asociacin. Por ejemplo:

Usuario utiliza Computadora Estudiante recibe un Curso Piloto controla Avin

Es posible utilizar una punta de flecha para indicar el sentido en que se lee. Puede tener nombres
diferentes, uno por cada direccin.

Cada extremo de una asociacin es un rol (papel que juega). Cada rol puede tener un nombre que
indica cmo es visualizada la clase por la otra. Por ejemplo, una Empresa visualiza a Persona
como un empleado.

Los roles deben ser nicos.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
5
INFORMACION DE LAS ASOCIACIONES

Multiplicidad: es el nmero de objetos de un extremo de la asociacin que estn 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 slo pertenece a una Persona. La
representacin grfica:

Persona 1 * PermisoConducir

Alternativamente, la multiplicidad * se representa mediante un contenedor, una lista, que almacena los objeto

Persona 1 Lista * PermisoConducir

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
6
NAVEGACIN
La navegacin indica si es posible atravesar una asociacin binaria desde un
objeto de un extremo para llegar a uno o ms objetos del otro extremo.

La navegacin 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 navegacin es


conocer la necesidad de colaborar una clase con otra para realizar un
requisito del contexto del problema.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
7
MULTIPLICIDAD

Indica el nmero de objetos de una clase que se relacionan con un objeto de la otra clase de la
asociacin ( o agregacin). Por ejemplo:
posee 0..*
Persona Coche
Una persona posee cero o muchos coches.

La multiplicidad se muestra en los extremos de la asociacin, en las clases donde es aplicable.

Los valores, rango, de multiplicidad son los siguientes:

Exactamente 1 (1). Un nmero finito. (Estudiante (1) dispone de un Carnet)


Cero 1, se indica 0 .. 1, opcionalidad. (El Medico visita a Paciente acompaado, o no, de ATS)
Cero a muchos, se indica 0 .. *
Uno a muchos, se indica 1 .. * .
Rangos fijos, 1 .. 4, o varios nmeros (2, 5, 6,7).

operacin
Cajero * * Cliente
propietario password

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
8
AGREGACIN
La relacin entre clases de agregacin se considera un caso especial de asociacin. Es una relacin Todo-
Parte entre una clase agregada (el todo) y una de las partes que los forman. Da lugar a jerarquas de
agregacin.

Ejemplo 1, un Elemento de dibujo es un todo formado por las partes: Linea, FiguraSimple y FiguraCompuesta

Ejemplo 2: un Equipo multidisciplinar(el todo) est formado por un Pedagogo, dos Psicologos y tres
Educadores

Orquesta 1..* Profesor Batera 6..12 Can

Propiedades:
Transitiva (A es parte de B, B es parte de C -> A es parte (subparte) de C)
Antisimtrica: un objeto no puede ser el todo y la parte simultneamente.

La agregacin se representa por un rombo en la parte del todo.

Al ser un caso especial de asociacin, puede haber multiplicidad.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
9
TIPOS DE AGREGACIN
Agregacin simple o compartida: la parte puede pertenecer a ms de un agregado. Es decir
las partes pueden ser partes de cualquier todo. La destruccin del Todo no implica la destruccin
de las partes.
Las partes, en este tipo de agregacin, pueden existir independientemente del todo.
Ejemplo : un Equipo de trabajo se compone de diferentes Personas. Una misma Persona puede ser
miembro de ms de un equipo de trabajo.
Universidad * Facultad

La agregacin compartida se representa con el rombo.

Composicin (agregacin fuerte): el todo "contiene" a las partes. Las partes y el todo se crean
y destruyen en el todo. Forma jerarquas de partes.
Un objeto slo puede ser parte de una composicin.
Se representa con un rombo sombreado Parking
en el extremo del todo.

2 2 1 .. *
Barrera Ascensor Plaza

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
10
GENERALIZACIN/ESPECIALIZACIN
Una generalizacin se conoce como una relacin es-un, es-un-tipo-de. Es una relacin entre
clases especializadas de una clase general. Un Vendedor es-un Empleado, una Opera es-un
Espectculo, un Rectngulo es un tipo de Forma.

La generalizacin es una relacin entre una clase general y una clase especfica. La clase
especfica, denominada subclase, hereda de la clase general. Se heredan los atributos y las
operaciones.

La clase general agrupa los atributos y los mtodos comunes a las clases especializadas.

La generalizacin se representa con una lnea de la clase ms especfica a la clase ms general con
un tringulo vaco en el extremo de la lnea de la superclase.

Una subclase o clase hija puede ser a su vez clase base de otra lo que produce jerarquas de clases.

En las jerarquas de generalizacin/especializacin, hacia arriba se generaliza. La clase ms alta en


la jerarqua es la clase ms general. la clase base.

La implementacin de la generalizacin en un lenguaje de programacin se conoce como herencia.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
11
JERARQUAS DE GENERALIZACON

Cuenta

Cuenta Cuenta Cuenta


corriente vivienda de valores

Registro

Registro Registro

de vuelo de pasajero

vuelo pasajero pasajero


vuelo
de empresa
compartido turista
operacional

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
12
CONCEPTOS ESENCIALES
La creacin de una clase a partir de una existente se denomina derivacin.

A la capacidad de definir una clase a partir de otra clase ya existente y de aadirle comportamiento y
estado se conoce como extensin 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 mtodos (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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
13
HERENCIA
La orientacin a objetos se caracteriza, adems de por la encapsulacin y la ocultacin de
informacin, por incorporar la caracterstica 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 mtodos de objetos ascendientes o antepasados.

El objetivo final es la reutilizacin, es decir, reutilizar el cdigo anteriormente desarrollado.

La herencia implica una clase base y una jerarqua de clases que contienen las clases derivadas de
la clase base. Las clases derivadas heredan el cdigo de su clase base, aadiendo su propio cdigo
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 bsicas se


dividen en subclases. La clase electrodomstico se divide en subclase lavadora, cocina, lavavajillas,
etc. La jerarqua comparte caractersticas comunes; si bien una lavadora tiene caractersticas
especiales que la diferencian de una cocina.

Las caractersticas y comportamiento comunes se definen en la clase base.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
14
TIPOS DE HERENCIA
Hay dos de tipos de herencia: herencia simple y herencia mltiple.

La herencia simple es aquella en la que cada clase hereda de una nica clase.

La herencia mltiple es la transmisin de mtodos y datos de ms de una clase base a la clase


derivada.

Por ejemplo, en el contexto de una simulacin 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 disean clases con herencia mltiple:

Colisiones de nombres de diferentes clases base.


Herencia repetida de una misma clase base.

Las jerarquas de herencia mltiple pueden ser complejas de gestionar. De hecho, no


todos los lenguajes OO la implementan.

Java, C# y Smalltalk no implementa la herencia mltiple. Eiffel y C++ admiten herencia


simple y mltiple.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
15
HERENCIA MLTIPLE

Motor
- potencia

MotorElectrico MotorGas

- intensidad - tiempoExplos

MotorHbrido

Esta jerarqua con herencia mltiple presenta el problema de repeticin del atributo potencia
en la clase
MotorHibrido.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
16
HERENCIA SIMPLE

Artculo

Vdeo Audio Altavoz

Radio Amplificador CD

En esta jerarqua cada clase tiene como mximo una sola superclase. La herencia simple
permite que una clase herede las propiedades de su superclase jerrquica.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
17
SUSTITUCIN/REDEFINICIN
Los atributos y mtodos definidos en la superclase se heredan por las subclases. Si la propiedad se
define nuevamente en la subclase, entonces esta definicin 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 redefinicin (anulacin o sustitucin son trminos 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 cualificndolo (en Java con super).

La clase Fijo puede redefinir sonar(), aadiendo a las caractersticas de sonar() de Telef las propias de
Fijo:
public void sonar() {
super.sonar();
System.out.print(" ron ron ")
}

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
18
CLASES ABSTRACTAS

Las clases abstractas definen un concepto o tipo generalizado y sirven para describir nuevas clases.
Una clase abstracta no se puede instanciar y slo tiene significado como clase base de otras clases.

En las jerarquas 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 caractersticas, son clases abstractas .

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
19
IMPLEMENTACIN DE ASOCIACIONES
La implementacin de la relacin de asociacin depende de la multiplicidad y de la navegacin.

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 relacin de asociacin bidireccional con la clase claseB,
de multiplicidad 1 a 1 la implementacin en Java:
class claseA class claseB
{ {
protected claseB objB; protected claseA objA;

Posiblemente se necesite definir un mtodo de la clase para establecer la asociacin 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
20
ASOCIACIONES UNIDIRECCIONALES(I)
Multiplicidad uno (1): se aade 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 aade un atributo que permita almacenar una coleccin de objetos. Si
el nmero de objetos relacionados tiene un lmite fijo, la coleccin 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
21
ASOCIACIONES UNIDIRECCIONALES(II)
Multiplicidad uno a muchos. Si el extremo "muchos" no es un lmite conocido se utiliza
un contenedor dinmico (una lista, un vector ...).

Teatro 0..n Espectculo

Se representa como:

Teatro Contenedor Espectculo 0..n Espectculo

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
22
IMPLEMENTACIN DE ASOCIACIONES BIDIRECCIONALES
Cuando la relacin de asociacin entre dos clases es navegable en ambos sentidos, en general se
implementa igual que una asociacin 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:

Biblioteca Persona
1..8 1..n

socio

class Biblioteca class Persona


{ {
private ListaSocio sc; private Biblioteca[] bl;

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
23
IMPLEMENTACIN DE HERENCIA
La tcnica de crear nuevas clases a partir de las antiguas se conoce como derivacin. La nueva clase se
denomina clase derivada y la clase antigua es la clase base.

En Java la herencia se conoce como derivacin o extensin. Se emplea la palabra reservada extends.

Sintaxis :
class Base { ... }

class Derivada extends Base


{
// atributos nuevos de Derivada
// mtodos 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 mtodos redefinidos utilizando
super.

En general, super hace referencia a la porcin del objeto Padre que tiene el objeto Hijo.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
24
REGLAS DE ACCESO A LA CLASE BASE

Los miembros pblicos de la clase base son tambin miembros pblicos 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
25
CONSTRUCTOR DE UN OBJETO DERIVADO

La informacin para construir una parte del objeto derivado reside en la clase base. Por esa razn 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 continuacin la parte de Profesional.

Si la clase base fuese, a su vez, derivada de otra clase base, antes de crearse la porcin del objeto
correspondiente a esta se creara la parte de su clase base. Y as sucesivamente.

El constructor de una clase debe inicializar slo los datos que dicha clase aada a la jerarqua.

La inicializacin de los datos de la clase base se realiza llamando explcitamente 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
26
OBJETO DERIVADO
class Lampara
{
private int pot;
protected String desr;
public Lampara(int pot, String d)
{
this.pot = pot;
desr = d;
}
// ...

class LamparaGas extends Lampara


{
private double cd;
public LamparaGas(int pt, String ds, double can)
{
super (pt, ds);
cd = can;
}

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
27
RELACIONES DE DEPENDENCIA
La relacin de dependencia es una conexin semntica entre dos elementos del modelo, uno
independiente y un elemento dependiente

Se caracteriza esta relacin 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 mtodo que toma un objeto de otra clase
para realizar una operacin.

La relacin de dependencia se representa con una lnea punteada terminada en una flecha.
Proveedor
HojaMovimiento La clase Sistema tiene la
operacin mostrarHoja() que tiene
el argumento HojaMovimiento.
La relacin de dependencia se
considera que es una relacin de
uso.
Cliente Sistema

mostrarHoja()

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
28
EJEMPLOS
MODELADO DE OBJETOS
BSQUEDA DE CLASES
Un problema desarrollado con tcnicas O.O., en primer lugar debe responder a esta pregunta: cules son
los objetos del programa?.

Los objetos son instancias de clases, entonces la primera etapa en el desarrollo O.O. exige la identificacin
de clases, y posteriormente sus atributos y comportamiento (mtodos).

La localizacin de clases debe pertenecer al dominio del problema y darles nombres que representen su
responsabilidad en la aplicacin.

Coad y Yourdon proponen seguir un mtodo 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 vlidas. 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
30
IDENTIFICAR LAS CLASES(I)

Existen diversos criterios para identificar clases candidatas. El sistema que propone
UML:

En conversaciones con el cliente del sistema a desarrollar, preste atencin a los


sustantivos que utiliza para describir las entidades de su negocio, ya que dichos
sustantivos se convertirn en clases candidatas de su modelo. Tambin preste atencin
a los verbos que escuche, constituirn operaciones de sus clases. Los atributos surgirn
como sustantivos relacionados con los nombres de las clase.

Una vez que tenga una lista bsica de las clases, pregunte a los clientes qu es lo que
cada clase hace dentro del negocio responsabilidades de la clase.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
31
IDENTIFICAR LAS CLASES(II)

Cuando se parte de un documento con los requisitos del problema, el mejor sistema
para identificar clases, o mejor clases candidatas:

Lea la definicin o descripcin 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
mtodos.

Despus 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 nmero de
nmina. Es un dato que no contiene acciones, ser un atributo de la clase Empleado.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
32
CONCEPTOS QUE IDENTIFICAN CLASES
Cuando se buscan clases candidatas en el documento de requisitos las siguientes cuestiones ayudan a identificarlas:
Se dispone de informacin que se pueda analizar o almacenar?. En definitiva eventos a recordar. La informacin
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 interacta el sistema en desarrollo. Si es as, sern
considerados clases.
Existen dispositivos que el sistema puede manejar?. Cualquier dispositivo externo conectado al sistema se
convierte en clase candidata. Por ejemplo, barrera automtica, sensor de temperatura, etc.
Existen partes organizacionales?. Sucursal, departamento, comit etc, siempre que haya que guardar
informacin especfica.
Qu roles juegan los actores en la aplicacin?. Gerente, Oficinista, Supervisor, etc, son diferentes roles que una
persona puede desempear en un trabajo. Jefe de Estudios, Alumno, Director, Profesor, son roles que
desempean personas en un Consejo Escolar. Estos roles se pueden ver como clases.
Hay lugares de los que se necesite guardar informacin?. Si es as sern candidatos a clases.
Hay componentes, bibliotecas de clases de proyectos anteriores ?. Normalmente contendrn clases candidatas.

Regla: convertir en clase candidata todo aquel concepto del que haya que almacenar informacin en el
sistema, bien a corto o a largo plazo.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
33
EJEMPLO: FLOTA DE VEHCULOS(I)
Controlar la gestin de una flota de diferentes vehculos: coches, camiones, aviones, helicpteros. Cada vehculo
dispone de un radio de accin y una capacidad de carga total. En un instante dado, un vehculo puede encontrarse en
un cierto lugar con una determinada carga.

Identificar clases. Del anlisis del enunciado se extrae la siguiente lista de nombres y frases con nombre que son
clases candidatas:

Flota
Vehculo
Coche
Camin
Avin
Helicptero
Radio de accin
Capacidad de carga
Lugar
Carga

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
34
EJEMPLO: FLOTA DE VEHCULOS(II)
Una vez realizada la primera lista de clases candidatas, se realiza un proceso de refinamiento que trate de evitar una
proliferacin intil de clases.
En esta aplicacin parece que no es necesario declarar clases para gestionar el radio de accin y la capacidad de
carga. Estas caractersticas se pueden fijar como atributos de vehculo y son comunes a todo tipo de vehculo.
Tambin, es lgico pensar que existen dos tipos de vehculos: terrestres y areos. Entonces la lista de clases: Flota
Vehculo
Vehculo Terrestre
Vehculo Areo
Coche
Camin
Avin
Helicptero
Lugar
Carga
Relaciones. Un flota contiene vehculos (agregacin). Cada vehculo contiene una carga (agregacin) y se encuentra
actualmente en un lugar. Hay diferentes tipos de vehculos que comparten propiedades y comportamiento
(generalizacin/especializacin):

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
35
CRITERIOS PARA ELEGIR CLASES VLIDAS

A partir de la lista de clases candidatas, para seleccionar las clases vlidas se pueden
seguir los siguientes criterios:

Necesidad de recordar. La clase debe tener informacin asociada.

Necesidad de comportamiento. Las clases deben tener operaciones. Un clase sin


operaciones puede existir pero es conveniente una reflexin 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 mtodos siempre aplicables. Todos los objetos de una clase deben tener los
mismos atributos y mtodos. Si se encuentra objetos de la misma clase con atributos, o
mtodos, diferentes, puede ser que en realidad exista ms de una clase, las cuales se
relacionarn mediante generalizacin.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
36
EJERCICIO 1 DE MODELADO DE CLASES
Sistema de monitorizacin
Realice el anlisis de un sistema de monitorizacin de redes que realiza la informacin y visualizacin de un grupo de redes.
Cada monitor muestra la configuracin de una red en un momento especfico. Existen tres tipos de redes: en anillo, en bus y
en estrella. Las redes estn compuestas por nodos independientemente de su topologa, los cuales tienen un identificador de
red nico que los distingue. El sistema debe poder reconfigurar los nodos aadiendo o quitando desde el monitor que la
visualiza.

Identificar clases. Del anlisis 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 Verbos
Sistema mostrar
Red estar compuesta
Monitor visualizar
Red en anillo reconfigurar
Red en bus aadir
Red en estrella eliminar
Nodo
Identificador

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
37
EJERCICIO 1, Sistema de monitorizacin (II)

A continuacin se realiza un proceso de refinamiento. Parece que no es necesario declarar una clase para representar el identificador de nodo. Estas caracterstica 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 (agregacin).. Hay diferentes tipos de redes que comparten propiedades y comportamiento (generalizacin/especializacin).
El monitor est relacionado con la red para realizar su funcionalidad, es necesario establecer una relacin de asociacin entre monitor y red.

Las operaciones que se pueden identificar en la aplicacin :

Monitor puede mostrar la configuracin de la red.


Dar de alta un nodo.
Dar de baja un nodo.
Operaciones de navegacin ...

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
38
EJERCICIO 1, Sistema de monitorizacin (III)

Red
Monitor 1 .. * Nodo

darAlta identif
aadirNodo
darBaja
quitarNodo

EnAnillo EnEstrella EnBus

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
39
EJERCICIO 2 DE MODELADO DE CLASES
Encuestas (I)
Se desea desarrollar un sistema de recogida de encuestas a travs 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.
Direccin de correo electrnico.
Temas en los que est interesado (seleccionando uno o ms de los que se le ofrecen). Para cada uno de estos temas, especificar un grado de preferencia en una escala de 1 a 10, segn el grado
de inters.

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. Peridicamente, el usuario recibir por correo un
cuestionario sobre uno de los temas que seleccion en su inscripcin. Deber rellenarlo y devolverlo por la misma va. Para contestar al cuestionario el usuario marcar una y slo una de las cuatro
propuestas a cada pregunta, pero en el futuro se permitir tambin hacer preguntas de otros tipos, como preguntas abiertas, y se debe acomodar el anlisis a esta circunstancia. A partir de todos los
cuestionarios recogidos sobre un tema, el sistema publicar unos resultados estadsticos que podrn ser consultados desde una pgina Web.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
40
EJERCICIO 2, Encuestas (II)
Identificar clases. Del anlisis 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
41
EJERCICIO 2, Encuestas (III)

Antes de realizar el proceso de refinamiento, recordemos la regla de oro: convertir en clase candidata todo aquel concepto del que haya que almacenar informacin 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 direccin de correo. Tema s tiene entidad para ser una clase, guarda informacin y tiene
operaciones para manejar el contenido . La seleccin de un tema tiene la caracterstica (atributo) de el grado de inters. Usuario es el rol de Persona en este contesto. En el enunciado del texto
aparece Sistema para referirse a la aplicacin. Entonces la lista de clases:

Encuesta
Usuario
Tema
Seleccin
Cuestionario
Pregunta
Respuesta

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
42
EJERCICIO 2, Encuestas (IV)

Relaciones. El usuario realiza una o ms selecciones, cada eleccin se corresponde con un tema
(relaciones de asociacin). Cada Cuestionario est formado por un rango de preguntas, y cada
pregunta por 4 respuestas (agregacin). El usuario puede participar en un nmero de encuestas
indeterminado. Para elaborar una encuesta se evalan las contestaciones recibidas.
Diagrama de clases:

Tema

Seleccin
Cuestionario Pregunta Respuesta
1..* 4
1..*

0..*
Usuario Encuesta

El diagrama no recoge la contestacin a las preguntas del formulario. Se mejora con una nueva clase:
Contestacin, asociada con Encuesta. Adems, 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
43
EJERCICIO 2, Encuestas (V)

El diagrama de clases ms refinado:

Pregunta
Tema
-nombre
+getNom
Seleccin

Cuestionario PreguntaTest Respuesta


1..*
- numPreguntas 1..* 4

1..*
1..*

Usuario
0..* Encuesta
- nombre Contestacin
-fecha 1..*
- apell -orden
- numResp
- correo +getTexto
- clave

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
44
EJERCICIO 3 DE MODELADO DE CLASES
Organigramas(I)
Se desea implementar una aplicacin que permita realizar organigramas en color. Los elementos de que consta
un organigrama en este momento son lneas, crculos, valos, rectngulos, rectngulos con esquinas
redondeadas, lneas rectas y texto. El sistema puede experimentar cambios por incorporacin de nuevos
elementos. Se sabe que el cliente quiere que se pueda borrar, mover y por supuesto dibujar todos los elementos
del organigrama. Tambin se ha de poder guardar y recuperar desde un almacenamiento permanente.
Identificar clases. Del anlisis 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 Verbos
Aplicacin implementar
Organigrama realizar
Color borrar
Elemento mover
Lnea dibujar
Crculo, guardar
valo
Rectngulo
Rectngulo redondeado
Lnea recta
Texto
Sistema
Cliente

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
45
EJERCICIO 3, Organigramas(II)
Los conceptos, nombres puestos en negrita, se pueden considerar claves en el dominio del problema. Adems es lgico pensar en
una clase que almacene organigramas, ser la clase Coleccin.

Relaciones. Leyendo con detencin el documento de requisitos, resulta que los conceptos clave Lnea, valo. .. , se pueden
plantear que son un tipo-de, o bien es-un, con respecto a Elemento grfico. Cuando esto ocurre se establece una relacin
jerrquica generalizacin/especializacin.
Un Organigrama est formado por muchos componentes de tipo Lnea, Rectngulo, ... , en general de tipo Elemento. Se establecer
una relacin de agregacin (todo-parte) entre Elemento y Organigrama.
Un razonamiento similar al anterior nos lleva a establecer una agregacin entre Organigrama y Coleccin. Una coleccin agrupa
muchos organigramas.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
46
EJERCICIO 3, Organigramas(III)

El diagrama de clases (realmente sera un primer modelo)


Coleccin
Elemento
Organigrama
- color 1..*
+ aadir()
+ mover()
1..*
+mover() + eliminar()
+ borrar()
+borrar() + grabar()
+ dibujar()
dibujar() + recuperar()

Lnea Rectngulo valo DeTexto


-orig -orig -ejeMy -literal
-dest -fin - ejeMn -tipo
+ borrar() + borrar() + borrar() + borrar()
+ dibujar() + dibujar() + dibujar() + dibujar()

Lnea Rect Crculo


Redondo
Recta
+dibujar()
+dibujar()
+dibujar()

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
47
EJERCICIO 4 DE MODELADO DE CLASES
Biblioteca (n 7)(I)
Encontrar las clases, relaciones y realizar un diagrama de clases del siguiente documento relativo a una biblioteca: por
cada libro existente el catlogo contiene el ttulo, el autor y el nmero ISBN. Puede haber varios ejemplares de un libro.
Cada ejemplar de un libro tiene un nico nmero de acceso. Los socios de la biblioteca tiene una clave para prstamo.
El sistema registra el nombre, direccin del lector y el nmero de clave por cada prstamo. Los socios slo pueden
solicitar un libro en prstamo, el sistema mantiene un registro de los libros que un socio ha tenido en prstamo, junto
con la fecha de devolucin.

Clases Verbos
candidatas Clave registrar nombre ...
Libro Prstamo solicitar
Catlogo Nombre mantener registro

Titulo Direccin
Autor Sistema
Isbn FechaDevolucin
Ejemplar
NumeroAcceso
Socio
Biblioteca

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
48
EJERCICIO 4, Biblioteca (II)

Regla de oro: convertir en clase candidata todo aquel concepto del que haya que
almacenar informacin en el sistema, bien a corto o a largo plazo.

Clases en el dominio del problema (clases vlidas):

Libro (atributos: ttulo, autor, isbn)


Catlogo (atributos: nmero de libros, detalles de cada libro)
Ejemplar (atributos: nmero de acceso, ttulo ....)
Socio (atributos: clave, nombre, direccin)
Prstamo (atributos: fecha de entrega, fecha devolucin, detalles del socio y del
ejemplar)

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
49
EJERCICIO 4, Biblioteca (III)

Relaciones
Catlogo "necesita" relacionarse (asociarse) con Libro para conocer sus detalles.

Catalogo * Libro

Catalogo Contenedo Libro


r

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
50
EJERCICIO 4, Biblioteca (IV)

Ejemplar tiene las mismas propiedades que un Libro, adems el atributo propio nmero de
acceso.
Libro

Ejemplar

Un Prstamo se puede considerar que es una interaccin entre Socio y Ejemplar . El socio
toma un ejemplar de un libro, los detalles del socio y del ejemplar son de inters para
realizar el prstamo, as como la fecha de entrega.

Socio Prestamo Ejemplar

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
51
EJERCICIO 4, Biblioteca (V)

Con el fin de mantener informacin del sistema, habr dos tipos de listas, una de socios y
otra de prstamos.

Lista

ListaSocio ListaPrestamo
Socio Prestamo

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
52
EJERCICIO 4, Biblioteca (VI)

Catalogo * Libro Lista

ListaPrestamo ListaSocio

Ejemplar

Prestam Socio
o

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
53
EJERCICIO 5 DE MODELADO DE CLASES
Telfonos (n 8)(I)
En un sistema telefnico se utilizan telfonos fijos y telfonos mviles. Los fijos estn conectados directamente a las
centralitas locales y los mviles a su centralita local a travs de unas antenas intermedias. Adems, para cuando se
realizan llamadas entre diversas operadoras, existen centralitas puente encargadas de la transformacin de mensajes.
Cuando un usuario marca un nmero de telfono, la centralita local pide un canal al ordenador central. La bsqueda
del telfono destino se realiza por toda la red de centralitas a travs de dicho canal, hasta llegar al destino final. Una
vez terminada la llamada y cerrada la conexin, la centralita local le indica al ordenador que puede liberar el canal y le
pasa la informacin de la llamada. El ordenador almacena esa informacin en la base de datos de clientes.

Clases
Verbos
candidatas Canal transformar msges
Telfono Ordenador marcar
Fijo Red mantener registro
Mvil liberar canal
Base datos
Centralita local Cliente
Centralita puente
Operador
Antena

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
54
EJERCICIO 5, Telfonos (II)

Clases en el dominio del problema (clases vlidas):


Telfono, Telfono Fijo, Telfono Mvil, Centralita local, Llamada, Centralita puente, Antena, Canal
Ordenador, Base datos, Red.

Operador: no tiene responsabilidad en el dominio del problema.

Llamada: clase que guarda informacin sobre el tiempo de llamada, telfono, hora, ...

Base de datos: agrupa llamadas y, es de suponer, clientes.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
55
EJERCICIO 5, Telfonos (III)

Relaciones
En el dominio del problema se aprecian dos tipos de telfonos, con
comportamientos distintos. Tambin, dos tipos de centralitas (realmente habra que
profundizar en esto, conocer si tienes distintas funcionalidades ...). Entonces, se
disean dos jerarquas generalizacin/especializacin.

Los tlfnos fijo se relacionan (asociacin) con centralita local. Los mviles se
relacionan con antenas, y estas con la centralita local.

Una llamada es la interaccin entre telfono y centralita. Esta utiliza el ordenador


para llegar al telfono destino, para lo cual crea un objeto canal con el fin de realizar
la bsqueda del tlf destino. Los detalles de la llamada se guardan en una base de
datos (agregacin).

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
56
EJERCICIO 5, Telfonos (IV)

BaseDatos

Llamada Centralit
Telefono
a

Tlf_Movil Local Puente


Tlf_Fijo

1 n
Red

Antena
Ordenador

Canal

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
57
EJERCICIOS(1)
1. Encontrar y representar las relaciones de clases , mostrar multiplicidad si es necesario, entre las
siguientes clases de objetos:

Director, consejo escolar, alumno, profesor, equipo directivo, jefe de estudios, administrativo,
padre

2. Preparar un diagrama de clases que muestre las relaciones entre las siguientes clases de objetos:

Castillo, foso, puente levadizo, torre, fantasma, escalera, mazmorra, seor, seora y cocinero.

3. Encontrar y representar las relaciones de clases , mostrar multiplicidad si es necesario, entre las
siguientes clases de objetos:

Expresin, constante, variable, funcin, lista de argumentos, operador relacional, trmino,


operador aritmtico, 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 Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
58
EJERCICIOS(2)
5. Encontrar y representar las relaciones de clases , mostrar multiplicidad si es necesario, entre las
siguientes clases de objetos:

Tablero, pieza de ajedrez, fila, columna, cuadrado, movimiento, posicin.

6. Encontrar relaciones entre las clases de objetos del siguiente documento:

se quiere disear 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 ms 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 catlogo contiene el ttulo, el autor y el nmero ISBN. Puede haber varios
ejemplares de un libro. Cada ejemplar de un libro tuene un nico nmero de acceso. Los socios de la
biblioteca tiene una clave para prstamo. El sistema registra el nombre, direccin del lector y el nmero
de clave por cada prstamo. Los socios slo pueden solicitar un libro en prstamo, el sistema mantiene
un registro de los libros que un socio ha tenido en prstamo, junto con la fecha de devolucin.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
59
EJERCICIOS(3)
8. Encontrar las clases, establecer relaciones entre ellas, multiplicidad y dibujar el diagrama de
clases utilizando la notacin UML:

En un sistema telefnico se utilizan telfonos fijos y telfonos mviles. Los fijos estn conectados
directamente a las centralitas locales y los mviles a su centralita local a travs de unas antenas
intermedias. Adems, para cuando se realizan llamadas entre diversas operadoras, existen
centralitas puente encargadas de la transformacin de mensajes.
Cuando un usuario marca un nmero de telfono, la centralita local pide un canal al
ordenador central. La bsqueda del telfono destino se realiza por toda la red de centralitas a
travs de dicho canal, hasta llegar al destino final. Una vez terminada la llamada y cerrada la
conexin, la centralita local le indica al ordenador que puede liberar el canal y le pasa la
informacin de la llamada. El ordenador almacena esa informacin en la base de datos de clientes.

9. Encontrar las clases, establecer relaciones entre ellas, multiplicidad y dibujar el diagrama de
clases utilizando la notacin UML:

El dueo de un concesionario vende varias marcas de vehculos, quiere informatizar la gestin.


Actualmente vende camiones Barreiros, coches Seat, Ford y Nariba, y motos Ducatti. Se desea
obteber un informe que muestre qu tipo, as como la descripcin de cada uno, es decir marca,
nmero mximo de ocupantes, si tiene airbag, gps, si es de gasolina y el peso que es capaz de
transportar.

Curso de Programacin Orientada a Objetos en Java Ignacio Zahonero Martnez


Luis Joyanes Aguilar
60