1
resposta

Duvida na utilização de Interfaces e Classes Abstratas - Acesso aos Atributos

Bom Dia Pessoal,

Sempre que tento aplicar algum padrão de projeto acabo travando no mesmo problema e gostaria de saber de voces qual a abordagem que costumam utilizar, segue o problema,

Tenho uma Interface, uma classe abstrata que implementa esta interface e duas classes concretas. Desta forma consigo através do polimorfismo a seguinte estratégia:

MyInterface xx = FactoryObject.create(int valor);

Se o que o método create devolve a classe concreta A ou B beleza, mas como acessamos os atributos destas classes, sendo que o tipo de referencia é a interface e ela só tem métodos, sei que podemos usar o cast mas gostaria de saber qual a melhor forma de se trabalhar.

Abraços e valeuuuuu

1 resposta

Se eu entendi direito, sua Factory retorna a instância das classes concretas, e nesse trecho de código, a MyInterface é a interface comum delas. É isso?

Nesse caso, o correto seria criar os getters dentro da interface, e implementar nas classes concretas os retornos de cada propriedade (claro, se o seu objetivo realmente for ter acesso às propriedades). Assim você conseguiria acessar os atributos delas sem ter que fazer um cast (que, inclusive, seria uma má-prática, já que perderia o sentido de utilizar uma interface em primeiro lugar).

Algo importante de lembrar do polimorfismo em todo caso, é que se a interface obrigar a implementação de um método vazio dentro de qualquer uma das classes concretas, há uma falha na orientação a objetos ─, isto não deve acontecer.

Além disso, um último detalhe que vale apena refletir, é sobre o acesso às propriedades dos seus objetos: será que vale apena acessá-los? Aqui teremos outro viés: a Lei de Demeter.

A Lei de Demeter é uma diretriz / prática de desenvolvimento orientado a objetos que diz que um objeto A pode até acessar um objeto B, mas um objeto A não deve acessar um objeto C se este for através de um objeto B. Ou seja: seu código fonte (objeto A), pode conhecer um objeto B (as interfaces e implementações), mas, ao menos em um mundo ideal, não deveria conhecer objetos C (propriedades de B).

Obviamente, a Lei de Demeter não é uma lei de verdade, e inclusive por isso eu prefiro chamá-la pelo seu outro nome: O princípio do menor conhecimento. Mas vale com certeza refletir um pouco sobre isso pois esta é uma boa-prática que visa baixo acoplamento de código, e maior manutenibilidade das "classes C".

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software