Modelado de un Simulador Ecológico
Herencia y Polimorfismo en UML
Objetivo general
El estudiante será capaz de abstraer un escenario del mundo real y estructurarlo visualmente mediante un diagrama de clases UML, aplicando de forma estricta las notaciones de generalización (herencia) y sobreescritura de operaciones (polimorfismo).
La Programación Orientada a Objetos (POO) permite simular sistemas complejos mediante entidades que interactúan entre sí. Antes de escribir cualquier línea de código, es fundamental visualizar y planificar cómo se relacionan estas entidades.
La herencia facilita la reutilización de atributos y métodos compartidos, mientras que el polimorfismo garantiza que objetos de diferentes clases puedan responder al mismo mensaje de manera específica. Esta representación gráfica funciona como el plano arquitectónico que guía el desarrollo del software, reduciendo errores lógicos y estandarizando la comunicación en los equipos de desarrollo.
Materiales o recursos necesarios
- Computadora con acceso a internet.
- Navegador web actualizado.
- Acceso al software dia o a la plataforma PlantUML Web Server (o entorno local integrado con extensiones de PlantUML).
- Editor de texto simple.
Insumos Prácticos
A continuación, se proporciona el código base en sintaxis PlantUML. Este script establece la fundación del ecosistema, definiendo una clase abstracta y una primera subclase concreta. El estudiante utilizará este código para generar el diagrama inicial y posteriormente expandirlo.
@startuml
skinparam classAttributeIconSize 0
' Definición de la Superclase
abstract class Animal {
# nombre: String
# edad: Integer
# nivelEnergia: Double
+ Animal(nombre: String, edad: Integer)
+ alimentarse(cantidad: Double): void
+ {abstract} moverse(): void
+ {abstract} emitirSonido(): String
}
' Definición de la Subclase
class Leon {
- tamañoManada: Integer
+ Leon(nombre: String, edad: Integer, tamañoManada: Integer)
+ cazar(): void
+ moverse(): void
+ emitirSonido(): String
}
' Relación de Herencia (Generalización)
Animal <|-- Leon
@endumlInstrucciones paso a paso
- Carga del entorno de trabajo: El estudiante debe abrir su navegador y acceder al servidor web de PlantUML, preparando el lienzo para la generación en tiempo real.
- Análisis del diseño base: Se requiere que el estudiante pegue el script proporcionado y procese visualmente la relación de generalización, identificando cómo la flecha con punta triangular hueca (
<|--) apunta desde la subclase hacia la superclase. - Extensión del ecosistema (Herencia): El estudiante deberá programar en PlantUML al menos tres nuevas clases (por ejemplo,
Aguila,Tiburon,Serpiente) que hereden directamente de la clase baseAnimal. - Implementación del polimorfismo: Dentro de cada nueva subclase, el estudiante debe añadir los métodos abstractos heredados (
moverse()yemitirSonido()). Se espera que el estudiante comprenda que, aunque la firma del método es idéntica, la implementación conceptual difiere para cada especie, evidenciando el polimorfismo. - Adición de atributos específicos: Cada nueva clase debe contar con al menos un atributo privado exclusivo de su especie (ej.
envergaduraAlaspara el águila) con su respectivo tipo de dato. - Validación de visibilidad: Se debe realizar una revisión del código para asegurar el uso correcto de los modificadores de visibilidad (
+para público,-para privado,#para protegido). - Exportación y consolidación: Finalmente, el estudiante renderizará el diagrama completo y lo exportará en formato PNG para integrarlo en su documento de entrega.
Recomendaciones
- Identificar exhaustivamente las características comunes de las entidades antes de crear clases derivadas.
- Prestar especial atención a la dirección de las flechas en UML; por convención estricta, la punta del triángulo siempre debe apuntar hacia la clase padre.
- Garantizar la consistencia en los tipos de retorno de los métodos; no se deben alterar las firmas al aplicar polimorfismo.
- Aplicar la convención de nomenclatura
PascalCasepara los nombres de las clases (ej.OsoPolar) ycamelCasepara métodos y atributos. - Experimentar con la sintaxis de la herramienta, introduciendo errores a propósito en un entorno seguro para entender cómo el motor de renderizado reporta las fallas.
Posible problema y solución rápida
- Problema: Al utilizar herramientas basadas en texto como PlantUML, existe una alta tendencia a confundir la sintaxis de las relaciones, utilizando por error
->en lugar de<|--. Esto genera una flecha de asociación simple, rompiendo la representación de la herencia. - Solución: Recordar la regla mnemotécnica visual del propio código:
<|dibuja literalmente el triángulo hueco y--traza la línea continua requerida por el estándar UML. El estudiante solo necesita localizar la línea de la relación y sustituirla porSuperClase <|-- SubClasepara corregir instantáneamente la estructura gráfica.
