Café y Código
Módulo 12

Taller Práctico de POO Completa en Java

Diseño orientado a objetos bajo la estructura fija obligatoria: 1 Clase Padre + 3 Clases Hijas + 1 Interfaz + 1 Clase de Composición Externa.

📌 Estructura Fija Obligatoria de Cada Ejercicio

  • 1. Una clase padre que define el estado y conducta base.
  • 2. Exactamente 3 clases hijas (`extends`).
  • 3. Hija 1 implementa al menos 1 interfaz (`implements`).
  • 4. Hija 2 contiene un objeto externo como atributo (Composición).
  • 5. Hija 3 tiene atributos y comportamientos propios especializados.
  • 6. Demostración en clase `Main` usando referencias polimórficas del tipo Padre.
NIVEL BÁSICO

Ejercicio 1: Sistema de Gestión de Préstamos en Biblioteca

Contexto: Una biblioteca municipal necesita categorizar y gestionar los recursos disponibles en su catálogo digital (libros impresos, audiolibros y revistas académicas). Todos los recursos comparten datos básicos de registro, pero cada formato opera de forma distinta.

📐 Estructura de Clases

  • Clase Padre: RecursoBiblioteca
  • Clases Hijas: LibroImpreso (propios), AudioLibro (con clase externa), RevistaAcademica (con interfaz)
  • Interfaz: Descargable (método descargar())
  • Clase Externa: SoporteTecnico
UMLDiagrama UML - Ejercicio Básico (Biblioteca)
<<interface>>Descargable
+descargar()descargar()descargar()descargar()
implements (interfaz)
RecursoBiblioteca
-id: StringString id
-titulo: StringString titulo
-disponible: booleanboolean disponible
+prestar()prestar()
extends (herencia)
LibroImpreso
-numeroPaginas: intint numeroPaginasnumeroPaginasnumeroPaginas
-tipoTapa: StringString tipoTapatipoTapatipoTapa
+prestar()prestar()prestar()prestar()
AudioLibro
-duracionMinutos: doubledouble duracionMinutosduracionMinutosduracionMinutos
-soporte: SoporteTecnicoSoporteTecnico soportesoportesoporte
+prestar()prestar()prestar()prestar()
+reproducirMuestra()reproducirMuestra()reproducirMuestra()reproducirMuestra()
tiene (composición)
<<externa>>SoporteTecnico
-nombreFormato: StringString nombreFormatonombreFormatonombreFormato
-requiereConexion: booleanboolean requiereConexionrequiereConexionrequiereConexion
RevistaAcademica
-numeroEdicion: intint numeroEdicionnumeroEdicionnumeroEdicion
-doiLicencia: StringString doiLicenciadoiLicenciadoiLicencia
+prestar()prestar()prestar()prestar()
+descargar()descargar()descargar()descargar()
🔍 Clic para ampliar y hacer zoom
NIVEL MEDIO

Ejercicio 2: Sistema de Atención Médica Hospitalaria

Contexto: Un hospital privado necesita gestionar las consultas de sus pacientes clasificándolas según el área de atención (Medicina General, Cirugía de Urgencia y Telemedicina). Todas las atenciones requieren diagnóstico pero el cobro y procedimiento varían sensiblemente.

📐 Estructura de Clases

  • Clase Padre Abstracta: AtencionMedica (con método abstracto calcularCostoTotal())
  • Clases Hijas: ConsultaGeneral (propia), CirugiaUrgencia (con clase externa Quirofano), Telemedicina (implementa FacturableDigital)
  • Interfaz: FacturableDigital (métodos generarFacturaXML() y enviarPorCorreo())
  • Clase Externa: Quirofano
