A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação Orientada a Objetos

Apresentações semelhantes


Apresentação em tema: "Programação Orientada a Objetos"— Transcrição da apresentação:

1 Programação Orientada a Objetos
Dynamic Binding Modificador final

2 3.6.1 Dynamic Binding Na classe TestePonto, quando chamamos o método print do objeto referenciado pela variável p3, em tempo de compilação é verificado se esse método está definido na classe Ponto3D que é o tipo deste objeto. Porém, em tempo de execução, a referência do objeto poderia estar se referindo a alguma subclasse do tipo de referência declarado. Nesse caso, a decisão de qual método será executado é feita em tempo de execução (dynamic binding). Essa propriedade do objeto decidir qual método aplicará para si na hierarquia de classes é chamada de polimorfismo. Alan Santos

3 3.6.1 Dynamic Binding Implemente o código abaixo, execute-o e observe o seu resultado: class Polimorfismo { public static void main (String args []){ Ponto2D p1 = new Ponto2D (1,1); Ponto2D p2 = new Ponto3D (2,2,2); p1.print (); p2.print (); } Alan Santos

4 3.6.1 Dynamic Binding No método main declaramos a variável p2 como sendo do tipo Ponto e depois armazenamos nela uma referência a uma instância da classe Ponto3D. Quando chamamos o método print( ) (p2.print ( ) ), o interpretador Java verifica que, na verdade, p2 é uma instância de Ponto3D e, portanto, chama o método print da classe Ponto3D e não da classe Ponto. Alan Santos

5 3.6.1 Dynamic Binding No método main de Polimorfismo declare uma variável p3 como sendo do tipo Ponto3D e depois armazene nela uma referência a uma instância da classe Ponto. Observe que como Ponto é a superclasse, ele pode referenciar objetos de subclasses, mas o contrário (uma variável do tipo Ponto3D referenciar um objeto do tipo Ponto) gera erro em tempo de compilação. Alan Santos

6 3.6.1 Dynamic Binding Por exemplo, podemos fazer:
Ponto p1 = new Ponto( ); Ponto p2 = new Ponto3D( ); Mas não podemos fazer: Ponto3D p3 = new Ponto( ); Alan Santos

7 3.6.1 Dynamic Binding Agora, em Polimorfismo, execute o código abaixo:
Ponto p2 = new Ponto3D ( ); Ponto3D p4 = (Ponto3D) p2; Alan Santos

8 3.6.1 Dynamic Binding Veja que temos que usar casting se queremos que uma variável do tipo Ponto3D receba a referência de um objeto Ponto3D contida em uma variável do tipo Ponto. Caso contrário, será gerado erro em tempo de compilação. Alan Santos

9 3.6.1 Dynamic Binding Regras para métodos sobrescritos:
Um método não pode ser menos acessível que o método que ele sobrescreve. No exemplo explicado anteriormente, não é possível o método print da classe Ponto ser public e o da classe Ponto3D ser private. Mas, o contrário é válido. Alan Santos

10 3.6.1 Dynamic Binding 1 Elipse e = new Elipse(); 2 Circulo c = new Circulo(); 3 e = c; 4 e.calcularArea( ); A atribuição da linha 3 é dinamicamente acoplada, pois acopla o objeto ‘e’ a um tipo diferente de seu tipo originalmente declarado. Em princípio, seria uma violação atribuir um objetos de um tipo diferentes tipo a variável ‘e’, no entanto, como ‘c’ (Circulo) é subclasse de ‘e’ (Elipse) essa atribuição é válida. Qual o método executado ? Círculo ou Elipse ? Alan Santos

11 3.6.1 Dynamic Binding A operação executada é a de Circulo, porque o compilador em tempo de execução verifica que a variável aponta para um objeto desta classe Em algumas linguagens o programador deve pedir explicitamente o acoplamento dinâmico para uma mensagem em particular. Importante: Todas as operações sobrecarregadas na classe derivada devem proporcionar semanticamente os mesmos serviços oferecidos pela superclasse. Alan Santos

12 3.7 O Modificador “final” Todos os métodos podem ser sobrepostos.
Se você quiser declarar que não deseja mais permitir que as subclasses sobreponham métodos de uma classe, deve declará-las como final. Alan Santos

13 3.7 O Modificador “final” Altere o método print da classe Ponto, declarando-o como final: public final void print ( ) { Observe que é gerado um erro em tempo de compilação, pois ele é redefinido na classe Ponto3D. Alan Santos

14 3.7 O Modificador “final” Enquanto os métodos final não podem ser sobrepostos, as variáveis declaradas como final não podem ter os seus valores alterados no código do programa. Isso gera erro em tempo de compilação. Alan Santos

15 3.7 O Modificador “final” Variáveis com o modificador final
Não podem ser modificadas depois de inicializadas Podem ser de instância ou de classe Classes com o modificador final Não podem ser herdadas Pode ser usado junto com static um membro final static é uma constante Nunca muda de valor Alan Santos


Carregar ppt "Programação Orientada a Objetos"

Apresentações semelhantes


Anúncios Google