Aquí tienes una lista de ejercicios organizados por dificultad para practicar relaciones entre clases en Java. Además, incluyo el diagrama de clases en PlantUML para cada uno.
Nota: ten en cuenta quelas relaciones siempre dependen de la aplicación para las que se las piensa. En nuestro caso van a ser situaciones sencillas. Por ejemplo, hemos decidido que una persona solo tenga una mascota y que su relación sea de composición, porque en nuestra aplicación si no hay dueño, no hay mascota.
De todas formas si tienes dudas deja un comentario.
Nivel 1: Básico
Ejercicios con relaciones simples (asociación y composición).
1. Autor y Libro (Asociación 1 a Muchos)
- Crea una clase
Autor
connombre
ynacionalidad
. - Crea una clase
Libro
contitulo
yautor
. - Un libro tiene un único autor.
- Implementa un método en
Libro
para mostrar los datos del autor.
class Autor {
-nombre : String
-nacionalidad : String
}
class Libro {
-titulo : String
-autor : Autor
}
Autor "1" -- "n" Libro : escribe
2. Persona y Mascota (Composición 1 a 1)
- Crea una clase
Persona
connombre
yedad
. - Crea una clase
Mascota
connombre
yespecie
. - Una persona solo puede tener una mascota.
class Persona {
-nombre : String
-edad : int
-mascota : Mascota
}
class Mascota {
-nombre : String
-especie : String
}
Persona "1" *-- "1" Mascota : tiene
3. Alumno y Tutor (Asociación 1 a 1)
- Crea una clase
Alumno
connombre
ycurso
. - Crea una clase
Tutor
connombre
yespecialidad
. - Cada alumno tiene un tutor, pero un tutor puede no tener alumnos.
class Alumno {
-nombre : String
-curso : String
-tutor : Tutor
}
class Tutor {
-nombre : String
-especialidad : String
}
Alumno "1" -- "0..1" Tutor : tiene
4. Coche y Motor (Composición 1 a 1)
- Crea una clase
Coche
conmarca
ymodelo
. - Crea una clase
Motor
conpotencia
ytipoCombustible
. - Un coche siempre tiene un motor asociado.
class Coche {
-marca : String
-modelo : String
-motor : Motor
}
class Motor {
-potencia : int
-tipoCombustible : String
}
Coche "1" *-- "1" Motor : tiene
Nivel 2: Intermedio
Ejercicios con relaciones más complejas, como agregación y asociación bidireccional.
1. Estudiante y Curso (Asociación Muchos a Muchos)
- Crea una clase
Estudiante
connombre
ymatricula
. - Crea una clase
Curso
connombre
ycodigo
. - Un estudiante puede estar en varios cursos y un curso tiene varios estudiantes.
class Estudiante {
-nombre : String
-edad : int
-Curso : curso
}
class Curso {
-codigo : String
-nombre : String
}
Estudiante "n" -- "1" Curso : se inscribe
2. Cliente y Cuenta Bancaria (Agregación 1 a Muchos)
- Crea una clase
Cliente
connombre
ydni
. - Crea una clase
CuentaBancaria
connumeroCuenta
ysaldo
. - Un cliente puede tener varias cuentas bancarias, pero una cuenta pertenece solo a un cliente.
class Cliente {
-nombre : String
-dni : String
}
class CuentaBancaria {
-numeroCuenta : String
-saldo : String
-cliente : Cliente
}
Cliente "1" o-- "n" CuentaBancaria : posee
3. Pedido y Producto (Asociación Muchos a Muchos)
- Crea una clase
Pedido
conid
yfecha
. - Crea una clase
Producto
connombre
yprecio
. - Un pedido puede contener varios productos y un producto puede estar en varios pedidos.
class Pedido {
-id : int
-fecha : String
}
class Producto {
-nombre : String
-precio : double
}
Pedido "n" -- "n" Producto : contiene
4. Biblioteca y Libros (Agregación 1 a Muchos)
- Crea una clase
Biblioteca
connombre
yubicación
. - Crea una clase
Libro
contitulo
yautor
. - Una biblioteca puede tener varios libros, pero un libro puede existir sin estar en una biblioteca.
class Biblioteca {
-nombre : String
-ubicacion : String
}
class Libro {
-titulo : String
-autor : String
}
Biblioteca "1" o-- "n" Libro : almacena
5. Universidad y Carreras (Composición 1 a Muchos)
- Crea una clase
Universidad
connombre
. - Crea una clase
Carrera
connombre
yduracion
. - Una universidad debe tener al menos una carrera.
class Universidad {
-nombre : String
-carreras : List<Carrera>
}
class Carrera {
-nombre : String
-duracion : int
}
Universidad "1" *-- "n" Carrera : ofrece
Nivel 3: Avanzado
Ejercicios con relaciones más profundas, como asociaciones dependientes y herencia.
1. Universidad, Facultad y Profesor (Jerarquía y Composición)
- Crea una clase
Universidad
connombre
yfacultades
. - Crea una clase
Facultad
connombre
yprofesores
. - Crea una clase
Profesor
connombre
yespecialidad
. - Una universidad tiene varias facultades y cada facultad tiene varios profesores.
class Universidad {
-nombre : String
-facultades : List<Facultad>
}
class Facultad {
-nombre : String
-profesores: List<Profesor>
}
class Profesor {
-nombre : String
-especialidad : String
}
Universidad "1" *-- "n" Facultad : contiene
Facultad "1" *-- "n" Profesor : emplea
2. Empresa y Empleados con Herencia (Herencia y Asociación 1 a Muchos)
- Crea una clase
Empresa
connombre
yempleados
. - Crea una clase
Empleado
connombre
ysalario
. - Crea dos subclases de
Empleado
:Gerente
yDesarrollador
. - La empresa tiene varios empleados y los empleados pueden ser de distintos tipos.
class Empresa {
- String nombre
- List<Empleado> empleados
}
class Empleado {
- String nombre
- double salario
}
class Gerente {
- String departamento
}
class Desarrollador {
- String lenguaje
}
Empresa "1" o-- "n" Empleado : contrata
Empleado <|-- Gerente
Empleado <|-- Desarrollador
3. Cliente y Facturas (Asociación 1 a Muchos con Clases Dependientes)
- Crea una clase
Cliente
connombre
ydni
. - Crea una clase
Factura
conid
,importe
yfecha
. - Cada cliente puede tener varias facturas.
class Cliente {
-nombre : String
-dni : String
}
class Factura {
-id : int
-importe : double
-fecha : String
}
Cliente "1" -- "n" Factura : recibe
4. Zoológico y Animales (Herencia y Asociación 1 a Muchos)
- Crea una clase
Zoologico
connombre
yubicación
. - Crea una clase
Animal
connombre
yespecie
. - Crea subclases
Mamifero
yAve
con atributos específicos. - Un zoológico tiene varios animales.
class Zoologico {
-nombre : String
-ubicacion : String
}
class Animal {
-nombre : String
-especie : String
}
class Mamifero {
-tienePelo : boolean
}
class Ave {
-puedeVolar : boolean
}
Zoologico "1" o-- "n" Animal : alberga
Animal <|-- Mamifero
Animal <|-- Ave
5. Tienda y Empleados con Herencia (Herencia y Agregación 1 a Muchos)
- Crea una clase
Tienda
connombre
yubicación
. - Crea una clase
Empleado
connombre
ysueldo
. - Crea subclases
Cajero
yGerente
. - Una tienda tiene varios empleados.
class Tienda {
-nombre : String
-ubicacion : String
}
class Empleado {
-nombre : String
-sueldo : double
}
class Cajero {
-cajaAsignada : int
}
class Gerente {
-departamento : String
}
Tienda "1" o-- "n" Empleado : contrata
Empleado <|-- Cajero
Empleado <|-- Gerente
6. Red Social: Usuarios y Amigos (Asociación Reflexiva Muchos a Muchos)
- Crea una clase
Usuario
connombre
yedad
. - Un usuario puede tener varios amigos (otros
Usuario
).
class Usuario {
-nombre : String
-edad : int
}
Usuario "n" -- "n" Usuario : es amigo de
7. Plataforma de Streaming: Usuario y Suscripción (Agregación 1 a 1 con Jerarquía)
- Crea una clase
Usuario
connombre
yemail
. - Crea una clase
Suscripcion
contipo
yprecio
. - Un usuario puede tener una suscripción, pero la suscripción puede existir sin un usuario.
class Usuario {
-nombre : String
-email : String
}
class Suscripcion {
-tipo : String
-precio : double
}
Usuario "1" o-- "0..1" Suscripcion : tiene
Estos ejercicios permiten trabajar con asociaciones, agregaciones, composición y herencia en Java de forma progresiva.
Deja una respuesta