A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Acoplamento e Coesão Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes"— Transcrição da apresentação:

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

2 Modelagem e Programação Orientada a Objetos Curso 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 )

3 Modelagem e Programação Orientada a Objetos Curso 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.

4 Modelagem e Programação Orientada a Objetos Curso 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.

5 Modelagem e Programação Orientada a Objetos Curso 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.

6 Modelagem e Programação Orientada a Objetos Curso 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?

7 Modelagem e Programação Orientada a Objetos Curso 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.

8 Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 8 Exemplo de Alto Acoplamento public class 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; }  Dada um simples classe Contato (mal implementada):

9 Modelagem e Programação Orientada a Objetos Curso 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

10 Modelagem e Programação Orientada a Objetos Curso 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 Controlador private Contato contato = new Contato("Angelina Jolie", "Fifth Avenue, NY", " "); public void persistaDados() { //uma alteração na implementação da classe Contato //pode exigir alterações na classe DAO dao.incluiContato(contato); }

11 Modelagem e Programação Orientada a Objetos Curso 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.

12 Modelagem e Programação Orientada a Objetos Curso 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”

13 Modelagem e Programação Orientada a Objetos Curso 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(); }

14 Modelagem e Programação Orientada a Objetos Curso 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)

15 Modelagem e Programação Orientada a Objetos Curso 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

16 Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 16 Exemplo de Baixa Coesão public 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) { //... }

17 Modelagem e Programação Orientada a Objetos Curso 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.

18 Modelagem e Programação Orientada a Objetos Curso 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; } }

19 Modelagem e Programação Orientada a Objetos Curso 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.


Carregar ppt "Acoplamento e Coesão Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes"

Apresentações semelhantes


Anúncios Google