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.
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.
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.