SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Programação Orientada a
Objetos – Parte 2
Técnicas de Programação
Prof. Iális Cavalcante
Engenharia da Computação
2011.1
Tópicos a serem trabalhados
 Polimorfismo
 Sobrecarga
 Herança múltipla (interface e classes
 abstratas)
Introdução
                    Mensagem: “Desenha!”




 Objeto da classe      Objeto da classe    Objeto da classe
   Quadrado                Circulo            Triangulo
Introdução
                       Objeto da classe
                         Quadrado



    Mensagem:             Mensagem:            Mensagem:
“Desenha Quadrado!”   “Desenha Quadrado    “Desenha Quadrado
                         Preenchido!”         Preenchido e
                                          com Rotação de 30°!”
POLIMORFISMO
Polimorfismo
 Projetar sistemas mais extensíveis.
 No decorrer da hierarquia, modificar métodos:
 ◦ Alterando seu comportamento de acordo com o
   objetivo da classe;
 ◦ Mantendo a estrutura definida na hierarquia.
 Mesma mensagem para diferentes objetos assume
 “diferentes formas” de resultados.
Polimorfismo
     Classificação de Polimorfismo

                                     Polimorfismo




              Universal                                          Ad-Hoc




Paramétrico               Inclusão                  Sobrecarga            Coerção
Polimorfismo
Polimorfismo Paramétrico
◦ Java não oferece um mecanismo generalizado que implemente o
  polimorfismo paramétrico de tipos.
◦ Exemplo: tipo array pré-definido em Java.
◦ O tipo array possui um conjunto de funções características:
    int vetor [ ];
    vetor = new int[11]; // cria um vetor com 11 elementos
    vetor.length( ); // número máximo de elementos armazenados
    vetor[int i]; // obtém a referência do i-ésimo elemento armazenado em vetor
◦ O tipo array é declarado através do símbolo [ ] , int funciona como
  parâmetro para a construção do array.
◦ Proposta de polimorfismo paramétrico de tipos em Java: Generics
  (Genéricos).
    Disponível na versão 1.5 do Java SDK.
Polimorfismo
 Polimorfismo de Inclusão
 ◦ É o estilo de polimorfismo encontrado em todas as
   linguagens orientadas a objetos.
 ◦ Ele está relacionado com a existência da hierarquia de
   generalização/especialização e com o conceito de
   subtipo.
 ◦ Definição de Subtipo: Um tipo S é um subtipo de
   T se e somente se S proporciona pelo menos o
   comportamento de T.
 ◦ A noção de subtipo implica que elementos do
   subconjunto também pertencem ao superconjunto.
Polimorfismo de Inclusão
 (sem redefinição de métodos)
  ContaCorrente
 -nome titular
 -numero
                       ContaCorrente c = new ContaCorrente(...);
 -senha
 -saldo                c.debitaValor(...);
 +creditaValor         // c pode também referenciar uma conta especial
 +debitaValor
 +getSaldo
                       c = new ContaEspecial(...);
                       c.debitaValor(...); // Ok
                       c.alteraLimite(...); // Erro
   ContaEspecial       ((ContaEspecial) c).alteraLimite(...); // Ok
-limite

+alteraLimite
+getCreditoUtilizado
Polimorfismo de Inclusão
 O polimorfismo de inclusão foi batizado
 com esse nome porque as operações
 polimórficas de um tipo estão “incluídas”
 nos seus subtipos.
 A classe Object é a raiz de qualquer classe
 criada em Java.
 Os métodos da classe Object são exemplos
 de polimorfismo de inclusão, pois eles são
 capazes de operar uniformemente sobre
 objetos de qualquer tipo em Java.
Polimorfismo de Inclusão (com redefinição de
métodos)
                          O que está implantado no método debitaValor
                          de ContaCorrente não está em ContaEspecial.
                          Portanto, esse método deve ser redefinido na
 ContaCorrente            classe ContaEspecial, podendo assumir
                          comportamento diferente.
 +creditaValor         ContaCorrente c1 = new ContaCorrente( );
 +debitaValor
 +getSaldo             ContaEspecial c2 = new ContaEspecial( );
                       c1 = c2; // atribuição válida
                          A atribuição c1 = c2 acopla dinamicamente à
                          variável c1 do tipo ContaCorrente um objeto de
  ContaEspecial           um tipo diferente (isto é, tipo ContaEspecial) do
                          seu tipo estático.
