Café y Código

POO Completa y Arquitectura

Desafíos de POO Completa

25 sistemas reales diseñados con la estructura técnica estricta:1 Clase Padre + 3 Clases Hijas + 1 Interfaz + 1 Clase Externa (Composición) + 1 Clase con comportamiento propio. Cada desafío incluye su Diagrama UML interactivo y su solución completa en Java protegida por clave.

Ruta canónica: /challenges/oop-completed · Progreso guardado como aprende_poo_completed_challenges_v1 en este navegador.

ESTRUCTURA TÉCNICA ESTRICTA

🏛️ Reglas Arquitectónicas de cada Desafío

  • 1. Clase Padre Abstracta: Modela la abstracción raíz con estado común y métodos polimórficos. (La clase padre NO implementa la interfaz).
  • 2. Herencia Desacoplada: 3 Clases Hijas que extienden del padre. Cada hija atiende un caso de uso específico.
  • 3. Interfaz Específica (Hija 3): Únicamente la 3ra clase hija implementa la Interfaz de contrato. Las demás hijas y el padre quedan libres de esa carga.
  • 4. Composición (Hija 2): La 2da clase hija contiene por composición una instancia de la Clase Externa independiente.
  • 5. Especialización Propia (Hija 1): La 1ra clase hija define atributos y métodos de negocio propios exclusivos.
  • 6. Main y Polimorfismo: Prueba polimórfica en colección de tipo Padre y ejecución del contrato de interfaz.
💡 Principio de Segregación de Interfaces (ISP): La Interfaz nunca se asocia a la Clase Padre para no obligar a todas las clases hijas a implementar métodos innecesarios. Se asocia exclusivamente a la clase hija que requiere dicho contrato.

25 desafíos con arquitectura completa · clic para expandir diagrama y checklist

1. Sistema de Gestión de Recursos de Biblioteca Digital

RecursoBiblioteca → [LibroImpreso, AudioLibro (*-- SoporteTecnico), RevistaAcademica (<|.. Descargable)]
0 / 5

Contexto: Una biblioteca universitaria gestiona libros físicos, audiolibros digitales y revistas de acceso libre.

Qué hacer: Crea RecursoBiblioteca (padre), LibroImpreso, AudioLibro (con SoporteTecnico) y RevistaAcademica (Descargable).

📐 Componentes del Sistema:

  • Padre Abstracto: RecursoBiblioteca
  • Interfaz Contrato (Solo Hija 3): Descargable
  • Clase Externa (Composición Hija 2): SoporteTecnico
  • Hija con Propio: LibroImpreso
UMLDiagrama UML — 1. Sistema de Gestión de Recursos de Biblioteca Digital
<<interface>>Descargable
+descargar()descargar()descargar()descargar()
implements (interfaz)
<<abstract>>RecursoBiblioteca
-id: StringString id
-titulo: StringString titulo
-disponible: booleanboolean disponible
+prestar()prestar()
+devolver()devolver()
+isDisponible()isDisponible()
extends (herencia)
LibroImpreso
-numPaginas: intint numPaginasnumPaginasnumPaginas
-tipoEmpastado: StringString tipoEmpastadotipoEmpastadotipoEmpastado
+hojearPaginas()hojearPaginas()hojearPaginas()hojearPaginas()
AudioLibro
-duracionMinutos: doubledouble duracionMinutosduracionMinutosduracionMinutos
-soporte: SoporteTecnicoSoporteTecnico soportesoportesoporte
+reproducirMuestra()reproducirMuestra()reproducirMuestra()reproducirMuestra()
tiene (composición)
<<externa>>SoporteTecnico
-nombreFormato: StringString nombreFormatonombreFormatonombreFormato
-activo: booleanboolean activoactivoactivo
+getNombreFormato()getNombreFormato()getNombreFormato()getNombreFormato()
RevistaAcademica
-numeroEdicion: intint numeroEdicionnumeroEdicionnumeroEdicion
-doiLicencia: StringString doiLicenciadoiLicenciadoiLicencia
+descargar()descargar()descargar()descargar()
🔍 Clic para ampliar y hacer zoom

2. Sistema de Atención Médica Hospitalaria

AtencionMedica → [ConsultaGeneral, CirugiaUrgencia (*-- Quirofano), Telemedicina (<|.. FacturableDigital)]
0 / 5

Contexto: Un hospital privado administra consultas médicas clasificadas por especialidad, cirugía y telemedicina.

Qué hacer: Modelar AtencionMedica (padre), ConsultaGeneral (propia), CirugiaUrgencia (con Quirofano) y Telemedicina (FacturableDigital).

📐 Componentes del Sistema:

  • Padre Abstracto: AtencionMedica
  • Interfaz Contrato (Solo Hija 3): FacturableDigital
  • Clase Externa (Composición Hija 2): Quirofano
  • Hija con Propio: ConsultaGeneral
UMLDiagrama UML — 2. Sistema de Atención Médica Hospitalaria
<<interface>>FacturableDigital
+generarFacturaXML()generarFacturaXML()generarFacturaXML()generarFacturaXML()
+enviarPorCorreo(email: String)enviarPorCorreo(email: String)enviarPorCorreo(email)enviarPorCorreo(email)
implements (interfaz)
<<abstract>>AtencionMedica
-codigoAtencion: StringString codigoAtencion
-costoBase: doubledouble costoBase
+calcularCostoTotal()calcularCostoTotal()
+registrarDiagnostico(diag: String)registrarDiagnostico(diag: String)
extends (herencia)
ConsultaGeneral
-esRevisionRutina: booleanboolean esRevisionRutinaesRevisionRutinaesRevisionRutina
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
+emitirRecetaMedica()emitirRecetaMedica()emitirRecetaMedica()emitirRecetaMedica()
CirugiaUrgencia
-horasDuracion: doubledouble horasDuracionhorasDuracionhorasDuracion
-quirofanoAsignado: QuirofanoQuirofano quirofanoAsignadoquirofanoAsignadoquirofanoAsignado
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
+prepararEquipo()prepararEquipo()prepararEquipo()prepararEquipo()
tiene (composición)
<<externa>>Quirofano
-codigoSala: StringString codigoSalacodigoSalacodigoSala
-esterilizado: booleanboolean esterilizadoesterilizadoesterilizado
+isEsterilizado()isEsterilizado()isEsterilizado()isEsterilizado()
Telemedicina
-plataformaVideo: StringString plataformaVideoplataformaVideoplataformaVideo
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
+generarFacturaXML()generarFacturaXML()generarFacturaXML()generarFacturaXML()
+enviarPorCorreo(email: String)enviarPorCorreo(email: String)enviarPorCorreo(email)enviarPorCorreo(email)
🔍 Clic para ampliar y hacer zoom

3. Sistema de Reserva y Operaciones en Hotel 5 Estrellas

HabitacionHotel → [HabitacionEstandar, SuitePenthouse (*-- ServicioMayordomo), SuiteTematica (<|.. SanitizableAutomatico)]
0 / 5

Contexto: Un resort de lujo opera suites temáticas, penthouses VIP con mayordomo y habitaciones estándar.

Qué hacer: Modelar HabitacionHotel (padre), HabitacionEstandar (propia), SuitePenthouse (con ServicioMayordomo) y SuiteTematica (SanitizableAutomatico).

📐 Componentes del Sistema:

  • Padre Abstracto: HabitacionHotel
  • Interfaz Contrato (Solo Hija 3): SanitizableAutomatico
  • Clase Externa (Composición Hija 2): ServicioMayordomo
  • Hija con Propio: HabitacionEstandar
UMLDiagrama UML — 3. Sistema de Reserva y Operaciones en Hotel 5 Estrellas
<<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(noches: int)
+realizarCheckIn()realizarCheckIn()
extends (herencia)
HabitacionEstandar
-camasSupletorias: intint camasSupletoriascamasSupletoriascamasSupletorias
+calcularCostoEstadia(noches: int)calcularCostoEstadia(noches: int)calcularCostoEstadia(noches)calcularCostoEstadia(noches)
+solicitarToallasExtra()solicitarToallasExtra()solicitarToallasExtra()solicitarToallasExtra()
SuitePenthouse
-jacuzziPrivado: booleanboolean jacuzziPrivadojacuzziPrivadojacuzziPrivado
-mayordomoVIP: ServicioMayordomoServicioMayordomo mayordomoVIPmayordomoVIPmayordomoVIP
+calcularCostoEstadia(noches: int)calcularCostoEstadia(noches: int)calcularCostoEstadia(noches)calcularCostoEstadia(noches)
+solicitarCenaGourmet()solicitarCenaGourmet()solicitarCenaGourmet()solicitarCenaGourmet()
tiene (composición)
<<externa>>ServicioMayordomo
-nombreMayordomo: StringString nombreMayordomonombreMayordomonombreMayordomo
-turnosDisponibles: intint turnosDisponiblesturnosDisponiblesturnosDisponibles
+atenderLlamadaVIP()atenderLlamadaVIP()atenderLlamadaVIP()atenderLlamadaVIP()
SuiteTematica
-tematicaDecoracion: StringString tematicaDecoraciontematicaDecoraciontematicaDecoracion
+calcularCostoEstadia(noches: int)calcularCostoEstadia(noches: int)calcularCostoEstadia(noches)calcularCostoEstadia(noches)
+iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()iniciarCicloDesinfeccion()
+obtenerReporteSeguridad()obtenerReporteSeguridad()obtenerReporteSeguridad()obtenerReporteSeguridad()
🔍 Clic para ampliar y hacer zoom

4. Flota de Vehículos Autónomos Urbanos

VehiculoAutonomo → [BusExpreso, TaxiAutonomo (*-- BateriaLitio), DronEntrega (<|.. RastreableGPS)]
0 / 5

Contexto: Una plataforma de transporte inteligente coordina taxis autónomos, drones de entrega y buses expresos.

Qué hacer: Crear VehiculoAutonomo (padre), BusExpreso (propio), TaxiAutonomo (con BateriaLitio) y DronEntrega (RastreableGPS).

📐 Componentes del Sistema:

  • Padre Abstracto: VehiculoAutonomo
  • Interfaz Contrato (Solo Hija 3): RastreableGPS
  • Clase Externa (Composición Hija 2): BateriaLitio
  • Hija con Propio: BusExpreso
UMLDiagrama UML — 4. Flota de Vehículos Autónomos Urbanos
<<interface>>RastreableGPS
+obtenerCoordenadas()obtenerCoordenadas()obtenerCoordenadas()obtenerCoordenadas()
+transmitirTelemetria()transmitirTelemetria()transmitirTelemetria()transmitirTelemetria()
implements (interfaz)
<<abstract>>VehiculoAutonomo
-vin: StringString vin
-velocidadMax: doubledouble velocidadMax
-enRuta: booleanboolean enRuta
+iniciarRuta(destino: String)iniciarRuta(destino: String)
+frenarEmergencia()frenarEmergencia()
extends (herencia)
BusExpreso
-capacidadPasajeros: intint capacidadPasajeroscapacidadPasajeroscapacidadPasajeros
+anunciarSiguienteParada()anunciarSiguienteParada()anunciarSiguienteParada()anunciarSiguienteParada()
TaxiAutonomo
-tarifaPorKm: doubledouble tarifaPorKmtarifaPorKmtarifaPorKm
-packBaterias: BateriaLitioBateriaLitio packBateriaspackBateriaspackBaterias
+solicitarRecargaRapida()solicitarRecargaRapida()solicitarRecargaRapida()solicitarRecargaRapida()
tiene (composición)
<<externa>>BateriaLitio
-capacidadKWh: doubledouble capacidadKWhcapacidadKWhcapacidadKWh
-porcentajeCarga: intint porcentajeCargaporcentajeCargaporcentajeCarga
+getPorcentajeCarga()getPorcentajeCarga()getPorcentajeCarga()getPorcentajeCarga()
DronEntrega
-pesoMaxPaquete: doubledouble pesoMaxPaquetepesoMaxPaquetepesoMaxPaquete
+obtenerCoordenadas()obtenerCoordenadas()obtenerCoordenadas()obtenerCoordenadas()
+transmitirTelemetria()transmitirTelemetria()transmitirTelemetria()transmitirTelemetria()
🔍 Clic para ampliar y hacer zoom

