Orientação a Objetos Uma Introdução ao Paradigma de Orientação a Objetos e ao Projeto Orientado a Objetos Elaine Harada Teixeira de Oliveira – DCC – ICE - UFAM 1 Conceitos As linguagens de POO podem ser divididas em dois grupos: Puras - Projetadas especificamente para o paradigma de OO Híbridas - Extensões de linguagens tradicionais e suportam tanto o estilo tradicional quanto o OO. Smalltalk, Eiffel e Java (C++, Objective-C, CLOS e dialetos OO de Pascal) Alguns conceitos: Objetos e encapsulamento Polimorfismo e ligação dinâmica Classes Herança e subclasses Bibliotecas de classe 2 Objetos e Encapsulamento Linguagens tradicionais: dados e procedimentos são consideradas entidades separadas Linguagens OO: entidade única e indivisível – objeto Objeto encapsula os dados e os procedimentos (métodos) Dados só podem ser modificados pelos métodos que são parte do objeto Chamar um método – passar uma mensagem Programa: Processado r virtual Sistemas OO – coleção de objetos se comunicando, cooperando 3 para atingir um resultado Objetos e Encapsulamento Exemplo: Um ponto em um plano bidimensional que suporte o seguinte protocolo mensagens: Operações Estado Recuperar a coordenada x coordenada x x Recuperar a coordenada y 100 y Retornar um novo ponto inverter igual a inversão do ponto < umPonto (inverter) coordenada y Comparar (<) dois pontos + umPonto 225 (Retorna um booleano) Variáveis de Métodos instância Adicionar (+) dois pontos (código) (Retorna um outro ponto) 4 Objetos e Encapsulamento Encapsulamento – usuários de um objeto não precisam (ou não deveriam) acessar a representação ou a implementação de operações. Duas visões de objetos: uma para usuários potenciais do objeto e outra para os implementadores do objeto Importante para a manutenibilidade e usabilidade Usuário Modifica estado Objeto mensagem Implementador Modifica Objeto Usuário 5 Objetos e Encapsulamento No exemplo: Polar (raio, ângulo) ao invés de cartesiano (x, y) Implementação de recuperar a coordenada x iria mudar, mas não afetaria os usuários. Mensagem para recuperar a informação. Terminologia: Método: Um sinônimo para procedimento ou função. Invocado quando uma mensagem é recebida por um objeto. Protocolo: O conjunto de mensagens para as quais o objeto responde 6 Polimorfismo e Ligação Dinâmica Uma das características mais importantes a interpretação da mensagem está nas mãos do receptor Polimorfismo: a mesma mensagem pode ser interpretada de diferentes maneiras por diferentes usuários Mensagens podem ser vistas como chamadas de procedimento de ligação tardia Ligação dinâmica: processo de atrasar a determinação do método real a ser invocado até a hora da execução Exemplo: Polimorfismo e ligação dinâmica Ligação dinâmica X Ligação estática Aplicação com figuras geométricas: 7 Polimorfismo e Ligação Dinâmica Em linguagem estruturada: Abstração da figura em uma definição de tipo: registro variante ou estrutura com um campo que discrimina entre os diferentes tipos de figuras PROCEDURE Display (umaFigura: Figura); BEGIN CASE umaFigura.figuraTipo OF Triangulo: MostrarTriangulo (umaFigura.Triangulo) Retangulo: MostrarRetangulo (umaFigura.Retangulo) Quadrado: MostrarQuadrado (umaFigura.Quadrado) Circulo: MostrarCirculo (umaFigura.Circulo) END END Ligação estática Similarmente: para mover ou computar a área MostrarTriangulo MostrarRetangulo MostrarQuadrado MostrarCirculo 8 Polimorfismo e Ligação Dinâmica Em linguagem OO com ligação dinâmica Implementar um método para cada figura, mas o mesmo nome pode ser usado para cada uma delas Não é responsabilidade do usuário determinar o método correto a ser invocado Triangulo Vantagens: mostrar Sobrecarga de nomes Retangulo Mais adaptável a mudança mostrar Uso de código reutilizável genérico Quadrado mostrar mostrar umaFigura Despachador de mensagem Circulo mostrar 9 Classes Sistemas do mundo real dependem de nossa habilidade de classificar e categorizar Elefantes, tigres, ursos, cavalos e vacas são mamíferos Prata, chumbo e platina são metais Poupança, conta corrente e aplicações são tipos de contas bancárias Características comuns Todos os mamíferos são vertebrados, têm sangue quente e têm pêlo em seu corpo Todos os metais têm peso atômico Todas as contas bancárias têm saldo 10 Classes Em POO, classe é a abstração que capta os atributos e operações comuns a um conjunto de objetos Classe é a descrição de um conjunto de objetos com características, atributos e comportamentos semelhantes Uma classe descreve a representação e o protocolo de mensagem seguido por cada um dos membros (instâncias) da classe Instância é um objeto individual que é tanto descrito por uma classe particular como é um membro dela 11 Classes A representação do objeto pode ser pensada como um registro em Pascal ou uma estrutura em C – uma coleção de componentes heterogêneos Os campos de um objeto são referidos como variáveis de instância (número da conta, nome do titular e saldo) Variável de instância: dado que é uma parte componente ou campo de um objeto Consultar saldo Conta bancária Retirar Depositar Número da conta Nome do titular Saldo 12 Classes Classe: Um repositório para métodos (operações) entendidos por todas as instâncias (objetos) pertencentes àquela classe – um mecanismo de compartilhamento de código Instância: um repositório para dados que descreve o estado de um membro de uma classe NúmeroConta NomeTitular Saldo OPERAÇÕES Depósito:quantidade Retirada:quantidade Saldo 123456 Elaine 777.77 Minha conta bancária NúmeroConta 654321 NomeTitular Gertrudes Saldo 100000.00 Conta bancária da Gertrudes NúmeroConta NomeTitular Saldo Conta bancária do Geraldo 162534 Geraldo 100.00 13 Classes Esboço da classe ContaBancária Declaração do nome da classe Declaração de variáveis (NúmeroConta, NomeTitular e Saldo) Métodos (AbrirConta, Retirar, Depositar e ConsultarSaldo), com os argumentos necessários Criar nova instância da classe ContaBancária Mensagem para o método AbrirConta da classe ContaBancária Em muitas linguagens: new Parâmetros: número da conta, nome do titular e saldo de abertura 14 Herança e Subclasses Sempre pensamos em objetos como especializações de outros objetos: Metais preciosos - metais Metal precioso Carros esportivos - carros Carro esportivo Livro de romance Livros de romance – livros Subclasse, superclasse e diagrama de hierarquia de classe Polígono Conta Bancária Conta Corrente Poupança Quadrilátero Aplicação Metal Carro Livro Triângulo Retângulo Quadrado 15 Herança e Subclasses Relacionamento ‘é-um’ X Relacionamento ‘parte de’ Máquina Ponto Pistão Círculo Relacionamentos de subclasse são relacionamentos de classe Relacionamentos de parte ou componentes são relacionamentos entre objetos 16 Herança e Subclasses Especialização e generalização Exemplo dos polígonos Zebra – cavalo com listras Subclasse: uma classe que herda métodos e representação de uma classe existente Superclasse: uma classe da qual uma outra classe herda representação e métodos NoConta Saldo Tempo 123456 10000.00 5.0 NoConta Saldo 654321 3300.77 NoConta Saldo 162435 23.99 Objeto Conta Bancária Conta Corrente Poupança Aplicação 17 Herança e Subclasses Aplicação – tempo (variável de instância adicional) Subclasses podem adicionar novas variáveis de instância, mas não podem remover Subclasses podem sobrepor a herança de um método de uma superclasse Métodos de implementação idêntica nas subclasses podem ser implementados uma única vez na superclasse Mensagem enviada Qual método é executado umaContaAplicação consultarTempo método da classe ContaAplicação umaContaCorrente consultarSaldo método herdado da classe ContaBancária umaContaPoupança consultarTempo umaContaPoupança imprimir erro – nenhum método na superclasse método herdado da classe Objeto 18 Herança e Subclasses Classe Objeto OPERAÇÕES Imprimir Classe Conta Bancária OPERAÇÕES Depositar: quantidade Retirar: quantidade ConsultarSaldo Classe Conta Corrente OPERAÇÕES Classe Aplicações Classe Poupança OPERAÇÕES Retirar: quantidade OPERAÇÕES Depositar: quantidade Retirar: quantidade ConsultarTempo 19 Herança e Subclasses Uma nova classe pode diferenciar-se de sua superclasse: Suportando operações adicionais diferentes das herdadas Suportando novas implementações de operações que poderiam ser herdadas Sobrepondo as operações existentes suportadas pela superclasse mas inapropriada para a nova classe adicionando uma operação que sinaliza um erro Acrescentando dados adicionais 20 Bibliotecas de Classe Bibliotecas tradicionais são estáticas. Não permitem sobreposição ou extensão de uma rotina Bibliotecas OO permitem customização e extensão através de subclasses Classes Base: Objeto, Booleano, Caracter, Inteiro, Real, Fracionário, Data, Hora, etc. Classes de Coleção: Dicionário, Vetor, String, Símbolo, Conjunto, ColeçãoOrdenada, ColeçãoSorteada, etc. Classes Gráficas: Ponto, Retângulo, Bitmap, etc. (Classes que fornecem acesso às rotinas gráficas) Classes de Interface com o Usuário: Classes que suportam janelas, caixas de diálogo, botões, menus, etc Linguagens OO encorajam a produção de bibliotecas de classe reusáveis 21 Resumo de Conceitos POO pode ser caracterizada como: Programação com objetos: Objetos têm estado e pode responder questões sobre eles mesmos. Objeto são tipos de dados. Eles encapsulam o estado ou representação de um objeto junto com as operações naquele estado e suportam o princípio de ocultamento de informação. Passagem de mensagem: Métodos definem como o objeto irá responder a uma dada mensagem. Programação usando polimorfismo: Mensagens podem ser interpretadas de diferentes modos por diferentes receptores. Programação usando herança: Compartilhamento de código é atingido através de herança de representação e métodos de uma classe de objeto para outra. Novas classes são definidas como especializações de classes existentes. 22