+alteraLimite
+getCreditoUtilizado
                          Em princípio, seria uma violação de tipo atribuir
+debitaValor              um objeto de um tipo diferente à variável c1 que,
                          de acordo com a sua especificação de tipo, deve
                          referenciar apenas objetos do tipo
                          ContaCorrente.
Polimorfismo de Inclusão (com
redefinição de métodos)
  No entanto, se ContaEspecial é um subtipo de
  ContaCorrente a atribuição é válida.

c1.debitaValor( ); //ativa ContaCor :: debitaValor()
c1 = c2;
c1.debitaValor( ); // ativa ContaEsp :: debitaValor()


  Em Java, a operação da classe base deve ser apenas
  redefinida na classe derivada.
   Ponto Crucial: Todas as operações redefinidas na
  classe derivada tem a responsabilidade de manter a
  mesma semântica dos serviços oferecidos pela classe
  base.
Polimorfismo
            Superclasse
                                Forma



  Circulo       Triangulo                   Retangulo   Quadrado
                            Subclasses
                 public void desenha() { (...) }
Polimorfismo - Exemplo
public abstract class Empregado {
  private String primeiroNome;
  private String ultimoNome;
  /** construtor */
  public Empregado (String primeiro, String ultimo) {
    primeiroNome = primeiro;      ultimoNome = ultimo;    }


  public String getPrimeiroNome(){ return primeiroNome; }
  public String getUltimoNome(){ return ultimoNome; }
  public String toString(){ return primeiroNome+“  ”+ultimoNome; }
  public abstract double lucros();     
} // fim da classe Empregado
Polimorfismo - Exemplo
public final class Chefe extends Empregado {
  private double salarioSemanal;
  /** construtor */
  public Chefe(String primeiro, String ultimo, double salario) {
      super(primeiro,ultimo);
      setSalarioSemanal(salario);
  }
  public void setSalarioSemanal(double salario){
      salarioSemanal = ( salario>0 ? salario : 0.0 );
  }
  public double lucros(){ return salarioSemanal; }
  public String toString(){
      return “Chefe:  ”+super.toString();
  }
} // fim da classe Chefe
Polimorfismo - Exemplo
public final class TrabalhadorPorProducao extends Empregado {
  private double pagamentoPorPeca;
  private int quantidade;
  /** construtor */
  public TrabalhadorPorProducao(String primeiro, String ultimo, 
           double pagamento, int numeroDeItens) {
      super(primeiro, ultimo);
      setPagamento (pagamento);
      setQuantidade(numeroDeItens);
  }
  public void setPagamento(double pagamento){ 
        pagamentoPorPeca = (pagamento>0.0 ? pagamento : 0.0); }
  public void setQuantidade(int numeroDeItens){ 
        quantidade = (numeroDeItens>0 ? numeroDeItens : 0); }
  public double lucros(){ return pagamentoPorPeca * quantidade; }
  public String toString(){
        return “Trabalhado por produção: ”+super.toString();}
} // fim da classe TrabalhadorPorProducao
Polimorfismo - Exemplo
public class Teste {
    public static void main(String args[]) {
        Empregado empregado; // referência para a superclasse
        String output = “ ”;
        Chefe  chefe = new Chefe(“João”, “Lopes”,800.0);
        TrabalhadorPorProducao porProducao = 
               new TrabalhadorPorProducao(“Roberto”, “Carlos”,2.5,200);
        empregado = chefe; // referencia Empregado para um Chefe
        output += empregado.toString()+“ ganhou R$ ” +empregado.lucros()+“n”+
            chefe.toString()+“ ganhou R$ ”+chefe.lucros()+“n”;        
        empregado = porProducao; // referência Empregado para um TrabalhadorPorProducao
        output += empregado.toString()+“ ganhou R$ ”+empregado.lucros()+“n”+
            porProducao.toString()+“ ganhou R$ ”+porProducao.lucros()+“n”;
        System.out.println(output);
    }
}
Polimorfismo - Exemplo
 Saída:


    Chefe: Joao Lopes ganhou R$ 800.0
    Chefe: Joao Lopes ganhou R$ 800.0
    Trabalhado por produção: Roberto Carlos ganhou R$ 500.0
    Trabalhado por produção: Roberto Carlos ganhou R$ 500.0
