Muchos dispositivos creando código de programación.

Ejercicios para practicar relaciones entre clases en Java

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 con nombre y nacionalidad.
  • Crea una clase Libro con titulo y autor.
  • Un libro tiene un único autor.
  • Implementa un método en Libro para mostrar los datos del autor.

Diagrama generado con PlantUML

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 con nombre y edad.
  • Crea una clase Mascota con nombre y especie.
  • Una persona solo puede tener una mascota.

Diagrama generado con PlantUML

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 con nombre y curso.
  • Crea una clase Tutor con nombre y especialidad.
  • Cada alumno tiene un tutor, pero un tutor puede no tener alumnos.

Diagrama generado con PlantUML

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 con marca y modelo.
  • Crea una clase Motor con potencia y tipoCombustible.
  • Un coche siempre tiene un motor asociado.

Diagrama generado con PlantUML

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 con nombre y matricula.
  • Crea una clase Curso con nombre y codigo.
  • Un estudiante puede estar en varios cursos y un curso tiene varios estudiantes.

Diagrama generado con PlantUML

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 con nombre y dni.
  • Crea una clase CuentaBancaria con numeroCuenta y saldo.
  • Un cliente puede tener varias cuentas bancarias, pero una cuenta pertenece solo a un cliente.

Diagrama generado con PlantUML

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 con id y fecha.
  • Crea una clase Producto con nombre y precio.
  • Un pedido puede contener varios productos y un producto puede estar en varios pedidos.

Diagrama generado con PlantUML

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 con nombre y ubicación.
  • Crea una clase Libro con titulo y autor.
  • Una biblioteca puede tener varios libros, pero un libro puede existir sin estar en una biblioteca.

Diagrama generado con PlantUML

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 con nombre.
  • Crea una clase Carrera con nombre y duracion.
  • Una universidad debe tener al menos una carrera.

Diagrama generado con PlantUML

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 con nombre y facultades.
  • Crea una clase Facultad con nombre y profesores.
  • Crea una clase Profesor con nombre y especialidad.
  • Una universidad tiene varias facultades y cada facultad tiene varios profesores.

Diagrama generado con PlantUML

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 con nombre y empleados.
  • Crea una clase Empleado con nombre y salario.
  • Crea dos subclases de Empleado: Gerente y Desarrollador.
  • La empresa tiene varios empleados y los empleados pueden ser de distintos tipos.

Diagrama generado con PlantUML

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 con nombre y dni.
  • Crea una clase Factura con id, importe y fecha.
  • Cada cliente puede tener varias facturas.

Diagrama generado con PlantUML

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 con nombre y ubicación.
  • Crea una clase Animal con nombre y especie.
  • Crea subclases Mamifero y Ave con atributos específicos.
  • Un zoológico tiene varios animales.

Diagrama generado con PlantUML

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 con nombre y ubicación.
  • Crea una clase Empleado con nombre y sueldo.
  • Crea subclases Cajero y Gerente.
  • Una tienda tiene varios empleados.

Diagrama generado con PlantUML

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 con nombre y edad.
  • Un usuario puede tener varios amigos (otros Usuario).

Diagrama generado con PlantUML

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 con nombre y email.
  • Crea una clase Suscripcion con tipo y precio.
  • Un usuario puede tener una suscripción, pero la suscripción puede existir sin un usuario.

Diagrama generado con PlantUML

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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.