Tentando baixo aclopamento do código

3 respostas
D

Oi pessoal, no material da Caelum fj11 tem o seguinte código da pag 200:

class Empresa {
    private List<Funcionario> empregados = new ArrayList<Funcionario>();
    // ...
}

é uma amostra de como criar uma propriedade com baixo acoplamento, mas o que List recebe é um ArrayList bem explicito, assim quando for necessário mudar lá na outra classe de ArrayList para outro, vou ter que vir aki e trocar tb. Sera´que posso diminuir esse acoplamento fazendo essa propriedade receber a lista de funcionários por meio de um método estático? aki seria melhor deixar assim ou diminuir o acoplamento abrindo mão de um método estático, o que acham?

3 Respostas

WRYEL

não sou bom de explicação para estas coisas mas vou tentar, qualquer coisa alguem melhora.

Pra começar, um metodo estatico é um metodo de classe. Você não consegue acessar metodos/variaveis não estaticos com ele).

Quando o apostila cita baixo acoplamento, quer dizer neste caso que está dependendo da interface List, e não de uma implementação de List que neste caso seria ArrayList.

supondo que sua classe tive-se o metodo:

public void setEmpregados(List<Empregados> empregados) {
	this.empregados = empregados;
}

Ai, entraria ArrayList, Vector, LinkedList, ou seja, implementações de List com propósitos diferentes.

se você retringe por exemplo a ArrayList = new ArrayList(); você não coseguirá passar por exemplo uma lista ligada (LinkedList) para sua classe. Espero que tenha sido claro. :?

[]'s

lelodois

WRYEL:
não sou bom de explicação para estas coisas mas vou tentar, qualquer coisa alguem melhora.

Pra começar, um metodo estatico é um metodo de classe. Você não consegue acessar metodos/variaveis não estaticos com ele).

Quando o apostila cita baixo acoplamento, quer dizer neste caso que está dependendo da interface List, e não de uma implementação de List que neste caso seria ArrayList.

supondo que sua classe tive-se o metodo:

public void setEmpregados(List<Empregados> empregados) {
	this.empregados = empregados;
}

Ai, entraria ArrayList, Vector, LinkedList, ou seja, implementações de List com propósitos diferentes.

se você retringe por exemplo a ArrayList = new ArrayList(); você não coseguirá passar por exemplo uma lista ligada (LinkedList) para sua classe. Espero que tenha sido claro. :?

[]'s

Ops… Isto que explicaste acima é polimorfismo…

O baixo acoplamento seria outra coisa…

http://www.guj.com.br/posts/list/50610.java

abs

D

estático só tem acesso a propriedades e métodos tb estáticos, ok.
é… tinha esquecido. Eu estava pensando que, em cada assinatura de método que generalizo com uma interface, tem em seu corpo uma referencia a uma classe concreta para trabalhar essa lista do parâmetro, o que eu queria era diminuir o número de utilizações dessas classes, sacaram? já ao receber o conteúdo de uma propriedade já se usa um ArrayList, tentei retirar essa mensão a essa classe, mas tinha esquecido que para o estático funcionar, terai que ser estático tb em tudo o q ele usa, no caso os métodos que acessam o banco, ai começa a bagunça de um monte de coisa estática poluindo a aplicação.
Então não tem como fugir? a generalização está sempre na assinatura dos métodos e não (também) no corpo desses métodos(não dá para fazer)?

Criado 22 de julho de 2010
Ultima resposta 22 de jul. de 2010
Respostas 3
Participantes 3