SOBRECARGA
Coerção e Sobrecarga
 Coerção: A linguagem tem um mapeamento interno
 entre tipos. Forma limitada de polimorfismo. Se num
 contexto particular o tipo requerido é diferente do tipo
 dado, a linguagem verifica se existe uma coerção
 (conversão de tipos).
 ◦ Exemplo: se uma função soma( ) é definida como tendo 2
   parâmetros reais, e um inteiro e um real são passados, o inteiro
   é convertido para real.
  Sobrecarga: Permite que um “nome de função” possa
 ser usado mais de uma vez com diferentes tipos de
 parâmetros.
 ◦ Exemplo: uma função soma com 2 parâmetros inteiros e uma
   função soma com 2 parâmetros reais. A informação sobre os
   tipos dos parâmetros é usada para selecionar a função
   apropriada.
Exemplos de Coerção em Java
 Em Java são executadas as seguintes conversões
 implicitamente :
 ◦ byte para short, int, long, float ou double
 ◦ short para int, long, float ou double
 ◦ char para int, long, float ou double
 ◦ int para long, float ou double
 ◦ long para float ou double
 ◦ float para double
 Todas essas conversões são consideradas promoções
 de tipo, isto é, o valor inicial é um tipo cujo domínio
 está contido no domínio do tipo resultante. Não pode
 haver truncamento no resultado.
  Conversão entre inteiros (short, int ou long) e entre
 reais (float ou double) pode resultar em perda de
 precisão.
Exemplos de Sobrecarga em Java
 Sobrecarga de métodos construtores:
 ◦ public ContaCorrente ( ); // construtor default
 ◦ public ContaCorrente (String nome, float val, int num, int pwd) { ...}

 Sobrecarga de Operadores: quando um operador da
 linguagem pode ter diferentes significados, dependendo
 do tipo do parâmetro aplicado.
 Exemplo: a + = b
 ◦ Significado (1) : “adicione o valor b ao atributo a”.
 ◦ Significado (2) : “inclua o elemento b no conjunto a”.
 Java não permite sobrecarga de operadores, apenas de
 métodos.
 C++ permite sobrecarga de operadores e de métodos.
Sobrecarga
                                Quadrado




                   public void desenhaQuadrado() { (...) }

          public void desenhaQuadrado(boolean preenchido) { (...) }

public void desenhaQuadrado(boolean preenchido, double rotacionado) { (...) }
Redefinição x Sobrecarga de
Métodos
 Redefinição: o novo método deve ter a mesma
 assinatura do método herdado, isto é, eles devem
 ser idênticos quanto ao nome da operação e à lista
 de parâmetros (mesmo número de parâmetros,
 com os mesmos tipos e declarados na mesma
 ordem).
 O tipo do resultado de retorno não faz parte da
 assinatura do método e não pode ser mudado.
 Sobrecarga: Ocorre quando existe apenas
 coincidência nos nomes dos métodos; isto é, as
 listas de parâmetros não são idênticas.
HERANÇA MÚLTIPLA*
Herança Múltipla
 Para começo de conversa, não se permite
 herança múltipla em Java.
 A herança utiliza a relação “é um”:
 ◦   Carro “é um” Veículo;
 ◦   Fusca “é um” Carro;
 ◦   Círculo “é um” Ponto;
 ◦   Cilindro “é um” Círculo;
 Herança múltipla pode provocar redundância na
 definição de métodos, exigindo regras especiais;
 Java não suporta este recurso mas permite uma
 alternativa: uso de interfaces.
Herança Múltipla
 Herança múltipla pode ser perigoso: “Losango Mortal” –
 DDD (Deadly Diamond of Death):
                   DigitalRecorder
                  int i
                  burn( )



    CDBurner                          DVDBurner



   burn( )                           burn( )



                     ComboDriver
