Classes Abstratas (I)
• Classe abstrata ´e uma classe que n˜ao tem instˆancias
diretas, mas cujas descendentes podem ter
•...
Classes Abstratas (II)
BombaDeSuccao
+ativa():void
BombaDiesel
+ativa():void
BombaDAgua
+ativa():void
operação abstrata
(s...
Classes e Opera¸c˜oes Abstratas (I)
• Em C++, uma classe abstrata ´e criada pela de-
clara¸c˜ao de pelo menos uma opera¸c˜...
Classes e Opera¸c˜oes Abstratas (II)
• A no¸c˜ao de classe abstrata abrange duas id´eias:
1. Impossibilidade de haver inst...
Classes e Opera¸c˜oes Abstratas (III)
não tem implentação na superclasse
dirigir()
{abstract}
Carro Barco
dirigir() dirigi...
Classes e Opera¸c˜oes Abstratas (IV)
• A classe Veiculo ´e abstrata, isso significa que os obje-
tos que as pessoas dirigem...
Classes e Opera¸c˜oes Abstratas (V)
B C
classes
abstratas
operação1()
A {root}
operação folha (não polimórfica)
operação a...
Classes e Opera¸c˜oes Abstratas (VI)
• Em UML, o nome de uma classe (ou opera¸c˜ao abs-
trata ´e escrito em it´alico
• As ...
Classes e Opera¸c˜oes Abstratas (VII)
• Uma classe raiz (“root”) n˜ao tem classe base. Ela
n˜ao ´e derivada de classe algu...
Exemplo: Hierarquia de Classes para Ra¸ca
de C˜aes (I)
Cachorro
+mostraRaca():void
Boxer
+mostraRaca():void
Cocker
+mostra...
Exemplo: Hierarquia de Classes para Ra¸ca
de C˜aes (II)
class Cachorro{
public void mostrarRaca(){
System.out.println(‘‘Ra...
Exemplo: Hierarquia de Classes para Ra¸ca
de C˜aes (III)
Cachorro apCach; // refer^encia para objetos do tipo
//Cachorro e...
Hierarquia de Ra¸cas Modificada (I)
Cachorro
+mostraRaca():void
Boxer
+mostraRaca():void
Cocker
+mostraRaca():void
Schnauze...
Hierarquia de Ra¸cas Modificada (II)
Cachorro aoCach;
apCach = new Cachorro(); // ERRO: instanciacao
// de classe abstrata
...
Exemplo: Figuras Gr´aficas (I)
Figura
−linha:.
−coluna:.
+mostra():void
+esconde():void
+move(dr:int,dc:int):void {leaf}
Li...
Exemplo: Figuras Gr´aficas (II)
abstract class Figura{
protected int linha;
protected int coluna;
public Figura(int r, int ...
Exemplo: Figuras Gr´aficas (III)
• Note que moveAoRedor() ´e declarada como “leaf”, e,
portanto, implementa acoplamento est...
Próximos SlideShares
Carregando em…5
×

Class abstrata java

143 visualizações

Publicada em

Class abstrata em java

Publicada em: Internet
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
143
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Class abstrata java

  1. 1. Classes Abstratas (I) • Classe abstrata ´e uma classe que n˜ao tem instˆancias diretas, mas cujas descendentes podem ter • Classe concreta ´e uma classe que pode ser instanci- ada • Uma classe abstrata pode definir o protocolo para uma opera¸c˜ao sem fornecer o c´odigo correspondente • Uma opera¸c˜ao ´e chamada abstrata quando ela n˜ao tem implementa¸c˜ao
  2. 2. Classes Abstratas (II) BombaDeSuccao +ativa():void BombaDiesel +ativa():void BombaDAgua +ativa():void operação abstrata (sem implementação) classe abstrata redefiniçao da operação abstrata redefiniçao da operação abstrata
  3. 3. Classes e Opera¸c˜oes Abstratas (I) • Em C++, uma classe abstrata ´e criada pela de- clara¸c˜ao de pelo menos uma opera¸c˜ao abstrata (pure virtual) Exemplo: virtual void operacaoAbstrata(...) = 0; • Toda opera¸c˜ao abstrata utiliza acoplamento dinˆamico • Em Java, uma opera¸c˜ao abstrata ´e definida atrav´es do modificador abstract
  4. 4. Classes e Opera¸c˜oes Abstratas (II) • A no¸c˜ao de classe abstrata abrange duas id´eias: 1. Impossibilidade de haver instˆancias diretas (obri- gatoriamente) 2. Presen¸ca de opera¸c˜oes abstratas (n˜ao necessaria- mente) • Em Java, ´e poss´ıvel definir uma classe abstrata sem nenhuma opera¸c˜ao abstrata usando o modificador abstract para a classe: abstract class Quarto{...} • Em Java, a presen¸ca de uma opera¸c˜ao abstrata numa classe, torna a classe implicitamente abstrata: class Quarto{ abstract void ocupar(){...} }
  5. 5. Classes e Opera¸c˜oes Abstratas (III) não tem implentação na superclasse dirigir() {abstract} Carro Barco dirigir() dirigir() {código para {código para Pessoa dirige dirigir Carro()} dirigir Barco()} Veículo{abstract}
  6. 6. Classes e Opera¸c˜oes Abstratas (IV) • A classe Veiculo ´e abstrata, isso significa que os obje- tos que as pessoas dirigem s˜ao instˆancias das classes concretas Carro e Barco • Quando uma pessoa chama a opera¸c˜ao dirigir() para uma vari´avel do tipo Veiculo, o efeito obtido depende do tipo do objeto que ´e referenciado na ocasi˜ao • Se for um objeto da classe Barco, a opera¸c˜ao dirigir() aciona a h´elice do barco usando a implementa¸c˜ao es- pecificada na classe Barco • Se for um objeto da classe Carro, a opera¸c˜ao dirigir() aciona o motor que faz as rodas do carro moverem usando a implementa¸c˜ao especificada na classe Carro
  7. 7. Classes e Opera¸c˜oes Abstratas (V) B C classes abstratas operação1() A {root} operação folha (não polimórfica) operação abstata (em itálico) e polimórfica classe base (não tem classes pais) operação4(p:Tipo) operação2() (em itálico) D F operação 1() operação 1() operação1() classe folha (não tem classes filhas) classes concretas classes concretas operação polimórfica operação4(p,q:Tipo) operação redefinida e concreta operação redefinida operação3() {leaf} classe abstrata operações sobrecarregadas operação2() E {leaf}
  8. 8. Classes e Opera¸c˜oes Abstratas (VI) • Em UML, o nome de uma classe (ou opera¸c˜ao abs- trata ´e escrito em it´alico • As classes A, B e C s˜ao abstratas. Nenhuma delas pode gerar instˆancias dietas • As classes D, E e F s˜ao concretas, isto ´e, elas podem gerar instˆancias atrav´es do uso de seus construtores (por exemplo, new D()) • Uma classe folha (“leaf”) n˜ao tem classes deriva- das (equivale ao modificador de final Java aplicado `a classe)
  9. 9. Classes e Opera¸c˜oes Abstratas (VII) • Uma classe raiz (“root”) n˜ao tem classe base. Ela n˜ao ´e derivada de classe alguma do sistema e indica o in´ıcio de uma hierarquia de classes. Exemplo: classe Object em Java • Uma opera¸c˜ao folha (“leaf”) ´e considerada n˜ao po- lim´orfica e n˜ao pode ser redefinida em lugar algum da hierarquia (equivale ao modificador final de Java aplicado a uma opera¸c˜ao) • Em UML, uma opera¸c˜ao ´e polim´orfica por defini¸c˜ao; significando que ´e poss´ıvel redefinir opera¸c˜oes com a mesma assinatura em diversos pontos da hierarquia de classes (mesma semˆantica de Java)
  10. 10. Exemplo: Hierarquia de Classes para Ra¸ca de C˜aes (I) Cachorro +mostraRaca():void Boxer +mostraRaca():void Cocker +mostraRaca():void Schnauzer +mostraRaca():void Miniatura +mostraRaca():void Padrao +mostraRaca():void operação polimórfica e concreta operação redefinida e concreta operação redefinida e concreta classe concreta
  11. 11. Exemplo: Hierarquia de Classes para Ra¸ca de C˜aes (II) class Cachorro{ public void mostrarRaca(){ System.out.println(‘‘Ra¸ca n~ao definida’’); }} class Schnauzer extends Cachorro{ public void mostrarRaca(){ System.out.println(‘‘Ra¸ca Schnauzer’’); }} class Miniatura extends Schnauzer{ public void mostrarRaca(){ System.out.println(‘‘Ra¸ca Schnauzer miniatura’’); }}
  12. 12. Exemplo: Hierarquia de Classes para Ra¸ca de C˜aes (III) Cachorro apCach; // refer^encia para objetos do tipo //Cachorro e seus subtipos apCach = new Schnauzer(); apCach.mostrarRaca(); // imprime ‘‘Ra¸ca Schnauzer’’ apCach = new Miniatura(); apCach.mostrarRaca(); // imprime ‘‘Ra¸ca // Schnauzer miniatura’’ apCach = new Cachorro(); apCach.mostrarRaca(); // imprime ‘‘Ra¸ca n~ao definida’’
  13. 13. Hierarquia de Ra¸cas Modificada (I) Cachorro +mostraRaca():void Boxer +mostraRaca():void Cocker +mostraRaca():void Schnauzer Miniatura +mostraRaca():void Padrao +mostraRaca():void operação polimórfica e abstrata classe abstrata operação não redefinida operação redefinida e concreta classe abstrata Gigante +mostraRaca():void
  14. 14. Hierarquia de Ra¸cas Modificada (II) Cachorro aoCach; apCach = new Cachorro(); // ERRO: instanciacao // de classe abstrata apCach = new Schnauzer(); // ERRO: instanciacao // de classe abstrata apCach = new Miniatura(); // OK: instanciacao // de classe concreta apCach.mostrarRaca(); // imprime ‘‘Ra¸ca // Schnauzer miniatura’’ apCach = new Boxer(); // OK: instanciacao // de classe concreta apCach.mostrarRaca(); // imprime ‘‘Ra¸ca // Boxer’’
  15. 15. Exemplo: Figuras Gr´aficas (I) Figura −linha:. −coluna:. +mostra():void +esconde():void +move(dr:int,dc:int):void {leaf} Linha −extremos:. +mostra():void +esconde():void Arco −angulo:. +mostra():void +esconde():void Triangulo −altura:. +mostra():void +esconde():void chama esconde() e mostra() Classe abstrata
  16. 16. Exemplo: Figuras Gr´aficas (II) abstract class Figura{ protected int linha; protected int coluna; public Figura(int r, int c){ // construtor linha = r; coluna = c;} public abstract void mostra(); // op. abstrata public abstract void esconde(); // op. abstrata public final void move(int dr, int dc){ this.esconde(); linha += dr; coluna += dc; this.mostra(); } } // fim da classe Figura
  17. 17. Exemplo: Figuras Gr´aficas (III) • Note que moveAoRedor() ´e declarada como “leaf”, e, portanto, implementa acoplamento est´atico • Esse m´etodo representa um ponto de congelamento (“frozen spot”) da hierarquia de classes. Isto ´e, ele n˜ao pode ser redefinido em lugar algum • O m´etodo moveAoRedor() chama dois outros m´etodos polim´orficos para executar a¸c˜oes dependentes de cada tipo de objeto (Linha, Arco e triˆangulo) • Os m´etodos mostra() e esconde() s˜ao chamados de pon- tos de adapta¸c˜ao (“hot spots”) da hierarquia de clas- ses, pois s˜ao polim´orficos e podem ser redefinidos em diversos pontos da hierarquia

×