CREACION DE UN SOFWARE
INFORMATICO PARA MEJORAR LA
GESTION DE BILIOTECAS
Segundo avance
Asignatura: Programación Orientada a Objetos
Docente: EVELYN MARILYN RIVEROS HUAMAN
Integrantes:
Cutipa Angeles, Caled Benjamin U20231063
Condo Tiquillahuanca Jhonatan U22235766
Bellido Larico Christopher Andrew U17101859
Olivera Bautista Paulocésar Donovan U 22311356
2024
Índice general
Resumen 3
Introducción 4
Primer avance 5
1.1. Planteamiento del Problema 5
1.2. Objetivos 5
Objetivo General 5
Objetivos Específicos 6
1.3. Justificación 7
1.4. Alcance y Limitaciones 8
Resumen
El presente proyecto tiene como objetivo principal diseñar e
implementar un sistema integrado de gestión de una biblioteca. Este
software permitirá llevar un registro detallado de los libros, clientes y
prestamos realizados en la biblioteca. Además, se podrán realizar
búsquedas y consultas de manera rápida y eficiente, lo que ayudará
a mejorar la eficacia en la gestión de los recursos y a proporcionar
un mejor servicio a los clientes. El software contará con diferentes
módulos, como el de inventario, préstamos, clientes, entre otros. Se
espera que este proyecto contribuya a optimizar los procesos de
gestión en las librerías, brindando una herramienta eficaz y de fácil
uso para los administradores y empleados.
Palabras claves: Software, biblioteca, gestión, registro, clientes,
eficiencia y módulos.
The main objective of this project is to design and implement an
integrated library management system. This software will allow you
to keep a detailed record of the books, customers and loans made in
the library. In addition, searches and queries can be carried out
quickly and efficiently, which will help improve efficiency in resource
management and provide better service to customers. The software
will have different modules, such as inventory, loans, clients, among
others. It is expected that this project will contribute to optimizing
management processes in bookstores, providing an effective and
easy-to-use tool for administrators and employees.
Keywords: Software, library, management, registration, clients,
efficiency and modules.
Introducción
En la última década, la administración y gestión de las instituciones
y empresas informáticas han ido renovándose y cambiando con la
implementación del software especializado para simplificar los
procesos. Con el uso de java y Jblue tenemos el objetivo principal
diseñar e implementar un sistema integrado de gestión de una
biblioteca haciendo uso de clases, herencias y conocimientos de la
Programación Orientada a Objetos (POO).
Viendo los antecedentes en las bibliotecas ha habido versiones más
simples de estos sistemas incluso antes de que se inventaran las
computadoras, cuando la información sobre los materiales de la
biblioteca en ese momento se almacenaba en afiches de papel que
se guardaban en gabinetes clasificados. El paso inicial hacia la
informatización de estos sistemas, que actualmente se conoce
como un SIGB, ocurrió en 1936 en la Universidad de Texas, donde
el contenido de la información sobre los libros se presentaba en
tarjetas perforadas y cargadas a su computadora central.
Otorgándose con el progreso de la informática a lo largo de los
años, el manejo de los recursos de una biblioteca, mediante estos
sistemas integrados de gestión, ha sido posible con una amplia
variedad de dispositivos.
Las bibliotecas han jugado un papel fundamental en la preservación
y difusión del conocimiento a lo largo de la historia. Sin embargo,
con el auge de las tecnologías digitales, las bibliotecas tradicionales
se enfrentan a nuevos desafíos para seguir siendo relevantes y
útiles para sus usuarios. Uno de los principales desafíos es la
gestión eficiente de sus recursos bibliográficos. Las bibliotecas
tradicionales suelen utilizar sistemas manuales para catalogar,
clasificar y registrar sus libros y otros materiales. Estos sistemas
pueden ser lentos, propensos a errores y difíciles de mantener.
La creación de un software informático para la gestión de
bibliotecas podría ayudar a resolver estos problemas y mejorar
significativamente la eficiencia de las bibliotecas que no se
actualizan a los avances tecnológicos. Un software bien diseñado
podría automatizar muchas de las tareas manuales que
actualmente realizan los bibliotecarios, liberando su tiempo para
que puedan dedicarse a actividades más valiosas, como ayudar a
los usuarios y desarrollar nuevos programas y servicios.
1.1Planteamiento del problema
El problema central que se aborda con la creación de un software
informático para la gestión de bibliotecas es la necesidad de
mejorar la eficiencia y eficacia de las operaciones bibliotecarias. Las
bibliotecas tradicionales se enfrentan a una serie de desafíos
relacionados con la gestión de sus recursos bibliográficos que un
software informático para la gestión de bibliotecas podría abordar:
La catalogación, clasificación y registro de materiales bibliográficos
se suele realizar de forma manual, lo que puede ser lento, propenso
a errores y consumir mucho tiempo. El software podría automatizar
muchas de las tareas manuales que actualmente realizan los
bibliotecarios. Los sistemas bibliotecarios tradicionales suelen estar
fragmentados, lo que dificulta la búsqueda y recuperación de
información. El software podría integrar diferentes sistemas
bibliotecarios, como el catálogo, el sistema de circulación y el
sistema de gestión de adquisiciones. Los usuarios suelen tener un
acceso limitado a los recursos de la biblioteca desde fuera de las
instalaciones físicas. El software podría permitir a los usuarios
acceder a los recursos de la biblioteca desde cualquier lugar, a
través de Internet. Puede ser difícil generar informes precisos y
oportunos sobre el uso de la biblioteca. El software podría generar
informes precisos y oportunos sobre el uso de la biblioteca.
La implementación de un software informático para la gestión de
bibliotecas podría tener un impacto positivo significativo en las
bibliotecas, mejorando su eficiencia, eficacia y capacidad para servir
a sus usuarios.
1.2 Objetivos
1.2.1 Objetivo General
Desarrollar un software informático para la gestión de bibliotecas
que permita optimizar la eficiencia y eficacia de las operaciones
bibliotecarias, mejorando la accesibilidad y el servicio a los
usuarios.
1.2.2 Objetivos Específicos
Automatizar los procesos manuales de gestión bibliográfica:
-Automatizar la catalogación, clasificación y registro de materiales
bibliográficos, usuarios, etc.
-Automatizar el proceso de circulación de materiales, incluyendo
préstamos, devoluciones y renovaciones.
-Integrar el catálogo, el sistema de gestión de adquisiciones y otros
sistemas bibliotecarios relevantes.
-Facilitar la búsqueda y recuperación de información para usuarios y
bibliotecarios.
-Permitir a los usuarios consultar el catálogo, realizar reservas y
acceder a materiales digitales desde cualquier lugar.
-Diseñar una interfaz intuitiva y fácil de usar para el software.
-Implementar funciones de búsqueda avanzada y filtrado para
facilitar la localización de materiales.
-Garantizar la seguridad y confiabilidad del software
Modelo básico inicial:
Biblioteca
Libros
• Código del libro.
• Título del libro.
• Autor del libro.
• Disponibilidad (si está prestado o no).
• Año
Clientes
o DNI de cliente.
o Nombre del cliente.
o Dirección del cliente.
o Teléfono o correo
Préstamo
• Código del libro prestado.
• Datos del socio
• Fecha del préstamo.
Justificación
La creación de un software informático para la gestión de
bibliotecas se justifica por las siguientes razones:
Necesidad de mejorar la eficiencia y eficacia de las operaciones
bibliotecarias: Las bibliotecas tradicionales enfrentan diversos
desafíos relacionados con la gestión manual de sus recursos
bibliográficos, lo que impacta negativamente en la eficiencia y
eficacia de sus operaciones. Un software informático bien diseñado
podría automatizar muchas de estas tareas manuales, liberando
tiempo para que los bibliotecarios se enfoquen en actividades más
valiosas, como la atención a los usuarios y el desarrollo de nuevos
programas y servicios.
Mejorar la accesibilidad y el servicio a los usuarios: Los usuarios de
las bibliotecas tradicionales suelen tener acceso limitado a los
recursos de la biblioteca desde fuera de las instalaciones físicas. Un
software informático para la gestión de bibliotecas podría
proporcionar acceso remoto a los recursos de la biblioteca,
incluyendo el catálogo, materiales digitales y otros servicios,
ampliando el horario de atención y mejorando la accesibilidad para
los usuarios.
Facilitar la toma de decisiones y la mejora continua: La generación
de informes precisos y oportunos sobre el uso de la biblioteca es
fundamental para la toma de decisiones informadas y la mejora
continua de los servicios bibliotecarios. Un software informático para
la gestión de bibliotecas podría generar informes detallados sobre la
circulación de materiales, el uso de recursos digitales y otros
indicadores relevantes, brindando información valiosa para
optimizar las operaciones bibliotecarias.
Adaptarse a las necesidades cambiantes de los usuarios: Las
necesidades y expectativas de los usuarios de las bibliotecas están
cambiando constantemente. Un software informático para la gestión
de bibliotecas debe ser flexible y adaptable para poder satisfacer
estas necesidades cambiantes, ofreciendo nuevas funcionalidades
y servicios de manera oportuna.
Alcance y Limitaciones
Alcance:
El software informático para la gestión de bibliotecas abarcará las
siguientes funcionalidades:
Módulo de gestión bibliográfica: Automatización de la
catalogación, clasificación y registro de materiales
bibliográficos, incluyendo libros, revistas, artículos, recursos
audiovisuales y otros materiales.
Módulo de circulación: Automatización del proceso de
circulación de materiales, incluyendo préstamos,
devoluciones, renovaciones y reservas.
Módulo de adquisiciones: Gestión de las compras y
recepciones de nuevos materiales bibliográficos.
Módulo de acceso remoto: Plataforma web o aplicación móvil
para el acceso remoto a los recursos de la biblioteca,
incluyendo el catálogo, materiales digitales y otros servicios.
Módulo de generación de informes: Generación de informes
precisos y oportunos sobre el uso de la biblioteca, incluyendo
circulación de materiales, uso de recursos digitales y otros
indicadores relevantes.
Limitaciones:
El software informático para la gestión de bibliotecas no abarcará
las siguientes funcionalidades:
Integración con sistemas externos: La integración con
sistemas externos, como bases de datos bibliográficas o
sistemas de gestión de aprendizaje, no estará disponible en la
versión inicial del software.
Funcionalidades avanzadas de personalización: Las
funcionalidades avanzadas de personalización para adaptar el
software a las necesidades específicas de cada biblioteca no
estarán disponibles en la versión inicial del software.
Soporte para múltiples idiomas: El software estará disponible
inicialmente en español. El soporte para idiomas adicionales
se puede considerar en futuras versiones.
(Corrección y Segundo Avance)
Metodología
I) CASOS DE USO POR IMPLEMENTAR
A) GESTIONAR LIBROS
B) PRESTAR LIBROS
II) DIAGRAMA DE CASOS DE USO
III) DIAGRAMA DE CLASES
(MS VISIO)
IV) IMPLEMENTACIÓN DEL DISEÑO EN BLUEJ
CLASE CREADAS: CLASE LIBRO, CLASE CLIENTE, CLASE PRESTAMO, CLASE BILIOTECA, CLASE ABSTRACTA
PERSONA INTERFACE OPERACIONES BIBLIOTECAS,INTERFACE OBSERVADOR, CLASE PRESTAMO <T,U>,
CLASE NOTIFICADOR Y EL MAIN
Clase Libro:
Funcionamiento:
El código proporcionado define la clase Libro, que encapsula los datos esenciales de un
libro, incluyendo su código único, título, autor, ISBN y disponibilidad. Utilizando un
constructor detallado, permite crear instancias específicas de libros con valores
iniciales para cada atributo. Además, proporciona métodos de acceso (getters) para
obtener información sobre el libro, como su título, autor y estado de disponibilidad. El
método setDisponible(boolean) facilita la modificación del estado de disponibilidad del
libro, lo cual es crucial para la gestión de préstamos en un sistema bibliotecario o
similar. Este diseño promueve el encapsulamiento de datos y el acceso controlado a la
información del libro, contribuyendo a una estructura de código organizada y modular.
Clase Cliente:
Funcionamiento:
El código proporcionado define la clase Cliente, que extiende de la clase abstracta
Persona. Mediante la declaración extends Persona, Cliente hereda las propiedades y
métodos de Persona, especializándose para representar clientes dentro de un sistema.
El constructor Cliente(String nombre) inicializa un objeto cliente con un nombre
específico, utilizando super(nombre) para llamar al constructor de la clase base
Persona. La implementación de mostrarIdentidad() sobrescribe el método abstracto
definido en Persona, permitiendo que cada instancia de Cliente muestre su identidad
de manera específica, en este caso, imprimiendo en consola "Soy un cliente. Nombre: "
seguido del nombre del cliente obtenido a través del método getNombre(). Este
enfoque facilita la reutilización del código al aprovechar la herencia y el polimorfismo,
asegurando una estructura coherente y modular en el sistema.
Clase Prestamo:
Funcionamiento:
El código proporcionado define la clase genérica Prestamo, que permite representar
un préstamo de un libro específico a un cliente particular. Esta clase utiliza dos
parámetros de tipo genérico T y U, donde T representa el tipo del código del libro y U
representa el tipo del nombre del cliente.
El constructor Prestamo(T codigoLibro, U nombreCliente) inicializa una instancia de
Prestamo con un código de libro y el nombre del cliente proporcionados como
parámetros. Los atributos codigoLibro y nombreCliente almacenan estos valores
respectivos.
Los métodos getCodigoLibro() y getNombreCliente() son métodos de acceso (getters)
que permiten obtener el código del libro y el nombre del cliente asociados con el
préstamo.
Esta implementación de una clase genérica Prestamo facilita la flexibilidad y
reutilización del código, ya que puede ser utilizado para representar préstamos de
libros independientemente de los tipos específicos de datos utilizados para el código
del libro y el nombre del cliente.
Clase Biblioteca:
Funcionamiento:
El código proporcionado define la clase Biblioteca, que implementa la interfaz
OperacionesBiblioteca. Esta clase gestiona una colección de libros y lleva
registro de los préstamos realizados a clientes, utilizando estructuras de datos
como listas y mapas para almacenar y organizar la información.
En el constructor privado Biblioteca(), se inicializa la lista de libros con algunos
ejemplos predefinidos, cada uno representado por la clase Libro. Además, se
inicializan las estructuras prestamosPorCliente para rastrear los préstamos
realizados y observadores para gestionar los observadores que reciben
notificaciones sobre eventos en la biblioteca.
El método estático getInstance() implementa el patrón Singleton para asegurar
que solo exista una instancia única de la clase Biblioteca, proporcionando
acceso global a esta instancia.
Las implementaciones de métodos como agregarLibro, eliminarLibro,
prestarLibro, devolverLibro, listarLibrosDisponibles, listarLibrosConClientes y
salirDelSistema permiten operaciones específicas sobre los libros y los
préstamos. Por ejemplo, prestarLibro permite prestar un libro a un cliente
especificado, devolverLibro permite devolver un libro prestado, y los métodos
de listado muestran los libros disponibles y los prestados junto con la
información del cliente.
El método main proporciona un ejemplo de uso del sistema de biblioteca,
donde se realizan acciones como prestar y devolver libros, así como listar los
libros disponibles y aquellos que están prestados junto con los clientes a los
que se han prestado.
En resumen, la clase Biblioteca encapsula la lógica de negocio para gestionar
libros y préstamos, empleando principios de programación orientada a objetos
como encapsulamiento, herencia y polimorfismo, junto con el uso de
colecciones, patrones de diseño como Singleton, y métodos funcionales como
expresiones lambda para operaciones sobre colecciones.
Clase Abstracta Persona:
Funcionamiento:
El código proporcionado define la clase abstracta Persona, que encapsula el concepto
genérico de una persona con un nombre. La clase tiene un constructor para inicializar
el nombre de la persona y un método getNombre() para obtener este nombre.
La clase Persona también declara un método abstracto mostrarIdentidad(), el cual
debe ser implementado por cualquier subclase concreta de Persona. Este método
abstracto permite que cada subclase proporcione una implementación específica para
mostrar la identidad de esa persona, permitiendo polimorfismo y flexibilidad en el
comportamiento según el tipo de persona (por ejemplo, Cliente o Empleado).
Este diseño promueve la reutilización del código al definir comportamientos comunes
en la clase abstracta Persona y obliga a las subclases a proporcionar implementaciones
específicas del método abstracto mostrarIdentidad(), asegurando coherencia en la
forma en que se presenta la identidad de diferentes tipos de personas dentro del
sistema.}
Interfaz Operaciones Bibliotecas:
Funcionamiento:
El código proporcionado define la interfaz OperacionesBiblioteca, que especifica
métodos para operar con una biblioteca. Estos métodos permiten agregar y eliminar
libros, listar libros disponibles y aquellos prestados junto con los clientes asociados, así
como prestar y devolver libros a clientes específicos. Además, la interfaz incluye un
método para salir del sistema de biblioteca.
Cada método tiene un propósito específico: agregarLibro para añadir nuevos libros con
detalles como código, título, autor y ISBN, eliminarLibro para quitar un libro basado en
su código, listarLibrosDisponibles para mostrar los libros que están disponibles para
préstamo, listarLibrosConClientes para mostrar los libros prestados y a qué clientes,
prestarLibro para prestar un libro a un cliente dado, devolverLibro para registrar la
devolución de un libro prestado, y salirDelSistema para cerrar adecuadamente el
sistema de biblioteca.
Esta interfaz define un contrato que cualquier implementación de biblioteca debe
cumplir, facilitando la gestión y operación uniforme de las funcionalidades
bibliotecarias en diferentes contextos de aplicación.
Interfaz Observador:
Funcionamiento:
El código define la interfaz Observador, que especifica un método actualizar con un
parámetro de tipo String llamado mensaje. Esta interfaz se utiliza para implementar el
patrón de diseño Observador, donde objetos interesados (observadores) pueden
registrarse para recibir notificaciones cuando ocurren cambios en el estado de otro
objeto (sujeto).
El método actualizar en la interfaz Observador permite que cada observador reciba
información específica (mensaje) cuando se notifica de un cambio en el sujeto
observado. Esta abstracción permite desacoplar los observadores del sujeto
observado, promoviendo así un diseño flexible y extensible donde diferentes tipos de
observadores pueden actuar según las notificaciones recibidas.
En resumen, la interfaz Observador establece un contrato común que deben
implementar todos los observadores interesados en recibir actualizaciones sobre
cambios específicos en el sujeto observado
Clase Notificador:
Funcionamiento:
El código define la clase Notificador, que implementa la funcionalidad de un sujeto en
el patrón de diseño Observador. Esta clase gestiona una lista de observadores
(observadores) que están interesados en recibir notificaciones cuando se produce un
evento o cambio relevante.
La clase Notificador proporciona métodos para añadir (añadirObservador) y eliminar
(eliminarObservador) observadores de su lista. Estos métodos permiten que los
objetos interesados se registren y se desregistren dinámicamente para recibir
actualizaciones.
El método notificar recorre la lista de observadores y llama al método actualizar de
cada uno, pasándole un mensaje específico. Esta operación permite que todos los
observadores registrados respondan de manera adecuada al evento notificado por el
sujeto (Notificador).
En conjunto, la clase Notificador facilita la comunicación entre el sujeto y sus
observadores, permitiendo una arquitectura flexible y desacoplada donde múltiples
observadores pueden reaccionar de manera independiente a los cambios en el estado
del sujeto.
Clase Main:
Funcionamiento:
El código proporcionado implementa una aplicación de gestión de biblioteca en Java,
diseñada para funcionar a través de una interfaz de consola interactiva. Comienza
instanciando la clase Biblioteca como un singleton y configurando un Scanner para
capturar las entradas del usuario. Se utiliza un patrón observador donde se registra un
observador para manejar las notificaciones de eventos dentro de la biblioteca, como la
adición, eliminación, préstamo y devolución de libros. El bucle principal del programa
presenta un menú con varias opciones que permiten al usuario interactuar con la
biblioteca de manera intuitiva.
Las opciones del menú incluyen agregar un nuevo libro proporcionando detalles como
código, título, autor y ISBN, eliminar un libro basado en su código único, y listar todos
los libros disponibles en la biblioteca. Además, hay funcionalidades para listar los libros
actualmente prestados junto con los nombres de los clientes que los tienen, y para
realizar operaciones de préstamo y devolución asociadas a clientes específicos.
Finalmente, el programa proporciona una opción para salir del sistema, que termina la
ejecución y libera los recursos utilizados, cerrando adecuadamente el Scanner utilizado
para la entrada del usuario.
En resumen, este código demuestra el uso efectivo de clases, interfaces, y patrones
como el singleton y el observador en Java, ofreciendo una solución práctica para la
gestión básica de una biblioteca mediante una interfaz de consola amigable y
funcional.
V) VISTA DE EJECUCIÒN DEL PROGRAMA PRINCIPAL
DIAGRAMA (Faltan actualizar algunas interfaces)
Conclusiones:
Sistema de Biblioteca (Avance 03)
• El código de la biblioteca implementa una serie de conceptos clave de la programación
orientada a objetos y técnicas avanzadas en Java. Utiliza clases abstractas como
Persona, donde se define un método abstracto mostrarIdentidad(), permitiendo que
las clases hijas como Cliente implementen comportamientos específicos. Esto ilustra el
uso de la abstracción para definir comportamientos comunes y obligar a las clases hijas
a implementar métodos específicos, fomentando la coherencia y la estructura del
código.
• El polimorfismo está presente tanto en su forma dinámica como estática. Por ejemplo,
la clase Persona tiene un método abstracto mostrarIdentidad() que es implementado
de manera polimórfica en la clase Cliente. Además, se utiliza polimorfismo estático en
métodos como notificar() en la clase Notificador, donde se invoca un método
actualizar() definido en la interfaz Observador, permitiendo que varios tipos de
observadores puedan manejar notificaciones de manera flexible.
• El uso de interfaces como OperacionesBiblioteca define un conjunto de métodos que
las clases deben implementar, promoviendo un diseño basado en contratos y
permitiendo la implementación de múltiples interfaces por una clase única. Esto
facilita la flexibilidad y el mantenimiento del código al separar la definición de métodos
de su implementación concreta.
• El diagrama de clases para este sistema de biblioteca mostraría una estructura que
incluye clases abstractas como Persona, implementación de interfaces como
OperacionesBiblioteca, relaciones de herencia como la extensión de Cliente desde
Persona, y uso de colecciones como LinkedList, ArrayList, y HashMap para gestionar
libros y préstamos de manera eficiente. Además, el uso de clases genéricas como
Prestamo<T, U> permite reutilizar código de manera flexible y segura, adaptándose
dinámicamente a diferentes tipos de datos.
• El código demuestra también el uso de expresiones lambda en el manejo de
observadores en la clase Notificador, simplificando la implementación de operaciones
sobre colecciones de observadores.
• Finalmente, el uso de patrones GoF como Singleton en la clase Biblioteca asegura que
solo exista una instancia de la biblioteca en el sistema, promoviendo el acceso global y
la gestión centralizada de recursos, mientras que el patrón Observer facilita la
notificación de eventos a múltiples observadores de manera desacoplada,
promoviendo la modularidad y la extensibilidad del sistema. Estos patrones ayudan a
mejorar la estructura y la mantenibilidad del código, proporcionando soluciones
probadas para problemas comunes en el diseño de software orientado a objetos.