Herança Múltipla
 Utilizando interfaces, permite-se os benefícios
 polimórficos (já que interface é com uma classe
 100% abstrata) sem a ameaça do Losango
 Mortal.
 Todos os métodos de uma interface são
 abstratos:
 ◦ Cada subclasse deve implementar o método herdado;
 ◦ Evita a confusão da JVM de qual versão herdada deve
   utilizar;
 ◦ Uma classe pode implementar diversas interfaces;
 ◦ Pode ainda uma mesma classe herdar de outra classe
   e implementar uma interface ao mesmo tempo.
Herança Múltipla - Exemplo
public interface Padrao {
    public double soma(double valor1, double valor2);
    public double subtracao(double valor1, double valor2);
    public double multiplicacao(double valor1, double valor2);
    public double divisao(double valor1, double valor2);
}


public interface Cientifica {
    public double exponencial(double valor);
    public double logaritmo(double valor);
    public int fatorial(int valor);
}
Herança Múltipla - Exemplo
public class Calculadora implements Padrao, Cientifica {
    // atributos privados
    private double numero1;    private double numero2;
    // sobrecarga dos construtores
    public Calculadora(double num1, double num2) {
          this.numero1 = num1;     this.numero2 = num2;    }
    public Calculadora(double num1) {  this.numero1 = num1;  this.numero2 = 0;  }
    public Calculadora() {   this.numero1 = 0.0;    this.numero2 = 0.0;   }
    // métodos implementados de Padrao
    public double soma(double valor1, double valor2){ return valor1+valor2; }
    public double subtracao(double valor1, double valor2){ return valor1‐valor2; }
    public double multiplicacao(double valor1, double valor2){ 
          return valor1*valor2; }
    public double divisao(double valor1, double valor2){ return valor1/valor2; }
(...)
Herança Múltipla - Exemplo
(...)
    // métodos implementados de Cientifica
    public double exponencial(double valor){ return Math.exp(valor); }
    public double logaritmo(double valor){ return Math.log(valor); }
    public int fatorial(int valor){
        int fatorial = 1;
        for(int ind = 1; ind <= valor; ind++){ fatorial *= ind; }
        return fatorial; /* retorna o fatorial (n!) de valor */
    }
    // método principal
    public static void main(String args[]){
        Calculadora app = new Calculadora();
        System.out.println(“fatorial: ”+app.fatorial(3));
    }
}

Weitere ähnliche Inhalte

Was ist angesagt?

Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objetoGleyciana Garrido
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003elliando dias
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portuguesLaura
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 

Was ist angesagt? (20)

Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objeto
 
POO - 07 - Operadores do Java
POO - 07 - Operadores do  JavaPOO - 07 - Operadores do  Java
POO - 07 - Operadores do Java
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
Java2
Java2Java2
Java2
 
Java7
Java7Java7
Java7
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
Final e aastract
Final e aastractFinal e aastract
Final e aastract
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Atribuições
AtribuiçõesAtribuições
Atribuições
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Java5
Java5Java5
Java5
 
Javascript avançado
Javascript avançadoJavascript avançado
Javascript avançado
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 

Andere mochten auch

HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
POO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfacePOO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfaceFelipe J. R. Vieira
 
POO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetosPOO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetosFelipe J. R. Vieira
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClasseFelipe J. R. Vieira
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java Evandro Júnior
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 

Andere mochten auch (15)

POO Herança
POO HerançaPOO Herança
POO Herança
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 
PCII - AULA 2: HERANÇA EM JAVA
PCII -  AULA 2: HERANÇA EM JAVAPCII -  AULA 2: HERANÇA EM JAVA
PCII - AULA 2: HERANÇA EM JAVA
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
POO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfacePOO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e Interface
 
POO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetosPOO - Aula 04 - Introdução a classes e objetos
POO - Aula 04 - Introdução a classes e objetos
 
POO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - DatasPOO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - Datas
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de Classe
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 

Ähnlich wie 05 poo-ii

Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
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
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Funções PHP - Criação de sites II
Funções PHP - Criação de sites II Funções PHP - Criação de sites II
Funções PHP - Criação de sites II info_cimol
 
Minicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPRMinicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPRLucas Antonio Ramos Sartori
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01John Godoi
 
