André Luiz Peron Martins Lanna

Assistant teacher at University of Brasilia. PhD Student of Computer Science at University of Brasilia.

View My GitHub Profile

Lista de exercicios de revisão
Avaliação 2 - Encapsulamento, herança e Polimorfismo


Exercício 1 - Definições: Para cada um dos itens abaixo, faça o que se pede:

Exercício 2 - Subtipagem Considere o Diagrama de Classes UML apresentado abaixo.

Com base no diagrama apresentado, avalie cada uma das instruções a seguir como correta ou incorreta considerando seus modificadores de visibilidade e de escopo. Para as instruções avaliadas como incorretas, justifique o motivo do erro. A localização da instrução está apresentada na forma de comentário logo após a instrução.

Respostas dos itens apresentadas em vermelho.

Considerando o modo como a linguagem Java define os conceitos básicos de OO, quais sejam Encapsulamento, Herança e Polimorfismo. Em linhas gerais Java defineque:
* elementos privados só estão acessíveis dentro da própria classe;
* elementos default (visibilidade de pacote) são acessíveis apenas por elementos da própria classe ou de outras classes do mesmo pacote;
* elementos protegidos são acessíveis por elementos da própria classe, de classes do mesmo pacote ou por elementos de subclasses da classe que está definida, ainda que a subclasse esteja fora do pacote da superclasse. Elementos protegidos não são visualizados por classes que não estejam na hierarquia de classes definida pelas relações de herança;
* elementos públicos são acessíveis em qualquer ponto do projeto (i.e., qualquer membro de qualquer classe do projeto); * elementos estáticos podem ser acessados pelo nome da classe em que estão definidos ou por algum objeto instanciado a partir dessa classe e, por fim, * elementos dinâmicos estão definidos para cada um dos objetos instanciados a partir da classe em que estão definidos. Elementos dinâmicos não podem ser acessados pela Classe em que está definido.

  1. cls6.atrib11 = "casa";  //executado em Principal.main()
    

    cls6.atrib11 não é acessível, seu modificador de acesso é privado.

  2. cls6.m7(); //executado em Principal.main()
    

    cls6.m7 não é acessível, classe Principal não pertence a hierarquia de classes da qual Classe6 é parte.

  3. atrib2 = "bola"; //executado em Classe5.m7()
    

    Correto, m7() é um elemento dinâmico tentando acessando atrib5 (elemento estático) definido como público na mesma classe em que m7() está definido. Um elemento dinâmico pode acessar um elemento estático desde que seus modificadores de acesso lhe permitam tal visibilidade.

  4. cls4.m8();  //executado em Classe5.m7() 
    

    cls4.m8() é acessível

  5. cls6.m1();  //executado em Principal.main()
    

    cls6.m1() é acessível, ele está definido como público por todas as classes que compõem a hierarquia de classes, incluindo Classe6. Um elemento público pode ser acessado por qualquer outra classe do projeto.

  6. cls6.atrib2 = "bala";  //executado em Principal.main()
    

  7. cls6.atrib5 = 4.0;  //executado em Principal.main() 
    

  8. cls6.cls2.m4();  //executado em Principal.main 
    

  9. cls6.cls2.atrib4 = 3.14;  //executado em Principal.main
    

  10. Classe6.atrib13 = 3;  //executado em Principal.main
    

  11. Classe6.m11();  //executado em Principal.main
    

  12. m6();  //executado em Classe6.m11() 
    

  13. m6();  //executado em Classe6.m10()