Este projeto é um sistema de biblioteca implementado em Python que utiliza diversos padrões de design para facilitar a busca, empréstimo e devolução de livros, além de gerenciar categorias de livros, usuários, e notificações.
A estrutura do projeto está organizada em pastas conforme abaixo:
librarySystem/
│
├── adapters/
│ ├── catalog_adapter_interface.py
│ ├── external_catalog_adapter_1.py
│ ├── external_catalog_adapter_2.py
│ └── composite_catalog_adapter.py
│
├── core/
│ ├── library_mediator.py
│ ├── library_facade.py
│ ├── book_category.py
│ ├── book.py
│ ├── observer.py
│ ├── user.py
│ ├── loan.py
│ ├── loan_manager.py
│ ├── configuration_manager.py
│ └── book_availability_notifier.py
│
├── handlers/
│ ├── handler.py
│ ├── book_availability_handler.py
│ └── user_eligibility_handler.py
│ └── loan_limit_handler.py
│
└── main.py
# | Nome da Classe | Resumo do que a Classe Faz |
---|---|---|
1 | CatalogAdapterInterface | Interface abstrata para busca de livros em catálogos externos |
2 | ExternalCatalogAdapter1 | Adapter para buscar livros em um catálogo externo específico |
3 | ExternalCatalogAdapter2 | Adapter para buscar livros em outro catálogo externo específico |
4 | CompositeCatalogAdapter | Combina resultados de múltiplos adapters de catálogos externos |
5 | LibraryMediator | Coordena interações de busca, empréstimo e devolução de livros |
6 | LibraryFacade | Fornece uma interface simplificada para operações de biblioteca |
7 | BookCategory | Gerencia categorias de livros de forma hierárquica |
8 | Book | Representa um livro, com atributos como título, autor e disponibilidade |
9 | Observer | Interface abstrata para o padrão Observer |
10 | User | Usuário da biblioteca que recebe notificações (Observer) |
11 | StudentUser | Subclasse de User representando um estudante |
12 | TeacherUser | Subclasse de User representando um professor |
13 | EmployeeUser | Subclasse de User representando um funcionário |
14 | Loan | Representa um empréstimo de livro |
15 | LoanManager | Gerencia empréstimos e devoluções de livros |
16 | ConfigurationManager | Gerencia configurações globais do sistema |
17 | BookAvailabilityNotifier | Notifica usuários sobre mudanças no status dos livros |
18 | Handler | Classe base abstrata para implementar a cadeia de responsabilidade |
19 | BookAvailabilityHandler | Verifica se o livro está disponível para empréstimo |
20 | UserEligibilityHandler | Verifica se o usuário é elegível para realizar empréstimos |
21 | LoanLimitHandler | Verifica se o usuário não ultrapassou seu limite de empréstimos |
22 | main | Configura o sistema de biblioteca e realiza operações de exemplo |
Certifique-se de ter o Python 3.x instalado em sua máquina.
Clone o repositório para sua máquina local:
git clone https://github.com/Leonardo-Costa/library-oop.git
cd library-oop
Para começar a usar o sistema de biblioteca, execute o script main.py:
python main.py
O library_cli.py fornece uma interface de linha de comando interativa para interagir com o sistema de biblioteca. Você pode executar o CLI com o seguinte comando:
python library_cli.py
O sistema de biblioteca oferece as seguintes funcionalidades principais:
- Buscar Livros: Pesquisa livros disponíveis no sistema por título, autor ou categoria.
- Emprestar Livros: Permite que usuários qualificados emprestem livros disponíveis.
- Devolver Livros: Permite que usuários devolvam livros que emprestaram.
- Consultar Histórico de Empréstimos: Consulta o histórico de empréstimos de um usuário específico.
- Atualizar Limites de Empréstimos: Define novos limites de empréstimos para diferentes papéis de usuários.
- Adicionar Livros: Adiciona novos livros ao catálogo da biblioteca.
- Limpar Tela: Limpa a tela do terminal para uma melhor visualização.
- Sair do CLI: Encerra a sessão do CLI.
(biblioteca) search_by_title Python Programming
Livros encontrados com o título 'Python Programming':
Book ID: 1, Title: Python Programming, Author: John Doe, Category: Programming
(biblioteca) borrow_book 1 1
Empréstimo realizado com sucesso!
(biblioteca) get_user_loan_history 1
Histórico de empréstimos do usuário 1:
Livro: Python Programming, Ação: Emprestado
(biblioteca) set_loan_limit Student 5
Novo limite de empréstimos para estudantes: 5
(biblioteca) add_book 6 "Advanced Java" "James Gosling" "Programming"
Livro 'Advanced Java' adicionado com sucesso.
(biblioteca) return_book 1 1
Devolução realizada com sucesso!
(biblioteca) clear
classDiagram
class CatalogAdapterInterface {
+search_books(title, author, category)
}
class ExternalCatalogAdapter1 {
+search_books(title, author, category)
}
class ExternalCatalogAdapter2 {
+search_books(title, author, category)
}
class CompositeCatalogAdapter {
-adapters
+search_books(title, author, category)
}
class LibraryMediator {
-catalog_adapter
-loan_manager
+search_books(title, author, category)
+borrow_book(book, user)
+return_book(book, user)
}
class LibraryFacade {
-mediator
-books
-users
-notifier
+add_book(book)
+add_user(user)
+search_books(title, author, category)
+borrow_book(book_id, user_id)
+return_book(book_id, user_id)
+get_user_loan_history(user_id)
}
class BookCategory {
-name
-subcategories
+add_subcategory(subcategory)
+get_all_subcategories()
}
class Book {
-book_id
-title
-author
-category
-is_available
}
class Observer {
+update(message)
}
class User {
-user_id
-name
-user_type
-loan_history
-borrowed_books
+update(message)
+add_to_history(book, action)
+get_loan_history()
+get_borrowed_books()
+borrow_book(book)
+return_book(book)
}
class StudentUser {
}
class TeacherUser {
}
class EmployeeUser {
}
class Loan {
-book
-user
}
class LoanManager {
-loans
-chain
+borrow_book(book, user)
+return_book(book, user)
}
class ConfigurationManager {
-_configurations
+get_configuration(key)
+set_configuration(key, value)
}
class BookAvailabilityNotifier {
-observers
+register_observer(observer)
+unregister_observer(observer)
+notify_observers(message)
}
class Handler {
+handle(*args, **kwargs)
}
class BookAvailabilityHandler {
+handle(book, user)
}
class UserEligibilityHandler {
+handle(book, user)
}
class LoanLimitHandler {
+handle(book, user)
}
CatalogAdapterInterface <|-- ExternalCatalogAdapter1
CatalogAdapterInterface <|-- ExternalCatalogAdapter2
CatalogAdapterInterface <|-- CompositeCatalogAdapter
CompositeCatalogAdapter o-- CatalogAdapterInterface
LibraryMediator o-- CompositeCatalogAdapter
LibraryMediator o-- LoanManager
LibraryFacade o-- LibraryMediator
LibraryFacade o-- BookAvailabilityNotifier
User <|-- StudentUser
User <|-- TeacherUser
User <|-- EmployeeUser
LoanManager o-- Loan
LoanManager o-- Handler
Handler <|-- BookAvailabilityHandler
Handler <|-- UserEligibilityHandler
Handler <|-- LoanLimitHandler
Loan o-- Book
Loan o-- User
Book o-- BookCategory
BookAvailabilityNotifier o-- Observer
User o-- Observer
ConfigurationManager "1" -- "*" LoanLimitHandler : singleton instance
Leonardo Loureiro Costa - leonardo.costa@unifesp.br Rafael Yan da Silva - rafael.yan@unifesp.br
Link do Projeto: https://github.com/Leonardo-Costa/library-oop