Familias y docentes › Objetos
Guía
Módulo 4: Objetos
La orientación a objetos es la forma más usada de organizar programas grandes. Aquí se aprende a modelar con clases, a dibujar el diseño en UML y a repartir responsabilidades.
Duración sugerida: 45 a 60 minutos por lección.
Qué se aprende
| Lección | Al terminar, puede… |
|---|---|
| Moldes y galletas | Crear una clase y varios objetos distintos. |
| Mensajes entre objetos | Escribir métodos y leer un diagrama de secuencia. |
| Herencia | Usar extends y sobrescribir un método. |
| Matrices y colas | Usar una matriz y una cola dentro de una clase. |
| Reto: la biblioteca con objetos | Resolver el problema de la biblioteca con objetos. |
Cómo acompañar
- Antes de programar, dibujen el diagrama de clases en papel.
- Pidan que digan, para cada clase, «esta clase se encarga de…» en una sola frase.
- Usen el diagrama de secuencia para contar la historia de quién le pide qué a quién.
A qué estar atentos
- Java es exigente con los puntos y coma y las llaves: en el nivel Constructor, el mensaje de error dice la línea.
- Confundir la clase (el molde) con el objeto (la galleta).
Soluciones de los retos
Hay muchas soluciones posibles; esta es una. Úsenla para orientar, no para copiar.
Un molde, muchas galletas: Crea una tercera galleta llamada sol, de color "amarillo", y escribe su color.
class Galleta {
String forma;
String color = "café";
int chispas = 0;
}
public class Main {
public static void main(String[] args) {
Galleta estrella = new Galleta();
estrella.forma = "estrella";
estrella.chispas = 5;
Galleta luna = new Galleta();
luna.forma = "luna";
luna.color = "rosa";
System.out.println(estrella.forma + " " + estrella.color);
System.out.println(luna.forma + " " + luna.color);
Galleta sol = new Galleta();
sol.color = "amarillo";
System.out.println(sol.color);
}
}Galletas que saben hacer cosas: Agrega un método morder() que le quite 1 chispa. Mándale morder() dos veces a estrella antes de describirla.
class Galleta {
String forma;
int chispas = 0;
Galleta(String forma) {
this.forma = forma;
}
void decorar(int cuantas) {
chispas += cuantas;
}
void morder() {
chispas -= 1;
}
String describir() {
return "Galleta " + forma + " con " + chispas + " chispas";
}
}
public class Main {
public static void main(String[] args) {
Galleta estrella = new Galleta("estrella");
estrella.decorar(5);
estrella.morder();
estrella.morder();
System.out.println(estrella.describir());
}
}Animales que hablan: Crea la clase Vaca, hija de Animal, que diga "muu", y agrega una vaca llamada Lola al arreglo.
class Animal {
String nombre;
Animal(String nombre) {
this.nombre = nombre;
}
String sonido() {
return "...";
}
String hablar() {
return nombre + " dice " + sonido();
}
}
class Perro extends Animal {
Perro(String nombre) {
super(nombre);
}
String sonido() {
return "guau";
}
}
class Gato extends Animal {
Gato(String nombre) {
super(nombre);
}
String sonido() {
return "miau";
}
}
class Vaca extends Animal {
Vaca(String nombre) {
super(nombre);
}
String sonido() {
return "muu";
}
}
public class Main {
public static void main(String[] args) {
Animal[] animales = { new Perro("Firulais"), new Gato("Michi"), new Vaca("Lola") };
for (Animal a : animales) {
System.out.println(a.hablar());
}
}
}La cafetería y el tablero: Haz que llegue "Caro", atiende a una persona más y escribe cuántas quedan en la fila con System.out.println("Quedan: " + cafe.fila.size());
import java.util.*;
class Cafeteria {
Queue<String> fila = new LinkedList<>();
void llega(String nombre) {
fila.add(nombre);
}
void atender() {
String cliente = fila.poll();
System.out.println("Atendiendo a " + cliente);
}
}
class Tablero {
int[][] casillas = new int[3][3];
void marcar(int fila, int columna) {
casillas[fila][columna] = 1;
}
}
public class Main {
public static void main(String[] args) {
Cafeteria cafe = new Cafeteria();
cafe.llega("Ana");
cafe.llega("Beto");
cafe.atender();
cafe.llega("Caro");
cafe.atender();
System.out.println("Quedan: " + cafe.fila.size());
Tablero juego = new Tablero();
juego.marcar(1, 1);
juego.marcar(0, 2);
}
}La biblioteca con objetos: Presta también «El Principito». La pantalla debe decir Disponibles: 1.
import java.util.*;
class Libro {
String titulo;
boolean prestado = false;
Libro(String titulo) {
this.titulo = titulo;
}
}
class Biblioteca {
ArrayList<Libro> libros = new ArrayList<>();
void agregar(Libro libro) {
libros.add(libro);
}
void prestar(String titulo) {
for (Libro libro : libros) {
if (libro.titulo.equals(titulo)) {
libro.prestado = true;
}
}
}
int disponibles() {
int total = 0;
for (Libro libro : libros) {
if (!libro.prestado) {
total += 1;
}
}
return total;
}
}
public class Main {
public static void main(String[] args) {
Biblioteca aula = new Biblioteca();
aula.agregar(new Libro("El Principito"));
aula.agregar(new Libro("Cocorí"));
aula.agregar(new Libro("Mamita Yunai"));
aula.prestar("Cocorí");
aula.prestar("El Principito");
System.out.println("Disponibles: " + aula.disponibles());
}
}