Skip to content

Latest commit

 

History

History
111 lines (84 loc) · 2.32 KB

vinculacao.org

File metadata and controls

111 lines (84 loc) · 2.32 KB

Vinculação Dinâmica e Estática

1 Polimorfismo Universal por Inclusão \small Mecanismos

Vinculação dinâmica (tardia) ou estática

Considerando

class Pessoa {
   public mostrar() { }
}
class Aluno extends Pessoa {
   public mostrar() { }
}

Quando executarmos o seguinte código

Pessoa p = new Aluno();
p.mostrar();

Qual método é chamado?

2 Vinculação Dinâmica

Escolha do método em tempo de execução

Maior flexibilidade e reuso de código

Desvantagens

  • Menor eficiência?
    • C++, 15% mais lento?
    • Objective-C, depende do runtime e do compilador

3 Vinculação Dinâmica – Implementação

Tabelas de métodos virtuais (C++, Java)

./img/vtables.pdf

4 Vinculação Estática

Em tempo de compilação

Em C++, vinculação estática é o padrão

class Pessoa {
  public:
    void mostrar() { }
};
class Aluno: public Pessoa {
  public:
    void mostrar() { }
};
Pessoa *p = new Aluno;
p->mostrar();

Linguagens deixam o programador decidir a vinculação

  • Estática ou dinâmica

5 Vinculação \small Escolha do Programador em C++

Em C++ a vinculação é estática por padrão

Vinculação dinâmica explícita com virtual

class Pessoa {
  public:
    void ler() { } // estática
    virtual void imprimir() { } // tardia
};

6 Vinculação \small Escolha do Programador em Java

Em Java a vinculação é dinâmica por padrão

Vinculação estática explícita com final

class Aluno {
   public void ler() { } // tardia
   final public void imprimir() { } // estática
   static public void nada() { } //método de classe
};