acoplamento e coesão

19
Acoplamento e Coesão Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes [email protected]

Upload: marilu

Post on 20-Jan-2016

41 views

Category:

Documents


0 download

DESCRIPTION

Acoplamento e Coesão. Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes [email protected]. Acoplamento. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Acoplamento e Coesão

Acoplamento e Coesão

Modelagem e Programação

Orientada a ObjetosCurso Superior de Tecnologia em Sistemas para Internet

Prof. Cristiano Stüpp Nunes

[email protected]

Page 2: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

2

Acoplamento

Acoplamento é uma medida “inter” componentes, no caso de OO, uma medida entre o relacionamento de classes;

É o grau de dependência entre classes; Refere-se ao nível em que uma classe conhece ou

usa membros de uma outra classe; Os dois espectros dessa medida são:

» Baixo Acoplamento (ou Acoplamento Fraco)

» Alto Acoplamento (ou Acoplamento Forte )

Page 3: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

3

Baixo Acoplamento

Se o único conhecimento que a classe A tem sobre a classe B, é que a classe B foi exposta através de sua interface, então as classes A e B tem um baixo acoplamento;

Baixo acoplamento é o estado desejável para classes bem encapsuladas que minimizam as referências umas às outras.

Page 4: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

4

Alto Acoplamento

Se a classe A se baseia em partes da classe B que não fazem parte da interface de B, então elas são bastante acopladas;

Em outras palavras, se A sabe mais do que deveria sobre a forma como B foi implementada, então A e B estão bastante ligadas;

O alto acoplamento é o estado indesejável de se ter classes que desobedecem às regras do baixo acoplamento.

Page 5: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

5

Problemas do Alto Acoplamento

Difícil entendimento:» A classe é mais difícil de se entender isoladamente;

» Exemplo: Ao tentar encontrar um erro no seu sistema, você começa a analisar uma determinada classe A e descobre que para entender essa classe A, precisa estudar a classe B que está ligada a ela, para também entender esta, precisa estudar a classe C, e assim por diante.

Page 6: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

6

Problemas do Alto Acoplamento

Difícil reutilização:» A classe é mais difícil de ser reusada, já que

depende da presença de outras classes;

» Exemplo: Digamos que seja necessário retirar uma determinada parte do sistema, algo como um módulo de calcular folha de pagamento de um sistema financeiro, para ser levada e adequada a outro sistema financeiro, imagine que as classes responsáveis por isso, estejam ligadas ao módulo de RH, você vai levar o módulo de RH junto?

Page 7: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

7

Problemas do Alto Acoplamento

Propagação de mudanças:» Mudanças em uma classe relacionada força

mudanças locais à classe;

» Exemplo: Imagine que seja necessário mudar uma classe do módulo de folha de pagamento, para isso, teria que mudar a classe que está no módulo de RH, e se você não for o responsável pelo módulo de RH? E se além de ter que mudar esta classe, também mudar várias outras que estão ligadas à primeira.

Page 8: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

8

Exemplo de Alto Acoplamento

public class Contato {

//atributos não encapsuladosString nome;String endereco;String fone;

//construtor que depende do tipo e quantidade de atributospublic Contato(String n, String e, String f) {

nome = n;endereco = e;fone = f;

}

}

Dada um simples classe Contato (mal implementada):

Page 9: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

9

Exemplo de Alto Acoplamento

public class DAO {

public String incluiContato(Contato contato) {

//como Contato não é encapsulado, //permite que esse metódo acesso os atributos diretamente

return "INSERT INTO TABLE contatos VALUES ('" + contato.nome + "', '" + contato.endereco + "', '" + contato.fone +"')";

}}

A classe DAO tem um considerável nível de dependência em relação a classe Contato

Page 10: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

10

Exemplo de Alto Acoplamento

A classe Controlador tem dependência em relação a classe DAO e Contato

