Programación Orientada a Objetos 13 - Caso de Estudio

Este capítulo tiene como objetivo reforzar el entendimiento de la Programación Orientada a Objetos (POO) a través de un caso de estudio, ejemplo práctico del mundo real.

Caso de estudio: Sistema de Biblioteca Simple

Consideremos un sistema de biblioteca simple. Este sistema necesita gestionar libros, miembros y préstamos.

Vamos a ver cómo los conceptos de POO se aplican aquí.

Clase Libro:


  // Clase que representa un libro en la biblioteca
  public class Libro {
      private String titulo;
      private String autor;
      private String isbn;
  
      // Constructor de la clase Libro
      public Libro(String titulo, String autor, String isbn) {
          this.titulo = titulo;
          this.autor = autor;
          this.isbn = isbn;
      }
  
      // Getters
      public String getTitulo() {
          return titulo;
      }
  
      public String getAutor() {
          return autor;
      }
  
      public String getIsbn() {
          return isbn;
      }
  
      // Setters
      public void setTitulo(String titulo) {
          this.titulo = titulo;
      }
  
      public void setAutor(String autor) {
          this.autor = autor;
      }
  
      public void setIsbn(String isbn) {
          this.isbn = isbn;
      }
  }                  
                

Clase Miembro:


  import java.util.List;
  import java.util.ArrayList;
  
  // Clase que representa a un miembro de la biblioteca
  public class Miembro {
      private String nombre;
      private String id;
      private List<Libro> librosPrestados;
  
      // Constructor de la clase Miembro
      public Miembro(String nombre, String id) {
          this.nombre = nombre;
          this.id = id;
          this.librosPrestados = new ArrayList<>();
      }
  
      // Método para prestar un libro al miembro
      public void prestarLibro(Libro libro) {
          librosPrestados.add(libro);
      }
  
      // Getters
      public String getNombre() {
          return nombre;
      }
  
      public String getId() {
          return id;
      }
  
      public List<Libro> getLibrosPrestados() {
          return librosPrestados;
      }
  
      // Setters
      public void setNombre(String nombre) {
          this.nombre = nombre;
      }
  
      public void setId(String id) {
          this.id = id;
      }
  }                                    
                

Clase Biblioteca:


  import java.util.List;
  import java.util.ArrayList;

  // Clase que representa la biblioteca
  public class Biblioteca {
      private List<Libro> librosDisponibles;
      private List<Miembro> miembros;

      // Constructor de la clase Biblioteca
      public Biblioteca() {
          this.librosDisponibles = new ArrayList<>();
          this.miembros = new ArrayList<>();
      }

      // Método para agregar un libro a la biblioteca
      public void agregarLibro(Libro libro) {
          librosDisponibles.add(libro);
      }

      // Método para registrar un nuevo miembro en la biblioteca
      public void registrarMiembro(Miembro miembro) {
          miembros.add(miembro);
      }

      // Métodos adicionales para gestionar préstamos, devoluciones, etc.

      // Getters
      public List<Libro> getLibrosDisponibles() {
          return librosDisponibles;
      }

      public List<Miembro> getMiembros() {
          return miembros;
      }
    }
                

En este ejemplo simple, podemos ver cómo la POO facilita la gestión y organización del sistema:

Encapsulamiento: Cada clase (Libro, Miembro, Biblioteca) encapsula sus propios datos y comportamientos.
Abstracción: Las operaciones complejas, como prestar o devolver libros, se abstraen detrás de métodos.
Reutilización: Las clases pueden ser reutilizadas y extendidas para crear sistemas más complejos.

Conclusiones

Aplicamos conceptos de POO para construir un sistema de biblioteca, hemos visto cómo la abstracción, el encapsulamiento y la reutilización de código facilitan la creación de software estructurado y mantenible.