5. Sistema de Pedidos de Cocina y Restaurante

PlatilloMenu → [EntradaGourmet, PlatoPrincipal (*-- Sommelier), PedidoDelivery (<|.. EmpacableTermico)]
0 / 5

Contexto: Un grupo gastronómico procesa platillos de carta, menús degustación con maridaje y pedidos para delivery.

Qué hacer: Modelar PlatilloMenu (padre), EntradaGourmet (propia), PlatoPrincipal (con Sommelier) y PedidoDelivery (EmpacableTermico).

📐 Componentes del Sistema:

  • Padre Abstracto: PlatilloMenu
  • Interfaz Contrato (Solo Hija 3): EmpacableTermico
  • Clase Externa (Composición Hija 2): Sommelier
  • Hija con Propio: EntradaGourmet
UMLDiagrama UML — 5. Sistema de Pedidos de Cocina y Restaurante
<<interface>>EmpacableTermico
+sellarEmpaque()sellarEmpaque()sellarEmpaque()sellarEmpaque()
+tiempoConservacionMin()tiempoConservacionMin()tiempoConservacionMin()tiempoConservacionMin()
implements (interfaz)
<<abstract>>PlatilloMenu
-idPlato: StringString idPlato
-nombre: StringString nombre
-precioBase: doubledouble precioBase
+calcularPrecioFinal()calcularPrecioFinal()
+prepararPlato()prepararPlato()
extends (herencia)
EntradaGourmet
-esFrio: booleanboolean esFrioesFrioesFrio
+calcularPrecioFinal()calcularPrecioFinal()calcularPrecioFinal()calcularPrecioFinal()
+verificarAlergenos()verificarAlergenos()verificarAlergenos()verificarAlergenos()
PlatoPrincipal
-tipoProteina: StringString tipoProteinatipoProteinatipoProteina
-sommelierAsignado: SommelierSommelier sommelierAsignadosommelierAsignadosommelierAsignado
+calcularPrecioFinal()calcularPrecioFinal()calcularPrecioFinal()calcularPrecioFinal()
+sugerirMaridaje()sugerirMaridaje()sugerirMaridaje()sugerirMaridaje()
tiene (composición)
<<externa>>Sommelier
-nombreExperto: StringString nombreExpertonombreExpertonombreExperto
-certificacionNivel: intint certificacionNivelcertificacionNivelcertificacionNivel
+recomendarVino(plato: String)recomendarVino(plato: String)recomendarVino(plato)recomendarVino(plato)
PedidoDelivery
-direccionEntrega: StringString direccionEntregadireccionEntregadireccionEntrega
+calcularPrecioFinal()calcularPrecioFinal()calcularPrecioFinal()calcularPrecioFinal()
+sellarEmpaque()sellarEmpaque()sellarEmpaque()sellarEmpaque()
+tiempoConservacionMin()tiempoConservacionMin()tiempoConservacionMin()tiempoConservacionMin()
🔍 Clic para ampliar y hacer zoom

6. Plataforma de Contenido Multimedia Streaming

ContenidoMedia → [PeliculaCinema, EventoEnVivo (*-- ServidorCDN), PodcastEpisodio (<|.. DescargableOffline)]
0 / 5

Contexto: Un servicio de video bajo demanda transmite películas 4K, emisiones en vivo de deportes y podcast de audio.

Qué hacer: Modelar ContenidoMedia (padre), PeliculaCinema (propia), EventoEnVivo (con ServidorCDN) y PodcastEpisodio (DescargableOffline).

📐 Componentes del Sistema:

  • Padre Abstracto: ContenidoMedia
  • Interfaz Contrato (Solo Hija 3): DescargableOffline
  • Clase Externa (Composición Hija 2): ServidorCDN
  • Hija con Propio: PeliculaCinema
UMLDiagrama UML — 6. Plataforma de Contenido Multimedia Streaming
<<interface>>DescargableOffline
+guardarEnCache()guardarEnCache()guardarEnCache()guardarEnCache()
+verificarEspacioDisk()verificarEspacioDisk()verificarEspacioDisk()verificarEspacioDisk()
implements (interfaz)
<<abstract>>ContenidoMedia
-idMedia: StringString idMedia
-titulo: StringString titulo
-duracionSeg: intint duracionSeg
+reproducir()reproducir()
+pausar()pausar()
extends (herencia)
PeliculaCinema
-director: StringString directordirectordirector
+mostrarTrailer()mostrarTrailer()mostrarTrailer()mostrarTrailer()
EventoEnVivo
-latenciaMs: intint latenciaMslatenciaMslatenciaMs
-nodoCDN: ServidorCDNServidorCDN nodoCDNnodoCDNnodoCDN
+ajustarCalidadDynamic()ajustarCalidadDynamic()ajustarCalidadDynamic()ajustarCalidadDynamic()
tiene (composición)
<<externa>>ServidorCDN
-ipNodo: StringString ipNodoipNodoipNodo
-anchoBandaGbps: doubledouble anchoBandaGbpsanchoBandaGbpsanchoBandaGbps
+balancearCarga()balancearCarga()balancearCarga()balancearCarga()
PodcastEpisodio
-numEpisodio: intint numEpisodionumEpisodionumEpisodio
+guardarEnCache()guardarEnCache()guardarEnCache()guardarEnCache()
+verificarEspacioDisk()verificarEspacioDisk()verificarEspacioDisk()verificarEspacioDisk()
🔍 Clic para ampliar y hacer zoom

7. Sistema de Pasajes y Asientos de Aerolínea

AsientoVuelo → [AsientoTurista, AsientoBusiness (*-- CabinaPrivada), BoardingDigital (<|.. CheckInOnLine)]
0 / 5

Contexto: Una aerolínea internacional gestiona asientos de clase Turista, Business con cabina VIP y Charter privado.

Qué hacer: Modelar AsientoVuelo (padre), AsientoTurista (propio), AsientoBusiness (con CabinaPrivada) and BoardingDigital (CheckInOnLine).

📐 Componentes del Sistema:

  • Padre Abstracto: AsientoVuelo
  • Interfaz Contrato (Solo Hija 3): CheckInOnLine
  • Clase Externa (Composición Hija 2): CabinaPrivada
  • Hija con Propio: AsientoTurista
UMLDiagrama UML — 7. Sistema de Pasajes y Asientos de Aerolínea
<<interface>>CheckInOnLine
+emitirBoardingPass()emitirBoardingPass()emitirBoardingPass()emitirBoardingPass()
+validarPasaporte(num: String)validarPasaporte(num: String)validarPasaporte(num)validarPasaporte(num)
implements (interfaz)
<<abstract>>AsientoVuelo
-codigoAsiento: StringString codigoAsiento
-precioTarifa: doubledouble precioTarifa
-reservado: booleanboolean reservado
+reservarAsiento()reservarAsiento()
+calcularEquipajePermitido()calcularEquipajePermitido()
extends (herencia)
AsientoTurista
-incluyeSnack: booleanboolean incluyeSnackincluyeSnackincluyeSnack
+calcularEquipajePermitido()calcularEquipajePermitido()calcularEquipajePermitido()calcularEquipajePermitido()
+elegirMenuEstandar()elegirMenuEstandar()elegirMenuEstandar()elegirMenuEstandar()
AsientoBusiness
-accesoLounge: booleanboolean accesoLoungeaccesoLoungeaccesoLounge
-suiteCabina: CabinaPrivadaCabinaPrivada suiteCabinasuiteCabinasuiteCabina
+calcularEquipajePermitido()calcularEquipajePermitido()calcularEquipajePermitido()calcularEquipajePermitido()
+solicitarChampagne()solicitarChampagne()solicitarChampagne()solicitarChampagne()
tiene (composición)
<<externa>>CabinaPrivada
-numPantallaHD: intint numPantallaHDnumPantallaHDnumPantallaHD
-asientoReclinable180: booleanboolean asientoReclinable180asientoReclinable180asientoReclinable180
+activarMasaje()activarMasaje()activarMasaje()activarMasaje()
BoardingDigital
-codigoQR: StringString codigoQRcodigoQRcodigoQR
+calcularEquipajePermitido()calcularEquipajePermitido()calcularEquipajePermitido()calcularEquipajePermitido()
+emitirBoardingPass()emitirBoardingPass()emitirBoardingPass()emitirBoardingPass()
+validarPasaporte(num: String)validarPasaporte(num: String)validarPasaporte(num)validarPasaporte(num)
🔍 Clic para ampliar y hacer zoom

8. Pasarela de Pagos y Facturación E-Commerce

TransaccionPago → [PagoTransferencia, PagoTarjeta (*-- EncriptadorRSA), PagoCripto (<|.. VerificableBlockchain)]
0 / 5

Contexto: Una tienda online procesa transacciones con tarjeta de crédito, transferencias y pagos en criptomonedas.

Qué hacer: Modelar TransaccionPago (padre), PagoTransferencia (propio), PagoTarjeta (con EncriptadorRSA) y PagoCripto (VerificableBlockchain).

📐 Componentes del Sistema:

  • Padre Abstracto: TransaccionPago
  • Interfaz Contrato (Solo Hija 3): VerificableBlockchain
  • Clase Externa (Composición Hija 2): EncriptadorRSA
  • Hija con Propio: PagoTransferencia
UMLDiagrama UML — 8. Pasarela de Pagos y Facturación E-Commerce
<<interface>>VerificableBlockchain
+obtenerHashConfirmacion()obtenerHashConfirmacion()obtenerHashConfirmacion()obtenerHashConfirmacion()
+numeroConfirmaciones()numeroConfirmaciones()numeroConfirmaciones()numeroConfirmaciones()
implements (interfaz)
<<abstract>>TransaccionPago
-idTransaccion: StringString idTransaccion
-montoUSD: doubledouble montoUSD
-completado: booleanboolean completado
+procesarPago()procesarPago()
+generarComprobante()generarComprobante()
extends (herencia)
PagoTransferencia
-bancoOrigen: StringString bancoOrigenbancoOrigenbancoOrigen
+procesarPago()procesarPago()procesarPago()procesarPago()
+adjuntarComprobante()adjuntarComprobante()adjuntarComprobante()adjuntarComprobante()
PagoTarjeta
-ultimos4Digitos: StringString ultimos4Digitosultimos4Digitosultimos4Digitos
-moduloRSA: EncriptadorRSAEncriptadorRSA moduloRSAmoduloRSAmoduloRSA
+procesarPago()procesarPago()procesarPago()procesarPago()
+tokenizarTarjeta()tokenizarTarjeta()tokenizarTarjeta()tokenizarTarjeta()
tiene (composición)
<<externa>>EncriptadorRSA
-longitudLlave: intint longitudLlavelongitudLlavelongitudLlave
-tokenSeguridad: StringString tokenSeguridadtokenSeguridadtokenSeguridad
+encriptarDatos(datos: String)encriptarDatos(datos: String)encriptarDatos(datos)encriptarDatos(datos)
PagoCripto
-walletDestino: StringString walletDestinowalletDestinowalletDestino
-redBlockchain: StringString redBlockchainredBlockchainredBlockchain
+procesarPago()procesarPago()procesarPago()procesarPago()
+obtenerHashConfirmacion()obtenerHashConfirmacion()obtenerHashConfirmacion()obtenerHashConfirmacion()
+numeroConfirmaciones()numeroConfirmaciones()numeroConfirmaciones()numeroConfirmaciones()
🔍 Clic para ampliar y hacer zoom

