1 / 19

Acoplamento e Coesão

Acoplamento e Coesão. Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes cristiano.nunes@veris.edu.br. Acoplamento.

marilu
Download Presentation

Acoplamento e Coesão

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Acoplamento e Coesão Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes cristiano.nunes@veris.edu.br

  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 )

  3. BaixoAcoplamento • 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.

  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.

  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.

  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?

  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.

  8. Exemplo de Alto Acoplamento • Dada um simples classe Contato (mal implementada): publicclass Contato { //atributos não encapsulados String nome; String endereco; String fone; //construtor que depende do tipo e quantidade de atributos public Contato(String n, String e, String f) { nome = n; endereco = e; fone = f; } }

  9. Exemplo de Alto Acoplamento • A classe DAO tem um considerável nível de dependência em relação a classe Contato publicclass 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 +"')"; } }

  10. Exemplo de Alto Acoplamento publicclass Controlador { private DAO dao = new DAO(); //uma alteração na implementação da classe Contato //pode exigir alterações na classe Controlador private Contato contato = new Contato("Angelina Jolie", "Fifth Avenue, NY", "1-415-8273"); publicvoidpersistaDados() { //uma alteração na implementação da classe Contato //pode exigir alterações na classe DAO dao.incluiContato(contato); } } • A classe Controlador tem dependência em relação a classe DAO e Contato

  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.

  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) “Programevoltado à interface e não à implementação”

  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. publicinterfaceMamifero { publicvoid nascer(); publicvoid mamar(); publicvoid morrer(); }

  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)

  15. BaixaCoesã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

  16. Exemplo de BaixaCoesão publicclass Angu { public String funcionario; privatefloatperimetro; publicfloatnota_bimestral; privatefloatvalor_mensal; publicstaticintcalculaDiametro(float raio) { // ... } publicstaticintcalcularMedia(Vectornumeros) { // ... } publicstaticoutputStreamabreArquivo(String nomeArquivo) { // ... } }

  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.

  18. Exemplo de Alta Coesão • A implementação de um JavaBean (ou entitybean– bean de entidade) é um exemplo claro de altíssima coesão: publicclass Contato { private String nome; private String fone; public Contato() { } public String getNome() { returnnome; } publicvoidsetNome(String nome) { this.nome = nome; } public String getFone() { returnfone; } publicvoidsetFone(String fone) { this.fone = fone; } }

  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.

More Related