UMLDiagrama UML - Ejercicio Medio (Hospital)
<<interface>>FacturableDigital
+generarFacturaXML()generarFacturaXML()generarFacturaXML()generarFacturaXML()
+enviarPorCorreo(email: String)enviarPorCorreo(String email)enviarPorCorreo(email)enviarPorCorreo(email)
implements (interfaz)
<<abstract>>AtencionMedica
-idAtencion: StringString idAtencion
-nombrePaciente: StringString nombrePaciente
-costoBase: doubledouble costoBase
+calcularCostoTotal()calcularCostoTotal()
+registrarDiagnostico(d: String)registrarDiagnostico(String d)
extends (herencia)
ConsultaGeneral
-esRevisiónRutina: booleanboolean esRevisiónRutinaesRevisiónRutinaesRevisiónRutina
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
CirugiaUrgencia
-horasDuracion: doubledouble horasDuracionhorasDuracionhorasDuracion
-quirofanoAsignado: QuirofanoQuirofano quirofanoAsignadoquirofanoAsignadoquirofanoAsignado
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
tiene (composición)
<<externa>>Quirofano
-codigoSala: StringString codigoSalacodigoSalacodigoSala
-esterilizado: booleanboolean esterilizadoesterilizadoesterilizado
Telemedicina
-plataformaVideo: StringString plataformaVideoplataformaVideoplataformaVideo
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
+generarFacturaXML()generarFacturaXML()generarFacturaXML()generarFacturaXML()
+enviarPorCorreo(email: String)enviarPorCorreo(String email)enviarPorCorreo(email)enviarPorCorreo(email)
🔍 Clic para ampliar y hacer zoom
NIVEL COMPLEJO

Ejercicio 3: Sistema de Reserva y Operaciones en Hotel de Lujo

Contexto: Un resort 5 estrellas administra sus habitaciones bajo un sistema automatizado de tarifas y estados. Hay habitaciones Estándar, Penthouse de Lujo y Suites Temáticas. El sistema debe controlar el servicio de limpieza, la seguridad y el cálculo de checkout con impuestos adicionales.

📐 Estructura de Clases

  • Clase Padre Abstracta: HabitacionHotel
  • Clases Hijas: HabitacionEstandar (propia), SuitePenthouse (con clase externa ServicioMayordomo), SuiteTematica (implementa SanitizableAutomatico)
  • Interfaz: SanitizableAutomatico (métodos iniciarCicloDesinfeccion(), obtenerReporteSeguridad())
  • Clase Externa: ServicioMayordomo
UMLDiagrama UML - Ejercicio Complejo (Hotel)
<<interface>>SanitizableAutomatico
+iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()
+obtenerReporteSeguridad()obtenerReporteSeguridad()obtenerReporteSeguridad()obtenerReporteSeguridad()
implements (interfaz)
<<abstract>>HabitacionHotel
-numeroHabitacion: intint numeroHabitacion
-precioNocheBase: doubledouble precioNocheBase
-ocupada: booleanboolean ocupada
+calcularCostoEstadia(noches: int)calcularCostoEstadia(int noches)
+realizarCheckIn()realizarCheckIn()
extends (herencia)
HabitacionEstandar
-cantidadCamas: intint cantidadCamascantidadCamascantidadCamas
+calcularCostoEstadia(noches: int)calcularCostoEstadia(int noches)calcularCostoEstadia(noches)calcularCostoEstadia(noches)
SuitePenthouse
-incluyeJacuzzi: booleanboolean incluyeJacuzziincluyeJacuzziincluyeJacuzzi
-mayordomoAsignado: ServicioMayordomoServicioMayordomo mayordomoAsignadomayordomoAsignadomayordomoAsignado
+calcularCostoEstadia(noches: int)calcularCostoEstadia(int noches)calcularCostoEstadia(noches)calcularCostoEstadia(noches)
tiene (composición)
<<externa>>ServicioMayordomo
-nombreMayordomo: StringString nombreMayordomonombreMayordomonombreMayordomo
-turnosDisponibles: intint turnosDisponiblesturnosDisponiblesturnosDisponibles
SuiteTematica
-tematicaDecoracion: StringString tematicaDecoraciontematicaDecoraciontematicaDecoracion
+calcularCostoEstadia(noches: int)calcularCostoEstadia(int noches)calcularCostoEstadia(noches)calcularCostoEstadia(noches)
+iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()
+obtenerReporteSeguridad()obtenerReporteSeguridad()obtenerReporteSeguridad()obtenerReporteSeguridad()
🔍 Clic para ampliar y hacer zoom
Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.