9. Motor de Personajes de Videojuego RPG

PersonajeRPG → [GuerreroEscudero, MagoElemental (*-- LibroHechizos), ArqueroElfo (<|.. LanzadorHabilidades)]
0 / 5

Contexto: Un videojuego de rol enfrenta a Guerreros, Magos oscuros y Arqueros en batallas tácticas por turnos.

Qué hacer: Modelar PersonajeRPG (padre), GuerreroEscudero (propio), MagoElemental (con LibroHechizos) y ArqueroElfo (LanzadorHabilidades).

📐 Componentes del Sistema:

  • Padre Abstracto: PersonajeRPG
  • Interfaz Contrato (Solo Hija 3): LanzadorHabilidades
  • Clase Externa (Composición Hija 2): LibroHechizos
  • Hija con Propio: GuerreroEscudero
UMLDiagrama UML — 9. Motor de Personajes de Videojuego RPG
<<interface>>LanzadorHabilidades
+ejecutarHabilidadEspecial()ejecutarHabilidadEspecial()ejecutarHabilidadEspecial()ejecutarHabilidadEspecial()
+tiempoEnfriamientoTurnos()tiempoEnfriamientoTurnos()tiempoEnfriamientoTurnos()tiempoEnfriamientoTurnos()
implements (interfaz)
<<abstract>>PersonajeRPG
-nombre: StringString nombre
-puntosVida: intint puntosVida
-nivel: intint nivel
+atacar(objetivo: PersonajeRPG)atacar(objetivo: PersonajeRPG)
+recibirDanio(puntos: int)recibirDanio(puntos: int)
extends (herencia)
GuerreroEscudero
-armaduraPesada: intint armaduraPesadaarmaduraPesadaarmaduraPesada
+atacar(objetivo: PersonajeRPG)atacar(objetivo: PersonajeRPG)atacar(objetivo)atacar(objetivo)
+bloquearConEscudo()bloquearConEscudo()bloquearConEscudo()bloquearConEscudo()
MagoElemental
-manaPool: intint manaPoolmanaPoolmanaPool
-grimorio: LibroHechizosLibroHechizos grimoriogrimoriogrimorio
+atacar(objetivo: PersonajeRPG)atacar(objetivo: PersonajeRPG)atacar(objetivo)atacar(objetivo)
+invocarTormenta()invocarTormenta()invocarTormenta()invocarTormenta()
tiene (composición)
<<externa>>LibroHechizos
-totalGrimorios: intint totalGrimoriostotalGrimoriostotalGrimorios
-elementoDominante: StringString elementoDominanteelementoDominanteelementoDominante
+buscarRunaPoderosa()buscarRunaPoderosa()buscarRunaPoderosa()buscarRunaPoderosa()
ArqueroElfo
-precisionPorcentaje: doubledouble precisionPorcentajeprecisionPorcentajeprecisionPorcentaje
+atacar(objetivo: PersonajeRPG)atacar(objetivo: PersonajeRPG)atacar(objetivo)atacar(objetivo)
+ejecutarHabilidadEspecial()ejecutarHabilidadEspecial()ejecutarHabilidadEspecial()ejecutarHabilidadEspecial()
+tiempoEnfriamientoTurnos()tiempoEnfriamientoTurnos()tiempoEnfriamientoTurnos()tiempoEnfriamientoTurnos()
🔍 Clic para ampliar y hacer zoom

10. Red de Sensores Industriales IoT

SensorIndustrial → [SensorHumedad, SensorPresion (*-- CalibradorDigital), SensorTemperatura (<|.. NotificableAlarma)]
0 / 5

Contexto: Una planta petroquímica monitorea temperatura, presión de tubos y humedad ambiental mediante sensores inteligentes.

Qué hacer: Modelar SensorIndustrial (padre), SensorHumedad (propio), SensorPresion (con CalibradorDigital) y SensorTemperatura (NotificableAlarma).

📐 Componentes del Sistema:

  • Padre Abstracto: SensorIndustrial
  • Interfaz Contrato (Solo Hija 3): NotificableAlarma
  • Clase Externa (Composición Hija 2): CalibradorDigital
  • Hija con Propio: SensorHumedad
UMLDiagrama UML — 10. Red de Sensores Industriales IoT
<<interface>>NotificableAlarma
+dispararSirenaEmergencia()dispararSirenaEmergencia()dispararSirenaEmergencia()dispararSirenaEmergencia()
+enviarNotificacionMQTT()enviarNotificacionMQTT()enviarNotificacionMQTT()enviarNotificacionMQTT()
implements (interfaz)
<<abstract>>SensorIndustrial
-idSensor: StringString idSensor
-ubicacionArea: StringString ubicacionArea
-activo: booleanboolean activo
+tomarLectura()tomarLectura()
+recalibrar()recalibrar()
extends (herencia)
SensorHumedad
-nivelPuntualPorcentaje: doubledouble nivelPuntualPorcentajenivelPuntualPorcentajenivelPuntualPorcentaje
+tomarLectura()tomarLectura()tomarLectura()tomarLectura()
+calcularPuntoRocio()calcularPuntoRocio()calcularPuntoRocio()calcularPuntoRocio()
SensorPresion
-presionPSI: doubledouble presionPSIpresionPSIpresionPSI
-dispositivoCalibrador: CalibradorDigitalCalibradorDigital dispositivoCalibradordispositivoCalibradordispositivoCalibrador
+tomarLectura()tomarLectura()tomarLectura()tomarLectura()
+medirDeltaPresion()medirDeltaPresion()medirDeltaPresion()medirDeltaPresion()
tiene (composición)
<<externa>>CalibradorDigital
-fechaUltimaCalibracion: StringString fechaUltimaCalibracionfechaUltimaCalibracionfechaUltimaCalibracion
-margenError: doubledouble margenErrormargenErrormargenError
+ajustarCeroAbsoluto()ajustarCeroAbsoluto()ajustarCeroAbsoluto()ajustarCeroAbsoluto()
SensorTemperatura
-gradosCelsius: doubledouble gradosCelsiusgradosCelsiusgradosCelsius
+tomarLectura()tomarLectura()tomarLectura()tomarLectura()
+dispararSirenaEmergencia()dispararSirenaEmergencia()dispararSirenaEmergencia()dispararSirenaEmergencia()
+enviarNotificacionMQTT()enviarNotificacionMQTT()enviarNotificacionMQTT()enviarNotificacionMQTT()
🔍 Clic para ampliar y hacer zoom

11. Sistema Bancario de Cuentas y Tarjetas

CuentaBancaria → [CuentaAhorro, CuentaCorrienteEmpresa (*-- OficialCredito), TarjetaPlatinum (<|.. OperableCajero)]
0 / 5

Contexto: Un banco nacional opera cuentas de ahorro, cuentas corrientes para empresas y tarjetas de crédito platinum.

Qué hacer: Modelar CuentaBancaria (padre), CuentaAhorro (propia), CuentaCorrienteEmpresa (con OficialCredito) y TarjetaPlatinum (OperableCajero).

📐 Componentes del Sistema:

  • Padre Abstracto: CuentaBancaria
  • Interfaz Contrato (Solo Hija 3): OperableCajero
  • Clase Externa (Composición Hija 2): OficialCredito
  • Hija con Propio: CuentaAhorro
UMLDiagrama UML — 11. Sistema Bancario de Cuentas y Tarjetas
<<interface>>OperableCajero
+validarPIN(pin: String)validarPIN(pin: String)validarPIN(pin)validarPIN(pin)
+retirarEfectivoATM(monto: double)retirarEfectivoATM(monto: double)retirarEfectivoATM(monto)retirarEfectivoATM(monto)
implements (interfaz)
<<abstract>>CuentaBancaria
-numeroCuenta: StringString numeroCuenta
-saldoActual: doubledouble saldoActual
-titular: StringString titular
+depositar(monto: double)depositar(monto: double)
+retirar(monto: double)retirar(monto: double)
extends (herencia)
CuentaAhorro
-tasaInteresAnual: doubledouble tasaInteresAnualtasaInteresAnualtasaInteresAnual
+retirar(monto: double)retirar(monto: double)retirar(monto)retirar(monto)
+abonarInteresesMensuales()abonarInteresesMensuales()abonarInteresesMensuales()abonarInteresesMensuales()
CuentaCorrienteEmpresa
-cupoSobregiro: doubledouble cupoSobregirocupoSobregirocupoSobregiro
-ejecutivo: OficialCreditoOficialCredito ejecutivoejecutivoejecutivo
+retirar(monto: double)retirar(monto: double)retirar(monto)retirar(monto)
+solicitarGiroEspecial()solicitarGiroEspecial()solicitarGiroEspecial()solicitarGiroEspecial()
tiene (composición)
<<externa>>OficialCredito
-nombreOficial: StringString nombreOficialnombreOficialnombreOficial
-limiteAprobacionUSD: doubledouble limiteAprobacionUSDlimiteAprobacionUSDlimiteAprobacionUSD
+autorizarSobregiro(monto: double)autorizarSobregiro(monto: double)autorizarSobregiro(monto)autorizarSobregiro(monto)
TarjetaPlatinum
-cupoDolares: doubledouble cupoDolarescupoDolarescupoDolares
+validarPIN(pin: String)validarPIN(pin: String)validarPIN(pin)validarPIN(pin)
+retirarEfectivoATM(monto: double)retirarEfectivoATM(monto: double)retirarEfectivoATM(monto)retirarEfectivoATM(monto)
🔍 Clic para ampliar y hacer zoom

12. Operaciones Logísticas de Envíos Nacionales

PaqueteEnvio → [SobreDocumento, PaquetePesado (*-- BasculaIndustrial), EnvioAereoFragil (<|.. AsegurableRiesgo)]
0 / 5

Contexto: Una empresa postal distribuye sobres estándar, paquetes pesados en camión y envíos frágiles por avión.

Qué hacer: Modelar PaqueteEnvio (padre), SobreDocumento (propio), PaquetePesado (con BasculaIndustrial) and EnvioAereoFragil (AsegurableRiesgo).

📐 Componentes del Sistema:

  • Padre Abstracto: PaqueteEnvio
  • Interfaz Contrato (Solo Hija 3): AsegurableRiesgo
  • Clase Externa (Composición Hija 2): BasculaIndustrial
  • Hija con Propio: SobreDocumento