public class Controlador {

private DAO dao = new DAO();//uma alteração na implementação da classe Contato //pode exigir alterações na classe Controladorprivate Contato contato = new Contato("Angelina Jolie",

"Fifth Avenue, NY", "1-415-8273");

public void persistaDados() {//uma alteração na implementação da classe Contato //pode exigir alterações na classe DAOdao.incluiContato(contato);

}}

Page 11: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

11

Herança versus Alto Acoplamento

“Herança é um tipo de acoplamento particularmente forte.”

A alteração da implementação de um método na superclasse vai afetar todas as subclasses dessa;

Design Patterns dão prioridade a Composição e aconselham utilizar Herança com muita prudência e em pouquíssimas situações;

Ao usar Composição tome cuidado para não deixar as classes fortemente dependentes, pois ainda assim corre-se o risco do alto acoplamento.

Page 12: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

12

Como minimizar o Alto Acoplamento

Encapsulamento (sempre); Uso de Design Patterns (Padrões de Projeto); Classes Abstratas; Uso de Interface; Evitar o uso malfeito de Herança;

“Program to an interface, not an implementation” (Erich Gamma)

“Programe voltado à interface e não à implementação”

Page 13: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

13

Program to an interface, not an implementation

Não significa estritamente e somente usar a palavra reservada interface do Java;

Está também relacionado a encapsular os atributos e a implementação dos métodos e permitir o acesso a eles somente através dos getters e setters (interface);

Interface é um termo genérico nesse caso; Interface representa “o que” uma classe faz, mas

não “como” ela faz.

public interface Mamifero {public void

nascer();public void

mamar();public void

morrer();}

Page 14: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

14

Coesão

Coesão é uma medida “intra” componentes, isto é, procura medir um componente individualmente;

Refere-se ao nível em que uma classe tem um único e bem definido papel ou responsabilidade;

Os dois espectros dessa medida são:» Baixa Coesão (Coesão Fraca)

» Alta Coesão (Coesão Forte)

Page 15: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

15

Baixa Coesão

Baixa coesão é o estado indesejável de uma classe cujos membros dão suporte a vários papéis ou responsabilidades não focados;

Uma classe com baixa coesão faz muitas coisas não relacionadas e leva aos seguintes problemas:» Difícil de entender

» Difícil de reusar

» Difícil de manter

» E é “delicada“ – constantemente afetada por outras mudanças

Page 16: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

16

Exemplo de Baixa Coesãopublic class Angu {

public String funcionario;private float perimetro;public float nota_bimestral;private float valor_mensal;

public static int calculaDiametro(float raio) {// ...

}

public static int calcularMedia(Vector numeros) {// ...

}

public static outputStream abreArquivo(String nomeArquivo) {// ...

}}

Page 17: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

17

Alta Coesão

Alta coesão é o estado desejável de uma classe cujos membros dão suporte a um único e bem definido papel ou responsabilidade;

Também conhecida como Coesão Funcional; O principal benefício da alta coesão é que

normalmente tais classes são mais fáceis de manter (e menos freqüentemente alteradas) do que as classes com baixa coesão;

Quanto maior for a coesão, menor será o nível de acoplamento de um módulo.

Page 18: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

18

Exemplo de Alta Coesão

A implementação de um JavaBean (ou entity bean – bean de entidade) é um exemplo claro de altíssima coesão:

public class Contato {

private String nome;private String fone;

public Contato() { }

public String getNome() { return nome; }public void setNome(String nome) { this.nome = nome; }public String getFone() { return fone; }public void setFone(String fone) { this.fone = fone; }

}

Page 19: Acoplamento e Coesão

Modelagem e Programação Orientada a ObjetosCurso Superior em Tecnologia de Sistemas para Internet

19

Implementação Ideal

“Alta coesão e baixo acoplamento.”

Não é simples e nem fácil de se alcançar; Mas podemos tentar chegar próximo do ideal.