Olá!!
Pessoal,
O que seria Acoplamento e Coesão??
Poderia me exemplificar!!
Abs.
Olá!!
Pessoal,
O que seria Acoplamento e Coesão??
Poderia me exemplificar!!
Abs.
Por alto seria:
-Acoplamento: o nível de interligação entre duas classes, ou seja, o quanto uma classe conhece da outra. Lembrando que o acoplamento é proporcionalmente ligado a dor de cabeça que vc terá caso mude a implementação de uma classe. rs
-Coesão: Representa o quão uma classe é específica para desempenhar um papel em um contexto.
Melhores definições são bem-vindas :lol:
Acoplamento é quanto um elemento (classe, método, função, módulo, componente… basicamente qualquer coisa) depende e conhece do outro. Elementos muito acoplados geralmente são muito dependentes, mudou um e você com certeza vai ter que mudar o outro.
Coesão é o quanto as tarefas que um elemento realiza estão relacionadas com um mesmo conceito. Baixa coesão teria uma classe que, por exemplo, imprime um documento e exibe um formulário para o usuário, neste caso provavelmente você deveria diviri esta classe em mais de uma.
Em um mundo perfeito teriamos alta coesão e baixo acoplamento.
o ideal entao seria ter uma alta coesao e baixo acoplamento.
no caso de alta coesão usando o exemplo do pcalcado eu teria que tar uma classe que imprime um documento e uma classe que exibe um formulario.
eh isso???
sim, o idela eh que vc tenha um class para cada um desse processo… e apena a chame quando for necessario… vamos dizer que vc venha ter outra class que precise imprimir iai? o q faria? digitar novamente o codigo de impressao para essa nova classe? que perda de tempo e redundancia e má manutenção nao acha? entao vc cria apenas uma class so para impressao a class que precisa dela so chama-la e pronto… ela eh de todos… pense nela como uma “uma mulher que trabalha na noite” ela é de quem?
Pessoal,
Valew mmo, porém, p/ ficar bem fixado, alguém poderia exemplificar um pequeno código principalmente referente Acoplameno.
Grato pela paciência!!
Pessoal,
Valew mmo, porém, p/ ficar bem fixado, alguém poderia exemplificar um pequeno código principalmente referente Acoplameno.
Grato pela paciência!!
[code]
public class Carro {
private Motor motor;
public Carro(Motor motor) {
if (motor == null) throw new NullPointerException();
this.motor = motor;
}
}[/code]
A classe acima tem um exemplo de acoplamento. Só lembrando que acoplamento é uma relação entre duas classes.
Nesse caso, motor está acoplado a classe carro e vice-versa.
Abaixo, um exemplo de classe com baixa coesão:
[code]
public class Programa {
public void desenharTela() {
//implementação
}
public class reservarProduto() {
//implementação
}
public class gravarNoBD() {
// implementação
}
}[/code]
Quem nunca viu um código assim? Que implementa o POG lone wolf? A classe faz tanta coisa, que não é possível descrever exatamente o para que ela serve…
Valew!!
Aceito + exemplos.
Abs.
Bem colega, 0% de acoplamento não existe… o importante é fazer uma classe depender o mínimo possível de outras… Conhecer UML ajuda muito, pq se no diagrama uma classe atira flecha pra tudo qto é lado, quer dizer q ela está mto acoplada… Nesse caso, tb é bom ter algum bom material sobre Padrões de Projeto (Design Patterns), pq muitos deles servem justamente pra diminuir o acoplamento.
Deixa eu ver se eu consigo imaginar exemplos de coesão e acoplamento… Lembrando-se q desejamos MUITA coesão e POUCO acoplamento!
public class Produto {
private double precoVenda, precoCompra;
public double calcularMargemLucro() {
// … algum código
}
}
public class Venda {
private List produtos;
public double calcularTotal() {
// …
}
public double calcularLucroVenda() {
// …
}
}
O que temos aqui? A classe Produto não depende de nenhuma outra classe (ao menos no trecho mostrado). Cada campo, argumento ou retorno de método, variável local que for de outra classe, é mais um acoplamento daquela classe.
A classe Venda é acoplada com Produto, depende dela pq tem uma lista de produtos e pra saber calcular o lucro.
As classes estão coesas (pelo menos eu acredito q estão, se alguém tiver algo contra indique!) pq cada produto sabe calcular sua margem de lucro, e o lucro da venda quem calcula é a própria venda, q tem todos os produtos! As responsabilidades estão bem distribuídas entre as classes.
Estou estudando para SCJP e me deparei com um dilema com relação a Acoplamento e Coesão. Bom entendi o conceito de cada um… e como disseram num mundo ideal teriamos baixo acoplamento e alta coesão MAS se tivermos uma alta coesão com classes bem específicas isso não geraria um alto acoplamento também? Pois classes que utilizarem as classes coesas, utilizaram diversas outras classes coesas, deixando-a altamente acoplada. Como funciona no mundo real/comercial?
Obrigado