introdução à orientação a objetos. o paradigma da orientação a objetos um paradigma é uma...
TRANSCRIPT
![Page 1: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/1.jpg)
Introdução à Orientação a Objetos
![Page 2: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/2.jpg)
O paradigma da Orientação a Objetos
Um paradigma é uma forma de abordar um problema.
O paradigma da orientação a objetos surgiu no fim dos anos 60.
Hoje em dia, praticamente suplantou o paradigma anterior, o paradigma estruturado...
![Page 3: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/3.jpg)
O paradigma da Orientação a Objetos
Alan Kay, um dos pais do paradigma da orientação a objetos, formulou a chamada analogia biológica.
“Como seria um sistema de software que funcionasse como um ser vivo?
![Page 4: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/4.jpg)
Analogia Biológica Cada “célula” interagiria com outras células através do
envio de mensagens para realizar um objetivo comum.
Adicionalmente, cada célula se comportaria como uma unidade autônoma.
![Page 5: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/5.jpg)
Analogia Biológica De uma forma mais geral, Kay pensou em como construir
um sistema de software a partir de agentes autônomos que interagem entre si.
Com isso, ele estabeleceu os princípios da orientação a objetos.
![Page 6: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/6.jpg)
Orientação a Objetos - Princípios Tudo é um objeto.
Pense em um objeto como uma super variável: ele armazena dados, mas você também pode fazer requisições a esse objeto, pedindo que ele faça operações sobre si próprio. Em teoria, você pode representar qualquer elemento conceitual no problema que você está tentando resolver (cachorros, livros, sócios, empréstimos, etc.) como um objeto no seu programa.
![Page 7: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/7.jpg)
Orientação a Objetos - Princípios Um programa é uma coleção de objetos dizendo uns
aos outros o que fazer.Para fazer uma requisição a um objeto você “manda uma mensagem” para este objeto. Mais concretamente, você pode pensar em uma mensagem como sendo uma chamada de um procedimento ou função pertencente a um objeto em particular.
![Page 8: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/8.jpg)
Orientação a Objetos - Princípios Um objeto pode ser composto por vários outros
objetosEm outras palavras: você pode criar um novo tipo de objeto empacotando objetos existentes. Dessa forma, você pode adicionar complexidade a um programa e escondê-la por trás da simplicidade de uso dos objetos.
![Page 9: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/9.jpg)
Orientação a Objetos - Princípios Todo objeto tem um tipo.
Usando as palavras certas, cada objeto é uma instância de uma classe, onde classe é um sinônimo de tipo. A questão mais importante relativa a uma classe é “que mensagens eu posso enviar para uma instância dessa classe?”
![Page 10: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/10.jpg)
Orientação a Objetos - Princípios Todos os objetos de um dado tipo podem receber as
mesmas mensagens.Além disso, uma vez que, por exemplo, um objeto do tipo “círculo” é também um objeto do tipo “forma geométrica”, o objeto “círculo” aceita qualquer mensagem endereçada a uma “forma geométrica”. Essa capacidade de “subtituição” de um objeto por outro é um dos mais poderosos conceitos em orientação a objetos.
![Page 11: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/11.jpg)
Objeto
• Definição:• Um conceito, uma abstração com significado específico em um
contexto
• Propósito:• Entidade de software que reflete de alguma forma o mundo real• Representar uma entidade do mundo real
• Objetos possuem:• Identidade• Conjunto de características que determinam seu estado• Comportamento específico definido por um conjunto de ações
![Page 12: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/12.jpg)
Abstração
Uma abstração é qualquer modelo que inclui os aspectos relevantes de alguma coisa, ao mesmo tempo em que ignora os menos importantes.
![Page 13: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/13.jpg)
Exemplos
Beija-Flor
Identidade: ‘o beija-flor que vem ao meu jardim’
Características:penas azuisbico finovôo rápido
Comportamento:voarpiar
![Page 14: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/14.jpg)
Exemplo Pessoa
Identidade: ‘Mário’
Características:olhos pretosnasceu em 16/02/70pesa 70kg
mede 1,70mComportamento:
andarfalarcomerrir
![Page 15: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/15.jpg)
Exemplo
Telefone
Identidade:: número 2576-0989
Características:azul2.4 GHztone
Comportamento:tocardiscar
![Page 16: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/16.jpg)
Exemplo
ÔnibusIdentidade: placa LXY 7684
Características:cor amarela30 assentos
a diesel
Comportamento:frearandarcorrerbuzinaracelerar
![Page 17: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/17.jpg)
Objeto
Representação
Mário
Características(estado)
Comportamento
Identidade
Serviços, Interface ou protocolo
![Page 18: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/18.jpg)
Objeto Implementação
Interface Visível Conjunto de operações
Parte encapsulada (escondida) Estado do Objeto - Atributos Implementação de suas operações - Métodos
Estado do Objeto (valor de seus atributos)
Serviços, Operações ou Interface da Classe
![Page 19: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/19.jpg)
Encapsulamento Na terminologia da orientação a objetos, diz-se que um
objeto possui uma interface.
A interface de um objeto é o que ele conhece e o que ele sabe fazer, sem descrever como o objeto conhece ou faz.
A interface de um objeto define os serviços que ele pode realizar e conseqüentemente as mensagens que ele recebe.
![Page 20: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/20.jpg)
Encapsulamento
Uma interface pode ter várias formas de implementação.
Mas, pelo Princípio do Encapsulamento, a implementação de um serviço no objeto servidor não importa para o objeto cliente. (O cliente confia em interfaces e não em implementações)
![Page 21: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/21.jpg)
Classe Definição:
Abstrações utilizadas para representar um conjunto de objetos com características e comportamento idênticos
Uma classe pode ser vista como uma “fábrica de objetos”
Tecnicamente falando, objetos são “instâncias” em tempo de execução de uma classe
Todos os objetos são instâncias de alguma classe
Todos os objetos de uma classe são idênticos no que diz respeito a sua interface e implementação (o que difere um objeto de outro é seu estado e sua identidade)
![Page 22: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/22.jpg)
Exemplo
Características:cor das penas: azuisformato do bico: finovelocidade de vôo: rápida
Comportamento:voarpiar
Identidade::o beija-flor que vem ao meu jardim
classe
instância da classe (objeto)
![Page 23: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/23.jpg)
Exemplo
Identidade:: meu pombo correioCaracterísticas:
cor das penas: cinzaformato do bico: curtovelocidade de vôo: média
Comportamento:voarpiar
classe
instância da classe (objeto)
![Page 24: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/24.jpg)
Implementação em Delphi
A classe
O objeto
![Page 25: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/25.jpg)
Implementação em Java
![Page 26: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/26.jpg)
Implementação em VB
![Page 27: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/27.jpg)
Exemplo
Identidade: ‘Telefone da minha casa’
Características:marca: Siemensnúmero: 2576-0989discagem: pulso
Comportamento:tocardiscar
classe
instância da classe (objeto)
![Page 28: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/28.jpg)
Exemplo
classe
instância da classe (objeto)
Identidade: ‘Meu celular’
Características:marca: Nokianúmero: 99193467discagem: tom
Comportamento:tocardiscar
![Page 29: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/29.jpg)
Implementação em Delphi
A classe
O objeto
ver anotações
![Page 30: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/30.jpg)
Implementação em Java
![Page 31: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/31.jpg)
Implementação em VB
![Page 32: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/32.jpg)
Classes
Classe
Instâncias(objetos)
![Page 33: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/33.jpg)
Implementação em Delphi
A classe
As instâncias
![Page 34: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/34.jpg)
Implementação em Java
![Page 35: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/35.jpg)
Implementação em Java
![Page 36: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/36.jpg)
Atributos Descrevem as características das instâncias de uma classe Seus valores definem o estado do objeto O estado de um objeto pode mudar ao longo de sua existência A identidade de um objeto, contudo, nunca muda
Funcionário_Helena
Nome=Helena ReisNasc=28/01/1965Salário = 4.000
InformarSalárioCalcularIdade
Funcionário_Mário
Nome=Mário SáNasc=16/02/1970Salário = 3.000
InformarSalárioCalcularIdade
![Page 37: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/37.jpg)
Serviços/Operações Representam o comportamento das instâncias de uma classe Correspondem ao protocolo ou ações das instâncias de uma classe
Funcionário_Helena
Nome=Helena ReisNasc=28/01/1965Salário = 4.000
InformarSalárioCalcularIdade
Funcionário_Mário
Nome=Mário SáNasc=16/02/1970Salário = 3.000
InformarSalárioCalcularIdade
4000
3000
Informar Salário?
![Page 38: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/38.jpg)
Implementação em Delphi
ver anotações
![Page 39: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/39.jpg)
Operações/Métodos Um método é a implementação de uma operação
![Page 40: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/40.jpg)
Operações/Métodos (Java)
![Page 41: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/41.jpg)
Serviços/Operações Métodos só tem acesso aos dados da classe para a qual
foram definidos
CORRETO!
ERRADO!
![Page 42: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/42.jpg)
Serviços/Operações Os dados de uma classe só podem ser manipulados por métodos da
classe (pelo princípio do encapsulamento)ERRADO!
ERRADO!
CORRETO!
![Page 43: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/43.jpg)
Serviços/Métodos Métodos possuem argumentos, variáveis locais , valor de
retorno etc
![Page 44: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/44.jpg)
Serviços/Métodos Alguns métodos especiais:
Construtores – criam objetos de uma classe Destrutores – destroem objetos de uma classe
1ª alternativa: Sem um método construtor
A classe herda um construtor padrão de TObject
![Page 45: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/45.jpg)
O método construtor2ª alternativa: fazendo uso de um método construtor
![Page 46: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/46.jpg)
Passos para a criação de um objeto
1. Declarar uma referência para o objeto
func1: Funcionario;
2. Criar uma instância do objetofunc1 := Funcionario.Create;
O sistema operacional aloca espaço em memória para o novo objeto e preenche os seus atributos com valores default (zero para números, nil para referências, false para booleanos, string vazia para Strings.
![Page 47: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/47.jpg)
Passos para a criação de um objeto
3. Se houver um método construtor, este é invocado
O método construtor é usado para alterar os valores default dos atributos possibilitando que o objeto se torne disponível para a aplicação já em um estado pré-definido
4. Modificação explícita do estado do objetofunc1.salario := 4000; // se o atributo é públicofunc1.gravaSalario(4000); // caso contrário
A referência para o objeto pode ser usada para alterar o estado dos atributos do objeto.
![Page 48: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/48.jpg)
O método construtor (FAQ) É obrigatória a inclusão de um método construtor na
classe? Não. Um construtor default é herdado de TObject. Este
construtor aloca espaço para o novo objeto em memória e cria um objeto com os atributos e referências todas preenchidas com zeros.
Quando então devo escrever um método construtor? Quando houver atributos privados que não possam mais
ser alterados uma vez que o objeto tenha sido instanciado
Quando o objeto for um objeto complexo, cuja arquitetura interna (atributos e referências) não é conhecida pelo programador.
![Page 49: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/49.jpg)
O construtor padrão
![Page 50: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/50.jpg)
Herança O que é herança?Herdar é derivar características de gerações precedentes. No mundo da Programação Orientada a Objetos, o termo é associado com uma das formas de reutilização de software. Através da herança, novas classes podem ser derivadas das classes existentes. A nova classe herda propriedades e métodos da classe base. A nova classe também pode adicionar suas próprias propriedades e métodos
![Page 51: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/51.jpg)
Herança Para que serve a herança?
Considere a criação de uma classe ClasseB em Delphi.
Que métodos estão disponíveis através de uma referência para a ClasseB (isto é, um objeto)?
![Page 52: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/52.jpg)
Herança
![Page 53: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/53.jpg)
Herança
Suponha agora que a classe ClasseB herda de ClasseA
Que métodos estão agora disponíveis para uma referência da ClasseB (um objeto) ?
![Page 54: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/54.jpg)
Herança
![Page 55: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/55.jpg)
Herança Poderoso mecanismo para o reaproveitamento de código
O objeto objB tem agora disponíveis os métodos da ClasseA sem ser necessário reescrevê-los na ClasseB
Um objeto da ClasseB também é um objeto da ClasseA.
Facilita a manutenção do código: Os métodos não são replicados. Se for necessário alterar o código do método m3, basta alterá-lo em ClasseA.
ClasseB pode "recusar" parte da herança reimplementando os métodos herdados
![Page 56: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/56.jpg)
Herança
O método m3 agora disponível para objB é aquele implementado em ClasseB
![Page 57: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/57.jpg)
Herança
Várias subclasses podem herdar da mesma superclasse
![Page 58: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/58.jpg)
Herança Em Delphi, não é permitido herdar de mais de uma classe
ERRADO!!!!
![Page 59: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/59.jpg)
Herança A hierarquia de herança pode ter vários níveis
![Page 60: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/60.jpg)
Herança
Que métodos estão agora disponíveis para uma instância de ClasseC?
![Page 61: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/61.jpg)
Herança A Herança também pode surgir a partir da refatoração de
classes existentes de modo a eliminar a duplicação de código
Grande quantidade de atributos e métodos duplicados...
![Page 62: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/62.jpg)
Herança Refatoração
Superclasse(características comuns)
Subclasses(características específicas)
![Page 63: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/63.jpg)
Herança
O mecanismo de herança pode ser melhor entendido através do seguinte exemplo:
![Page 64: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/64.jpg)
Herança A classe ContaBancaria tem quatro atributos:
nome: armazena o nome do cliente cpf: armazena o número do CPF do cliente numeroConta: armazena o número da conta do cliente saldo: armazena o saldo da conta
Os métodos depositar e sacar são usados para fazer um depósito ou retirada da conta bancária.
A classe ContaBancária, sozinha, não é suficiente para realizar todas as transações bancárias. Existem geralmente dois tipos de contas: a conta corrente e a conta de investimentos
![Page 65: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/65.jpg)
Herança
Vamos derivar portanto duas subclasses que herdam da superclasse ContaCorrente
![Page 66: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/66.jpg)
Herança
As subclasses ContaInvestimento e ContaCorrente herdam as propriedades e métodos da classe ContaBancaria
![Page 67: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/67.jpg)
Herança
Agora é possível fazer:
Apesar do construtor create e do método depositar não terem sido definidos para a classe ContaCorrente, eles estão disponíveis devido ao mecanismo de herança
![Page 68: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/68.jpg)
Composição
![Page 69: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/69.jpg)
Composição A classe contém referências para objetos de outras
classes Estas referências são também atributos da classe
Uma maneira alternativa de estender a funcionalidade de uma classe agregando funcionalidades de outras classes
Herança vs. ComposiçãoÉ UM vs. TEM UM
![Page 70: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/70.jpg)
Composição O mecanismo de herança nem sempre é apropriado
Delphi não tem herança múltipla
Estender funcionalidade através de herança pode não ser "natural":
Uma conta de investimento é uma conta bancária
Uma conta de investimento não é uma TColor!
![Page 71: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/71.jpg)
Composição Considere a seguinte situação:
::Project2
CA
m1(...)m2(...)
CB
m3(...)m4(...)
![Page 72: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/72.jpg)
Composição Considere agora que é preciso estender a funcionalidade
da classe CA oferecendo em sua interface também os métodos m3( ) e m4( )
![Page 73: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/73.jpg)
Composição 1a solução: Implementar os métodos m3( ) e m4( ) na
classe CA.
Desvantagem: duplicação de métodos dificulta a manutenção do
software
::Project2
CA
m1(...)m2(...)m3(...)m4(...)
CB
m3(...)m4(...)
![Page 74: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/74.jpg)
Composição
2a solução: Herança
Desvantagens: Conceitualmente, a
classe CA pode não SER uma classe CB
Delphi não suporta herança múltipla. E se fosse necessário oferecer os serviços m5() e m6() de uma classe CC?
::Project2
CA
m1(...)m2(...)
CB
m3(...)m4(...)
![Page 75: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/75.jpg)
Composição 3a solução: Composição
::Project2
CA
b : CB
create(...)m1(...)m2(...)
CB
m3(...)m4(...)
![Page 76: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/76.jpg)
Composição Que serviços estão
disponíveis para uma referência da classe CA?
![Page 77: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/77.jpg)
Composição No entanto, é possível
fazer:
Observe a utilização dos métodos m3 e m4 através de uma referência para a classe CB
![Page 78: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/78.jpg)
Composição Esse processo é também conhecido por delegação: a
classe CA delega à classe CB a execução dos serviços m3 e m4
Observe que o atributo b na classe A é público. Diz-se então que a delegação é pública, isto é, ela é visível para os clientes da classe
Um cliente da classe CA, para usar os métodos m3 e m4, deve estar ciente da delegação e fazer:obj.b.m3;
![Page 79: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/79.jpg)
Composição É possível tornar a delegação privada:
::Project2
CA
b : CB
create(...)m1(...)m2(...)m3(...)m4(...)
CB
m3(...)m4(...)
![Page 80: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/80.jpg)
Composição Oferecer os serviços m3 e m4 na classe CA não significa,
neste caso, duplicar código. Os métodos m3 e m4 em CA são apenas uma fachada para os métodos m3 e m4 em CB
![Page 81: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/81.jpg)
Composição Que serviços estão agora disponíveis para uma
referência da classe CA?
Observe que, agora, o cliente da classe não conhece a delegação: para ele tudo se passa como se os métodos m3 e m4 fossem implementados em CA
![Page 82: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/82.jpg)
Composição Um exemplo no próprio Delphi: A listbox
Para incluir uma nova linha em uma listbox faz-se:
ListBox1.Items.Add('MS');método da classe TStringList
delegação
![Page 83: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/83.jpg)
Composição
::Unit1
::<<Unknown>>::TForm
TForm1
ListBox1 : TListBox
FormCreate(...)
TListBox
Items : TStringList
create(...)
TStringList
Add(...)
![Page 84: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/84.jpg)
::Project2
Empregado
admissao : Datanascimento : Datanome : String
create(...)toString(...)
Data
ano : integerdia : integermes : integer
create(...)toString(...)
Composição Um serviço oferecido por uma classe pode não ser
exatamente uma fachada para a classe delegada, mas uma combinação de serviços oferecidos por esta.
Observe atentamente o código a seguir:
admissao
nascimento
![Page 85: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/85.jpg)
program Project2;{$APPTYPE CONSOLE}uses SysUtils;
type Data = class private dia: integer; mes: integer; ano: integer; public constructor create(d:integer; m:integer; a: integer); function toString(): String; // imprime a data no formato dd/mm/aaaa end;
Empregado = class private nome: String; nascimento: Data; admissao: Data; public constructor create(nom: String; nas: Data; adm: Data); function toString(): String; end;
imprime a data no formato dd/mm/aaaa
imprime nome, data de nascimento e data de
admissão do Empregado
![Page 86: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/86.jpg)
constructor Data.create(d, m, a: integer);begin dia := d; mes := m; ano := a;end;
function Data.toString: String;begin result := format('%0.2d/%0.2d/%0.4d', [dia, mes, ano]);end;
constructor Empregado.create(nom: String; nas, adm: Data);begin nome := nom; nascimento := nas; admissao := adm;end;
function Empregado.toString: String;begin result := 'nome: ' + nome + chr(13) + chr(10) + 'nascimento: ' + nascimento.toString + chr(13) + chr(10) + 'admissao: ' + admissao.toString;end;
%0.2dse o campo tem apenas um dígito preenche com
um zero à esquerda
chr(13)+chr(10)
muda de linha
![Page 87: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/87.jpg)
var emp: Empregado; data1, data2: Data; aux: string; dia, mes, ano: integer;begin write('Data do aniversario[dd/mm/aaaa]: '); readln(aux); dia := StrToInt(copy(aux, 1, 2)); mes := StrToInt(copy(aux, 4, 2)); ano := StrToInt(copy(aux, 7, 4)); data1 := Data.Create(dia, mes, ano);
write('Data da admissao[dd/mm/aaaa]: '); readln(aux); dia := StrToInt(copy(aux, 1, 2)); mes := StrToInt(copy(aux, 4, 2)); ano := StrToInt(copy(aux, 7, 4)); data2 := Data.Create(dia, mes, ano);
write('nome: '); readln(aux);
emp := Empregado.create(aux, data1, data2); writeln(emp.toString); readln;end.
lê uma String contendo a data de aniversário e usa
a função Copy para separar o dia, o mês e o
ano
o mesmo para a data de admissão
instancia um objeto Empregadoinvoca o método toString
da classe Empregado. Este, por sua vez, usa o
método toString da classe Data
![Page 88: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/88.jpg)
![Page 89: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/89.jpg)
Composição Vamos repetir o mesmo exemplo, dessa vez usando uma
interface gráfica com o usuário
Observe a utilização das mesmas classes de negócio (Empregado e Data)
![Page 90: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/90.jpg)
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; edtNome: TEdit; edtNasc: TEdit; edtAdm: TEdit; btnImprime: TButton; procedure btnImprimeClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
![Page 91: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/91.jpg)
Data = class private dia: integer; mes: integer; ano: integer; public constructor create(d:integer; m:integer; a: integer); function toString(): String; end;
Empregado = class private nome: String; nascimento: Data; admissao: Data; public constructor create(nom: String; nas: Data; adm: Data); function toString(): String; end;
var Form1: TForm1;
![Page 92: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/92.jpg)
implementation{$R *.DFM}constructor Data.create(d, m, a: integer);begin dia := d; mes := m; ano := a;end;
function Data.toString: String;begin result := format('%0.2d/%0.2d/%0.4d', [dia, mes, ano]);end;
constructor Empregado.create(nom: String; nas, adm: Data);begin nome := nom; nascimento := nas; admissao := adm;end;
function Empregado.toString: String;begin result := 'nome: ' + nome + chr(13) + chr(10) + 'nascimento: ' + nascimento.toString + chr(13) + chr(10) + 'admissao: ' + admissao.toString;end;
![Page 93: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/93.jpg)
procedure TForm1.btnImprimeClick(Sender: TObject);var emp: Empregado; data1, data2: Data; dia, mes, ano: integer;begin dia := StrToInt(copy(edtNasc.Text, 1, 2)); mes := StrToInt(copy(edtNasc.Text, 4, 2)); ano := StrToInt(copy(edtNasc.Text, 7, 4)); data1 := Data.Create(dia, mes, ano);
dia := StrToInt(copy(edtAdm.Text, 1, 2)); mes := StrToInt(copy(edtAdm.Text, 4, 2)); ano := StrToInt(copy(edtAdm.Text, 7, 4)); data2 := Data.Create(dia, mes, ano);
emp := Empregado.create(edtNome.Text, data1, data2); ShowMessage(emp.toString);end;
end.
![Page 94: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/94.jpg)
![Page 95: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/95.jpg)
Polimorfismo
![Page 96: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/96.jpg)
Polimorfismo "Programação Genérica"
Trata objetos na mesma hierarquia de classes como se todos fossem objetos da superclasse
Tornam o programa extensível Facilidade para adicionar novas classes
Nesta seção: invocaremos os métodos das subclasses usando referências para a superclasse
![Page 97: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/97.jpg)
Polimorfismo Conceito Chave
Objetos das subclasses podem ser tratados como objetos da superclasse
::Project2
A
m1(...)m2(...)
B
m1(...)m3(...)
A classe B É UMA classe A Um objeto da classe B pode ser usado em qualquer lugar onde um objeto A é esperado.
B A
![Page 98: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/98.jpg)
Polimorfismo Tabelas Virtuais
Classe Aoperação método invocadom1() A.m1()m2() A.m2()
::Project2
A
m1(...)m2(...)
B
m1(...)m3(...)
Classe Boperação método invocadom1() B.m1()m2() A.m2()m3() B.m3()
![Page 99: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/99.jpg)
Polimorfismo E
program Project2;{$APPTYPE CONSOLE}uses SysUtils;
type A = class procedure m1(); virtual; procedure m2(); end;
B = class(A) procedure m1(); override; procedure m3(); end; Falaremos disso mais
tarde...
![Page 100: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/100.jpg)
procedure A.m1;begin writeln('A.m1()');end;
procedure A.m2;begin writeln('A.m2()');end;
procedure B.m1;begin writeln('B.m1()');end;
procedure B.m3;begin writeln('B.m3()');end;
mensagens de teste usadas para verificar a chamada dos métodos
![Page 101: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/101.jpg)
Polimorfismo Programa de teste
var objA: A;begin objA := A.Create; objA.m1; objA.m2; readln;end.
::Project2
A
m1(...)m2(...)
B
m1(...)m3(...)
![Page 102: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/102.jpg)
Polimorfismo Outro programa de teste
var objB: B;begin objB := B.Create; objB.m1; objB.m2; objB.m3; readln;end.
::Project2
A
m1(...)m2(...)
B
m1(...)m3(...)
![Page 103: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/103.jpg)
Polimorfismo E agora a mágica!
var obj: A;begin obj := A.Create; writeln('obj := A.Create'); obj.m1; obj.m2; writeln; obj := B.Create; writeln('obj := B.Create'); obj.m1; obj.m2; readln;end.
• A referência para a superclasse é usada para instanciar objetos da superclasse (Classe A) e da subclasse (Classe B)
• Por que o compilador não acusa um erro? Porque um objeto da classe B é também um objeto da classe A
![Page 104: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/104.jpg)
Polimorfismovar obj: A;begin obj := A.Create; writeln('obj := A.Create'); obj.m1; obj.m2; writeln; obj := B.Create; writeln('obj := B.Create'); obj.m1; obj.m2; readln;end.
::Project2
A
m1(...)m2(...)
B
m1(...)m3(...)
![Page 105: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/105.jpg)
Polimorfismo "Programação Genérica"
Trata objetos na mesma hierarquia de classes como se todos fossem objetos da superclasse
Tornam o programa extensível Facilidade para adicionar novas classes
Nesta seção: invocaremos os métodos das subclasses usando referências para a superclasse
![Page 106: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/106.jpg)
Polimorfismo Conceito Chave
Objetos das subclasses podem ser tratados como objetos da superclasse
::Project2
A
m1(...)m2(...)
B
m1(...)m3(...)
A classe B É UMA classe A Um objeto da classe B pode ser usado em qualquer lugar onde um objeto A é esperado.
B A
![Page 107: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/107.jpg)
Polimorfismo Chamadas polimórficas permitem simplificar a lógica
condicional dos programas
Imagine um sistema construído para trabalhar tanto em Windows quanto em Linux
::Unit1 JWindows
close(...)maximize(...)minimize(...)move(...)open(...)
J Linux
close(...)maximize(...)minimize(...)move(...)open(...)
jWin: JWindows; jLin: JLinux;
![Page 108: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/108.jpg)
Polimorfismoprocedure TForm1.FormCreate(Sender: TObject);begin if SO='Windows' then jWin := JWindows.Create else jLin := JLinux.Create;end;
procedure TForm1.WMSysCommand(var Message: TMessage);begin if (Message.wParam = SC_MINIMIZE) then if SO='Windows' then jWin.minimize else jLin.minimize else if (Message.wParam = SC_MAXIMIZE) then if SO='Windows' then jWin.maximize else jLin.maximize else if (Message.wParam = SC_CLOSE) then
Observe a quantidade de lógica condicional!
![Page 109: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/109.jpg)
Polimorfismo Solução Polimórfica
::Unit1
JWindows
close(...)maximize(...)minimize(...)move(...)open(...)
J anela
close(...)maximize(...)minimize(...)move(...)open(...)
J Linux
close(...)maximize(...)minimize(...)move(...)open(...)
var jan: Janela;
![Page 110: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/110.jpg)
Polimorfismo
Observe a ausência de lógica condicional
procedure TForm1.FormCreate(Sender: TObject);begin if SO='Windows' then jan := JWindows.Create else jan := JLinux.Create;end;
procedure TForm1.WMSysCommand(var Message: TMessage);begin if (Message.wParam = SC_MINIMIZE) then jan.minimize else if (Message.wParam = SC_MAXIMIZE) then jan.maximize else if (Message.wParam = SC_CLOSE) then jan.close else if (Message.wParam = SC_MOVE) then jan.move else inherited;end;
![Page 111: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/111.jpg)
Polimorfismo Observe ainda como seria fácil acrescentar uma janela
MOTIF para o Sun Solaris ::Unit1
J anela
close(...)maximize(...)minimize(...)move(...)open(...)
JWindows
close(...)maximize(...)minimize(...)move(...)open(...)
J Linux
close(...)maximize(...)minimize(...)move(...)open(...)
J Solaris
close(...)maximize(...)minimize(...)move(...)open(...)
![Page 112: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/112.jpg)
Polimorfismoprocedure TForm1.FormCreate(Sender: TObject);begin if SO='Windows' then jan := JWindows.Create else if SO = 'Linux' then jan := JLinux.Create else jan := JSolaris.Create;end;
procedure TForm1.WMSysCommand(var Message: TMessage);begin if (Message.wParam = SC_MINIMIZE) then jan.minimize else if (Message.wParam = SC_MAXIMIZE) then jan.maximize else if (Message.wParam = SC_CLOSE) then jan.close else if (Message.wParam = SC_MOVE) then jan.move else inherited;end;
Nada mudou aqui!
Acrescentei mais uma linha aqui
![Page 113: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/113.jpg)
Polimorfismo "Programação Genérica"
Trata objetos na mesma hierarquia de classes como se todos fossem objetos da superclasse
Tornam o programa extensível Facilidade para adicionar novas classes
Nesta seção: invocaremos os métodos das subclasses usando referências para a superclasse
![Page 114: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/114.jpg)
Polimorfismo Conceito Chave
Objetos das subclasses podem ser tratados como objetos da superclasse
::Project2
A
m1(...)m2(...)
B
m1(...)m3(...)
A classe B É UMA classe A Um objeto da classe B pode ser usado em qualquer lugar onde um objeto A é esperado.
B A
![Page 115: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/115.jpg)
Polimorfismoprogram Project2;{$APPTYPE CONSOLE}uses SysUtils;
type A = class procedure m1(); virtual; procedure m2(); end;
B = class(A) procedure m1(); override; procedure m3(); end;
Mas o que são afinal esses sufixos?
Por ora, fiquemos assim: se você não colocar o virtual na superclasse e o override nas subclasses, a brincadeira não funciona!
O par virtual/override deve ser usado apenas nos métodos que devem ser chamados de forma polimórfica
![Page 116: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/116.jpg)
Polimorfismo - Exercício Construa uma aplicação Delphi que implemente a
seguinte relação hierárquica entre as classes Passaro e BeijaFlor
::Unit1
Passaro
voa(...)
BeijaFlor
voa(...)
![Page 117: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/117.jpg)
Polimorfismo - Exercício Interface com o usuário
![Page 118: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/118.jpg)
Polimorfismo - Exercício
Requisitos:
O método voa deve ser invocado de forma polimórfica:
A resposta depende do objeto instanciado...
procedure TForm1.Button1Click(Sender: TObject);
begin p.voa;end;
![Page 119: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/119.jpg)
Polimorfismo
![Page 120: Introdução à Orientação a Objetos. O paradigma da Orientação a Objetos Um paradigma é uma forma de abordar um problema. O paradigma da orientação a objetos](https://reader033.vdocuments.com.br/reader033/viewer/2022051705/5706384c1a28abb8238f60c5/html5/thumbnails/120.jpg)
Polimorfismo