Vous êtes sur la page 1sur 11

26/03/14

Acoplamento fraco x Herana

Buscar

post favoritocomentrios

Acoplamento fraco x Herana


Acoplamento fraco um dos principais requisitos para se construir software orientado a objetos (OO) de qualidade...

Curtir

Gostei (6)

(1)

LOGIN

Introduo
Acoplamento fraco um dos principais requisitos para se construir software orientado a objetos (OO) de qualidade. O acoplamento fraco mede o quanto uma classe, depende de, ou est relacionada a, outra classe ou subsistema. A capacidade de uma classe em herdar o

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

1/11

26/03/14

Acoplamento fraco x Herana

comportamento de outra(s) uma das principais caractersticas do paradigma OO. A principal vantagem poder criar novas classes quase de graa, aproveitando o cdigo de outra. Esse artigo discute esses dois conceitos e mostra porque a herana, em geral, ajuda a comprometer o acoplamento fraco.

Acoplamento fraco
Uma classe com acoplamento forte depende muito (em geral sem necessidade) de outras. Isso pode conduzir aos seguintes problemas [Larman]:

classes difceis de aproveitar tendo em vista que sempre que esta for

utilizada todas as outras das quais ela depende devem estar presentes; alteraes nas classes relacionadas podem forar mudanas locais e so difceis de compreender isoladamente.

Formas comuns de acoplamento ocorrem atravs de: variveis de instncia, variveis locais a mtodos ou de seus argumentos, chamada de servios em outra classe, uma classe deriva direta ou indiretamente de outra ou uma classe implementa uma determinada interface. Resumindo, sempre que uma classe referencia um outro tipo em qualquer uma das circunstncias acima est ocorrendo acoplamento. Considere o cdigo:

