Saltar al contenido

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.

Molde, el cortador de galletas

Duración sugerida: 45 a 60 minutos por lección.

Qué se aprende

LecciónAl terminar, puede…
Moldes y galletasCrear una clase y varios objetos distintos.
Mensajes entre objetosEscribir métodos y leer un diagrama de secuencia.
HerenciaUsar extends y sobrescribir un método.
Matrices y colasUsar una matriz y una cola dentro de una clase.
Reto: la biblioteca con objetosResolver el problema de la biblioteca con objetos.

Cómo acompañar

A qué estar atentos

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());
  }
}