Descripción general del proyecto y diseño UML
Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 77 de 87.
Desafío
FácilComencemos el proyecto del Sistema de Gestión de Biblioteca construyendo la base: las clases de entidad principales de las que dependerá todo lo demás. Este primer desafío se centra en crear clases Book y User bien estructuradas que sigan el diseño UML de la lección.
Organizarás tu código en tres archivos:
Book.java: Crea la claseBookque representa un libro de la biblioteca. Cada libro debe tener campos privados paraisbn(String),title(String),author(String) eisAvailable(boolean, con valor predeterminadotrue). Incluye un constructor que acepte isbn, title y author. Proporciona los métodos getter apropiados para todos los campos y un setter paraisAvailable. Agrega un métodogetDetails()que devuelva una cadena formateada:[isbn] title by author.User.java: Crea la claseUserque representa a un miembro de la biblioteca. Cada usuario debe tener campos privados paraid(String) yname(String). Incluye un constructor que acepte ambos valores y proporciona métodos getter para cada campo. Agrega un métodotoString()que devuelva:User[id]: name.Main.java: Une tus clases para demostrar que funcionan correctamente. Recibirás cuatro entradas: el ISBN de un libro, el título, el autor y, a continuación, el ID y el nombre de un usuario.Crea un
Bookcon las tres primeras entradas y unUsercon las dos últimas. Imprime los detalles del libro usandogetDetails(), luego imprime si el libro está disponible en el formatoAvailable: trueoAvailable: false. Finalmente, imprime al usuario usando su métodotoString().
Recibirás cinco entradas en orden: ISBN (String), title (String), author (String), user ID (String) y user name (String).
Por ejemplo, con las entradas 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 y Alice Smith, tu salida sería:
[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
User[U001]: Alice SmithEstas clases fundamentales servirán como bloques de construcción para todo el Sistema de Gestión de Biblioteca. ¡En las próximas lecciones, las ampliarás con funcionalidades de préstamo, capacidades de búsqueda y más!
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leer la información del libro
String isbn = scanner.nextLine();
String title = scanner.nextLine();
String author = scanner.nextLine();
// Leer la información del usuario
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// TODO: Crear un objeto Book con isbn, title, y author
// TODO: Crear un objeto User con userId y userName
// TODO: Imprimir los detalles del libro usando getDetails()
// TODO: Imprimir si el libro está disponible (formato: "Available: true" o "Available: false")
// TODO: Imprimir el usuario usando toString()
}
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado10Manejo de excepciones en POO
Jerarquía de clases de excepcionesExcepciones personalizadasErrores Checked vs UncheckedPatrón Try With ResourcesResumen - Usuario validado13Proyecto: Gestión de biblioteca
Descripción general del proyecto y diseño UMLClases de Libro y Usuario2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Iterator