1 Orientação a Objetos Uma Introdução ao Paradigma de Orientação a Objetos e ao Projeto...

Preview:

Citation preview

1

Orientação a ObjetosOrientação a ObjetosOrientação a ObjetosOrientaçã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

2

ConceitosConceitos As linguagens de POO podem ser divididas em dois grupos:

Puras - Projetadas especificamente para o paradigma de OO

Smalltalk, Eiffel e Java Híbridas - Extensões de linguagens tradicionais e suportam

tanto o estilo tradicional quanto o OO. (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

3

Objetos e EncapsulamentoObjetos 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:

Sistemas OO – coleção de objetos se comunicando, cooperando para atingir um resultado

Processador virtual

4

Exemplo:

Um ponto em um plano bidimensional que suporte o seguinte

protocolo mensagens: Recuperar a coordenada x Recuperar a coordenada y Retornar um novo ponto

igual a inversão do ponto

(inverter) Comparar (<) dois pontos

(Retorna um booleano) Adicionar (+) dois pontos

(Retorna um outro ponto)

Objetos e EncapsulamentoObjetos e Encapsulamento

Estado

Variáveis de

instância

Operações

Métodos (código)

x

y

inverter

< umPonto+ umPonto

coordenada x

coordenada y

100

225

5

Objetos e EncapsulamentoObjetos 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 objetoImportante para a manutenibilidade e usabilidade

ObjetoUsuári

o Modifica estado

mensagem

ObjetoImplementad

or ModificaUsuári

o

6

Objetos e EncapsulamentoObjetos 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

7

Polimorfismo e Ligação DinâmicaPolimorfismo 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:

8

Polimorfismo e Ligação DinâmicaPolimorfismo 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) ENDEND

Similarmente: para mover ou computar a área

MostrarTriangulo

MostrarRetangulo

MostrarQuadrado

MostrarCirculo

Ligação estática

9

Polimorfismo e Ligação DinâmicaPolimorfismo e Ligação Dinâmica

Em linguagem OO com ligação dinâmicaImplementar um método para cada figura, mas o

mesmo nome pode ser usado para cada uma delasNão é responsabilidade do usuário determinar o

método correto a ser invocadoVantagens: Sobrecarga de nomes Mais adaptável a mudança Uso de código reutilizável genérico

mostrar umaFigura

Despachador de

mensagem

mostrar

Triangulo

Retangulo

Quadrado

Circulo

mostrar

mostrar

mostrar

10

ClassesClasses

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

11

ClassesClasses

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

12

ClassesClasses

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

Conta bancária

Consultar saldo

Retirar

Depositar

Número da contaNome do titular

Saldo

13

ClassesClasses 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

OPERAÇÕESDepósito:quantidadeRetirada:quantidadeSaldo

NúmeroConta 123456NomeTitular ElaineSaldo 777.77NúmeroConta 654321NomeTitular Gertrudes Saldo 100000.00NúmeroConta 162534NomeTitular Geraldo Saldo 100.00

Minha conta

bancária

Conta bancária

da Gertrudes

Conta bancária

do Geraldo

14

ClassesClasses

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

15

Herança e SubclassesHerança e Subclasses Sempre pensamos em objetos como especializações de outros objetos:

Metais preciosos - metais Carros esportivos - carros Livros de romance – livros

Subclasse, superclasse e diagrama de hierarquia de classe

Metal preciosoCarro esportivo

Livro de romance

MetalCarroLivro

Conta Bancária

Conta Corrent

e

Poupança

Aplicação

Polígono

Quadrilátero Triângul

oRetângul

o

Quadrado

16

Herança e SubclassesHerança e Subclasses Relacionamento ‘é-um’ X Relacionamento ‘parte de’

Relacionamentos de subclasse são relacionamentos de classe

Relacionamentos de parte ou componentes são relacionamentos entre objetos

Máquina

Pistão

Ponto

Círculo

17

Herança e SubclassesHerança e SubclassesEspecialização e generalização Exemplo dos polígonos Zebra – cavalo com listrasSubclasse: 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 123456Saldo 10000.00Tempo 5.0

Objeto

Conta Bancári

aConta

Corrente

Aplicação

Poupança

NoConta 654321Saldo 3300.77

NoConta 162435Saldo 23.99

18

Herança e SubclassesHeranç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 é executadoumaContaAplicação consultarTempo método da classe ContaAplicaçãoumaContaCorrente consultarSaldo método herdado da classe

ContaBancáriaumaContaPoupança consultarTempo erro – nenhum método na

superclasseumaContaPoupança imprimir método herdado da classe Objeto

19

Herança e SubclassesHerança e Subclasses

OPERAÇÕES

Imprimir

OPERAÇÕESDepositar: quantidadeRetirar: quantidadeConsultarSaldo

OPERAÇÕES

OPERAÇÕESRetirar: quantidade

OPERAÇÕESDepositar: quantidadeRetirar: quantidadeConsultarTempo

Classe Objeto

Classe Conta Bancária

Classe Conta Corrente

Classe Poupança

Classe Aplicações

20

Herança e SubclassesHeranç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

21

Bibliotecas de ClasseBibliotecas 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

22

Resumo de ConceitosResumo 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.

Recommended