Poo1 aula 6 - conversão de tipos primitivos
Poo1   aula 6 - conversão de tipos primitivosPoo1   aula 6 - conversão de tipos primitivos
Poo1 aula 6 - conversão de tipos primitivosDenis Sobrenome
 

Ähnlich wie 05 poo-ii (20)

Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Java 05 Oo Basica
Java 05 Oo BasicaJava 05 Oo Basica
Java 05 Oo Basica
 
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
 
Aula5
Aula5Aula5
Aula5
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Funções PHP - Criação de sites II
Funções PHP - Criação de sites II Funções PHP - Criação de sites II
Funções PHP - Criação de sites II
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Minicurso kotlin UTFPR
Minicurso kotlin UTFPR Minicurso kotlin UTFPR
Minicurso kotlin UTFPR
 
Minicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPRMinicurso kotlin no desenvolvimento mobile - UTFPR
Minicurso kotlin no desenvolvimento mobile - UTFPR
 
Aula4
Aula4Aula4
Aula4
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Poo1 aula 6 - conversão de tipos primitivos
Poo1   aula 6 - conversão de tipos primitivosPoo1   aula 6 - conversão de tipos primitivos
Poo1 aula 6 - conversão de tipos primitivos
 

Mehr von Ialis Cavalcante (15)

Assembleia com os Discentes - SACEC
Assembleia com os Discentes - SACECAssembleia com os Discentes - SACEC
Assembleia com os Discentes - SACEC
 
Minicurso Ercemapi 2011
Minicurso Ercemapi 2011Minicurso Ercemapi 2011
Minicurso Ercemapi 2011
 
Unidade7 1
Unidade7 1Unidade7 1
Unidade7 1
 
Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
Unidade06
Unidade06Unidade06
Unidade06
 
Introducao ao greenfoot
Introducao ao greenfootIntroducao ao greenfoot
Introducao ao greenfoot
 
Dinamicas
DinamicasDinamicas
Dinamicas
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
Unidade05
Unidade05Unidade05
Unidade05
 
Unidade04
Unidade04Unidade04
Unidade04
 
Unidade03
Unidade03Unidade03
Unidade03
 
Unidade02
Unidade02Unidade02
Unidade02
 
Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009
 
CCT 23Maio2009 Sobral
CCT 23Maio2009 SobralCCT 23Maio2009 Sobral
CCT 23Maio2009 Sobral
 
Introducao ao LaTeX
Introducao ao LaTeXIntroducao ao LaTeX
Introducao ao LaTeX
 

Kürzlich hochgeladen

Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...marcelafinkler
 
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdfAula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdfKarinaSouzaCorreiaAl
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Centro Jacques Delors
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedJaquelineBertagliaCe
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...AnaAugustaLagesZuqui
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...MariaCristinaSouzaLe1
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptxMarlene Cunhada
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...azulassessoria9
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...DirceuNascimento5
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º anoRachel Facundo
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxMarcosLemes28
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...marcelafinkler
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxAntonioVieira539017
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticash5kpmr7w7
 

Kürzlich hochgeladen (20)

Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdfAula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 

