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
GatoyCanariotambién heredan deAnimal. Tú defines sus atributos y métodos propios (ver Parte 3).
Instrucciones
Parte 1 — Clase Animal
Crea un archivo Animal.java con lo siguiente:
- Declara los atributos
nombre,edadypesocon modificador de acceso privado. - Crea un constructor que reciba los tres atributos como parámetros y los asigne.
- Agrega los métodos:
comer()— imprime en consola:[nombre] está comiendo.dormir()— imprime en consola:[nombre] está durmiendo.toString()— retorna unStringcon la información del animal.
💡 Pista: En
toString()puedes usar concatenación oString.format().
Parte 2 — Clase Perro
Crea un archivo Perro.java que extienda de Animal:
- Agrega los atributos propios:
razayestaVacunado. - Crea un constructor que reciba todos los atributos (los de
Animalmás los propios) y usesuper()para inicializar los heredados. - Agrega los métodos:
ladrar()— imprime:[nombre] dice: ¡Guau guau!buscarPelota()— imprime:[nombre] está buscando la pelota...- Sobreescribe (
@Override) el métodotoString()para incluir también la raza y si está vacunado.
Parte 3 — Clase Gato
Crea un archivo Gato.java que extienda de Animal:
- Define al menos 2 atributos propios que describan a un gato (ejemplos:
esInterior,color,tienePelargeLargo). - Crea el constructor usando
super()para los atributos heredados. - Agrega al menos 2 métodos propios con comportamiento específico del gato (ejemplos:
maullar(),arañar(),ronronear()). - 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:
- Define al menos 2 atributos propios (ejemplos:
colorPlumaje,cantaEnJaula,envergaduraAlas). - Crea el constructor usando
super(). - Agrega al menos 2 métodos propios (ejemplos:
cantar(),volar(),picar()). - Sobreescribe
toString()incluyendo los atributos propios.
Parte 5 — Clase principal Main
En tu clase Main.java:
- Crea un objeto de cada tipo:
Perro,GatoyCanario, con datos distintos. - Llama al menos 3 métodos diferentes por cada objeto (incluyendo métodos heredados y propios).
- Imprime la información de cada animal con
System.out.println()ytoString().
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:
- ¿Por qué declaramos los atributos como
privatey no comopublic? - ¿Qué pasaría si quitaras el
super()del constructor dePerro? - ¿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