Polimorfismo. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho
|
|
- Luna Câmara Cesário
- 6 Há anos
- Visualizações:
Transcrição
1 Polimorfismo BCC Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho
2 Introdução O Polimorfismo é um recurso que nos permite programar em geral ao invés de programar específicamente ; Vamos supor um programa que simula o movimento de vários animais. 1/104
3 Introdução Três classes representam os animais pesquisados: Peixe; Sapo; Pássaro Todos herdam da classe Animal Contém um método mover e a posição do animal. 2/104
4 Introdução (cont.) Cada classe derivada implementa o método mover(); O programa mantém um vetor de ponteiros para objetos das classes derivadas da classe Animal Para simular o movimento do animal, envia-se a mesma mensagem (mover()) para cada objeto; 3/104
5 Introdução (cont.) Cada objeto responderá de uma maneira diferente; A mensagem é enviada genericamente Cada objeto sabe como modificar sua posição de acordo com seu tipo de movimento. 4/104
6 Introdução (cont.) 5/104
7 Introdução (cont.) Através do polimorfismo pode-se projetar e implementar sistemas que sejam facilmente extensíveis Novas classes podem ser adicionadas com pouca ou mesmo nenhuma modificação às partes gerais do programa As novas classes devem fazer parte da hierarquia de herança. 6/104
8 Introdução (cont.) Por exemplo, se criarmos uma classe Tartaruga somente precisamos implementar: a classe e, a parte da simulação que instância o objeto As partes que processam a classe Animal genericamente não seriam alteradas. 7/104
9 Outro Exemplo Vamos imaginar que temos um programa que controla um jogo que contém as seguintes classes/objetos/elementos Marciano; Plutoniano; RaioLaser; NaveEspacial. Todos estes objetos são derivados de uma classe ObjetoEspacial 8/104
10 Polimorfismo Para gerenciar os elementos presentes na tela, mantemos um vetor com ponteiros para objetos da classe ObjetoEspacial Cada objeto possui um método desenhar(), que o imprime na tela. 9/104
11 Polimorfismo (cont.) Para atualizar a tela do jogo, é necessário redesenhar todos os seus elementos. Enviar a mesma mensagem para cada objeto do vetor Método desenhar(); 10/104
12 Polimorfismo (cont.) Método desenhar(): Cada objeto redefine este método para suas especificidades; A classe ObjetoEspacial determina que as classes derivadas o implementem. Podem ser criadas novas classes para outros elementos do jogo O processo de atualizar a tela continuaria o mesmo. 11/104
13 Outro Exemplo 12/104
14 Outro Exemplo (cont.) Vamos supor um programa que simula diversos animais emitindo sons. Cada personagem emite seu próprio som Cada personagem é um objeto que invoca seu próprio método emitirsom(); A classe derivada sabe como deve ser implementado. Em uma hierarquia de herança, podemos criar uma classe Mamifero, a partir dela derivam Boi, cachorro, gato, bode, etc. 13/104
15 Implementações c l a s s Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\nsom de mamifero " ; } ; } ; c l a s s Cachorro : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n woof woof" ; } ; } ; c l a s s Vaca : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n moo moo" ; } ; } ; c l a s s Bode : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n baa baa" ; } ; } ; c l a s s Gato : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n meow meow" ; } ; } ; 14/104
16 Sem Polimorfismo i n t main ( ) { Cachorro c a c h o r r o ; Vaca vaca ; Bode bode ; Gato gato ; c a c h o r r o. emitirsom ( ) ; vaca. emitirsom ( ) ; bode. emitirsom ( ) ; gato. emitirsom ( ) ; r e t u r n 0 ; } 15/104
17 Sem Polimorfismo (cont.) woof woof moo moo baa baa meow meow 16/104
18 Polimorfismo c l a s s Mamifero { p u b l i c : v i r t u a l v o i d emitirsom ( ) { cout << "\nsom de mamifero " ; } ; } ; c l a s s Cachorro : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n woof woof" ; } ; } ; c l a s s Vaca : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n moo moo" ; } ; } ; c l a s s Bode : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n baa baa" ; } ; } ; c l a s s Gato : p u b l i c Mamifero { p u b l i c : v o i d emitirsom ( ) { cout << "\n meow meow" ; } ; } ; 17/104
19 Polimorfismo (cont.) i n t main ( ) { Mamifero p [ 5 ] = { new Cachorro ( ), new Vaca ( ), new Bode ( ), new Gato ( ) } ; } } f o r ( i n t i = 0 ; i < 5 ; i ++) { p [ i ] >emitirsom ( ) ; } r e t u r n 0 ; 18/104
20 Polimorfismo (cont.) woof woof moo moo baa baa meow meow 19/104
21 Polimorfismo (cont.) Como vimos na aula anterior, é possível realizar a conversão de tipo entre classe base e derivada Um objeto da classe base pode receber um objeto da classe derivada O contrário não vale 20/104
22 Polimorfismo (cont.) Também é possível fazer o mesmo com ponteiros Um ponteiro para a classe base pode apontar para um objeto da classe derivada O contrário não vale. 21/104
23 Polimorfismo (cont.) Note que a classe Derivada redefine o método print(); O método original imprime os atributos a, b e c; O método redefinido acrescenta a impressão dos atributos d, e e f. Derivada d: int e: int f: int +Derivada() +getdef() +setdef() +print() Base a: int b: int c: int +Base() +getabc() +setabc() +print() 22/104
24 Polimorfismo (cont.) c l a s s Base { i n t a, b, c ; p u b l i c : Base ( i n t a=0, i n t b=0, i n t c =0): a ( a ), b ( b ), c ( c ){} v o i d p r i n t ( ) { cout << "\n Base: " << a << ","<< b << "," <<c ; } } ; c l a s s D e r i v a d a : p u b l i c Base { i n t d, e, f ; p u b l i c : D e r i v a d a ( i n t d=0, i n t e =0, i n t f =0): d ( d ), e ( e ), f ( f ){} v o i d p r i n t ( ) { cout << "\n Derivada " << d << ","<< e << "," <<f ; } } ; 23/104
25 Polimorfismo (cont.) #i n c l u d e <i o s t r e a m > #i n c l u d e "base.h" u s i n g namespace s t d ; i n t main ( ) { Base objb ( 1, 2, 3 ), p objb=n u l l p t r ; D e r i v a d a objd ( 4, 5, 6 ), p objd=n u l l p t r ; } p objb = &objb ; p objb >p r i n t ( ) ; p objd = &objd ; P objd >p r i n t ( ) ; p objb = &objd ; p objb >p r i n t ( ) ; 24/104
26 Polimorfismo (cont.) #i n c l u d e <i o s t r e a m > #i n c l u d e "base.h" u s i n g namespace s t d ; i n t main ( ) { Base objb ( 1, 2, 3 ), p objb=n u l l p t r ; D e r i v a d a objd ( 4, 5, 6 ), p objd=n u l l p t r ; } p objb = &objb ; // aponta para objeto da classe Base p objb >p r i n t ( ) ; // invoca método da classe Base p objd = &objd ; // aponta para objeto da classe Derivada P objd >p r i n t ( ) ; // invoca método da classe Derivada p objb = &objd ; // aponta para objeto da classe Derivada p objb >p r i n t ( ) ; // invoca método da classe Base r e t u r n 0 ; 25/104
27 Polimorfismo (cont.) Base D e r i v a d a Base 26/104
28 Polimorfismo (cont.) Este tipo de construção é permitido pelo compilador por conta do relacionamento de herança Um objeto da classe derivada é um objeto da classe base. 27/104
29 Polimorfismo (cont.) A funcionalidade invocada depende do handle (tipo do ponteiro ou referência) utilizado para invocá-la Não depende do tipo do objeto apontado pelo handle. Utilizando um tipo especial de método podemos fazer com que este comportamento seja invertido O que é crucial para o polimorfismo. 28/104
30 Polimorfismo (cont.) #i n c l u d e <i o s t r e a m > #i n c l u d e "base.h" u s i n g namespace s t d ; i n t main ( ) { Base objb ( 1, 2, 3 ), p objb=n u l l p t r ; D e r i v a d a objd ( 4, 5, 6 ), p objd=n u l l p t r ; p objb = &objb ; // aponta para objeto da classe Base p objb >p r i n t ( ) ; // invoca método da classe Base } // ERRO! não é possível apontar para objeto da classe Base p objd = &objb ; // Erro! Um objeto da classe base não // é um objeto da classe derivada p objd >p r i n t ( ) ; r e t u r n 0 ; 29/104
31 Funções Virtuais O tipo do handle determina a versão de um método que será invocada Não o tipo do objeto apontado Base p objb=n u l l p t r ; D e r i v a d a objd ( 4, 5, 6 ) ; p objb = &objd ; // aponta para objeto da classe Derivada p objb >p r i n t ( ) ; // invoca método da classe Base 30/104
32 Funções Virtuais (cont.) Com funções virtuais, ocorre o contrário O tipo do objeto apontado determina qual será a versão do método a ser invocado 31/104
33 Funções Virtuais (cont.) Voltando ao exemplo do jogo espacial, cada classe derivada da classe ObjetoEspacial define um objeto de formato geométrico diferente Cada classe define seu próprio método desenhar() Podemos através de um ponteiro para classe base invocar o método desenhar(); Porém, seria útil se o programa determinasse dinamicamente (tempo de execução) qual método deve ser utilizado para desenhar cada forma, baseado no tipo do objeto. 32/104
34 Funções Virtuais (cont.) Para permitir este tipo de comportamento dinâmico, declaramos na classe base o método desenhar() como uma função virtual O redefinimos nas classes derivadas; O método sobrescrito possui o mesmo protótipo do original (assinatura e tipo de retorno). 33/104
35 Funções Virtuais (cont.) Para declararmos um método como virtual, adicionamos a palavra chave virtual antes de seu protótipo v i r t u a l v o i d d e s e n h a r ( ) Se uma classe não sobrescrever um método virtual, ela herda a implementação original; 34/104
36 Funções Virtuais (cont.) Definindo o método como virtual na classe base, ele permanecerá assim por toda a hierarquia de herança Mesmo que as classes derivadas a sobrescrevam e não a declarem como virtual novamente; É uma boa prática declarar o método como virtual por toda a hierarquia de classes. 35/104
37 Resolução Estática e Dinâmica As instruções de chamada a métodos não virtuais são resolvidas em tempo de compilação E traduzidas em chamadas a funções de endereço fixo; Isso faz com que a instrução seja vinculada à função antes de sua execução; 36/104
38 Resolução Estática e Dinâmica (cont.) Resolução Estática Acontece quando invocamos um método através de um objeto, usando o operador. Não se trata de comportamento polimórfico 37/104
39 Resolução Dinâmica Quando uma instrução de chamada a um método virtual é encontrada pelo compilador, ele não tem como identificar qual é o método associado em tempo de compilação. Quando utilizamos ponteiros (ou referências) para objetos, o compilador não conhece qual é a classe do endereço contido no ponteiro antes de o programa ser executado; A instrução é avaliada em tempo de execução; Isto é chamado de Resolução Dinâmica, ou Resolução Tardia (Comportamento polimórfico). 38/104
40 Exemplo Poligono base altura +setvalores() +calculaarea() Retangulo Triangulo +calculaarea() +calculaarea() 39/104
41 Exemplo (cont.) c l a s s P o l i g o n o { p r o t e c t e d : d o u b l e base, a l t u r a ; p u b l i c : } v o i d s e t V a l o r e s ( d o u b l e a, d o u b l e b ){ base=a ; a l t u r a=b ; } v i r t u a l d o u b l e a r e a ( v o i d ) { r e t u r n 0 ; } 40/104
42 Exemplo (cont.) c l a s s Retangulo : p u b l i c P o l i g o n o { p u b l i c : d o u b l e a r e a ( v o i d ){ r e t u r n ( base a l t u r a ) ; } } ; c l a s s T r i a n g u l o : p u b l i c P o l i g o n o { p u b l i c : d o u b l e a r e a ( v o i d ){ r e t u r n ( base a l t u r a / 2 ) ; } } ; 41/104
43 Exemplo (cont.) i n t main ( ) { Retangulo r e c t ; T r i a n g u l o t r g l ; P o l i g o n o p o l y ; } P o l i g o n o p p o l y 1 = &r e c t ; P o l i g o n o p p o l y 2 = &t r g l ; P o l i g o n o p p o l y 3 = &p o l y ; ppoly1 >s e t V a l o r e s ( 4, 5 ) ; ppoly2 >s e t V a l o r e s ( 4, 5 ) ; ppoly3 >s e t V a l o r e s ( 4, 5 ) ; cout << ppoly1 >a r e a ( ) << e n d l ; cout << ppoly2 >a r e a ( ) << e n d l ; cout << ppoly3 >a r e a ( ) << e n d l ; r e t u r n 0 ; 42/104
44 Exemplo (cont.) As três classes (Poligono, Retangulo e Triangulo) possuem os mesmos membros: base, altura, setvalores() e area(). area() foi definida como virtual porque é redefinida depois nas classes derivadas. 43/104
45 Outro Exemplo Considere uma classe Veículo com duas classes derivadas Automóvel e Bicicleta Essas classes têm três métodos, definidos para veículos de forma geral e redefinidas mais especificamente para automóveis e bicicletas; 44/104
46 Outro Exemplo (cont.) As funções são: VerificaLista(): para verificar o que precisa ser analisado no veículo; Reparar(): para realizar os reparos e a manutenção necessária Limpa(): para realizar procedimentos de limpeza do veículo A aplicação Oficina define um objeto que recebe objetos da classe Veículos. Para cada veículo recebido, a oficina executa na sequencia os três métodos da classe Veículo. 45/104
47 Outro Exemplo (cont.) c l a s s V e i c u l o { p u b l i c : v i r t u a l v o i d v e r i f i c a L i s t a ( ) { cout<<"\n Verifica Veiculo " ; } ; v i r t u a l v o i d r e p a r a r ( ) { cout<<"\n Repara Veiculo " ; } ; v i r t u a l v o i d l i m p a ( ) { cout<<"\n Limpa Veiculo " ; } ; } ; 46/104
48 Outro Exemplo (cont.) c l a s s Automovel : p u b l i c V e i c u l o { p u b l i c : v o i d v e r i f i c a L i s t a ( ) { cout<<"\n Verifica Automovel " ; } ; v o i d r e p a r a r ( ) { cout<<"\n Repara Automovel " ; } ; v o i d l i m p a ( ) { cout<<"\n Limpa Automovel " ; } ; } ; c l a s s B i c i c l e t a : p u b l i c V e i c u l o { p u b l i c : v o i d v e r i f i c a L i s t a ( ) { cout<<"\n Verifica Bicicleta " ; } ; v o i d r e p a r a r ( ) { cout<<"\n Repara Bicicleta " ; } ; v o i d l i m p a ( ) { cout<<"\n Limpa Bicicleta " ; } ; } ; 47/104
49 Outro Exemplo (cont.) Não há como saber no momento de programação se a Oficina estará recebendo um automóvel ou uma bicicleta O momento de decisão sobre qual método será aplicado só ocorrerá durante a execução do programa. 48/104
50 Outro Exemplo (cont.) c l a s s O f i c i n a { i n t R ; p u b l i c : V e i c u l o proximo ( ) ; v o i d manter ( V e i c u l o v ) ; i n t getr ( ) ; } ; 49/104
51 Outro Exemplo (cont.) V e i c u l o O f i c i n a : : proximo ( ) { V e i c u l o v ; R = rand ( ) ; i f (R % 2 == 0) v = new Automovel ( ) ; e l s e v = new B i c i c l e t a ( ) ; r e t u r n v ; } v o i d O f i c i n a : : manter ( V e i c u l o v ){ v >V e r i f i c a L i s t a ( ) ; v >Reparar ( ) ; v >Limpa ( ) ; } i n t O f i c i n a : : getr ( ) { r e t u r n R ; } 50/104
52 Outro Exemplo (cont.) i n t main ( ) { O f i c i n a Of ; V e i c u l o pv ; i n t n = 0 ; w h i l e ( n < 6) { pv = Of. proximo ( ) ; cout<<endl <<Of. getr()<< e n d l ; Of. manter ( pv ) ; n++; d e l e t e pv ; } r e t u r n 0 ; } 51/104
53 Outro Exemplo (cont.) Na tela é mostrado 41 V e r i f i c a B i c i c l e t a Repara B i c i c l e t a Limpa B i c i c l e t a V e r i f i c a B i c i c l e t a Repara B i c i c l e t a Limpa B i c i c l e t a 6334 V e r i f i c a Automovel Repara Automovel Limpa Automovel V e r i f i c a Automovel Repara Automovel Limpa Automovel V e r i f i c a B i c i c l e t a Repara B i c i c l e t a Limpa B i c i c l e t a V e r i f i c a Automovel Repara Automovel Limpa Automovel 52/104
54 Outro Exemplo (cont.) O método Of.proximo() realiza uma atribuição de um objeto Automóvel à variável R quando o valor do número aleatório gerado é par. um objeto Bicicleta à variável R quando o valor do número aleatório gerado é ímpar. 53/104
55 Sumário das Atribuções permitidas entre Ponteiros de Classe Base e Derivada Apesar de um objeto de uma classe derivada ser um objeto da classe base, temos dois tipos de objetos completamente diferentes. um objeto de uma classe derivada pode ser tratado como um objeto da classe base Ele contém todos os membros da classe base. 54/104
56 Sumário das Atribuções permitidas entre Ponteiros de Classe Base e Derivada (cont.) O contrário não é válido (objeto da classe Base ser tratado como da classe Derivada) Os membros da classe derivada são indefinidos para objetos da classe base; É possível realizar um downcasting; No entanto, não é seguro 55/104
57 Sumário das Atribuções Permitidas Considere o seguinte caso: c l a s s Base { p u b l i c : Base ( ) {} v o i d p r i n t ( ) { cout << "\n Base" ; } } ; c l a s s D e r i v a d a : p u b l i c Base { p u b l i c : D e r i v a d a ( ) { } v o i d p r i n t ( ) { cout << "\n Derivada " ; } v o i d p r i n t 2 {}{ cout << "\n Interno " ; " } }; i n t main ( ) { Base objb, p objb=n u l l p t r ; D e r i v a d a objd, p objd=n u l l p t r ;... r e t u r n 0 ; } 56/104
58 Sumário das Atribuções Permitidas (cont.) Apontar um ponteiro base para um objeto base é simples p objb = &objb ; Apontar um ponteiro derivado para um objeto derivado é simples p objd = &objd ; 57/104
59 Sumário das Atribuções Permitidas (cont.) Apontar um ponteiro base para um objeto derivado é seguro p objb = &objd ; O ponteiro deve ser utilizado apenas para realizar chamadas da classe base; Base p objb >p r i n t 2 ( ) ; // ERRO não é membro da classe Chamadas da classe derivada gerarão erros, a não ser que seja utilizado downcasting, o que não é seguro 58/104
60 Sumário das Atribuções Permitidas (cont.) Apontar um ponteiro derivado para um objeto base gera um erro de compilação p objd = &objb ; // ERRO de compilação A relação é um se dá de cima para baixo na hierarquia 59/104
61 Classes Abstratas e Métodos Virtuais Puros Quando pensamos em classes, podemos pensar que os programas as instanciarão, criando objetos daquele tipo Porém, existem casos em que é útil definir classes que não serão instanciadas nunca. 60/104
62 Classes Abstratas e Métodos Virtuais Puros (cont.) Tais classes são denominadas classes abstratas Como são normalmente utilizadas como base em hierarquias de herança, também são conhecidas como classes base abstratas. São classes incompletas, que devem ser completadas por classes derivadas; Por isso não podem ser instanciadas. 61/104
63 Classes Abstratas Classes que podem ser instanciadas são chamadas de classes concretas Providenciam implementação para todos os métodos que definem. O propósito de uma classe base abstrata é exatamente prover um base apropriada para que outras classes herdem 62/104
64 Classes Abstratas (cont.) Classes base abstratas são genéricas demais para definirem com precisão objetos reais e serem instanciadas As classes concretas cuidam das especificidades necessárias para que objetos sejam bem modelados e instanciados 63/104
65 Classes Abstratas (cont.) Em uma hierarquia de herança, não é obrigatória a existência de uma base abstrata Porém, bons projetos de engenharia de software possuem hierarquias de herança cujo topo é formado por classes abstratas; 64/104
66 Classes Abstratas (cont.) Em alguns casos, classes abstratas constituem completamente os primeiros níveis de uma hierarquia de herança. Uma classe é determinada abstrata automaticamente quando um ou mais de seus métodos virtuais são declarados como puros. 65/104
67 Métodos Virtuais Puros Para declararmos um método como virtual puro, utilizamos a seguinte sintaxe: v i r t u a l v o i d p r i n t ( ) = 0 ; O =0 é conhecido como especificador puro Não se trata de atribuição; Métodos virtuais não possuem implementação; Toda classe derivada concreta deve sobrescrevê-lo com uma implementação concreta 66/104
68 Métodos Virtuais Puros (cont.) A diferença entre um método virtual e um método virtual puro é que o primeiro opcionalmente possui implementação na classe base O segundo requer obrigatoriamente uma implementação nas classes derivadas. 67/104
69 Métodos Virtuais Puros (cont.) Um método virtual puro nunca será executada na classe base Deve ser sobrescrita nas classes derivadas; Serve para fornecer uma interface polimórfica para classes derivadas. 68/104
70 Métodos Virtuais Puros (cont.) Novamente, uma classe que possui um método virtual puro não pode ser instanciada Invocar um método virtual puro geraria erro. Pode-se declarar ponteiros para uma classe base abstrata e apontá-los para objetos de classes derivadas. 69/104
71 Exemplo de Polimorfismo A utilização de polimorfismo é particularmente eficiente na implementação de sistemas de software em camadas Como um sistema operacional; Cada tipo de dispositivo físico opera de uma forma diferente No entanto, operações como escrita e leitura são básicas. 70/104
72 Exemplo de Polimorfismo (cont.) Uma classe base abstrata pode ser utilizada para gerar uma interface para todos os dispositivos Todo o comportamento necessário pode ser implementado como métodos virtuais puros; Cada dispositivo sobrescreve os métodos em suas próprias classes, derividas da classe base abstrata. Para cada novo dispositivo, instala-se o driver, que contém implementações concretas para a classe base abstrata. 71/104
73 Outro Exemplo de Polimorfismo Outro aplicação útil do polimorfismo é na criação de classes de iteradores Iteradores são utilizados para percorrer estruturas de dados ou (coleções) Vetores, listas, árvores, etc; Percorrem os objetos de uma agregação sem expôr sua implementação interna A STL fornece uma grande variedade de iteradores para estruturas de dados 72/104
74 Exemplo: Funcionarios Pagamento de funcionários: 4 tipos de funcionários 1. Salário fixo semanal; 2. Horistas (hora extra depois de 40 horas); 3. Comissionados; 4. Assalariados Comissionados A idéia é realizar o cálculo dos pagamentos utilizando comportamento polimórfico. Na aula sobre herança, tínhamos apenas os dois últimos tipos de funcionários, em uma hierarquia de herança. 73/104
75 Exemplo: Funcionarios (cont.) 74/104
76 Exemplo: Funcionarios (cont.) Neste exemplo, não há uma classe que absorva o comportamento das outras Será necessário criar uma outra classe que sirva de base para os outras Representará um funcionário genérico Nome, sobrenome e documento são os atributos; Getters e setters para cada um dos atributos. Um print para todos os atributos. Será uma classe base abstrata. 75/104
77 Exemplo: Funcionarios (cont.) Teremos quatro classes derivadas, cada uma representando um tipo de funcionário A diferença se dá basicamente pela forma em que o pagamento é calculado (método earnings()). 76/104
78 Exemplo: Funcionarios (cont.) 77/104
79 Exemplo: Funcionarios (cont.) Dada a hierarquia estabelecida e a necessidade de polimorfismo: Os getters e setters da classe base serão métodos concretos; O método print será um método virtual Terá implementação, mas opcionalmente poderá ser sobrescrito pelas classes derivadas. O método earnings será um método virtual puro Não terá implementação e obrigatoriamente será sobrescrito pelas classes derivadas. As classes derivadas definem seus próprios atributos e respectivos getters e setters. 78/104
80 Exemplo: Funcionarios (cont.) 79/104
81 Exemplo: Funcionarios (cont.) 80/104
82 Employee.h #i f n d e f EMPLOYEE H #d e f i n e EMPLOYEE H #i n c l u d e <s t r i n g > // classe string padrão C++ u s i n g s t d : : s t r i n g ; c l a s s Employee { s t r i n g f i r s t N a m e ; s t r i n g lastname ; s t r i n g s o c i a l S e c u r i t y N u m b e r ; p u b l i c : Employee ( c o n s t s t r i n g="", c o n s t s t r i n g&="", c o n s t s t r i n g&="" ) ; v o i d s e t F i r s t N a m e ( c o n s t s t r i n g& ) ; s t r i n g getfirstname ( ) c o n s t ; v o i d setlastname ( c o n s t s t r i n g& ) ; s t r i n g getlastname ( ) c o n s t ;... 81/104
83 Employee.h (cont.)... v o i d s e t S o c i a l S e c u r i t y N u m b e r ( c o n s t s t r i n g& ) ; s t r i n g g e t S o c i a l S e c u r i t y N u m b e r ( ) c o n s t ; // a função virtual pura cria a classe básica abstrata Employee v i r t u a l d o u b l e e a r n i n g s ( ) c o n s t = 0 ; // virtual pura v i r t u a l v o i d p r i n t ( ) c o n s t ; // virtual } ; // fim da classe Employee #e n d i f 82/104
84 Employee.cpp #i n c l u d e <i o s t r e a m > u s i n g s t d : : cout ; #i n c l u d e " Employee.h" // Definição da classe Employee // construtor Employee : : Employee ( c o n s t s t r i n g &f i r s t, c o n s t s t r i n g &l a s t, c o n s t s t r i n g &s s n ) : f i r s t N a m e ( f i r s t ), lastname ( l a s t ), s o c i a l S e c u r i t y N u m b e r ( s s n ) {} } // fim do construtor Employee 83/104
85 Employee.cpp // imprime informações de Employee (virtual, mas não virtual pura) v o i d Employee : : p r i n t ( ) c o n s t { cout << getfirstname ( ) << << getlastname ( ) << "\ nsocial security number : " << g e t S o c i a l S e c u r i t y N u m b e r ( ) ; } // fim da função print 84/104
86 HourlyEmployee.h #i f n d e f HOURLY H #d e f i n e HOURLY H #i n c l u d e " Employee.h" // Definição da classe Employee c l a s s HourlyEmployee : p u b l i c Employee { d o u b l e wage ; // salário por hora d o u b l e h o u r s ; // horas trabalhadas durante a semana p u b l i c : HourlyEmployee ( c o n s t s t r i n g &="", c o n s t s t r i n g &="", c o n s t s t r i n g &="", d o u b l e = 0. 0, d o u b l e = 0. 0 ) ; v o i d setwage ( d o u b l e ) ; d o u b l e getwage ( ) c o n s t ; v o i d s e t H o u r s ( d o u b l e ) ; d o u b l e gethours ( ) c o n s t ; // palavra-chave virtual assinala intenção de sobrescrever v i r t u a l d o u b l e e a r n i n g s ( ) c o n s t ; // calcula os rendimentos v i r t u a l v o i d p r i n t ( ) c o n s t ; // imprime HourlyEmployee } ; #e n d i f 85/104
87 HourlyEmployee.cpp u s i n g s t d : : cout ; #i n c l u d e " HourlyEmployee.h" // Definição da classe HourlyEmployee // construtor HourlyEmployee : : HourlyEmployee ( c o n s t s t r i n g &f i r s t, c o n s t s t r i n g &l a s t, c o n s t s t r i n g &ssn, d o u b l e hourlywage, d o u b l e hoursworked ) : Employee ( f i r s t, l a s t, s s n ) { setwage ( hourlywage ) ; // valida a remuneração por hora s e t H o u r s ( hoursworked ) ; // valida as horas trabalhadas } // fim do construtor HourlyEmployee 86/104
88 HourlyEmployee.cpp (cont.) // calcula os rendimentos; // sobrescreve a função virtual pura earnings em Employee d o u b l e HourlyEmployee : : e a r n i n g s ( ) c o n s t { i f ( gethours ( ) <= 40 ) // nenhuma hora extra r e t u r n getwage ( ) gethours ( ) ; e l s e r e t u r n 40 getwage ( ) + ( ( gethours ( ) 40 ) getwage ( ) 1. 5 ) ; } // fim da função earnings 87/104
89 HourlyEmployee.cpp (cont.) // imprime informações do HourlyEmployee v o i d HourlyEmployee : : p r i n t ( ) c o n s t { cout << "hourly employee : " ; Employee : : p r i n t ( ) ; // reutilização de código cout << "\ nhourly wage: " << getwage ( ) << "; hours worked: " << gethours ( ) ; } // fim da função print 88/104
90 SalariedEmployee.h #i f n d e f SALARIED H #d e f i n e SALARIED H #i n c l u d e " Employee.h" // Definição da classe Employee c l a s s S a l a r i e d E m p l o y e e : p u b l i c Employee { d o u b l e w e e k l y S a l a r y ; // salário por semana p u b l i c : S a l a r i e d E m p l o y e e ( c o n s t s t r i n g &="", c o n s t s t r i n g &="", c o n s t s t r i n g &="", d o u b l e = 0. 0 ) ; v o i d s e t W e e k l y S a l a r y ( d o u b l e ) ; d o u b l e g e t W e e k l y S a l a r y ( ) c o n s t ; // palavra-chave virtual assinala intenção de sobrescrever v i r t u a l d o u b l e e a r n i n g s ( ) c o n s t ; // calcula os rendimentos v i r t u a l v o i d p r i n t ( ) c o n s t ; // imprime SalariedEmployee } ; // fim da classe SalariedEmployee #e n d i f 89/104
91 SalariedEmployee.h #i n c l u d e <i o s t r e a m > u s i n g s t d : : cout ; #i n c l u d e " SalariedEmployee.h" // construtor S a l a r i e d E m p l o y e e : : S a l a r i e d E m p l o y e e ( c o n s t s t r i n g &f i r s t, c o n s t s t r i n g &l a s t, c o n s t s t r i n g &ssn, d o u b l e s a l a r y ) : Employee ( f i r s t, l a s t, s s n ) { s e t W e e k l y S a l a r y ( s a l a r y ) ; } // fim do construtor SalariedEmployee 90/104
92 SalariedEmployee.h (cont.) // calcula os rendimentos; // sobrescreve a função virtual pura earnings em Employee d o u b l e S a l a r i e d E m p l o y e e : : e a r n i n g s ( ) c o n s t { r e t u r n g e t W e e k l y S a l a r y ( ) ; } // fim da função earnings // imprime informações de SalariedEmployee v o i d S a l a r i e d E m p l o y e e : : p r i n t ( ) c o n s t { cout << " salaried employee : " ; Employee : : p r i n t ( ) ; cout << "\ nweekly salary : " << g e t W e e k l y S a l a r y ( ) ; } // fim da função print 91/104
93 ComissionEmployee.h #i f n d e f COMMISSION H #d e f i n e COMMISSION H #i n c l u d e " Employee.h" // Definição da classe Employee c l a s s CommissionEmployee : p u b l i c Employee { d o u b l e g r o s s S a l e s ; // vendas brutas semanais d o u b l e commissionrate ; // porcentagem da comissão p u b l i c : CommissionEmployee ( c o n s t s t r i n g &="", c o n s t s t r i n g &="", c o n s t s t r i n g &="", d o u b l e = 0. 0, d o u b l e = 0. 0 ) ; v o i d setcommissionrate ( d o u b l e ) ; d o u b l e getcommissionrate ( ) c o n s t ; v o i d s e t G r o s s S a l e s ( d o u b l e ) ; d o u b l e g e t G r o s s S a l e s ( ) c o n s t ; // palavra-chave virtual assinala intenção de sobrescrever v i r t u a l d o u b l e e a r n i n g s ( ) c o n s t ; // calcula os rendimentos v i r t u a l v o i d p r i n t ( ) c o n s t ; // imprime o objeto CommissionEmployee } ; // fim da classe CommissionEmployee #e n d i f 92/104
94 ComissionEmployee.cpp #i n c l u d e <i o s t r e a m > u s i n g s t d : : cout ; #i n c l u d e " CommissionEmployee.h" // construtor CommissionEmployee : : CommissionEmployee ( c o n s t s t r i n g &f i r s t, c o n s t s t r i n g &l a s t, c o n s t s t r i n g &ssn, d o u b l e s a l e s, d o u b l e r a t e ) : Employee ( f i r s t, l a s t, s s n ) { s e t G r o s s S a l e s ( s a l e s ) ; setcommissionrate ( r a t e ) ; } // fim do construtor CommissionEmployee 93/104
95 ComissionEmployee.cpp (cont.) // calcula os rendimentos; // sobrescreve a função virtual pura earnings em Employee d o u b l e CommissionEmployee : : e a r n i n g s ( ) c o n s t { r e t u r n getcommissionrate ( ) g e t G r o s s S a l e s ( ) ; } // fim da função earnings // imprime informações do CommissionEmployee v o i d CommissionEmployee : : p r i n t ( ) c o n s t { cout << " commission employee : " ; Employee : : p r i n t ( ) ; // reutilização de código cout << "\ngross sales: " << g e t G r o s s S a l e s ( ) << "; commission rate: " << getcommissionrate ( ) ; } // fim da função print 94/104
96 BasePlusComissionEmployee.h #i f n d e f BASEPLUS H #d e f i n e BASEPLUS H #i n c l u d e " CommissionEmployee.h" c l a s s BasePlusCommissionEmployee : p u b l i c CommissionEmployee { d o u b l e b a s e S a l a r y ; // salário-base por semana p u b l i c : BasePlusCommissionEmployee ( c o n s t s t r i n g &="", c o n s t s t r i n g &="", c o n s t s t r i n g &="", d o u b l e = 0. 0, d o u b l e = 0. 0, d o u b l e = 0. 0 ) ; v o i d s e t B a s e S a l a r y ( d o u b l e ) ; // configura o salário-base d o u b l e g e t B a s e S a l a r y ( ) c o n s t ; // retorna o salário-base // palavra-chave virtual assinala intenção de sobrescrever v i r t u a l d o u b l e e a r n i n g s ( ) c o n s t ; // calcula os rendimentos v i r t u a l v o i d p r i n t ( ) c o n s t ; // imprime o objeto BasePlusCommissionEmployee } ; // fim da classe BasePlusCommissionEmployee #e n d i f 95/104
97 BasePlusComissionEmployee.cpp #i n c l u d e <i o s t r e a m > u s i n g s t d : : cout ; // Definição da classe BasePlusCommissionEmployee #i n c l u d e " BasePlusCommissionEmployee.h" // construtor BasePlusCommissionEmployee : : BasePlusCommissionEmployee ( c o n s t s t r i n g &f i r s t, c o n s t s t r i n g &l a s t, c o n s t s t r i n g &ssn, d o u b l e s a l e s, d o u b l e r a t e, d o u b l e s a l a r y ) : CommissionEmployee ( f i r s t, l a s t, ssn, s a l e s, r a t e ) { s e t B a s e S a l a r y ( s a l a r y ) ; // valida e armazena o salário-base } // fim do construtor BasePlusCommissionEmployee 96/104
98 BasePlusComissionEmployee.cpp (cont.) // calcula os rendimentos; // sobrescreve a função virtual pura earnings em Employee d o u b l e BasePlusCommissionEmployee : : e a r n i n g s ( ) c o n s t { r e t u r n g e t B a s e S a l a r y ( ) + CommissionEmployee : : e a r n i n g s ( ) ; } // fim da função earnings // imprime informações de BasePlusCommissionEmployee v o i d BasePlusCommissionEmployee : : p r i n t ( ) c o n s t { cout << "base - salaried " ; CommissionEmployee : : p r i n t ( ) ; // reutilização de código cout << "; base salary: " << g e t B a s e S a l a r y ( ) ; } // fim da função print 97/104
99 Main.cpp #i n c l u d e <i o s t r e a m > #i n c l u d e <iomanip> u s i n g namespace s t d ; #i n c l u d e <v e c t o r > // inclui definições de classes na hierarquia Employee #i n c l u d e " Employee.h" #i n c l u d e " SalariedEmployee.h" #i n c l u d e " HourlyEmployee.h" #i n c l u d e " CommissionEmployee.h" #i n c l u d e " BasePlusCommissionEmployee.h" v o i d v i r t u a l V i a P o i n t e r ( c o n s t Employee c o n s t ) ; // protótipo v o i d v i r t u a l V i a R e f e r e n c e ( c o n s t Employee &); // protótipo 98/104
100 Main.cpp (cont.) i n t main ( ) { // configura a formatação de saída de ponto flutuante cout << f i x e d << s e t p r e c i s i o n ( 2 ) ; // cria objetos da classe derivada S a l a r i e d E m p l o y e e s a l a r i e d E m p l o y e e ( "John", "Smith", " ", 800 ) ; HourlyEmployee h o u r l y E m p l o y e e ( "Karen", "Price", " ", , 40 ) ; CommissionEmployee commissionemployee ( "Sue", "Jones", " ", 10000,. 0 6 ) ; BasePlusCommissionEmployee basepluscommissionemployee ( "Bob", "Lewis", " ", 5000,. 0 4, 300 ) ;... 99/104
101 Main.cpp (cont.) c o u t << " Employees processed individually using static binding :\ n\n" ; // saída de info. e rendimentos dos Employees com vinculação estática s a l a r i e d E m p l o y e e. p r i n t ( ) ; cout << "\ nearned $" << s a l a r i e d E m p l o y e e. e a r n i n g s ( ) ; h o u r l y E m p l o y e e. p r i n t ( ) ; cout << "\ nearned $" << h ourlyemployee. e a r n i n g s ( ) ; commissionemployee. p r i n t ( ) ; cout << "\ nearned $" << commissionemployee. e a r n i n g s ( ) ; basepluscommissionemployee. p r i n t ( ) ; cout << "\ nearned $" << basepluscommissionemployee. earnings (); 100/104
102 Main.cpp (cont.) // cria um vector a partir dos quatro ponteiros da classe básica v e c t o r < Employee > employees ( 4 ) ; // inicializa o vector com Employees employees [ 0 ] = &s a l a r i e d E m p l o y e e ; employees [ 1 ] = &h o u r l y E m p l o y e e ; employees [ 2 ] = &commissionemployee ; employees [ 3 ] = &basepluscommissionemployee ; c o u t << " Employees processed polymorphically via dynamic binding :\ n\n" ; 101/104
103 Main.cpp (cont.) // chama virtualviapointer para imprimir informações e rendimentos // de cada Employee utilizando vinculação dinâmica c o u t << " Virtual function calls made off base -class pointers :\n\n" ; f o r ( s i z e t i = 0 ; i < employees. s i z e ( ) ; i++ ) v i r t u a l V i a P o i n t e r ( employees [ i ] ) ; // chama virtualviareference para imprimir informações // de cada Employee utilizando vinculação dinâmica c o u t << " Virtual function calls made off base - class references :\ n\n" ; f o r ( s i z e t i = 0 ; i < employees. s i z e ( ) ; i++ ) // observe o desreferenciamento v i r t u a l V i a R e f e r e n c e ( employees [ i ] ) ; r e t u r n 0 ; } // fim de main 102/104
104 Main.cpp (cont.) // chama funções print e earnings virtual de Employee a partir de um // ponteiro de classe básica utilizando vinculação dinâmica v o i d v i r t u a l V i a P o i n t e r ( c o n s t Employee c o n s t b a s e C l a s s P t r ) { b a s e C l a s s P t r >p r i n t ( ) ; cout << "\ nearned $" << b a s e C l a s s P t r >e a r n i n g s ( ) ; } // fim da função virtualviapointer // chama funções print e earnings virtual de Employee a partir de um // referência de classe básica utilizando vinculação dinâmica v o i d v i r t u a l V i a R e f e r e n c e ( c o n s t Employee &b a s e C l a s s R e f ) { b a s e C l a s s R e f. p r i n t ( ) ; cout << "\ nearned $" << b a s e C l a s s R e f. e a r n i n g s ( ) ; } // fim da função virtualviareference 103/104
105 FIM 104/104
Conversão de Tipos. BCC Programação Orientada a Objectos(POO)
Conversão de Tipos BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho Introdução Como já vimos
Leia maisProgramação Orientada a Objetos para Redes de Computadores. Polimorfismo com Hierarquias de Herança. Exemplo: Hierarquia Animal
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Polimorfismo Polimorfismo com Hierarquias de Herança
Leia maisBCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2 Site da disciplina: http://www.decom.ufop.br/marco/ Moodle: www.decom.ufop.br/moodle Lista de e- mails: bcc221- decom@googlegroups.com
Leia maisBCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho
Herança BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho Introdução I A herança é uma forma de
Leia maisProgramação Orientada a Objetos para Redes de Computadores
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Polimorfismo Polimorfismo com Hierarquias Polimorfismo
Leia maisParte IV. Linguagens de Programação. Relembrando da Última Aula... Exemplos de Polimorfismo. Exemplo: Hierarquia Animal
Linguagens de Programação Parte IV Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel Introdução à Programação (Continuação) Relembrando da Última Aula... Herança Mais exemplos de programação
Leia maisLinguagens de Programação
Linguagens de Programação Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel Parte IV Introdução à Programação em C++ (Continuação) Relembrando da Última Aula... Herança Mais exemplos de
Leia maisJava - Polimorfismo. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP
Java - Polimorfismo BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Polimorfismo O Polimorfismo nos permite programar genericamente ao invés de
Leia maisLaboratório de programação II
Laboratório de programação II Herança e Polimorfismo Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Herança Mecanismo da Orientação a Objeto que permite criar novas classes aproveitando
Leia maisProgramação orientada a objetos: Polimorfismo by Pearson Education do Brasil
1 10 Programação orientada a objetos: Polimorfismo 2 OBJETIVOS Neste capítulo, você aprenderá: O conceito de polimorfismo. Como utilizar métodos sobrescritos para executar o polimorfismo. Como distinguir
Leia maisUniversidade Federal de Mato Grosso do Sul. Propriedades da Programação Orientada a Objetos
Universidade Federal de Mato Grosso do Sul Facom - Faculdade de Computação Linguagem de Programação Orientada a Objetos Prof. Me. Liana Duenha Propriedades da Programação Orientada a Objetos Neste tópico
Leia maisProgramação Orientada a Objetos para Redes de Computadores
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Herança Herança Criação de uma nova classe de uma
Leia maisLinguagens de Programação
Linguagens de Programação Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel Parte IV Introdução à Programação em C++ (Continuação) Relembrando da Última Aula... Sobrecarga de operadores
Leia maisAULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos
Câmpus Santa Helena Curso: Ciência da Computação Disciplina: Programação Orientada a Objetos AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos Tema
Leia maisPOO29004 Programação Orientada a Objetos
POO29004 Programação Orientada a Objetos Classe abstrata, interface e polimorfismo Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/poo
Leia maisInvocando funções da classe base a partir de objetos da classe derivada
Polimorfismo Introdução "Programar no geral" Objetos em um mesmo nível hierárquico são tratados como objetos da classe base Funções virtuais e linkagem dinâmica Torna os programas mais extensíveis novas
Leia maisLinguagens de Programação Aula 12
Linguagens de Programação Aula 12 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Implementando subprogramas 2 Na aula de hoje Suporte para a programação orientada a objetos 3 Roteiro Introdução
Leia maisPOO e C++: Herança e Polimorfismo
POO e C++: Herança e Polimorfismo Márcio Santi Luiz Fernando Martha Conceito de Herança em POO Recurso que torna o conceito de classe mais poderoso; Permite que se construa e estenda continuamente classes
Leia maisJava Como Programar, 8/E
Capítulo 9 Programação orientada a objetos: herança Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 9.1 Introdução Herança Uma forma de reutilização de software em que uma nova classe
Leia maisLinguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces
Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces Professora Sheila Cáceres Polimorfismo Polimorfismo Polimorfismo é a característica única de linguagens orientadas
Leia maisIntrodução ao Java. Prof. Herbert Rausch Fernandes
Introdução ao Java Prof. Herbert Rausch Fernandes Orientação a Objetos Programação Orientada por Objetos: é a construção de sistemas de software como uma coleção estruturada de implementações de tipos
Leia maisUNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos
UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos Objetivo da Unidade*: Conhecer e aplicar os conceitos mais importantes associados a orientação a objetos. 5.1 Métodos e atributos estáticos Atributos
Leia maisFriends e Sobrecarga
Friends e Sobrecarga BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho Funções Amigas I Uma função
Leia maisJava First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração
Java First-Tier: Aplicações Orientação a Objetos em Java (II) Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Sobrecarga Um recurso usual em programação OO é o uso de sobrecarga
Leia maisProgramação Avançada C++ Slide 12 Nielsen Castelo Damasceno
Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno Visibilidade de membros Membro da classe derivada pode usar os membros públicos ( public ) e protegidos ( protected ) da sua classe base (como
Leia maisConceitos de Programação Orientada a Objetos
Conceitos de Programação Orientada a Objetos Tatyana Bitencourt Com as técnicas de orientação a objeto, é possível obter resultados considerados impossíveis pensando de maneira estruturada. Como Java não
Leia maisLinguagem de Programação I
Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Herança simples Composição Combinando composição e herança Polimorfismo e funções virtuais Classes abstratas
Leia maisDefinição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.
Abstração JAVA Definição Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação. Em Java, a abstração é alcançada através de classes abstratas e interfaces. Classes
Leia maisCurso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br
Curso teórico: Orientação a Objetos Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br Objetivos Conhecer os conceitos fundamentais de orientação a objetos; Aprender a criar e utilizar
Leia maisProgramação Orientada a Objetos HERANÇA E COMPOSIÇÃO
Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO Renato Dourado Maia Universidade Estadual de Montes Claros Engenharia de Sistemas Unidade IV Unidade IV Herança e Composição: Herança simples. Composição.
Leia maisProgramação Orientada a Objetos. Prof. Diemesleno Souza Carvalho
Programação Orientada a Objetos Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br http://www.diemesleno.com.br Programação Orientada a Objetos Na aula passada, vimos: Classes Abstratas Programação
Leia maisRecapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }
Recapitulando Orientação a objetos: programas organizados em torno da definição de classes, instanciação de objetos e troca de mensagens. Declaração de variáveis de referencia: Circle c; Criação/instanciação
Leia maisProgramação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação
4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança
Leia maisClasses e Objetos. Sintaxe de classe em Java
Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados
Leia maisClasses. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho
Classes BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Baseado nos slides do Prof. Marco Antônio Carvalho Introdução I Estamos acostumados a criar
Leia maisIntrodução a classes e objetos. Prof. Marcelo Roberto Zorzan
Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Herança Aula de Hoje Problema Considere uma empresa que tenha tipos de empregados no aplicativo de folha de pagamento Um empregado tem nome,
Leia maisPOO29004 Programação Orientada a Objetos
POO29004 Programação Orientada a Objetos Classe abstrata, interface e polimorfismo Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/poo
Leia maisAvançando em Java com Polimorfismo. Prof.: Hugo Barros
Avançando em Java com Polimorfismo Prof.: Hugo Barros Tópicos da Aula Polimorfismo: Exemplos de polimorfismo Vantagens do polimorfismo Tipos de polimorfismo Métodos Abstratos Classes Abstratas Vinculação
Leia maisPCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 6: Polimorfismo
PCS3111 Laboratório de Programação Orientada a Objetos para Engenharia Elétrica Aula 6: Polimorfismo Escola Politécnica da Universidade de São Paulo Conceito de polimorfismo 2 Polimorfismo A palavra vem
Leia maisINF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS
INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Ivan Mathias Filho ivan@inf.puc-rio.br Programa Capítulo 5 Conversão de Tipos Polimorfismo O Modificador final O Modificador
Leia maisSobrecarga, Sobreposição e Polimorfismo
Sobrecarga, Sobreposição e Polimorfismo José Gustavo de Souza Paiva Sobrecarga de Métodos Numa mesma classe, dois ou mais métodos podem ter o mesmo nome Desde que tenham tipos, quantidade e/ou ordem de
Leia maisProgramação Orientada a Objectos - P. Prata, P. Fazendeiro
9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract
Leia maisProgramação aplicada de computadores Andréa Maria Pedrosa Valli
Universidade Federal do Espírito Santo Laboratório de Computação de Alto Desempenho - LCAD Programação aplicada de computadores Andréa Maria Pedrosa Valli 1 Classes Parte 4 1. Herança 2. Classes básicas
Leia maisHerança e Polimorfismo - Parte II -
Herança e Polimorfismo - Parte II - Programação Orientada a Objetos Java Prof. Geraldo Braz Junior A hierarquia do exemplo DoME 2 Saída incompleta O que queremos CD: A Swingin' Affair (64 mins)* Frank
Leia maisBCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2 Site da disciplina: http://www.decom.ufop.br/marco/ Moodle: www.decom.ufop.br/moodle Lista de e- mails: bcc221- decom@googlegroups.com
Leia maisOrientação a Objetos (OO) LPG II - Java. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental
Orientação a Objetos (OO) LPG II - Java Orientação a Objetos (OO) Roberto Vedoato vedoato@joinville.udesc.br Programação Procedimental x Orientada a Objetos Objetivos e Benefícios da Orientação a Objetos
Leia maisTemplates. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP
Templates BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Introdução Os templates ou gabaritos fornecem a base para existência da programação genérica
Leia maisProgramação Orientada a Objetos HERANÇA E COMPOSIÇÃO
Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO Renato Dourado Maia Universidade Estadual de Montes Claros Engenharia de Sistemas Unidade IV Unidade IV Herança e Composição: Herança simples. Composição.
Leia maisLinguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos
Linguagem de Programação II Programação Orientada a Objetos Orientação a Objetos Prof. Alessandro Borges 2 Tópicos Introdução à Programação Orientada a Objetos Conceitos Objetivos Classes e Objetos Atributos
Leia maisEsta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli
Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; Tudo no mundo real pode ser representado por meio do conceito de "objeto": uma planta, uma mesa, uma pessoa, um sentimento,
Leia maisJava para Desktop. Programação Orientada à Objetos 2 JSE
Java para Desktop Programação Orientada à Objetos 2 JSE Encapsulamento significa "ocultar informações, ele define que cada objeto contém todos os detalhes de implementação necessários sobre como ele funciona
Leia maisComputação II (MAB 225)
Computação II (MAB 225) Fabio Mascarenhas - 2015.1 http://www.dcc.ufrj.br/~fabiom/pythonoo Introdução No curso de Computação I vocês viram os conceitos básicos de programação em Python: expressões e comandos,
Leia maisOrientação a Objetos (OO) Java Avançado Revisão do Paradigma de. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental
Orientação a Objetos (OO) Java Avançado Revisão do Paradigma de Orientação a Objetos (OO) Roberto Vedoato vedoato@joinville.udesc.br Programação Procedimental x Orientada a Objetos Objetivos e Benefícios
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-7 Reutilização de Classes Prof. Esbel Tomás Valero Orellana Até Aqui Introdução a POO e sua implementação em Java Atributos, métodos e encapsulamento dos mesmos Trabalhando
Leia maisHerança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos
e Ligação Dinâmica Programação Orientada a Objetos e Polimorfismo A é a contribuição original do paradigma de programação orientado a objetos Fundamentos chave do paradigma OO: Abstração de Dados A herança
Leia maisLinguagem de Programação IV Introdução
Linguagem de Programação IV Introdução Prof. Alessandro Borges 2 Tópicos Orientação a objetos Classe Objeto Abstração Encapsulamento Herança Polimorfismo Plataforma Java 3 4 POO é um paradigma de programação
Leia maisUNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETRÔNICA (DAELN) 2 a Prova
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETRÔNICA (DAELN) Curso: Engenharia Eletrônica, Disciplina: Fundamentos de Programação II (IF62C), Turma: S Professores: Hermes Del
Leia maisJava - Sobrecarga/Composição
Java - Sobrecarga/Composição BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Métodos static Embora os métodos sejam executados em resposta a chamadas
Leia maisProgramação em Linguagem C++
Programação em Linguagem C++ Igor Kondrasovas Especialista em Computação Aplicada UDESC Sócio e Desenvolvedor na Inovativa Tecnologia igor@inovativatec.com www.inovativatec.com Agenda Herança e Polimorfismo
Leia mais4 Conceito de Herança
4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança
Leia maisC com introdução a OO
... Centro Integrado de Tecnologia da Informação C com introdução a OO ... Centro Integrado de Tecnologia da Informação Aula 9 Ronald Dener - Instrutor Matheus Soares - Monitor 17 / outubro 17 / outubro
Leia maisPolimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo
PARTE II: Java e OO Interface Herança Herança e polimorfismo Classes e métodos abstratos : muitas formas de implementação de uma operação Permite esconder diferentes implementações atrás da mesma interface
Leia maisUNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA
LPOO - Linguagem de Programação Orientada a Objetos Prof. Msc. Célio R. Castelano Página 1 de 7 Curso Ciência da Computação Professor Célio Ricardo Castelano UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO
Leia maisAula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU
Aula 9 POO 1 Polimorfismo Profa. Elaine Faria UFU - 2019 Sobrecarga de Métodos Numa mesma classe, dois ou mais métodos podem ter o mesmo nome Desde que tenham tipos, quantidade e/ou ordem de parâmetros
Leia maisParadigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura
Java First-Tier: Aplicações Orientação a Objetos em Java (I) Paradigmas de Programação Programação Funcional Programação Procedural Programação Orientada por Objetos Grupo de Linguagens de Programação
Leia maisNotas de Aula 04: Herança e polimorfismo.
Notas de Aula 04: Herança e polimorfismo. Objetivos da aula: Introduzir o conceito de Heranças Criar uma hierarquia de classes Rever o uso de modificadores de acesso. Apresentar o conceito de polimorfismo
Leia maisCURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Disciplina: Programação Orientada a Objetos
01.Em orientação a objetos, o conceito que determina que as classes devem cuidar dos seus atributos de forma exclusiva, expondo o mínimo possível de suas funcionalidades para outras classes, é a)herança
Leia maisUnidade: sobrecarga, construtores e herança
Unidade: sobrecarga, construtores e herança 0 Unidade: sobrecarga, construtores e herança Sobrecarga Sobrecarregar (do inglês overload) um método é criar mais métodos com o mesmo nome, porém com assinaturas
Leia maisProgramação Orientada a Objetos. Prof. Diemesleno Souza Carvalho
Programação Orientada a Objetos Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br http://www.diemesleno.com.br Programação Orientada a Objetos Na aula passada, vimos: Herança Programação Orientada
Leia maisOrientação a Objetos Classes Abstratas
Orientação a Objetos Classes Abstratas Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/
Leia mais9 Classes Abstractas e Interfaces
9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract
Leia maisGenerics - Java. Fernando Santos. Programação Orientada a Objetos
- Java Fernando Santos Programação Orientada a Objetos Generics é uma funcionalidade incorporada ao Java a partir da versão 5.0 Permite aos programadores escreverem métodos genéricos Os parâmetros dos
Leia maisDiagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42
Diagrama de Classes Régis Patrick Silva Simão Régis Simão Diagrama de Classes 1/42 Agenda Introdução Objetos Classes Atributos Operações & Métodos Relacionamentos Relacionamento: Associação Nome de Relacionamento
Leia maisPython Orientação a Objetos. Introdução à Programação SI2
Python Orientação a Objetos Introdução à Programação SI2 Herança Pessoa Aluno Professor Herança Animal Mamifero Ave Cachorro Gato Gavião Galinha Herança Uma classe pode herdar a definição de outra classe:
Leia maisImplementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação
Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação Introdução Além de utilizar as classes presentes na biblioteca padrão, programadores podem definir suas próprias
Leia maisHerança e Polimorfismo -Parte II -
Herança e Polimorfismo -Parte II - Mário Meireles Teixeira mario@deinf.ufma.br A hierarquia do exemplo DoME 2 1 Saída incompleta O que queremos CD: A Swingin' Affair (64 mins)* Frank Sinatra tracks: 16
Leia maisPROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Leia maisProgramação por Objectos. Java
Programação por Objectos Java Parte 6: Herança e Polimorfismo LEEC@IST Java 1/50 Herança revisão (1) A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse
Leia maisPROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.
PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 4. Técnicas de Orientação a Objetos Classes e objetos Herança Métodos Subscritos
Leia maisHerança Tiago Eugenio de Melo
Herança Tiago Eugenio de Melo tiago@comunidadesol.org Herança Conceito: Herança é a capacidade de especializar tipos de objetos (classes), de forma que os tipos especializados contenham, além de características
Leia maisProgramação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos
Programação Orientada a Objetos: Herança Alexandre César Muniz de Oliveira Análise e Projeto Orientados a Objetos A análise orientada a objetos Determina o que o sistema deve fazer: Quais os atores envolvidos?
Leia maisConceitos/princípios da orientação a objeto
Ao representarmos o sistema enfocando os objetos pertencentes ao mesmo, evidencia-se a relevância de se estabelecer um meio para que exista a interação entre os objetos. Este aspecto nos remete a estudar
Leia maisCurso Profissional de Gestão e Programação de Sistemas Informáticos
Curso Profissional de Gestão e Programação de Sistemas Informáticos Disciplina: Programação e Sistemas de Informação Classes em C++ Módulos 10 e 11 POO A professora: Sandra Soares Classes em C++ Uma class
Leia maisSingleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)
e Adapter Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé) O que vimos na última aula? Factory Method Abstract Factory 2 O que veremos hoje? (padrão de criaçã) Adapter
Leia maisClasse Abstrata e Interface
Orientação a objetos com Java Classe Abstrata e Interface Byron Leite byron.leite@gmail.com 1 Herança Agenda Geral Parte 04 Encapsulamento Pacotes Modificadores de Acesso private, default, protected, public
Leia maisParadigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto
Suporte para Programação Orientada a Objeto Cristiano Lehrer Categoria das Linguagens que Suportam POO Suporte a POO acrescentado a uma linguagem já existente: C++ (também suporta programação procedural
Leia maisLinguagem de programação Programação Orientada a objetos
Instituto Federal de Minas Gerais Campus Ponte Nova Linguagem de programação Programação Orientada a objetos Professor: Saulo Henrique Cabral Silva Paradigma da orientação a objetos Paradigma = forma de
Leia maisHerança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.
Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Possibilita o reuso de classes (código-fonte) Usar quando:
Leia maisProgramação Java (nível intermediário) 4. Polimorfismo
Programação Java (nível intermediário) 4 Polimorfismo Introdução Uma linguagem orientada a objetos nos permite definir novos tipos para variáveis Nós definimos um novo tipo através de uma classe Este tipo
Leia maisMODELAGEM COM A UML (UNIFIED MODELING LANGUAGE)
MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE) g BREVE HISTÓRICO g CARACTERÍSTICAS g CONCEITOS DE PROGRAMAÇÃO ORIENTADA A OBJETOS g MODELAGEM DE ANÁLISE E DE PROJETO 1 I. BREVE HISTÓRICO Em fins dos anos
Leia maisInterfaces e Classes Abstratas
Interfaces e Classes Abstratas José Gustavo de Souza Paiva Problema Método obterarea()? Classes Abstratas Classes que funcionam como um molde Declarada com comando abstract Contém um ou mais métodos abstratos
Leia maisUniversidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores
Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise
Leia maisProgramação Orientada a Objectos - P. Prata, P. Fazendeiro
5 Polimorfismo Sobrecarga (overloading) de métodos: public class x { public void m1( ) {... sobrecarga do método m1 public void m1 ( int p ) {... - Diz-se que o nome de um método foi sobrecarregado ( overloaded
Leia maisInstituto de Informática Estrutura de Dados II
Instituto de Informática Estrutura de Dados II Revisão de Métodos em Classes Aplicada a Estrutura de Dados Básicas 20/08/2018 Profa. Lucília Gomes Ribeiro Prof. Dirson S Campos Programação em Java q O
Leia maisIntrodução a orientação a objetos
2 Introdução a orientação a objetos Introdução 2 Linguagens procedimentais 2 Um pouco de história 2 Idéias básicas da POO 2 Classe, atributo e método 2 Herança 3 Polimorfismo 3 Vantagens e desvantagens
Leia maisProgramação Orientada a Objetos HERANÇA E COMPOSIÇÃO
Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO Renato Dourado Maia Universidade Estadual de Montes Claros Engenharia de Sistemas Unidade IV Unidade IV Herança e Composição: Herança simples. Composição.
Leia maisDesenvolvimento Web II
Desenvolvimento Web II Linguagem PHP PHP Orientado a Objeto / Banco de Dados (PDO) https://secure.php.net/manual/pt_br/ Gil Eduardo de Andrade PHP Orientado a Objeto O PHP é uma linguagem de script que
Leia maisProgramação Orientada a Objetos
Curso Profissional de Gestão e Programação de Sistemas Informáticos Disciplina: Programação e Sistemas de Informação Programação Orientada a Objetos Módulos 9/10/11 POO 2016/2017 História A OO surgiu no
Leia maisVB.NET - Orientação a objetos : conceitos básicos em 10
lições. VB.NET - Orientação a objetos : conceitos básicos em 10 Lição 1 - Como criar classe e métodos. Instanciando um objeto e acessando o método da classe. - Para criar uma classe basta usar a palavra
Leia mais