Laboratorio 02 — Clases y Objetos en Java - jorgealbertopineda78-del/java GitHub Wiki

Laboratorio 02 — Clases y Objetos en Java

Unidad: 2 — Clases y Objetos
Duración estimada: 90 minutos
Nivel: Básico-Intermedio


Objetivo

Aplicar los conceptos de definición de clases, creación de objetos, atributos de instancia, métodos y constructores en Java, modelando una jerarquía simple del mundo real.


Contexto del problema

Eres parte del equipo de desarrollo de una clínica veterinaria. El sistema necesita representar animales que ingresan a consulta. Por ahora solo trabajarás con perros, pero el diseño debe ser extensible para otros animales en el futuro.

Tu tarea es modelar la clase base Animal y tres clases hijas: Perro, Gato y Canario. El diagrama UML muestra la estructura base que se revisará en clase; tú deberás completar las clases hijas con sus propios atributos y métodos.


Diagrama UML

┌─────────────────────────────┐
│           Animal            │
├─────────────────────────────┤
│ - nombre   : String         │
│ - edad     : int            │
│ - peso     : double         │
├─────────────────────────────┤
│ + Animal(nombre, edad, peso)│
│ + comer()  : void           │
│ + dormir() : void           │
│ + toString(): String        │
└─────────────┬───────────────┘
              │
              │  hereda
              ▼
┌─────────────────────────────┐
│            Perro            │
├─────────────────────────────┤
│ - raza     : String         │
│ - estaVacunado : boolean    │
├─────────────────────────────┤
│ + Perro(nombre, edad, peso, │
│         raza, estaVacunado) │
│ + ladrar() : void           │
│ + buscarPelota(): void      │
│ + toString(): String        │
└─────────────────────────────┘

Las clases Gato y Canario también heredan de Animal. Tú defines sus atributos y métodos propios (ver Parte 3).


Instrucciones

Parte 1 — Clase Animal

Crea un archivo Animal.java con lo siguiente:

  1. Declara los atributos nombre, edad y peso con modificador de acceso privado.
  2. Crea un constructor que reciba los tres atributos como parámetros y los asigne.
  3. Agrega los métodos:
    • comer() — imprime en consola: [nombre] está comiendo.
    • dormir() — imprime en consola: [nombre] está durmiendo.
    • toString() — retorna un String con la información del animal.

💡 Pista: En toString() puedes usar concatenación o String.format().


Parte 2 — Clase Perro

Crea un archivo Perro.java que extienda de Animal:

  1. Agrega los atributos propios: raza y estaVacunado.
  2. Crea un constructor que reciba todos los atributos (los de Animal más los propios) y use super() para inicializar los heredados.
  3. Agrega los métodos:
    • ladrar() — imprime: [nombre] dice: ¡Guau guau!
    • buscarPelota() — imprime: [nombre] está buscando la pelota...
    • Sobreescribe (@Override) el método toString() para incluir también la raza y si está vacunado.

Parte 3 — Clase Gato

Crea un archivo Gato.java que extienda de Animal:

  1. Define al menos 2 atributos propios que describan a un gato (ejemplos: esInterior, color, tienePelargeLargo).
  2. Crea el constructor usando super() para los atributos heredados.
  3. Agrega al menos 2 métodos propios con comportamiento específico del gato (ejemplos: maullar(), arañar(), ronronear()).
  4. Sobreescribe toString() incluyendo los atributos propios.

💡 Pista: Tú decides los atributos y métodos, siempre que tengan sentido para describir a un gato real.


Parte 4 — Clase Canario

Crea un archivo Canario.java que extienda de Animal:

  1. Define al menos 2 atributos propios (ejemplos: colorPlumaje, cantaEnJaula, envergaduraAlas).
  2. Crea el constructor usando super().
  3. Agrega al menos 2 métodos propios (ejemplos: cantar(), volar(), picar()).
  4. Sobreescribe toString() incluyendo los atributos propios.

Parte 5 — Clase principal Main

En tu clase Main.java:

  1. Crea un objeto de cada tipo: Perro, Gato y Canario, con datos distintos.
  2. Llama al menos 3 métodos diferentes por cada objeto (incluyendo métodos heredados y propios).
  3. Imprime la información de cada animal con System.out.println() y toString().

Ejemplo de salida esperada (la tuya puede variar según tus atributos):

=== Clínica Veterinaria ===

-- Perro --
Nombre: Max | Edad: 3 años | Peso: 12.5 kg | Raza: Labrador | Vacunado: Sí
Max está comiendo.
Max dice: ¡Guau guau!
Max está buscando la pelota...

-- Gato --
Nombre: Misi | Edad: 2 años | Peso: 3.8 kg | Color: Gris | Interior: Sí
Misi está durmiendo.
Misi dice: ¡Miau!
Misi está ronroneando...

-- Canario --
Nombre: Pico | Edad: 1 año | Peso: 0.03 kg | Plumaje: Amarillo | Canta en jaula: Sí
Pico está comiendo.
Pico está cantando: ♪ pi pi pi ♪

Criterios de evaluación

Criterio Puntos
Clase Animal con atributos privados y constructor correcto 15
Métodos comer(), dormir(), toString() en Animal funcionando 10
Clase Perro extiende Animal, usa super(), métodos propios y @Override 20
Clase Gato extiende Animal, mínimo 2 atributos, 2 métodos propios y @Override 20
Clase Canario extiende Animal, mínimo 2 atributos, 2 métodos propios y @Override 20
Clase Main con un objeto de cada tipo y llamadas a métodos 10
Creatividad y coherencia en atributos/métodos de Gato y Canario 5
Total 100

Preguntas de reflexión

Responde en comentarios dentro de tu código o en un archivo respuestas.txt:

  1. ¿Por qué declaramos los atributos como private y no como public?
  2. ¿Qué pasaría si quitaras el super() del constructor de Perro?
  3. ¿Qué ventaja tiene sobreescribir toString() en lugar de crear un método con otro nombre?

Entregable

Sube al repositorio indicado por tu profesor:

lab02/
├── Animal.java
├── Perro.java
├── Gato.java
├── Canario.java
└── Main.java

Laboratorio preparado para el curso de Programación Orientada a Objetos — Ago-Dic 2025