UMLDiagrama UML — 12. Operaciones Logísticas de Envíos Nacionales
<<interface>>AsegurableRiesgo
+cotizarPolizaSeguro()cotizarPolizaSeguro()cotizarPolizaSeguro()cotizarPolizaSeguro()
+emitirCertificadoProteccion()emitirCertificadoProteccion()emitirCertificadoProteccion()emitirCertificadoProteccion()
implements (interfaz)
<<abstract>>PaqueteEnvio
-numeroGuia: StringString numeroGuia
-pesoKg: doubledouble pesoKg
-destino: StringString destino
+calcularCostoEnvio()calcularCostoEnvio()
+rastrearEstado()rastrearEstado()
extends (herencia)
SobreDocumento
-esDocumentoLegal: booleanboolean esDocumentoLegalesDocumentoLegalesDocumentoLegal
+calcularCostoEnvio()calcularCostoEnvio()calcularCostoEnvio()calcularCostoEnvio()
+marcarComoConfidencial()marcarComoConfidencial()marcarComoConfidencial()marcarComoConfidencial()
PaquetePesado
-esCargaPaletizada: booleanboolean esCargaPaletizadaesCargaPaletizadaesCargaPaletizada
-basculaOficial: BasculaIndustrialBasculaIndustrial basculaOficialbasculaOficialbasculaOficial
+calcularCostoEnvio()calcularCostoEnvio()calcularCostoEnvio()calcularCostoEnvio()
+pesajeOficial()pesajeOficial()pesajeOficial()pesajeOficial()
tiene (composición)
<<externa>>BasculaIndustrial
-precisionGramos: doubledouble precisionGramosprecisionGramosprecisionGramos
-fechaCertificado: StringString fechaCertificadofechaCertificadofechaCertificado
+obtenerPesajePrecision()obtenerPesajePrecision()obtenerPesajePrecision()obtenerPesajePrecision()
EnvioAereoFragil
-valorDeclarado: doubledouble valorDeclaradovalorDeclaradovalorDeclarado
+calcularCostoEnvio()calcularCostoEnvio()calcularCostoEnvio()calcularCostoEnvio()
+cotizarPolizaSeguro()cotizarPolizaSeguro()cotizarPolizaSeguro()cotizarPolizaSeguro()
+emitirCertificadoProteccion()emitirCertificadoProteccion()emitirCertificadoProteccion()emitirCertificadoProteccion()
🔍 Clic para ampliar y hacer zoom

13. Membresías y Accesos de Cadena de Gimnasios

MembresiaGym → [PaseBasico, PaseVIPEntrenador (*-- PersonalTrainer), PaseCorporativo (<|.. AccesoBiometrico)]
0 / 5

Contexto: Un club deportivo gestiona miembros de pase básico, pases VIP con entrenador y pases corporativos flexibles.

Qué hacer: Modelar MembresiaGym (padre), PaseBasico (propio), PaseVIPEntrenador (con PersonalTrainer) y PaseCorporativo (AccesoBiometrico).

📐 Componentes del Sistema:

  • Padre Abstracto: MembresiaGym
  • Interfaz Contrato (Solo Hija 3): AccesoBiometrico
  • Clase Externa (Composición Hija 2): PersonalTrainer
  • Hija con Propio: PaseBasico
UMLDiagrama UML — 13. Membresías y Accesos de Cadena de Gimnasios
<<interface>>AccesoBiometrico
+verificarHuella()verificarHuella()verificarHuella()verificarHuella()
+registrarFichajeFacial()registrarFichajeFacial()registrarFichajeFacial()registrarFichajeFacial()
implements (interfaz)
<<abstract>>MembresiaGym
-idSocio: StringString idSocio
-nombreSocio: StringString nombreSocio
-cuotaMensualBase: doubledouble cuotaMensualBase
+registrarIngreso()registrarIngreso()
+calcularCuotaFinal()calcularCuotaFinal()
extends (herencia)
PaseBasico
-horarioAccesoRestringido: booleanboolean horarioAccesoRestringidohorarioAccesoRestringidohorarioAccesoRestringido
+calcularCuotaFinal()calcularCuotaFinal()calcularCuotaFinal()calcularCuotaFinal()
+consultarHorarioPermitido()consultarHorarioPermitido()consultarHorarioPermitido()consultarHorarioPermitido()
PaseVIPEntrenador
-accesoSpa: booleanboolean accesoSpaaccesoSpaaccesoSpa
-coachPersonal: PersonalTrainerPersonalTrainer coachPersonalcoachPersonalcoachPersonal
+calcularCuotaFinal()calcularCuotaFinal()calcularCuotaFinal()calcularCuotaFinal()
+agendarSesionCoach()agendarSesionCoach()agendarSesionCoach()agendarSesionCoach()
tiene (composición)
<<externa>>PersonalTrainer
-nombreTrainer: StringString nombreTrainernombreTrainernombreTrainer
-especialidad: StringString especialidadespecialidadespecialidad
+disenarRutinaSemanal()disenarRutinaSemanal()disenarRutinaSemanal()disenarRutinaSemanal()
PaseCorporativo
-nombreEmpresaConvenio: StringString nombreEmpresaConvenionombreEmpresaConvenionombreEmpresaConvenio
+calcularCuotaFinal()calcularCuotaFinal()calcularCuotaFinal()calcularCuotaFinal()
+verificarHuella()verificarHuella()verificarHuella()verificarHuella()
+registrarFichajeFacial()registrarFichajeFacial()registrarFichajeFacial()registrarFichajeFacial()
🔍 Clic para ampliar y hacer zoom

14. Portal Académico Universitario

MiembroFacultad → [EstudianteRegular, ProfesorTitular (*-- DepartamentoAcademico), EgresadoInvestigador (<|.. ExportableCV)]
0 / 5

Contexto: Una facultad registra estudiantes regulares, profesores titulares con departamento y egresados distinguidos.

Qué hacer: Modelar MiembroFacultad (padre), EstudianteRegular (propio), ProfesorTitular (con DepartamentoAcademico) y EgresadoInvestigador (ExportableCV).

📐 Componentes del Sistema:

  • Padre Abstracto: MiembroFacultad
  • Interfaz Contrato (Solo Hija 3): ExportableCV
  • Clase Externa (Composición Hija 2): DepartamentoAcademico
  • Hija con Propio: EstudianteRegular
UMLDiagrama UML — 14. Portal Académico Universitario
<<interface>>ExportableCV
+generarFormatoORCID()generarFormatoORCID()generarFormatoORCID()generarFormatoORCID()
+exportarPDFResumido()exportarPDFResumido()exportarPDFResumido()exportarPDFResumido()
implements (interfaz)
<<abstract>>MiembroFacultad
-rutId: StringString rutId
-nombreCompleto: StringString nombreCompleto
-emailInstitucional: StringString emailInstitucional
+obtenerPerfilCompleto()obtenerPerfilCompleto()
+ingresarPortal()ingresarPortal()
extends (herencia)
EstudianteRegular
-promedioAcumulado: doubledouble promedioAcumuladopromedioAcumuladopromedioAcumulado
+inscribirAsignatura(codigo: String)inscribirAsignatura(codigo: String)inscribirAsignatura(codigo)inscribirAsignatura(codigo)
ProfesorTitular
-horasDocencia: intint horasDocenciahorasDocenciahorasDocencia
-deptoPertenece: DepartamentoAcademicoDepartamentoAcademico deptoPertenecedeptoPertenecedeptoPertenece
+postularFondoInvestigacion()postularFondoInvestigacion()postularFondoInvestigacion()postularFondoInvestigacion()
tiene (composición)
<<externa>>DepartamentoAcademico
-nombreDepto: StringString nombreDeptonombreDeptonombreDepto
-presupuestoInvestigacion: doubledouble presupuestoInvestigacionpresupuestoInvestigacionpresupuestoInvestigacion
+aprobarProyecto()aprobarProyecto()aprobarProyecto()aprobarProyecto()
EgresadoInvestigador
-anioGraduacion: intint anioGraduacionanioGraduacionanioGraduacion
+generarFormatoORCID()generarFormatoORCID()generarFormatoORCID()generarFormatoORCID()
+exportarPDFResumido()exportarPDFResumido()exportarPDFResumido()exportarPDFResumido()
🔍 Clic para ampliar y hacer zoom

15. Corredora e Inmobiliaria de Bienes Raíces

Inmueble → [DepartamentoUrbano, OficinaComercial (*-- TasadorOficial), TerrenoAgricola (<|.. FirmableDigital)]
0 / 5

Contexto: Una firma inmobiliaria administra departamentos urbanos, oficinas comerciales con tasador y terrenos agrícolas.

Qué hacer: Modelar Inmueble (padre), DepartamentoUrbano (propio), OficinaComercial (con TasadorOficial) y TerrenoAgricola (FirmableDigital).

📐 Componentes del Sistema:

  • Padre Abstracto: Inmueble
  • Interfaz Contrato (Solo Hija 3): FirmableDigital
  • Clase Externa (Composición Hija 2): TasadorOficial
  • Hija con Propio: DepartamentoUrbano
UMLDiagrama UML — 15. Corredora e Inmobiliaria de Bienes Raíces
<<interface>>FirmableDigital
+firmarPromesaNotarial()firmarPromesaNotarial()firmarPromesaNotarial()firmarPromesaNotarial()
+verificarFirmaToken()verificarFirmaToken()verificarFirmaToken()verificarFirmaToken()
implements (interfaz)
<<abstract>>Inmueble
-rolMatriz: StringString rolMatriz
-direccion: StringString direccion
-metrosCuadrados: doubledouble metrosCuadrados
+calcularContribuciones()calcularContribuciones()
+publicarEnCatalogo()publicarEnCatalogo()
extends (herencia)
DepartamentoUrbano
-pisoNumero: intint pisoNumeropisoNumeropisoNumero
+calcularContribuciones()calcularContribuciones()calcularContribuciones()calcularContribuciones()
+solicitarEstacionamientoVisitantes()solicitarEstacionamientoVisitantes()solicitarEstacionamientoVisitantes()solicitarEstacionamientoVisitantes()
OficinaComercial
-banosPrivados: intint banosPrivadosbanosPrivadosbanosPrivados
-expertoTasador: TasadorOficialTasadorOficial expertoTasadorexpertoTasadorexpertoTasador
+calcularContribuciones()calcularContribuciones()calcularContribuciones()calcularContribuciones()
+solicitarInformeTasacion()solicitarInformeTasacion()solicitarInformeTasacion()solicitarInformeTasacion()
tiene (composición)
<<externa>>TasadorOficial
-nombreTasador: StringString nombreTasadornombreTasadornombreTasador
-numRegistroNacional: StringString numRegistroNacionalnumRegistroNacionalnumRegistroNacional
+calcularValorComercialUF()calcularValorComercialUF()calcularValorComercialUF()calcularValorComercialUF()
TerrenoAgricola
-tipoSuelo: StringString tipoSuelotipoSuelotipoSuelo
+calcularContribuciones()calcularContribuciones()calcularContribuciones()calcularContribuciones()
+firmarPromesaNotarial()firmarPromesaNotarial()firmarPromesaNotarial()firmarPromesaNotarial()
+verificarFirmaToken()verificarFirmaToken()verificarFirmaToken()verificarFirmaToken()
🔍 Clic para ampliar y hacer zoom

16. Taquilla y Entradas de Cadena de Cines

