Orientação a Objetos Classes Abstratas

Documentos relacionados
Classe Abstrata e Interface

Linguagem de Programação III

Modificadores de acesso e atributos de classe

Java Standard Edition (JSE)

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Computação II Orientação a Objetos

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Orientação a objetos. Objetos ou Instâncias I

Capítulo 2. Orientação a Objetos

Definição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Interfaces e Classes Abstratas

Notas de Aula 05: Diretivas de atributos, métodos e classes e o uso de Interfaces.

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Modificadores de Acesso JAVA

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Herança e Polimorfismo

Notas de Aula 04: Herança e polimorfismo.

Conceitos de Programação Orientada a Objetos

Orientação a Objetos - Herança

Programação Orientada a Objetos JAVA - NETBEANS

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Desenvolvimento Web TCC Turma A-1

POO29004 Programação Orientada a Objetos

Aula 2 Princípios Básicos da Orientação a Objetos (Parte II)

Programação Orientada a Objetos

Classes e Objetos. Sintaxe de classe em Java

Linguagens de Programação Aula 12

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

Orientação a Objetos AULA 06

Programação Orientada a Objetos

Pacotes Organizando suas classes e bibliotecas

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Lição 11 Herança, polimorfismo e interfaces

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

POO29004 Programação Orientada a Objetos

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

Java - Polimorfismo. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Linguagem de programação Programação Orientada a objetos

Java para Desktop. Programação Orientada à Objetos 2 JSE

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos

O PARADIGMA ORIENTADO POR OBJETOS

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

10. Classes Abstratas e Concretas

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Herança e Polimorfismo

Introdução à Programação. Encapsulamento e Herança

Java - Herança e Interface

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Computação II Orientação a Objetos

Programação por Objectos. Java

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Interface vs. Implementação Herança vs. Composição

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Generics - Java. Fernando Santos. Programação Orientada a Objetos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

Laboratório de programação II

Polimorfismo. O que é polimorfismo?

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Desenvolvimento OO com Java Classes abstratas e interfaces

Desenvolvimento Web II

Programação Orientada a Objetos para Redes de Computadores

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Transcrição:

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/ 1

Objetivos Dizer o que são classes abstratas e quando utilizá-las; 2

Ainda a classe Funcionário Vamos relembrar o código da classe Funcionário, base da hierarquia de classes representando os empregados de nossa empresa. 3

Polimorfismo A classe Funcionário permite que toda a hierarquia seja usada de forma polimórfica. 4

Hierarquia de Classes Observe que a classe Funcionário, superclasse de toda a hierarquia de empregados, é utilizada aqui com duas finalidades: Fornecer código comum às subclasses, evitando assim a duplicação de código Habilitar o polimorfismo, fornecendo uma referência comum a todas as classes da hierarquia. 5

Observação Quando uma classe é usada como uma referência polimórfica para todas as classes da hierarquia, somente os métodos definidos na interface da superclasse podem ser invocados usando a referência polimórfica. Discussão em sala de aula: a analogia com as televisões e o controle remoto. 6

Exemplo 7

Exemplo (continuação) A classe Funcionário não tem o método setsenha() erro de compilação. 8

Dúvidas Para o nosso domínio, faz sentido criar uma instância de Funcionário? O conceito de Funcionário não está abstrato demais? Todos os Funcionários não tem um tipo mais concreto (Gerente, Diretor, Presidente, Engenheiro, Secretária, etc)? Existe alguém na empresa classificado apenas como Funcionário? 9

Classes Abstratas Podem haver situações em que a superclasse da hierarquia é importante para: 1. fornecer código comum às subclasses 2. habilitar o polimorfismo (servir como referência comum a toda a hierarquia) No entanto, pode não fazer sentido criar uma instância da superclasse 10

Classes Abstratas Para impedir que uma classe seja instanciada, basta acrescentar a palavra reservada static a sua declaração. 11

Classes Abstratas Observe agora o que ocorre se tentarmos criar uma instância da classe Funcionário. 12

Classes Abstratas Assim como antes, podemos ainda estender a classe Funcionario e, se necessário, sobrescrever alguns métodos. 13

Métodos abstratos Uma vez que, no nosso exemplo, todo funcionário é um funcionário concreto (Diretor, Gerente, Engenheiro, Vendedor, etc.), com uma regra de negócio própria para o cálculo da bonificação, qual deve ser a implementação do método getbonificacao() na classe Funcionario? Em outras palavras, muitas vezes existem métodos para os quais não existe qualquer código comum para ser herdado pelas subclasses. Nesses casos, podemos tirar esses métodos da superclasse? 14

Métodos abstratos (continuação) Nesses casos, podemos tirar esses métodos da superclasse? Existem dois casos a considerar: 1. A superclasse está sendo usada somente para prover código comum às subclasses evitando assim a duplicação de código. Nesse caso, sim, métodos que são sobrescritos em todas as subclasses podem ser removidos da superclasse. 2. O objetivo da superclasse é fornecer uma interface comum de modo que as classes da hierarquia possam ser usadas de modo polimórfico. Nesse caso, se você tirar o método da superclasse ele não pode mais ser invocado polimorficamente (ainda que ele esteja presente nas subclasses). Nesse caso, qual deve ser a implementação do método na superclasse? 15

Métodos abstratos Existem casos em que nenhuma implementação faz sentido para um método na superclasse uma vez que todas as subclasses reescrevem o método. Nesses casos, podemos transformar o método na superclasse em um método abstrato. Repare, métodos abstratos não têm implementação. Nem mesmo um abre e fecha chaves. 16

Métodos abstratos Classes contendo métodos abstratos têm, obrigatoriamente, de ser declaradas como abstratas. (Discussão em sala de aula: por que?) As classes que estendem uma classe abstrata têm de, necessariamente, implementar todos os seus métodos abstratos (discussão em sala de aula: ou permanecerem elas também abstratas) 17

Métodos abstratos Como a classe ControleDeBonificacoes pode invocar o método getbonificacao() de Funcionario, se a classe Funcionario não tem uma implementação desse método? O método registra não recebe instâncias de Funcionario (como podemos ter certeza disso???) mas sim instâncias de Diretor, Gerente, etc. que têm implementações desse método (como podemos ter certeza disso???) 18

Aumentando o exemplo Observe a hierarquia a seguir. Ela vai compilar? Vai rodar? Que implementação de getbonificacao() será usada por uma instância de Diretor? 19

Aumentando o exemplo Observe a hierarquia a seguir. Ela vai compilar? Vai rodar? A classe Secretaria estende Funcionario mas não implementa o método getbonificacao(). Isto está certo? 20