ALUNO: Álvaro Veloso Neto Linguagens Orientadas a Objeto 1 Conceito de Abstração • Conhecer apenas as coisas que são indispensáveis para o uso de algo. 2 Abstração de Processo • • • • • • • • • • • • • • • • • • void ordenaBolha(listaNumeros *lista){ • • • • • int main(){ • Facilidade na construção, leitura e entendimento do programa. int i = 0; int j = 0; int aux; for(; i < lista->tamanho; i++){ for(j = i + 1; j < lista->tamanho; j++){ if(lista->elemento[i] > lista->elemento[j]){ aux = lista->elemento[i]; lista->elemento[i] = lista->elemento[j]; lista->elemento[j] = aux; } } } } ordenaBolha( &listaImpares); ordenaBolha( &listaPares); } 3 Abstração de Dados • class funcionario{ • • • • • • • • • private: int id; • • • • • • • • Tipos de dados já estabelecidos e operações Sobre eles – – • public: float salario; data dataNascimento; Ponto-Flutuante Dados Definidos pelo Usuário Cliente – – – Objeto Interface Mudanças Centralizadas no Módulo char* descricaoAtividade(); } int main(){ funcionario motorista; funcionario medico; • class relatorio{ private: funcionario motorista; funcionario medico; . . . public: string geraRelatorioFuncionarios(); • • motorista.descricaoAtividade(); medico.descricaoAtividade(); } • • } 4 Encapsulamento • Modularização (dados logicamente relacionados) – – Unidade de Compilação Programas Independentes para Reuso 5 Paradigma de Orientação a Objeto • Programação Orientada a Procedimentos • Programação Orientada a Objeto 6 Linguagens O.O • Exemplos – – – – – C++ Eiffel Ada 95 Java Smalltalk 7 Linguagens O.O • Herança – Facilitar o Reuso – Organização – Prejudica o Encapsulamento • Herança Múltipla 8 Linguagens O.O • Dados Abstratos – Dados e métodos sobre esses dados – Classes • • • • • Variáveis da Instancia (objeto) Variáveis da Classe Variáveis Públicas Variáveis Privadas Variáveis Protegidas • class funcionario{ • • • • • • • • • protected: int id; • • • • • • • • • • public: float salario; data dataNascimento; char* descricaoAtividade(); } class estagiario : public funcionario{ private: char* nomeCurso; public: int getId(){ return id; } } 9 Linguagens O.O • • • Polimorfismo – Estático • – Funções Sobrepostas Dinâmico • Definição do tipo de forma dinâmica • • • • • • • • • • • class poligono { public: void desenhar(); } class triangulo : public poligono{ public: void desenhar() { ... }; } class quadrado : public poligono{ public: void desenhar() { ... }; } int main(){ triangulo triang; quadrado quad; triang.desenhar(); poligono polig = quad; polig.desenhar(); • } 10 Linguagens O.O • Dados Abstratos • Encapsulamento • Herança • Polimorfismo • Comunicação Eficiente Entre Objetos 11 C++ • Encapsulamento – Classes • Variáveis e Funções • Função Tipo Constructor e Destructor • Tipos Incorporados 12 C++ • Herança – Herança Múltipla 13 C++ • Polimorfismo – Estático – Dinâmico 14 Padrões de Projeto O.O • Designs comprovadamente eficientes. • Alterações facilitadas. 15 Padrões de Projeto O.O • Acoplamento Fraco e Coesão Forte. – Formas de Acoplamento • • • • Atributos Variável local É subclasse Implementa uma interface. – Benefícios • Classes não são afetadas por mudanças em outras classes. • São fáceis de compreender isoladamente. • A migração fica facilitada. 16 Padrões de Projeto O.O • GoF. – Membros • • • • Erich Gamma Richard Helm Ralph Johnson John Vlissides – Livro • Padrões de Projeto – Soluções Reutilizáveis de Software O.O 17 Padrões de Projeto O.O • Strategy – Definição • “Definir uma família de algoritmos, encapsular cada um, e torná-los intercambiáveis. Strategy permite mudar os algoritmos independentemente dos clientes que os usam.” GoF – Resumindo • Ter uma interface padrão para diversas estratégias. 18 Padrões de Projeto O.O • Strategy 19 REFERÊNCIAS • Conceitos de Linguagens de Programação (Robert W. Sebesta) • Use a Cabeça! Padrões de Projetos (Eric Freeman, Elisabeth Freeman) • Wikipedia – Paradigma de programação – Programação procedural – Orientação a objetos 20