TicketCine → [EntradaEstandar, EntradaVIP (*-- ServicioBar), PaseFestival (<|.. EscaneableNFC)]
0 / 5

Contexto: Un complejo de cine emite tickets de función estándar, entradas VIP con servicio de bar y pases de festival.

Qué hacer: Modelar TicketCine (padre), EntradaEstandar (propia), EntradaVIP (con ServicioBar) y PaseFestival (EscaneableNFC).

📐 Componentes del Sistema:

  • Padre Abstracto: TicketCine
  • Interfaz Contrato (Solo Hija 3): EscaneableNFC
  • Clase Externa (Composición Hija 2): ServicioBar
  • Hija con Propio: EntradaEstandar
UMLDiagrama UML — 16. Taquilla y Entradas de Cadena de Cines
<<interface>>EscaneableNFC
+validarChipNFC()validarChipNFC()validarChipNFC()validarChipNFC()
+registrarIngresoTorniquete()registrarIngresoTorniquete()registrarIngresoTorniquete()registrarIngresoTorniquete()
implements (interfaz)
<<abstract>>TicketCine
-idTicket: StringString idTicket
-nombrePelicula: StringString nombrePelicula
-precioBase: doubledouble precioBase
+calcularPrecioTotal()calcularPrecioTotal()
+imprimirTicket()imprimirTicket()
extends (herencia)
EntradaEstandar
-filaLetra: charchar filaLetrafilaLetrafilaLetra
+calcularPrecioTotal()calcularPrecioTotal()calcularPrecioTotal()calcularPrecioTotal()
+canjearPuntosCine()canjearPuntosCine()canjearPuntosCine()canjearPuntosCine()
EntradaVIP
-menuGourmet: booleanboolean menuGourmetmenuGourmetmenuGourmet
-atencionBar: ServicioBarServicioBar atencionBaratencionBaratencionBar
+calcularPrecioTotal()calcularPrecioTotal()calcularPrecioTotal()calcularPrecioTotal()
+pedirPopcornTrufa()pedirPopcornTrufa()pedirPopcornTrufa()pedirPopcornTrufa()
tiene (composición)
<<externa>>ServicioBar
-numButaca: StringString numButacanumButacanumButaca
-incluyeBebidaRefill: booleanboolean incluyeBebidaRefillincluyeBebidaRefillincluyeBebidaRefill
+enviarComboAButaca()enviarComboAButaca()enviarComboAButaca()enviarComboAButaca()
PaseFestival
-diasValidez: intint diasValidezdiasValidezdiasValidez
+calcularPrecioTotal()calcularPrecioTotal()calcularPrecioTotal()calcularPrecioTotal()
+validarChipNFC()validarChipNFC()validarChipNFC()validarChipNFC()
+registrarIngresoTorniquete()registrarIngresoTorniquete()registrarIngresoTorniquete()registrarIngresoTorniquete()
🔍 Clic para ampliar y hacer zoom

17. Parque Fotovoltaico y Generación Eléctrica

GeneradorRenovable → [PanelSolarFijo, InversorCentral (*-- TransformadorHV), TurbinaEolica (<|.. ConectableGrid)]
0 / 5

Contexto: Una central de energía renovable monitorea paneles solares fijos, inversores con transformador y turbinas eólicas.

Qué hacer: Modelar GeneradorRenovable (padre), PanelSolarFijo (propio), InversorCentral (con TransformadorHV) y TurbinaEolica (ConectableGrid).

📐 Componentes del Sistema:

  • Padre Abstracto: GeneradorRenovable
  • Interfaz Contrato (Solo Hija 3): ConectableGrid
  • Clase Externa (Composición Hija 2): TransformadorHV
  • Hija con Propio: PanelSolarFijo
UMLDiagrama UML — 17. Parque Fotovoltaico y Generación Eléctrica
<<interface>>ConectableGrid
+sincronizarFaseFrecuencia()sincronizarFaseFrecuencia()sincronizarFaseFrecuencia()sincronizarFaseFrecuencia()
+inyectarMWaLaRed()inyectarMWaLaRed()inyectarMWaLaRed()inyectarMWaLaRed()
implements (interfaz)
<<abstract>>GeneradorRenovable
-codigoGenerador: StringString codigoGenerador
-capacidadKWhMax: doubledouble capacidadKWhMax
-enOperacion: booleanboolean enOperacion
+calcularGeneracionDiaria()calcularGeneracionDiaria()
+apagarPorMantenimiento()apagarPorMantenimiento()
extends (herencia)
PanelSolarFijo
-anguloInclinacion: intint anguloInclinacionanguloInclinacionanguloInclinacion
+calcularGeneracionDiaria()calcularGeneracionDiaria()calcularGeneracionDiaria()calcularGeneracionDiaria()
+limpiarPolvoSuperficie()limpiarPolvoSuperficie()limpiarPolvoSuperficie()limpiarPolvoSuperficie()
InversorCentral
-eficienciaPorcentaje: doubledouble eficienciaPorcentajeeficienciaPorcentajeeficienciaPorcentaje
-transformadorCentral: TransformadorHVTransformadorHV transformadorCentraltransformadorCentraltransformadorCentral
+calcularGeneracionDiaria()calcularGeneracionDiaria()calcularGeneracionDiaria()calcularGeneracionDiaria()
+regularVoltajeEntrada()regularVoltajeEntrada()regularVoltajeEntrada()regularVoltajeEntrada()
tiene (composición)
<<externa>>TransformadorHV
-relacionVoltaje: StringString relacionVoltajerelacionVoltajerelacionVoltaje
-aceiteRefrigeranteOk: booleanboolean aceiteRefrigeranteOkaceiteRefrigeranteOkaceiteRefrigeranteOk
+elevaVoltaje()elevaVoltaje()elevaVoltaje()elevaVoltaje()
TurbinaEolica
-diametroRotorMetros: doubledouble diametroRotorMetrosdiametroRotorMetrosdiametroRotorMetros
+calcularGeneracionDiaria()calcularGeneracionDiaria()calcularGeneracionDiaria()calcularGeneracionDiaria()
+sincronizarFaseFrecuencia()sincronizarFaseFrecuencia()sincronizarFaseFrecuencia()sincronizarFaseFrecuencia()
+inyectarMWaLaRed()inyectarMWaLaRed()inyectarMWaLaRed()inyectarMWaLaRed()
🔍 Clic para ampliar y hacer zoom

18. Taller Automotriz y Servicio Técnico

ServicioMecanico → [MantencionPreventiva, ReparacionMotor (*-- EscanerDiagnostico), AfinacionElectrica (<|.. GarantizableTaller)]
0 / 5

Contexto: Un taller mecánico administra mantenciones preventivas, reparaciones de motor con escaner y afinaciones electrónicas.

Qué hacer: Modelar ServicioMecanico (padre), MantencionPreventiva (propia), ReparacionMotor (con EscanerDiagnostico) y AfinacionElectrica (GarantizableTaller).

📐 Componentes del Sistema:

  • Padre Abstracto: ServicioMecanico
  • Interfaz Contrato (Solo Hija 3): GarantizableTaller
  • Clase Externa (Composición Hija 2): EscanerDiagnostico
  • Hija con Propio: MantencionPreventiva
UMLDiagrama UML — 18. Taller Automotriz y Servicio Técnico
<<interface>>GarantizableTaller
+emitirCertificadoGarantia(meses: int)emitirCertificadoGarantia(meses: int)emitirCertificadoGarantia(meses)emitirCertificadoGarantia(meses)
+validarEstadoPiezasOriginales()validarEstadoPiezasOriginales()validarEstadoPiezasOriginales()validarEstadoPiezasOriginales()
implements (interfaz)
<<abstract>>ServicioMecanico
-idOrden: StringString idOrden
-patenteVehiculo: StringString patenteVehiculo
-manoObraBase: doubledouble manoObraBase
+calcularCostoTotal()calcularCostoTotal()
+finalizarServicio()finalizarServicio()
extends (herencia)
MantencionPreventiva
-cambioFiltrosIncluido: booleanboolean cambioFiltrosIncluidocambioFiltrosIncluidocambioFiltrosIncluido
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
+rellenarFluidoFrenos()rellenarFluidoFrenos()rellenarFluidoFrenos()rellenarFluidoFrenos()
ReparacionMotor
-horasTrabajoMecanico: doubledouble horasTrabajoMecanicohorasTrabajoMecanicohorasTrabajoMecanico
-escanerOBD: EscanerDiagnosticoEscanerDiagnostico escanerOBDescanerOBDescanerOBD
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
+escanearComputadorVehiculo()escanearComputadorVehiculo()escanearComputadorVehiculo()escanearComputadorVehiculo()
tiene (composición)
<<externa>>EscanerDiagnostico
-marcaEscaner: StringString marcaEscanermarcaEscanermarcaEscaner
-versionSoftware: StringString versionSoftwareversionSoftwareversionSoftware
+leerCodigosFallaOBD2()leerCodigosFallaOBD2()leerCodigosFallaOBD2()leerCodigosFallaOBD2()
AfinacionElectrica
-repuestosCambiados: intint repuestosCambiadosrepuestosCambiadosrepuestosCambiados
+calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()calcularCostoTotal()
+emitirCertificadoGarantia(meses: int)emitirCertificadoGarantia(meses: int)emitirCertificadoGarantia(meses)emitirCertificadoGarantia(meses)
+validarEstadoPiezasOriginales()validarEstadoPiezasOriginales()validarEstadoPiezasOriginales()validarEstadoPiezasOriginales()
🔍 Clic para ampliar y hacer zoom

19. Compañía de Seguros de Vida y Salud

PolizaSeguro → [SeguroAutoEstandar, SeguroVidaVIP (*-- MedicoEvaluador), SeguroViajeInternacional (<|.. Asistencia24H)]
0 / 5

Contexto: Una aseguradora cotiza pólizas de seguro de auto, seguros de vida con médico evaluador y seguros de viaje.

Qué hacer: Modelar PolizaSeguro (padre), SeguroAutoEstandar (propio), SeguroVidaVIP (con MedicoEvaluador) y SeguroViajeInternacional (Asistencia24H).

📐 Componentes del Sistema:

  • Padre Abstracto: PolizaSeguro
  • Interfaz Contrato (Solo Hija 3): Asistencia24H
  • Clase Externa (Composición Hija 2): MedicoEvaluador
  • Hija con Propio: SeguroAutoEstandar