public class X { private ClasseConcretaY var1;

void M1(ClasseConcretaW var2 ) { }

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

2/11

26/03/14

Acoplamento fraco x Herana

Existem dois pontos principais de acoplamento, na varivel de instncia var1, que do tipo ClasseConcretaY, e no argumento var2, que do tipo ClasseConcretaW. Nestas duas partes do cdigo a classe X referencia outras duas classes concretas. Isso significa que, sempre que esta classe for utilizada, as outras duas devero estar disponveis no espao de nomes do programa. No caso de Java, o(s) pacote(s) onde estas se encontram dever(o) estar no classpath. Mas, referenciar outras classes sempre causa problemas de acoplamento? A resposta , depende! Referenciar classes estveis e disseminadas raramente um problema. Por exemplo, utilizar o pacote java.util num programa em Java dificilmente causar problemas futuros de acoplamento, uma vez que qualquer ambiente de execuo Java contm essa biblioteca. O problema est em classes instveis, pouco conhecidas, ou seja, nas classes que so criadas para atender os problemas especficos dos projetos.

Como diminuir o acoplamento?


Uma regra geral para diminuir o acoplamento programar para uma interface e no para uma implementao [Gamma]. No exemplo acima isso significa substituir as declaraes das classes concretas por declaraes de interfaces. Fazendo isso desacopla-se o cdigo de uma implementao especfica, tornando-o dependente apenas de uma interface. Essa no a soluo definitiva, um bom projeto com boas atribuies de responsabilidades crucial, porm ajuda muito. mais fcil compreender isoladamente uma classe que referencia apenas interfaces e mais [Gamma]:

os clientes (usurios da classe) permanecem sem conhecimento dos tipos especficos dos objetos que eles usam, contanto que os objetos tenham aderncia interface que os clientes esperam, os clientes permanecem sem conhecimento das classes que implementam estes objetos; eles somente tm conhecimento das classes abstratas que definem a interface.

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

3/11

26/03/14

Acoplamento fraco x Herana

Herana
A herana a principal caracterstica de distino entre um sistema de programao orientado a objeto e outros sistemas de programao. As classes so inseridas em uma hierarquia de especializaes de tal forma que uma classe mais especializada (subclasse) herda todas as propriedades da classe mais geral (superclasse) a qual subordinada na hierarquia. O principal benefcio da herana o reaproveitamento de cdigo. A herana permite ao programador criar uma nova classe programando somente as diferenas existentes na subclasse em relao superclasse. Isto se adeqa bem a forma como compreendemos o mundo real, no qual conseguimos identificar naturalmente estas relaes. A reutilizao por meio de subclasses dito reutilizao de caixa branca, pois usualmente expe o interior das classes ancestrais para as subclasses. A herana definida estaticamente em tempo de compilao e simples de utilizar, uma vez que suportada diretamente pela linguagem de programao.

Acoplamento fraco x Herana


A deciso de derivao a partir de uma superclasse precisa ser cuidadosamente considerada, uma vez que ela uma forma muito forte de acoplamento [Larman]. As classes ancestrais freqentemente definem pelo menos parte da representao fsica das suas subclasses. A implementao de uma subclasse, desta forma, torna-se to amarrada implementao da sua classe me que qualquer mudana na implementao desta forar uma mudana naquela. Vejamos uma situao onde isso verdadeiro. Considere o esquema de herana abaixo:

abstract public class X { private final int MAX = 100;

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

4/11

26/03/14

Acoplamento fraco x Herana

public int CalculaMaximo( int i) { return i * MAX; }

public int UsaMaximo( int i) { int maximo = CalculaMaximo(i);

//faz alguma coisa de til com maximo } }

public class Y extends X {

public void UsaMetodoDaClasseX() { .

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

5/11

26/03/14

Acoplamento fraco x Herana

int aux = UsaMaximo(10); } }

At aqui tudo bem! Agora considere a seguinte modificao na classe X:

abstract public class X { private final int MAX = 100;

public int CalculaMaximo( int i) { return ( int ) i * (MAX /100); // Aproxima o resultado com cast }

public int UsaMaximo( int i) { } }

Essa alterao na maneira como o mximo est sendo calculado pode gerar efeitos

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

6/11

26/03/14

Acoplamento fraco x Herana

colaterais na classe Y. A aproximao para inteiro pode funcionar para alguns mtodos que usam a CalculaMaximo() mas provocar resultados errneos na UsaMetodoDaClasseX(). Assim, para que a classe Y continue funcionando, esta precisaria ser adaptada nova realidade. Problemas podem ocorrer tambm quando estruturas de dados visveis nas classes derivadas so alteradas. Um array bidimensional transformado para vetor ou mesmo um tipo int modificado para float certamente acarretar problemas. Este exemplo simples ajuda a mostrar como uma alterao na implementao de um mtodo numa classe base pode provocar anomalias nas suas classes derivadas. Observe que no ocorreu uma alterao de interface, o que necessariamente (e notoriamente) implica em alteraes nas classes clientes. por isso que a herana, em particular, revela um alto acoplamento. Alm das hierarquias de classes criadas estarem suscetveis s mudanas de interface, esto suscetveis tambm s alteraes nas implementaes dos mtodos. Quando uma subclasse redefine algumas, mas no todas as operaes, ela tambm pode afetar as operaes que herda, assumindo-se que elas chamam as operaes redefinidas [Gamma]. Isso gera um efeito semelhante ao apresentado acima, porm no sentido oposto, onde alteraes nas classes mais especializadas podem gerar problemas nas classes base. Se a classe Y tivesse sobrescrito o mtodo CalculaMaximo(), o problema com a aproximao poderia ocorrer no mtodo UsaMaximo() da classe X.

Como evitar a herana?


Uma outra forma de reaproveitar funcionalidade atravs da composio de objetos. Novas funcionalidades so obtidas compondo objetos para obter funcionalidades mais complexas. Uma das vantagens desta abordagem a flexibilidade em poder selecionar em tempo de execuo qual objeto ser usado na composio (contanto que este respeite a interface definida). No exemplo anterior, se a classe Y tivesse uma referencia para um outro objeto com a funcionalidade definida em X, quando este fosse alterado restaria a ela ainda a possibilidade de utilizar uma verso antiga e seu funcionamento no estaria necessariamente comprometido.

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

7/11

26/03/14

Acoplamento fraco x Herana

Concluso
Evitar herana e privilegiar a composio em geral uma boa prtica em projetos orientados a objetos. Favorecer a composio de objetos em relao herana ajuda a manter cada classe encapsulada e focalizada em uma nica tarefa. Suas classes e hierarquias de classes se mantero pequenas e mais tratveis [Gamma]. Alm disso, vimos como e porqu a utilizao da herana resulta num alto acoplamento e os problemas que isso pode acarretar.

Bibliografia
[Gamma] Gamma, E; Helm, R; Johnson, R; Vlissides, J. Padres de Projeto Solues Reutilizveis de Software Orientado a Objetos, Bookman, 2000.

[Larman] Larman, C. Utilizando UML e Padres, Bookman, 2004.

ChristianCleberMasdevalBraz
ChristianCleberMasdevalBraz(masdeval@yahoo.com.br)bacharelemCinciadaComputaopela UFMS.Em2004concluiuomestrado,tambmnaquelainstituio,nareadeintelignciaartificiale problemascombinatoriaisdifceis[...]

O que voc achou deste post? Gostei (6) (1)

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

8/11

26/03/14

Acoplamento fraco x Herana

Seja o primeiro a comentar

Publicidade

undefined

Servios
Inclua um comentrio Adicionar aos Favoritos Marcar como lido/assistido Incluir anotao pessoal

+Java

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

9/11

26/03/14

Acoplamento fraco x Herana

Mais posts
Artigo

Integrando o JADE a IDE NetBeans


Pocket Video

Como integrar o VNC com Java e C#


Pocket Video

Pacotes em Java - Verificando a compatibilidade


Artigo

Restaurando Segurana no Tomcat com BadInputFilter


Artigo

Data Join com Hadoop MapReduce


Video aula

Removendo a Venda - Curso JBoss: Introduo e Aplicao MVC completa - Aula 140
Video aula

Editando a Venda - Curso JBoss: Introduo e Aplicao MVC completa - Aula 139
Video aula

Criando conversores e gravando a Venda - Curso JBoss: Introduo e Aplicao MVC completa - Aula 138
www.devmedia.com.br/acoplamento-fraco-x-heranca/3714 10/11

26/03/14

Acoplamento fraco x Herana

Artigo

Java BigDecimal: Trabalhando com mais preciso


Artigo

JavaServer Faces 2.2: aumento de produtividade

Listar mais contedo

Anuncie | Loja | Publique | Assine | Faleconosco

DevMedia
Curtir

21.331pessoascurtiramDevMedia.

PluginsocialdoFacebook

HospedagemwebporPorta80WebHosting TodososDireitosReservadosaWeb03

www.devmedia.com.br/acoplamento-fraco-x-heranca/3714

11/11