Prévia do material em texto
Claro! Vamos explorar um exemplo de programação orientada a objetos (POO) utilizando Python, uma linguagem popular e versátil para demonstrar os conceitos fundamentais. Vamos criar um sistema simples de gerenciamento de uma biblioteca, onde teremos classes para livros, usuários e bibliotecários, com métodos para adicionar livros, emprestar livros, consultar disponibilidade, calcular multa, entre outros.
### Exemplo de Programação Orientada a Objetos em Python
```python
# Definição das classes
class Livro:
def __init__(self, titulo, autor, isbn, num_paginas):
self.titulo = titulo
self.autor = autor
self.isbn = isbn
self.num_paginas = num_paginas
self.emprestado = False
def emprestar(self):
if not self.emprestado:
self.emprestado = True
print(f'O livro "{self.titulo}" foi emprestado.')
else:
print(f'O livro "{self.titulo}" já está emprestado.')
def devolver(self):
if self.emprestado:
self.emprestado = False
print(f'O livro "{self.titulo}" foi devolvido.')
else:
print(f'O livro "{self.titulo}" já está disponível.')
class Usuario:
def __init__(self, nome, idade, endereco):
self.nome = nome
self.idade = idade
self.endereco = endereco
self.livros_emprestados = []
def emprestar_livro(self, livro):
if len(self.livros_emprestados) < 3:
livro.emprestar()
self.livros_emprestados.append(livro)
else:
print(f'{self.nome}, você 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'{self.nome}, você não possui o livro "{livro.titulo}" emprestado.')
class Bibliotecario:
def __init__(self, nome, idade, endereco):
self.nome = nome
self.idade = idade
self.endereco = endereco
def consultar_disponibilidade(self, livro):
if not livro.emprestado:
print(f'O livro "{livro.titulo}" está disponível para empréstimo.')
else:
print(f'O livro "{livro.titulo}" não está disponível.')
def calcular_multa(self, usuario):
num_livros_atrasados = sum(1 for livro in usuario.livros_emprestados if livro.emprestado)
multa = num_livros_atrasados * 5 # Supondo uma multa de R$ 5 por livro atrasado
print(f'{usuario.nome}, sua multa total é de R$ {multa:.2f}.')
# Criando instâncias das classes
livro1 = Livro("Python Programming", "John Doe", "978-3-16-148410-0", 300)
livro2 = Livro("Machine Learning", "Jane Smith", "978-1-23-456789-0", 250)
usuario1 = Usuario("Alice", 25, "Rua das Flores, 123")
usuario2 = Usuario("Bob", 30, "Av. Principal, 456")
bibliotecario1 = Bibliotecario("Carol", 35, "Praça Central, 789")
# Exemplo de interação do sistema
usuario1.emprestar_livro(livro1)
usuario1.emprestar_livro(livro2)
usuario2.emprestar_livro(livro1)
bibliotecario1.consultar_disponibilidade(livro1)
bibliotecario1.consultar_disponibilidade(livro2)
usuario1.devolver_livro(livro1)
usuario1.devolver_livro(livro2)
bibliotecario1.calcular_multa(usuario1)
```
### Explicação do Exemplo
1. **Classes Definidas:**
- `Livro`: Representa um livro com atributos como título, autor, ISBN e número de páginas. Métodos permitem emprestar e devolver o livro.
- `Usuario`: Representa um usuário da biblioteca com métodos para emprestar e devolver livros.
- `Bibliotecario`: Representa um bibliotecário com métodos para consultar a disponibilidade de um livro e calcular a multa de um usuário.
2. **Instâncias Criadas:**
- Criamos instâncias de `Livro`, `Usuario` e `Bibliotecario` para simular interações dentro do sistema.
3. **Interatividade do Sistema:**
- Os usuários podem emprestar e devolver livros, enquanto o bibliotecário pode consultar a disponibilidade de livros e calcular multas.
### Conclusão
Este exemplo ilustra como a POO pode ser aplicada para modelar e simular sistemas complexos de forma organizada e eficiente. Cada classe representa entidades do mundo real com suas próprias características e comportamentos, facilitando a criação de sistemas que são fáceis de entender, modificar e expandir. A programação orientada a objetos é essencial na construção de aplicativos robustos e escaláveis na tecnologia da informação, promovendo uma melhor estruturação e reutilização de código.