A Engenharia de Software
Por: César Cardoso • 12/12/2021 • Ensaio • 1.052 Palavras (5 Páginas) • 191 Visualizações
Desenvolvimento em paralelo: Quando as classes ocultam as principais informações de um sistema, fica mais fácil implementá-las em paralelo, por desenvolvedores diferentes. Consequentemente, teremos uma redução no tempo total de implementação do sistema.
Flexibilidade a mudanças: Quando detalhes de implementação de uma classe, são ocultados no sistema, fica mais fácil trocar sua implementação por outra classe, que use estruturas de dados e algoritmos mais eficientes. Essa troca é mais segura, pois como as classes são independentes, diminui-se o risco de a mudança introduzir bugs em outras classes.
Facilidade de entendimento: Um novo desenvolvedor contratado por uma empresa pode ser alocado para trabalhar apenas em algumas classes. Portanto, ele não precisará entender toda complexidade do sistema, somente a implementação das classes que ficou responsável.
Ele estará melhorando a propriedade de Acoplamento, pois estará conectando duas classes que podem ter funcionalidades semelhantes, dependendo uma da outra e podendo implementar alguns de seus métodos em outra classe.
Será afetada de modo negativo a propriedade de Coesão na qual diz que, toda classe deve ter uma funcionalidade única no sistema ou deve existir um único motivo para modificar uma classe, no caso deste exemplo, movendo um arquivo da classe B para a classe A, estaria dando mais responsabilidades a uma mesma classe, desrespeitando a coesão.
A coesão define que uma classe deve ser responsável por uma funcionalidade, mas quando várias classes são acopladas em uma aumenta o nível de complexidade, pois o código fica mais difícil de entender, outros desenvolvedores não conseguem usá-lo com facilidade, a dependência entre as classes não é estável e mudanças podem causar vários outros problemas.
Acoplamento aceitável: A classe A usa apenas métodos públicos da classe B.
A interface provida por B é estável do ponto de vista sintático e semântico. Isto é, as assinaturas dos métodos públicos de B não mudam com frequência e o mesmo acontece com o comportamento externo de tais métodos. Por isso, são raras as mudanças em B que terão impacto na classe A.
Acoplamento ruim: Quando mudanças em B podem impactar facilmente A, ocorre principalmente quando uma classe A realiza acesso direto a um arquivo ou banco de dados da classe B, quando classes A e B compartilham uma mesma estrutura de dados global ou quando a interface da classe B não é estável, por exemplo quando os seus métodos são renomeados com frequência.
Acoplamento estrutural: Ocorre quando uma classe A possui uma referência explícita em seu código para uma classe B.
Acoplamento evolutivo: Ocorre quando mudanças na classe B tendem a se propagar para a classe A.
Acoplamento estrutural e aceitável
import java.util.Hashtable;
public class Estacionamento {
private Hashtable<String,String> veiculos;
public Estacionamento() {
veiculos = new Hashtable<String, String>();
}
public void estaciona(String placa, String veiculo) {
veiculos.put(placa, veiculo);
}
public static void main(String[] args) {
Estacionamento e = new Estacionamento();
e.estaciona("TCP-7030", "Uno");
e.estaciona("BNF-4501", "Gol");
e.estaciona("JKL-3481", "Corsa");
}
class A {
private void f(B b) {
int total;
total = b.getTotal();
...
}
}
class B {
int total;
public int getTotal() {
return total;
}
private void g() {
// computa valor de total
File arq = File.open("arq1");
arq.writeInt(total);
...
}
}
Acoplamento estrutural e ruim:
class A {
private void f() {
int total; ...
File arq = File.open("arq1.db");
total = arq.readInt();
...
}
}
class B {
private void g() {
int total;
// computa valor de total
File arq = File.open("arq1.db");
arq.writeInt(total);
...
arq.close();
}
}
Sim, mas será um acoplamento ruim, pois o desenvolvedor que pegar o código não saberá que a classe A está acoplada a B e pode até fazer implementações diferentes nela.
Coesão. Pois, para que uma classe seja coesa ela deve ter uma responsabilidade única e neste caso todas as suas funcionalidades estão implementadas em uma mesma classe e em um mesmo método.
Coesão. Pois um mesmo método está assumindo diferentes funcionalidades.
Herança. Pois a herança pode induzir a problemas na manutenção e evolução nas classes do sistema e também viola
...