SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
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
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
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
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(){...}
}
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}
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
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}
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)
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)
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
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’’);
}}
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’’
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
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’’
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
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
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

Weitere ähnliche Inhalte

Was ist angesagt? (19)

JAVA - Pacotes
JAVA - PacotesJAVA - Pacotes
JAVA - Pacotes
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Programando em python classes
Programando em python   classesProgramando em python   classes
Programando em python classes
 
Aula05
Aula05Aula05
Aula05
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Java 06
Java 06Java 06
Java 06
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Java 8 - New Features
Java 8 - New FeaturesJava 8 - New Features
Java 8 - New Features
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Função quadrática
Função quadráticaFunção quadrática
Função quadrática
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Pged 06
Pged 06Pged 06
Pged 06
 

Ähnlich wie Classes abstratas e operações abstratas

Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)jose-junior89
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaArthur Emanuel
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsDenis L Presciliano
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e ExercíciosArthur Emanuel
 

Ähnlich wie Classes abstratas e operações abstratas (20)

Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
Sistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de JavaSistemas Distribuídos - Aula 04 - Revisão de Java
Sistemas Distribuídos - Aula 04 - Revisão de Java
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Java5
Java5Java5
Java5
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
OOP Java
OOP JavaOOP Java
OOP Java
 
Java 14
Java 14Java 14
Java 14
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
3- POO
3- POO3- POO
3- POO
 
Poo
PooPoo
Poo
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
08 modificadores static
08   modificadores static08   modificadores static
08 modificadores static
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 

Classes abstratas e operações abstratas

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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