UMLDiagrama UML — 19. Compañía de Seguros de Vida y Salud
<<interface>>Asistencia24H
+solicitarGruaEmergencia()solicitarGruaEmergencia()solicitarGruaEmergencia()solicitarGruaEmergencia()
+activarTelemedicinaInternacional()activarTelemedicinaInternacional()activarTelemedicinaInternacional()activarTelemedicinaInternacional()
implements (interfaz)
<<abstract>>PolizaSeguro
-numPoliza: StringString numPoliza
-primaMensual: doubledouble primaMensual
-montoCoberturaMax: doubledouble montoCoberturaMax
+calcularPrimaFinal()calcularPrimaFinal()
+procesarSiniestro(monto: double)procesarSiniestro(monto: double)
extends (herencia)
SeguroAutoEstandar
-deducibleUF: intint deducibleUFdeducibleUFdeducibleUF
+calcularPrimaFinal()calcularPrimaFinal()calcularPrimaFinal()calcularPrimaFinal()
+inspeccionarCarroceria()inspeccionarCarroceria()inspeccionarCarroceria()inspeccionarCarroceria()
SeguroVidaVIP
-incluyeSeguroAccidentes: booleanboolean incluyeSeguroAccidentesincluyeSeguroAccidentesincluyeSeguroAccidentes
-evaluadorSalud: MedicoEvaluadorMedicoEvaluador evaluadorSaludevaluadorSaludevaluadorSalud
+calcularPrimaFinal()calcularPrimaFinal()calcularPrimaFinal()calcularPrimaFinal()
+realizarExamenPrevision()realizarExamenPrevision()realizarExamenPrevision()realizarExamenPrevision()
tiene (composición)
<<externa>>MedicoEvaluador
-nombreMedico: StringString nombreMediconombreMediconombreMedico
-numColegiado: StringString numColegiadonumColegiadonumColegiado
+emiteInformeExamenes()emiteInformeExamenes()emiteInformeExamenes()emiteInformeExamenes()
SeguroViajeInternacional
-paisesCobertura: StringString paisesCoberturapaisesCoberturapaisesCobertura
+calcularPrimaFinal()calcularPrimaFinal()calcularPrimaFinal()calcularPrimaFinal()
+solicitarGruaEmergencia()solicitarGruaEmergencia()solicitarGruaEmergencia()solicitarGruaEmergencia()
+activarTelemedicinaInternacional()activarTelemedicinaInternacional()activarTelemedicinaInternacional()activarTelemedicinaInternacional()
🔍 Clic para ampliar y hacer zoom

20. Observatorio Astronómico y Telescopios

TelescopioAstronomico → [TelescopioOptico, TelescopioEspacial (*-- EspectrometroLaser), RadioTelescopio (<|.. Procesablefits)]
0 / 5

Contexto: Un observatorio científico coordina telescopios ópticos, telescopios espaciales con espectrómetro y radiotelescopios.

Qué hacer: Modelar TelescopioAstronomico (padre), TelescopioOptico (propio), TelescopioEspacial (con EspectrometroLaser) and RadioTelescopio (Procesablefits).

📐 Componentes del Sistema:

  • Padre Abstracto: TelescopioAstronomico
  • Interfaz Contrato (Solo Hija 3): Procesablefits
  • Clase Externa (Composición Hija 2): EspectrometroLaser
  • Hija con Propio: TelescopioOptico
UMLDiagrama UML — 20. Observatorio Astronómico y Telescopios
<<interface>>Procesablefits
+generarArchivoFITS()generarArchivoFITS()generarArchivoFITS()generarArchivoFITS()
+aplicarFiltroReduccionRuido()aplicarFiltroReduccionRuido()aplicarFiltroReduccionRuido()aplicarFiltroReduccionRuido()
implements (interfaz)
<<abstract>>TelescopioAstronomico
-idTelescopio: StringString idTelescopio
-diametroEspejoMetros: doubledouble diametroEspejoMetros
-enOrientacion: booleanboolean enOrientacion
+apuntarACoordenadas(ra: double, dec: double)apuntarACoordenadas(ra: double, dec: double)
+capturarImagenData()capturarImagenData()
extends (herencia)
TelescopioOptico
-tipoFiltroColor: StringString tipoFiltroColortipoFiltroColortipoFiltroColor
+capturarImagenData()capturarImagenData()capturarImagenData()capturarImagenData()
+cambiarFiltro(nuevoFiltro: String)cambiarFiltro(nuevoFiltro: String)cambiarFiltro(nuevoFiltro)cambiarFiltro(nuevoFiltro)
TelescopioEspacial
-orbitaAltitudKm: doubledouble orbitaAltitudKmorbitaAltitudKmorbitaAltitudKm
-espectrometro: EspectrometroLaserEspectrometroLaser espectrometroespectrometroespectrometro
+capturarImagenData()capturarImagenData()capturarImagenData()capturarImagenData()
+realizarEspectroscopiaEstelar()realizarEspectroscopiaEstelar()realizarEspectroscopiaEstelar()realizarEspectroscopiaEstelar()
tiene (composición)
<<externa>>EspectrometroLaser
-rangoLongitudOnda: StringString rangoLongitudOndarangoLongitudOndarangoLongitudOnda
-temperaturaKelvin: doubledouble temperaturaKelvintemperaturaKelvintemperaturaKelvin
+analizarComposicionQuimica()analizarComposicionQuimica()analizarComposicionQuimica()analizarComposicionQuimica()
RadioTelescopio
-frecuenciaGHz: doubledouble frecuenciaGHzfrecuenciaGHzfrecuenciaGHz
+capturarImagenData()capturarImagenData()capturarImagenData()capturarImagenData()
+generarArchivoFITS()generarArchivoFITS()generarArchivoFITS()generarArchivoFITS()
+aplicarFiltroReduccionRuido()aplicarFiltroReduccionRuido()aplicarFiltroReduccionRuido()aplicarFiltroReduccionRuido()
🔍 Clic para ampliar y hacer zoom

21. Sistema de Exploración y Sondas Oceanográficas

💎 Evaluación Especial
SondaMarina → [BoyaSuperficie, RobotROVSubmarino (*-- BrazoRoboticoHidraulico), BatiscafoProfundo (<|.. TransmitibleSonar)]
0 / 5

Contexto: Un instituto oceanográfico internacional opera misiones en fosas abisales para monitorear ecosistemas marinos profundos. La arquitectura del sistema modela una clase base abstracta de sondas marinas con telemetría de inmersión y cálculo hidrostático. La flota cuenta con boyas de superficie (con panel solar y baliza lumínica), robots submarinos operados remotamente (ROV) que incorporan por composición un brazo robótico hidráulico para recolectar sedimentos, y batiscafos tripulados de gran profundidad. Para no sobrecargar la clase base ni a las boyas o robots con protocolos acústicos complejos, únicamente el batiscafo implementa el contrato de transmisión por sonar para mapeo batimétrico en tiempo real.

Qué hacer: Modelar la jerarquía desacoplada: SondaMarina (padre abstracta), BoyaSuperficie (hija con atributos propios), RobotROVSubmarino (hija con composición a BrazoRoboticoHidraulico) y BatiscafoProfundo (hija que implementa la interfaz TransmitibleSonar).

📐 Componentes del Sistema:

  • Padre Abstracto: SondaMarina
  • Interfaz Contrato (Solo Hija 3): TransmitibleSonar
  • Clase Externa (Composición Hija 2): BrazoRoboticoHidraulico
  • Hija con Propio: BoyaSuperficie

⚙️ Especificación y Lógica de cada Método:

SondaMarinasumergir(profundidad: double): void

Método abstracto que obliga a cada tipo de sonda a implementar su propia física de inmersión y cálculo de presión.

SondaMarinaregistrarPresion(): double

Retorna el valor actual de presión hidrostática almacenado en nivelPresionSoportada.

TransmitibleSonaremitirPulsoSonar(): String

Contrato exclusivo de la interfaz: genera una trama de audio acústico de alta frecuencia para navegación ciega.

TransmitibleSonarmapearRelieveMarino(): void

Contrato exclusivo de la interfaz: procesa ecos batimétricos para reconstruir el fondo marino en 3D.

BrazoRoboticoHidraulicorecolectarMuestraSuelo(): boolean

Clase externa: opera pinzas hidráulicas para recolectar sedimentos y rocas del lecho marino.

BoyaSuperficiealertarTraficoMaritimo(): void

Método propio: activa destellos lumínicos y emite radiofrecuencia a embarcaciones cercanas.

RobotROVSubmarinomaniobrarEnGrieta(): void

Navega mediante cable umbilical y delega en su manipulador (BrazoRoboticoHidraulico) la toma de muestras.

BatiscafoProfundosumergir(profundidad: double): void [Override]

Implementa el método abstracto del padre e implementa TransmitibleSonar sin afectar a las otras sondas.

UMLDiagrama UML — 21. Sistema de Exploración y Sondas Oceanográficas
<<interface>>TransmitibleSonar
+emitirPulsoSonar()emitirPulsoSonar()emitirPulsoSonar()emitirPulsoSonar()
+mapearRelieveMarino()mapearRelieveMarino()mapearRelieveMarino()mapearRelieveMarino()
implements (interfaz)
<<abstract>>SondaMarina
-codigoSonda: StringString codigoSonda
-profundidadMaximaMetros: doubledouble profundidadMaximaMetros
-nivelPresionSoportada: doubledouble nivelPresionSoportada
+sumergir(profundidad: double)sumergir(profundidad: double)
+registrarPresion()registrarPresion()
extends (herencia)
BoyaSuperficie
-panelSolarFlotante: booleanboolean panelSolarFlotantepanelSolarFlotantepanelSolarFlotante
-frecuenciaBalizaKhz: doubledouble frecuenciaBalizaKhzfrecuenciaBalizaKhzfrecuenciaBalizaKhz
+sumergir(profundidad: double)sumergir(profundidad: double)sumergir(profundidad)sumergir(profundidad)
+alertarTraficoMaritimo()alertarTraficoMaritimo()alertarTraficoMaritimo()alertarTraficoMaritimo()
RobotROVSubmarino
-longitudCableUmbilical: doubledouble longitudCableUmbilicallongitudCableUmbilicallongitudCableUmbilical
-manipulador: BrazoRoboticoHidraulicoBrazoRoboticoHidraulico manipuladormanipuladormanipulador
+sumergir(profundidad: double)sumergir(profundidad: double)sumergir(profundidad)sumergir(profundidad)
+maniobrarEnGrieta()maniobrarEnGrieta()maniobrarEnGrieta()maniobrarEnGrieta()
tiene (composición)
<<externa>>BrazoRoboticoHidraulico
-fuerzaLevanteKg: doubledouble fuerzaLevanteKgfuerzaLevanteKgfuerzaLevanteKg
-numeroArticulaciones: intint numeroArticulacionesnumeroArticulacionesnumeroArticulaciones
+recolectarMuestraSuelo()recolectarMuestraSuelo()recolectarMuestraSuelo()recolectarMuestraSuelo()
BatiscafoProfundo
-tripulacionCapacidad: intint tripulacionCapacidadtripulacionCapacidadtripulacionCapacidad
+sumergir(profundidad: double)sumergir(profundidad: double)sumergir(profundidad)sumergir(profundidad)
+emitirPulsoSonar()emitirPulsoSonar()emitirPulsoSonar()emitirPulsoSonar()
+mapearRelieveMarino()mapearRelieveMarino()mapearRelieveMarino()mapearRelieveMarino()
🔍 Clic para ampliar y hacer zoom

22. Sistema de Logística y Maquinaria Portuaria

💎 Evaluación Especial
MaquinariaPortuaria → [CamionTransferencia, GruaPorticoMuelle (*-- CabinaOperadorLaser), GruaApiladoraPatio (<|.. PesableCertificado)]
0 / 5

Contexto: Un megapuerto de transferencia de carga marítima coordina el flujo continuo de contenedores estandarizados entre buques portacontenedores, muelles y patios de almacenamiento. La clase base abstracta gestiona el control de combustible y las inspecciones de seguridad de frenos de toda la maquinaria pesada. Los camiones de transferencia interna operan con velocidades restringidas y enganches neumáticos propios; las grúas pórtico de muelle incluyen por composición una cabina de operador asistida por láser óptico 4K para izaje de buque a muelle; y las grúas apiladoras de patio vertical son las únicas unidades certificadas para pesar y emitir tickets oficiales de masa bruta verificada (VGM bajo convenio SOLAS), implementando exclusivamente la interfaz de pesaje sin forzar a camiones ni grúas de muelle a acarrear responsabilidades de báscula aduanera.