05 poo-ii

  • 1. Programação Orientada a Objetos – Parte 2 Técnicas de Programação Prof. Iális Cavalcante Engenharia da Computação 2011.1
  • 2. Tópicos a serem trabalhados Polimorfismo Sobrecarga Herança múltipla (interface e classes abstratas)
  • 3. Introdução Mensagem: “Desenha!” Objeto da classe Objeto da classe Objeto da classe Quadrado Circulo Triangulo
  • 4. Introdução Objeto da classe Quadrado Mensagem: Mensagem: Mensagem: “Desenha Quadrado!” “Desenha Quadrado “Desenha Quadrado Preenchido!” Preenchido e com Rotação de 30°!”
  • 6. Polimorfismo Projetar sistemas mais extensíveis. No decorrer da hierarquia, modificar métodos: ◦ Alterando seu comportamento de acordo com o objetivo da classe; ◦ Mantendo a estrutura definida na hierarquia. Mesma mensagem para diferentes objetos assume “diferentes formas” de resultados.
  • 7. Polimorfismo Classificação de Polimorfismo Polimorfismo Universal Ad-Hoc Paramétrico Inclusão Sobrecarga Coerção
  • 8. Polimorfismo Polimorfismo Paramétrico ◦ Java não oferece um mecanismo generalizado que implemente o polimorfismo paramétrico de tipos. ◦ Exemplo: tipo array pré-definido em Java. ◦ O tipo array possui um conjunto de funções características: int vetor [ ]; vetor = new int[11]; // cria um vetor com 11 elementos vetor.length( ); // número máximo de elementos armazenados vetor[int i]; // obtém a referência do i-ésimo elemento armazenado em vetor ◦ O tipo array é declarado através do símbolo [ ] , int funciona como parâmetro para a construção do array. ◦ Proposta de polimorfismo paramétrico de tipos em Java: Generics (Genéricos). Disponível na versão 1.5 do Java SDK.
  • 9. Polimorfismo Polimorfismo de Inclusão ◦ É o estilo de polimorfismo encontrado em todas as linguagens orientadas a objetos. ◦ Ele está relacionado com a existência da hierarquia de generalização/especialização e com o conceito de subtipo. ◦ Definição de Subtipo: Um tipo S é um subtipo de T se e somente se S proporciona pelo menos o comportamento de T. ◦ A noção de subtipo implica que elementos do subconjunto também pertencem ao superconjunto.
  • 10. Polimorfismo de Inclusão (sem redefinição de métodos) ContaCorrente -nome titular -numero ContaCorrente c = new ContaCorrente(...); -senha -saldo c.debitaValor(...); +creditaValor // c pode também referenciar uma conta especial +debitaValor +getSaldo c = new ContaEspecial(...); c.debitaValor(...); // Ok c.alteraLimite(...); // Erro ContaEspecial ((ContaEspecial) c).alteraLimite(...); // Ok -limite +alteraLimite +getCreditoUtilizado
  • 11. Polimorfismo de Inclusão O polimorfismo de inclusão foi batizado com esse nome porque as operações polimórficas de um tipo estão “incluídas” nos seus subtipos. A classe Object é a raiz de qualquer classe criada em Java. Os métodos da classe Object são exemplos de polimorfismo de inclusão, pois eles são capazes de operar uniformemente sobre objetos de qualquer tipo em Java.
  • 12. Polimorfismo de Inclusão (com redefinição de métodos) O que está implantado no método debitaValor de ContaCorrente não está em ContaEspecial. Portanto, esse método deve ser redefinido na ContaCorrente classe ContaEspecial, podendo assumir comportamento diferente. +creditaValor ContaCorrente c1 = new ContaCorrente( ); +debitaValor +getSaldo ContaEspecial c2 = new ContaEspecial( ); c1 = c2; // atribuição válida A atribuição c1 = c2 acopla dinamicamente à variável c1 do tipo ContaCorrente um objeto de ContaEspecial um tipo diferente (isto é, tipo ContaEspecial) do seu tipo estático. +alteraLimite +getCreditoUtilizado Em princípio, seria uma violação de tipo atribuir +debitaValor um objeto de um tipo diferente à variável c1 que, de acordo com a sua especificação de tipo, deve referenciar apenas objetos do tipo ContaCorrente.
  • 13. Polimorfismo de Inclusão (com redefinição de métodos) No entanto, se ContaEspecial é um subtipo de ContaCorrente a atribuição é válida. c1.debitaValor( ); //ativa ContaCor :: debitaValor() c1 = c2; c1.debitaValor( ); // ativa ContaEsp :: debitaValor() Em Java, a operação da classe base deve ser apenas redefinida na classe derivada. Ponto Crucial: Todas as operações redefinidas na classe derivada tem a responsabilidade de manter a mesma semântica dos serviços oferecidos pela classe base.
  • 14. Polimorfismo Superclasse Forma Circulo Triangulo Retangulo Quadrado Subclasses public void desenha() { (...) }
  • 15. Polimorfismo - Exemplo public abstract class Empregado { private String primeiroNome; private String ultimoNome; /** construtor */ public Empregado (String primeiro, String ultimo) { primeiroNome = primeiro;      ultimoNome = ultimo;    } public String getPrimeiroNome(){ return primeiroNome; } public String getUltimoNome(){ return ultimoNome; } public String toString(){ return primeiroNome+“  ”+ultimoNome; } public abstract double lucros();      } // fim da classe Empregado
  • 16. Polimorfismo - Exemplo public final class Chefe extends Empregado { private double salarioSemanal; /** construtor */ public Chefe(String primeiro, String ultimo, double salario) { super(primeiro,ultimo); setSalarioSemanal(salario); } public void setSalarioSemanal(double salario){ salarioSemanal = ( salario>0 ? salario : 0.0 ); } public double lucros(){ return salarioSemanal; } public String toString(){ return “Chefe:  ”+super.toString(); } } // fim da classe Chefe
  • 17. Polimorfismo - Exemplo public final class TrabalhadorPorProducao extends Empregado { private double pagamentoPorPeca; private int quantidade; /** construtor */ public TrabalhadorPorProducao(String primeiro, String ultimo,  double pagamento, int numeroDeItens) { super(primeiro, ultimo); setPagamento (pagamento); setQuantidade(numeroDeItens); } public void setPagamento(double pagamento){  pagamentoPorPeca = (pagamento>0.0 ? pagamento : 0.0); } public void setQuantidade(int numeroDeItens){  quantidade = (numeroDeItens>0 ? numeroDeItens : 0); } public double lucros(){ return pagamentoPorPeca * quantidade; } public String toString(){ return “Trabalhado por produção: ”+super.toString();} } // fim da classe TrabalhadorPorProducao
  • 18. Polimorfismo - Exemplo public class Teste { public static void main(String args[]) { Empregado empregado; // referência para a superclasse String output = “ ”; Chefe  chefe = new Chefe(“João”, “Lopes”,800.0); TrabalhadorPorProducao porProducao =  new TrabalhadorPorProducao(“Roberto”, “Carlos”,2.5,200); empregado = chefe; // referencia Empregado para um Chefe output += empregado.toString()+“ ganhou R$ ” +empregado.lucros()+“n”+ chefe.toString()+“ ganhou R$ ”+chefe.lucros()+“n”;         empregado = porProducao; // referência Empregado para um TrabalhadorPorProducao output += empregado.toString()+“ ganhou R$ ”+empregado.lucros()+“n”+ porProducao.toString()+“ ganhou R$ ”+porProducao.lucros()+“n”; System.out.println(output); } }
  • 19. Polimorfismo - Exemplo Saída: Chefe: Joao Lopes ganhou R$ 800.0 Chefe: Joao Lopes ganhou R$ 800.0 Trabalhado por produção: Roberto Carlos ganhou R$ 500.0 Trabalhado por produção: Roberto Carlos ganhou R$ 500.0
  • 21. Coerção e Sobrecarga Coerção: A linguagem tem um mapeamento interno entre tipos. Forma limitada de polimorfismo. Se num contexto particular o tipo requerido é diferente do tipo dado, a linguagem verifica se existe uma coerção (conversão de tipos). ◦ Exemplo: se uma função soma( ) é definida como tendo 2 parâmetros reais, e um inteiro e um real são passados, o inteiro é convertido para real. Sobrecarga: Permite que um “nome de função” possa ser usado mais de uma vez com diferentes tipos de parâmetros. ◦ Exemplo: uma função soma com 2 parâmetros inteiros e uma função soma com 2 parâmetros reais. A informação sobre os tipos dos parâmetros é usada para selecionar a função apropriada.
  • 22. Exemplos de Coerção em Java Em Java são executadas as seguintes conversões implicitamente : ◦ byte para short, int, long, float ou double ◦ short para int, long, float ou double ◦ char para int, long, float ou double ◦ int para long, float ou double ◦ long para float ou double ◦ float para double Todas essas conversões são consideradas promoções de tipo, isto é, o valor inicial é um tipo cujo domínio está contido no domínio do tipo resultante. Não pode haver truncamento no resultado. Conversão entre inteiros (short, int ou long) e entre reais (float ou double) pode resultar em perda de precisão.
  • 23. Exemplos de Sobrecarga em Java Sobrecarga de métodos construtores: ◦ public ContaCorrente ( ); // construtor default ◦ public ContaCorrente (String nome, float val, int num, int pwd) { ...} Sobrecarga de Operadores: quando um operador da linguagem pode ter diferentes significados, dependendo do tipo do parâmetro aplicado. Exemplo: a + = b ◦ Significado (1) : “adicione o valor b ao atributo a”. ◦ Significado (2) : “inclua o elemento b no conjunto a”. Java não permite sobrecarga de operadores, apenas de métodos. C++ permite sobrecarga de operadores e de métodos.
  • 24. Sobrecarga Quadrado public void desenhaQuadrado() { (...) } public void desenhaQuadrado(boolean preenchido) { (...) } public void desenhaQuadrado(boolean preenchido, double rotacionado) { (...) }
  • 25. Redefinição x Sobrecarga de Métodos Redefinição: o novo método deve ter a mesma assinatura do método herdado, isto é, eles devem ser idênticos quanto ao nome da operação e à lista de parâmetros (mesmo número de parâmetros, com os mesmos tipos e declarados na mesma ordem). O tipo do resultado de retorno não faz parte da assinatura do método e não pode ser mudado. Sobrecarga: Ocorre quando existe apenas coincidência nos nomes dos métodos; isto é, as listas de parâmetros não são idênticas.
  • 27. Herança Múltipla Para começo de conversa, não se permite herança múltipla em Java. A herança utiliza a relação “é um”: ◦ Carro “é um” Veículo; ◦ Fusca “é um” Carro; ◦ Círculo “é um” Ponto; ◦ Cilindro “é um” Círculo; Herança múltipla pode provocar redundância na definição de métodos, exigindo regras especiais; Java não suporta este recurso mas permite uma alternativa: uso de interfaces.
  • 28. Herança Múltipla Herança múltipla pode ser perigoso: “Losango Mortal” – DDD (Deadly Diamond of Death): DigitalRecorder int i burn( ) CDBurner DVDBurner burn( ) burn( ) ComboDriver
  • 29. Herança Múltipla Utilizando interfaces, permite-se os benefícios polimórficos (já que interface é com uma classe 100% abstrata) sem a ameaça do Losango Mortal. Todos os métodos de uma interface são abstratos: ◦ Cada subclasse deve implementar o método herdado; ◦ Evita a confusão da JVM de qual versão herdada deve utilizar; ◦ Uma classe pode implementar diversas interfaces; ◦ Pode ainda uma mesma classe herdar de outra classe e implementar uma interface ao mesmo tempo.
  • 30. Herança Múltipla - Exemplo public interface Padrao { public double soma(double valor1, double valor2); public double subtracao(double valor1, double valor2); public double multiplicacao(double valor1, double valor2); public double divisao(double valor1, double valor2); } public interface Cientifica { public double exponencial(double valor); public double logaritmo(double valor); public int fatorial(int valor); }
  • 31. Herança Múltipla - Exemplo public class Calculadora implements Padrao, Cientifica { // atributos privados private double numero1;    private double numero2; // sobrecarga dos construtores public Calculadora(double num1, double num2) { this.numero1 = num1;     this.numero2 = num2;    } public Calculadora(double num1) {  this.numero1 = num1;  this.numero2 = 0;  } public Calculadora() {   this.numero1 = 0.0;    this.numero2 = 0.0;   } // métodos implementados de Padrao public double soma(double valor1, double valor2){ return valor1+valor2; } public double subtracao(double valor1, double valor2){ return valor1‐valor2; } public double multiplicacao(double valor1, double valor2){  return valor1*valor2; } public double divisao(double valor1, double valor2){ return valor1/valor2; } (...)
  • 32. Herança Múltipla - Exemplo (...) // métodos implementados de Cientifica public double exponencial(double valor){ return Math.exp(valor); } public double logaritmo(double valor){ return Math.log(valor); } public int fatorial(int valor){ int fatorial = 1; for(int ind = 1; ind <= valor; ind++){ fatorial *= ind; } return fatorial; /* retorna o fatorial (n!) de valor */ } // método principal public static void main(String args[]){ Calculadora app = new Calculadora(); System.out.println(“fatorial: ”+app.fatorial(3)); } }