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 
Autorconnombreynacionalidad. - Crea una clase 
Librocontituloyautor. - Un libro tiene un único autor.
 - Implementa un método en 
Libropara 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 
Personaconnombreyedad. - Crea una clase 
Mascotaconnombreyespecie. - 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 
Alumnoconnombreycurso. - Crea una clase 
Tutorconnombreyespecialidad. - 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 
Cocheconmarcaymodelo. - Crea una clase 
MotorconpotenciaytipoCombustible. - 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 
Estudianteconnombreymatricula. - Crea una clase 
Cursoconnombreycodigo. - 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 
Clienteconnombreydni. - Crea una clase 
CuentaBancariaconnumeroCuentaysaldo. - 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 
Pedidoconidyfecha. - Crea una clase 
Productoconnombreyprecio. - 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 
Bibliotecaconnombreyubicación. - Crea una clase 
Librocontituloyautor. - 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 
Universidadconnombre. - Crea una clase 
Carreraconnombreyduracion. - 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 
Universidadconnombreyfacultades. - Crea una clase 
Facultadconnombreyprofesores. - Crea una clase 
Profesorconnombreyespecialidad. - 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 
Empresaconnombreyempleados. - Crea una clase 
Empleadoconnombreysalario. - Crea dos subclases de 
Empleado:GerenteyDesarrollador. - 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 
Clienteconnombreydni. - Crea una clase 
Facturaconid,importeyfecha. - 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 
Zoologicoconnombreyubicación. - Crea una clase 
Animalconnombreyespecie. - Crea subclases 
MamiferoyAvecon 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 
Tiendaconnombreyubicación. - Crea una clase 
Empleadoconnombreysueldo. - Crea subclases 
CajeroyGerente. - 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 
Usuarioconnombreyedad. - 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 
Usuarioconnombreyemail. - Crea una clase 
Suscripcioncontipoyprecio. - 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