Prévia do material em texto
Claro! Vamos criar um exemplo de programação orientada a objetos (POO) em C++. Vou demonstrar como podemos usar classes, encapsulamento, herança, polimorfismo e outros conceitos importantes da POO neste contexto. ### Exemplo de Programação Orientada a Objetos em C++ ```cpp #include <iostream> #include <string> #include <vector> using namespace std; // Classe base para representar um Livro na biblioteca class Livro { protected: string titulo; string autor; string isbn; bool emprestado; public: Livro(string titulo, string autor, string isbn) : titulo(titulo), autor(autor), isbn(isbn), emprestado(false) {} void emprestar() { if (!emprestado) { emprestado = true; cout << "O livro \"" << titulo << "\" foi emprestado." << endl; } else { cout << "O livro \"" << titulo << "\" já está emprestado." << endl; } } void devolver() { if (emprestado) { emprestado = false; cout << "O livro \"" << titulo << "\" foi devolvido com sucesso." << endl; } else { cout << "O livro \"" << titulo << "\" já está disponível na biblioteca." << endl; } } virtual void detalhes() { cout << "Livro: " << titulo << " por " << autor << endl; } }; // Subclasse de Livro para livros didáticos class LivroDidatico : public Livro { private: string disciplina; public: LivroDidatico(string titulo, string autor, string isbn, string disciplina) : Livro(titulo, autor, isbn), disciplina(disciplina) {} void detalhes() override { cout << "Livro: " << titulo << " por " << autor << " (Disciplina: " << disciplina << ")" << endl; } }; // Classe para representar um usuário da biblioteca class Usuario { private: string nome; int idade; public: Usuario(string nome, int idade) : nome(nome), idade(idade) {} string getNome() const { return nome; } }; // Classe principal que gerencia a biblioteca class Biblioteca { private: string nome; vector<Livro*> catalogo; public: Biblioteca(string nome) : nome(nome) {} void adicionarLivro(Livro* livro) { catalogo.push_back(livro); cout << "O livro \"" << livro->getTitulo() << "\" foi adicionado ao catálogo." << endl; } void listarLivros() { cout << "Catálogo da Biblioteca " << nome << ":" << endl; for (Livro* livro : catalogo) { livro->detalhes(); } } Livro* buscarLivroPorTitulo(string titulo) { for (Livro* livro : catalogo) { if (livro->getTitulo() == titulo) { return livro; } } return nullptr; } void emprestarLivro(string titulo, Usuario* usuario) { Livro* livro = buscarLivroPorTitulo(titulo); if (livro) { livro->emprestar(); cout << "O livro foi emprestado para " << usuario->getNome() << "." << endl; } else { cout << "O livro \"" << titulo << "\" não está disponível na biblioteca." << endl; } } void devolverLivro(string titulo) { Livro* livro = buscarLivroPorTitulo(titulo); if (livro) { livro->devolver(); } else { cout << "O livro \"" << titulo << "\" não está registrado na biblioteca." << endl; } } }; // Função principal para testar o sistema int main() { // Criando alguns objetos para demonstração Livro livro1("Dom Quixote", "Miguel de Cervantes", "9780199537891"); Livro livro2("Python Cookbook", "David Beazley", "9781449340377"); LivroDidatico livro3("Introduction to Algorithms", "Thomas H. Cormen", "9780262033848", "Algorithms"); Usuario usuario1("Alice", 25); Usuario usuario2("Bob", 30); // Criando uma biblioteca Biblioteca biblioteca("Biblioteca Central"); // Adicionando livros ao catálogo da biblioteca biblioteca.adicionarLivro(&livro1); biblioteca.adicionarLivro(&livro2); biblioteca.adicionarLivro(&livro3); // Listando todos os livros no catálogo da biblioteca biblioteca.listarLivros(); // Alice empresta um livro biblioteca.emprestarLivro("Dom Quixote", &usuario1); // Bob tenta emprestar o mesmo livro biblioteca.emprestarLivro("Dom Quixote", &usuario2); // Alice devolve o livro biblioteca.devolverLivro("Dom Quixote"); // Listando livros novamente biblioteca.listarLivros(); return 0; } ``` ### Explicação do Código 1. **Classes e Objetos:** - `Livro`, `LivroDidatico`, `Usuario`, `Biblioteca` são classes que representam entidades do sistema. 2. **Herança:** - `LivroDidatico` herda publicamente de `Livro`, permitindo a extensão das funcionalidades básicas de livro. 3. **Encapsulamento:** - Atributos como `titulo`, `autor`, `isbn`, `emprestado`, `nome`, `idade` são encapsulados dentro das classes correspondentes, garantindo controle sobre o acesso aos dados. 4. **Polimorfismo:** - O método `detalhes()` é sobrescrito em `Livro` e `LivroDidatico` para retornar representações diferentes dos objetos. 5. **Operações do Sistema:** - Métodos como `adicionarLivro()`, `listarLivros()`, `emprestarLivro()`, `devolverLivro()` demonstram operações típicas de um sistema de biblioteca, aplicando os conceitos de POO de forma prática. ### Conclusão Este exemplo em C++ ilustra como a programação orientada a objetos pode ser aplicada para criar sistemas complexos e organizados, como um sistema de gerenciamento de biblioteca. A POO em C++ oferece vantagens como reutilização de código, encapsulamento de dados, hierarquias de classes e polimorfismo, que tornam o desenvolvimento e manutenção de software mais eficiente e escalável. Integrar esses princípios em projetos de TI pode melhorar a estrutura, segurança e eficiência dos sistemas, adequando-se às demandas crescentes e complexas do mundo moderno.