Qué hacer: Modelar la jerarquía desacoplada: MaquinariaPortuaria (padre abstracta), CamionTransferencia (hija propia), GruaPorticoMuelle (hija con composición a CabinaOperadorLaser) y GruaApiladoraPatio (hija que implementa la interfaz PesableCertificado).

📐 Componentes del Sistema:

  • Padre Abstracto: MaquinariaPortuaria
  • Interfaz Contrato (Solo Hija 3): PesableCertificado
  • Clase Externa (Composición Hija 2): CabinaOperadorLaser
  • Hija con Propio: CamionTransferencia

⚙️ Especificación y Lógica de cada Método:

MaquinariaPortuariaoperarTurno(horas: int): void

Método abstracto que descuenta combustible y simula las horas de operación según la máquina.

MaquinariaPortuariainspeccionarFrenosSeguridad(): boolean

Valida la presión del sistema neumático de frenado de la maquinaria antes de iniciar maniobras.

PesableCertificadocertificarPesoVGM(): double

Contrato de interfaz: calcula y certifica el peso bruto verificado del contenedor según estándar SOLAS.

PesableCertificadogenerarTicketTara(): String

Contrato de interfaz: emite el comprobante digital con timestamp, código aduanero y tara verificada.

CabinaOperadorLasercalibrarAlineacionContenedor(): boolean

Clase externa: usa telemetría láser 4K para alinear los twistlocks del spreader con el contenedor.

CamionTransferenciaacoplarPlataforma(): void

Método propio: conecta los frenos de aire de la plataforma portacontenedor y valida velocidad de patio.

GruaPorticoMuelledesembarcarBuque(): void

Coordina con su cabinaLaser externa para izar contenedores de la bodega del buque y bajarlos a muelle.

GruaApiladoraPatiooperarTurno(horas: int): void [Override]

Sobrescribe operarTurno organizando columnas de patio e implementa PesableCertificado exclusivamente.

UMLDiagrama UML — 22. Sistema de Logística y Maquinaria Portuaria
<<interface>>PesableCertificado
+certificarPesoVGM()certificarPesoVGM()certificarPesoVGM()certificarPesoVGM()
+generarTicketTara()generarTicketTara()generarTicketTara()generarTicketTara()
implements (interfaz)
<<abstract>>MaquinariaPortuaria
-idMaquinaria: StringString idMaquinaria
-capacidadCargaToneladas: doubledouble capacidadCargaToneladas
-combustibleLitros: doubledouble combustibleLitros
+operarTurno(horas: int)operarTurno(horas: int)
+inspeccionarFrenosSeguridad()inspeccionarFrenosSeguridad()
extends (herencia)
CamionTransferencia
-velocidadMaxPatioKmH: intint velocidadMaxPatioKmHvelocidadMaxPatioKmHvelocidadMaxPatioKmH
-tipoEnganchePlataforma: StringString tipoEnganchePlataformatipoEnganchePlataformatipoEnganchePlataforma
+operarTurno(horas: int)operarTurno(horas: int)operarTurno(horas)operarTurno(horas)
+acoplarPlataforma()acoplarPlataforma()acoplarPlataforma()acoplarPlataforma()
GruaPorticoMuelle
-alturaElevacionMetros: doubledouble alturaElevacionMetrosalturaElevacionMetrosalturaElevacionMetros
-cabinaLaser: CabinaOperadorLaserCabinaOperadorLaser cabinaLasercabinaLasercabinaLaser
+operarTurno(horas: int)operarTurno(horas: int)operarTurno(horas)operarTurno(horas)
+desembarcarBuque()desembarcarBuque()desembarcarBuque()desembarcarBuque()
tiene (composición)
<<externa>>CabinaOperadorLaser
-modeloGuiadoOptico: StringString modeloGuiadoOpticomodeloGuiadoOpticomodeloGuiadoOptico
-resolucionCamaras4K: booleanboolean resolucionCamaras4KresolucionCamaras4KresolucionCamaras4K
+calibrarAlineacionContenedor()calibrarAlineacionContenedor()calibrarAlineacionContenedor()calibrarAlineacionContenedor()
GruaApiladoraPatio
-nivelesApilamientoMax: intint nivelesApilamientoMaxnivelesApilamientoMaxnivelesApilamientoMax
+operarTurno(horas: int)operarTurno(horas: int)operarTurno(horas)operarTurno(horas)
+certificarPesoVGM()certificarPesoVGM()certificarPesoVGM()certificarPesoVGM()
+generarTicketTara()generarTicketTara()generarTicketTara()generarTicketTara()
🔍 Clic para ampliar y hacer zoom

23. Gestión de Banco de Sangre y Conservación de Órganos

💎 Evaluación Especial
UnidadBiologica → [PaqueteGlobulosRojos, PlasmaCriocongelado (*-- UltracongeladorNitrogeno), OrganoTrasplante (<|.. TrazableCadenaFrio)]
0 / 5

Contexto: Una red hospitalaria de alta complejidad administra el inventario crítico de medicina transfusional y trasplantes de urgencia. La clase abstracta UnidadBiologica estandariza el código de donación, grupo ABO, factor Rh y el cálculo de vida útil clínica. Los paquetes de glóbulos rojos concentrados cuentan con centrifugación y medición de hematocrito propia; las unidades de plasma fresco criocongelado integran por composición un ultracongelador de nitrógeno líquido para mantener temperaturas criogénicas estables de -196°C; y los órganos para trasplante inmediato (corazón, hígado, riñones) son las únicas unidades que viajan en contenedores inteligentes con telemetría GPS y sensor térmico continuo, implementando en exclusiva la interfaz de trazabilidad de cadena de frío sin forzar a las bolsas de sangre estáticas a incorporar GPS ni conexión satelital.

Qué hacer: Modelar la jerarquía desacoplada: UnidadBiologica (padre abstracta), PaqueteGlobulosRojos (hija propia), PlasmaCriocongelado (hija con composición a UltracongeladorNitrogeno) y OrganoTrasplante (hija que implementa la interfaz TrazableCadenaFrio).

📐 Componentes del Sistema:

  • Padre Abstracto: UnidadBiologica
  • Interfaz Contrato (Solo Hija 3): TrazableCadenaFrio
  • Clase Externa (Composición Hija 2): UltracongeladorNitrogeno
  • Hija con Propio: PaqueteGlobulosRojos

⚙️ Especificación y Lógica de cada Método:

UnidadBiologicacalcularVidaUtilHoras(): int

Método polimórfico abstracto que calcula la ventana de viabilidad clínica antes de su caducidad.

UnidadBiologicaverificarCompatibilidad(receptorTipo: String): boolean

Valida compatibilidad inmunológica del sistema ABO y factor Rh entre la unidad y el paciente receptor.

TrazableCadenaFriomonitorearTemperaturaContinua(): double

Contrato de interfaz: sensa y reporta temperatura en tiempo real del contenedor de transporte.

TrazableCadenaFrioregistrarPuntoControlGPS(nodo: String): void

Contrato de interfaz: almacena timestamp y coordenadas en cada escala de la ruta de emergencia.

UltracongeladorNitrogenorecargarNitrogenoLiquido(): void

Clase externa: administra el nivel de nitrógeno líquido para mantener temperaturas de hasta -196°C.

PaqueteGlobulosRojoscentrifugarUnidad(): void

Método propio: concentra la masa de eritrocitos separándola del plasma y ajusta hematocritoPorcentaje.

PlasmaCriocongeladoiniciarDescongeladoControlado(): void

Utiliza baño termostatizado a 37°C apoyado en los registros de congeladorNitrogeno.

OrganoTrasplantecalcularVidaUtilHoras(): int [Override]

Sobrescribe el cálculo de isquemia fría según tipoOrgano e implementa TrazableCadenaFrio.

UMLDiagrama UML — 23. Gestión de Banco de Sangre y Conservación de Órganos
<<interface>>TrazableCadenaFrio
+monitorearTemperaturaContinua()monitorearTemperaturaContinua()monitorearTemperaturaContinua()monitorearTemperaturaContinua()
+registrarPuntoControlGPS(nodo: String)registrarPuntoControlGPS(nodo: String)registrarPuntoControlGPS(nodo)registrarPuntoControlGPS(nodo)
implements (interfaz)
<<abstract>>UnidadBiologica
-codigoDonacion: StringString codigoDonacion
-grupoSanguineo: StringString grupoSanguineo
-factorRh: charchar factorRh
+calcularVidaUtilHoras()calcularVidaUtilHoras()
+verificarCompatibilidad(receptorTipo: String)verificarCompatibilidad(receptorTipo: String)
extends (herencia)
PaqueteGlobulosRojos
-volumenMililitros: intint volumenMililitrosvolumenMililitrosvolumenMililitros
-hematocritoPorcentaje: doubledouble hematocritoPorcentajehematocritoPorcentajehematocritoPorcentaje
+calcularVidaUtilHoras()calcularVidaUtilHoras()calcularVidaUtilHoras()calcularVidaUtilHoras()
+centrifugarUnidad()centrifugarUnidad()centrifugarUnidad()centrifugarUnidad()
PlasmaCriocongelado
-tiempoDescongelamientoMin: intint tiempoDescongelamientoMintiempoDescongelamientoMintiempoDescongelamientoMin
-congeladorNitrogeno: UltracongeladorNitrogenoUltracongeladorNitrogeno congeladorNitrogenocongeladorNitrogenocongeladorNitrogeno
+calcularVidaUtilHoras()calcularVidaUtilHoras()calcularVidaUtilHoras()calcularVidaUtilHoras()
+iniciarDescongeladoControlado()iniciarDescongeladoControlado()iniciarDescongeladoControlado()iniciarDescongeladoControlado()
tiene (composición)
<<externa>>UltracongeladorNitrogeno
-nivelNitrogenoPorcentaje: doubledouble nivelNitrogenoPorcentajenivelNitrogenoPorcentajenivelNitrogenoPorcentaje
-temperaturaCelsius: doubledouble temperaturaCelsiustemperaturaCelsiustemperaturaCelsius
+recargarNitrogenoLiquido()recargarNitrogenoLiquido()recargarNitrogenoLiquido()recargarNitrogenoLiquido()
OrganoTrasplante
-tipoOrgano: StringString tipoOrganotipoOrganotipoOrgano
+calcularVidaUtilHoras()calcularVidaUtilHoras()calcularVidaUtilHoras()calcularVidaUtilHoras()
+monitorearTemperaturaContinua()monitorearTemperaturaContinua()monitorearTemperaturaContinua()monitorearTemperaturaContinua()
+registrarPuntoControlGPS(nodo: String)registrarPuntoControlGPS(nodo: String)registrarPuntoControlGPS(nodo)registrarPuntoControlGPS(nodo)
🔍 Clic para ampliar y hacer zoom

24. Plataforma AgroTech de Monitoreo y Fumigación

💎 Evaluación Especial
DispositivoAgricola → [EstacionMeteorologicaCampo, DronFumigador (*-- TanquePresurizadoAgro), DronMultiespectral (<|.. AnalizableNDVI)]
0 / 5

