Prévia do material em texto
Para demonstrar um exemplo prático de programação orientada a objetos (POO), vamos criar um sistema simples de gerenciamento de uma biblioteca. Neste sistema, teremos classes que representam diferentes entidades, como livros, usuários e bibliotecários, e métodos para realizar operações básicas como adicionar livros, emprestar livros e consultar disponibilidade.
### Exemplo de Programação Orientada a Objetos: Sistema de Biblioteca
#### Classes e Estrutura do Sistema
1. **Classe `Livro`:**
- Esta classe representa um livro na biblioteca e contém atributos como título, autor, ano de publicação e status de disponibilidade (emprestado ou não).
```python
class Livro:
def __init__(self, titulo, autor, ano_publicacao):
self.titulo = titulo
self.autor = autor
self.ano_publicacao = ano_publicacao
self.disponivel = True # Inicialmente disponível
def emprestar(self):
if self.disponivel:
self.disponivel = False
print(f"O livro '{self.titulo}' foi emprestado.")
else:
print(f"O livro '{self.titulo}' não está disponível no momento.")
def devolver(self):
if not self.disponivel:
self.disponivel = True
print(f"O livro '{self.titulo}' foi devolvido.")
else:
print(f"O livro '{self.titulo}' já está disponível.")
```
2. **Classe `Usuario`:**
- Representa um usuário da biblioteca, com atributos como nome, número de identificação e lista de livros emprestados.
```python
class Usuario:
def __init__(self, nome, id):
self.nome = nome
self.id = id
self.livros_emprestados = []
def emprestar_livro(self, livro):
if len(self.livros_emprestados) < 3:
livro.emprestar()
self.livros_emprestados.append(livro)
else:
print(f"Usuário {self.nome} atingiu o limite máximo de livros emprestados.")
def devolver_livro(self, livro):
if livro in self.livros_emprestados:
livro.devolver()
self.livros_emprestados.remove(livro)
else:
print(f"O livro '{livro.titulo}' não foi emprestado por {self.nome}.")
```
3. **Classe `Bibliotecario`:**
- Representa um bibliotecário, com métodos para adicionar novos livros ao sistema e consultar informações.
```python
class Bibliotecario:
def adicionar_livro(self, biblioteca, livro):
biblioteca.acervo.append(livro)
print(f"O livro '{livro.titulo}' foi adicionado ao acervo.")
def consultar_disponibilidade(self, biblioteca, titulo):
for livro in biblioteca.acervo:
if livro.titulo == titulo:
status = "disponível" if livro.disponivel else "não disponível"
print(f"O livro '{livro.titulo}' está {status}.")
return
print(f"O livro '{titulo}' não está disponível na biblioteca.")
```
4. **Classe `Biblioteca`:**
- Representa a própria biblioteca, contendo um acervo de livros e métodos para gerenciar o acervo.
```python
class Biblioteca:
def __init__(self, nome):
self.nome = nome
self.acervo = []
def listar_livros(self):
print(f"Lista de livros na biblioteca '{self.nome}':")
for livro in self.acervo:
status = "disponível" if livro.disponivel else "emprestado"
print(f"- '{livro.titulo}' de {livro.autor} ({status})")
```
#### Utilização do Sistema
Agora, vamos exemplificar como utilizar este sistema:
```python
# Criando uma biblioteca
biblioteca = Biblioteca("Biblioteca Central")
# Criando alguns livros
livro1 = Livro("Python Cookbook", "David Beazley", 2013)
livro2 = Livro("Clean Code", "Robert C. Martin", 2008)
# Criando usuários
usuario1 = Usuario("João", 101)
usuario2 = Usuario("Maria", 202)
# Criando um bibliotecário
bibliotecario = Bibliotecario()
# Adicionando livros à biblioteca
bibliotecario.adicionar_livro(biblioteca, livro1)
bibliotecario.adicionar_livro(biblioteca, livro2)
# Listando os livros disponíveis na biblioteca
biblioteca.listar_livros()
# Usuário João empresta um livro
usuario1.emprestar_livro(livro1)
# Verificando a disponibilidade do livro "Clean Code"
bibliotecario.consultar_disponibilidade(biblioteca, "Clean Code")
# Usuário Maria tenta emprestar um livro
usuario2.emprestar_livro(livro1)
# Usuário João devolve o livro emprestado
usuario1.devolver_livro(livro1)
# Verificando novamente a disponibilidade do livro "Python Cookbook"
bibliotecario.consultar_disponibilidade(biblioteca, "Python Cookbook")
```
### Conclusão
A programação orientada a objetos oferece uma maneira eficiente e estruturada de modelar e implementar sistemas complexos como um sistema de biblioteca. Ao utilizar classes, objetos, encapsulamento, herança e polimorfismo, podemos criar código mais organizado, reutilizável e fácil de manter. Este exemplo demonstra como os princípios da POO podem ser aplicados na prática para resolver problemas do mundo real na tecnologia da informação.