Contexto: Una empresa de agricultura de precisión opera una red de dispositivos IoT y drones autónomos para optimizar el rendimiento de cultivos a gran escala. La clase base abstracta DispositivoAgricola gestiona el consumo de batería y la cobertura de hectáreas por ciclo. Las estaciones meteorológicas de campo operan con pluviómetros y barómetros locales para pronosticar heladas; los drones fumigadores integran por composición un tanque presurizado con boquillas antideriva para aspersión química uniforme; y los drones multiespectrales de teledetección aérea son los únicos que capturan bandas infrarrojas para calcular el índice NDVI y generar mapas térmicos de estrés hídrico, implementando la interfaz de análisis espectral sin obligar a las estaciones de suelo ni a los drones fumigadores a procesar imágenes satelitales ni reflectancia.

Qué hacer: Modelar la jerarquía desacoplada: DispositivoAgricola (padre abstracta), EstacionMeteorologicaCampo (hija propia), DronFumigador (hija con composición a TanquePresurizadoAgro) y DronMultiespectral (hija que implementa la interfaz AnalizableNDVI).

📐 Componentes del Sistema:

  • Padre Abstracto: DispositivoAgricola
  • Interfaz Contrato (Solo Hija 3): AnalizableNDVI
  • Clase Externa (Composición Hija 2): TanquePresurizadoAgro
  • Hija con Propio: EstacionMeteorologicaCampo

⚙️ Especificación y Lógica de cada Método:

DispositivoAgricolaejecutarCicloLaboral(): void

Método abstracto que simula la jornada laboral y descuenta batería según hectareasCobertura.

DispositivoAgricolareportarEstadoBateria(): int

Retorna el porcentaje de batería y advierte retorno a base si el nivel es inferior al 20%.

AnalizableNDVIcalcularIndiceVigorVegetal(): double

Contrato de interfaz: calcula (NIR - RED)/(NIR + RED) para clasificar salud vegetal y biomasa.

AnalizableNDVIgenerarMapaEstresHidrico(): String

Contrato de interfaz: genera un reporte georreferenciado con zonas de sequía o exceso de agua.

TanquePresurizadoAgropurgarSistemaBoquillas(): void

Clase externa: purga y calibra la presión de boquillaAntideriva para pulverización uniforme.

EstacionMeteorologicaCampopredecirRiesgoHelada(): boolean

Método propio: cruza temperatura, humedad y presionBarometricaHPa para alertar riesgo de escarcha.

DronFumigadoriniciarAspersionUniforme(): void

Ajusta caudalLitrosPorMinuto desde su tanqueQuimico en función de la velocidad de vuelo.

DronMultiespectralejecutarCicloLaboral(): void [Override]

Realiza vuelo de fotogrametría aérea e implementa AnalizableNDVI de forma aislada.

UMLDiagrama UML — 24. Plataforma AgroTech de Monitoreo y Fumigación
<<interface>>AnalizableNDVI
+calcularIndiceVigorVegetal()calcularIndiceVigorVegetal()calcularIndiceVigorVegetal()calcularIndiceVigorVegetal()
+generarMapaEstresHidrico()generarMapaEstresHidrico()generarMapaEstresHidrico()generarMapaEstresHidrico()
implements (interfaz)
<<abstract>>DispositivoAgricola
-idDispositivo: StringString idDispositivo
-hectareasCobertura: doubledouble hectareasCobertura
-bateriaRestante: intint bateriaRestante
+ejecutarCicloLaboral()ejecutarCicloLaboral()
+reportarEstadoBateria()reportarEstadoBateria()
extends (herencia)
EstacionMeteorologicaCampo
-sensorPluviometroMm: doubledouble sensorPluviometroMmsensorPluviometroMmsensorPluviometroMm
-presionBarometricaHPa: doubledouble presionBarometricaHPapresionBarometricaHPapresionBarometricaHPa
+ejecutarCicloLaboral()ejecutarCicloLaboral()ejecutarCicloLaboral()ejecutarCicloLaboral()
+predecirRiesgoHelada()predecirRiesgoHelada()predecirRiesgoHelada()predecirRiesgoHelada()
DronFumigador
-caudalLitrosPorMinuto: doubledouble caudalLitrosPorMinutocaudalLitrosPorMinutocaudalLitrosPorMinuto
-tanqueQuimico: TanquePresurizadoAgroTanquePresurizadoAgro tanqueQuimicotanqueQuimicotanqueQuimico
+ejecutarCicloLaboral()ejecutarCicloLaboral()ejecutarCicloLaboral()ejecutarCicloLaboral()
+iniciarAspersionUniforme()iniciarAspersionUniforme()iniciarAspersionUniforme()iniciarAspersionUniforme()
tiene (composición)
<<externa>>TanquePresurizadoAgro
-capacidadLitrosPesticida: doubledouble capacidadLitrosPesticidacapacidadLitrosPesticidacapacidadLitrosPesticida
-boquillaAntideriva: booleanboolean boquillaAntiderivaboquillaAntiderivaboquillaAntideriva
+purgarSistemaBoquillas()purgarSistemaBoquillas()purgarSistemaBoquillas()purgarSistemaBoquillas()
DronMultiespectral
-bandasEspectrales: intint bandasEspectralesbandasEspectralesbandasEspectrales
+ejecutarCicloLaboral()ejecutarCicloLaboral()ejecutarCicloLaboral()ejecutarCicloLaboral()
+calcularIndiceVigorVegetal()calcularIndiceVigorVegetal()calcularIndiceVigorVegetal()calcularIndiceVigorVegetal()
+generarMapaEstresHidrico()generarMapaEstresHidrico()generarMapaEstresHidrico()generarMapaEstresHidrico()
🔍 Clic para ampliar y hacer zoom

25. Sistema SOC de Detección de Amenazas y Ciberseguridad

💎 Evaluación Especial
IncidenteSeguridad → [BloqueoFirewall, AnalisisMalware (*-- SandboxForense), FugaCredenciales (<|.. AuditableSIEM)]
0 / 5

Contexto: Un Centro de Operaciones de Seguridad (SOC) corporativo gestiona la detección, contención y respuesta ante incidentes cibernéticos en infraestructuras críticas. La clase base abstracta IncidenteSeguridad centraliza la severidad, dirección IP de origen y la bitácora inmutable de respuesta. Las alertas de bloqueo de firewall operan con aislamiento perimetral de subredes y puertos específicos; los incidentes de malware avanzado integran por composición un entorno de Sandbox Forense aislado para detonar ejecutables sospechosos y analizar llamadas al kernel; y las investigaciones de fuga de credenciales son las únicas que deben procesar y exportar bitácoras en formato estandarizado Syslog/CEF hacia el motor SIEM institucional con cálculo de puntaje de riesgo, implementando la interfaz auditable sin sobrecargar los bloqueos de tráfico de capa de red.

Qué hacer: Modelar la jerarquía desacoplada: IncidenteSeguridad (padre abstracta), BloqueoFirewall (hija propia), AnalisisMalware (hija con composición a SandboxForense) y FugaCredenciales (hija que implementa la interfaz AuditableSIEM).

📐 Componentes del Sistema:

  • Padre Abstracto: IncidenteSeguridad
  • Interfaz Contrato (Solo Hija 3): AuditableSIEM
  • Clase Externa (Composición Hija 2): SandboxForense
  • Hija con Propio: BloqueoFirewall

⚙️ Especificación y Lógica de cada Método:

IncidenteSeguridadmitigarAmenaza(): boolean

Método abstracto que ejecuta protocolos de contención según el vector y nivelSeveridad.

IncidenteSeguridadregistrarBitacoraIncidente(): void

Registra en archivo inmutable idAlerta, direccionIPOrigen, fecha y acción de respuesta efectuada.

AuditableSIEMexportarFormatoSyslog(): String

Contrato de interfaz: serializa el evento en formato estándar CEF / Syslog RFC 5424 para el SIEM.

AuditableSIEMcalcularPuntajeRiesgo(): int

Contrato de interfaz: pondera activo vulnerado y vector de ataque retornando puntaje de 1 a 100.

SandboxForensedetonarMuestraSospechosa(): String

Clase externa: ejecuta el binario en entorno aislado y monitorea llamadas a APIs del sistema operativo.

BloqueoFirewallaislarSubredTemporal(): void

Método propio: añade regla de descarte (DROP) en tabla de rutas para puertoDestinoBloqueado.

AnalisisMalwareaislarProcesoInfectado(): void

Finaliza hilos maliciosos coordinando con entornoSandbox y pone en cuarentena el hashSHA256.

FugaCredencialesmitigarAmenaza(): boolean [Override]

Sobrescribe mitigarAmenaza invalidando tokens e implementa AuditableSIEM para auditoría formal.

UMLDiagrama UML — 25. Sistema SOC de Detección de Amenazas y Ciberseguridad
<<interface>>AuditableSIEM
+exportarFormatoSyslog()exportarFormatoSyslog()exportarFormatoSyslog()exportarFormatoSyslog()
+calcularPuntajeRiesgo()calcularPuntajeRiesgo()calcularPuntajeRiesgo()calcularPuntajeRiesgo()
implements (interfaz)
<<abstract>>IncidenteSeguridad
-idAlerta: StringString idAlerta
-direccionIPOrigen: StringString direccionIPOrigen
-nivelSeveridad: StringString nivelSeveridad
+mitigarAmenaza()mitigarAmenaza()
+registrarBitacoraIncidente()registrarBitacoraIncidente()
extends (herencia)
BloqueoFirewall
-puertoDestinoBloqueado: intint puertoDestinoBloqueadopuertoDestinoBloqueadopuertoDestinoBloqueado
-protocoloRed: StringString protocoloRedprotocoloRedprotocoloRed
+mitigarAmenaza()mitigarAmenaza()mitigarAmenaza()mitigarAmenaza()
+aislarSubredTemporal()aislarSubredTemporal()aislarSubredTemporal()aislarSubredTemporal()
AnalisisMalware
-hashSHA256Archivo: StringString hashSHA256ArchivohashSHA256ArchivohashSHA256Archivo
-entornoSandbox: SandboxForenseSandboxForense entornoSandboxentornoSandboxentornoSandbox
+mitigarAmenaza()mitigarAmenaza()mitigarAmenaza()mitigarAmenaza()
+aislarProcesoInfectado()aislarProcesoInfectado()aislarProcesoInfectado()aislarProcesoInfectado()
tiene (composición)
<<externa>>SandboxForense
-sistemaOperativoVirtual: StringString sistemaOperativoVirtualsistemaOperativoVirtualsistemaOperativoVirtual
-entornoAisladoActivo: booleanboolean entornoAisladoActivoentornoAisladoActivoentornoAisladoActivo
+detonarMuestraSospechosa()detonarMuestraSospechosa()detonarMuestraSospechosa()detonarMuestraSospechosa()
FugaCredenciales
-cantidadCuentasComprometidas: intint cantidadCuentasComprometidascantidadCuentasComprometidascantidadCuentasComprometidas
+mitigarAmenaza()mitigarAmenaza()mitigarAmenaza()mitigarAmenaza()
+exportarFormatoSyslog()exportarFormatoSyslog()exportarFormatoSyslog()exportarFormatoSyslog()
+calcularPuntajeRiesgo()calcularPuntajeRiesgo()calcularPuntajeRiesgo()calcularPuntajeRiesgo()
🔍 Clic para ampliar y hacer zoom
Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.