Conceito de baixo Acoplamento

Olá amigos,

A minha dúvida, talvez seja mais sobre mapeamento objeto relacional, do que sobre Java em si. Portanto desde já agradeço
qualquer esclarecimento. Vou supor uma situação simples para expor-lhes melhor minha dúvida e facilitar qualquer explicação.
Supondo-se que eu esteja fazendo um programa simples de uma agenda de telefone, que use uma classe Pessoa(com nome, sobrenome
e etc) e uma classe separada de Telefones(nº celular,casa, trabalho, fax…). Ao meu ver se eu usasse uma objeto Telefones em
Pessoa estaria aumentando o acoplamento do meu programa. Porquê assim Pessoa conheceria, muitos métodos de Telefones. Em contra
partida, se por acaso manter as duas separadas, na hora de persistir os dados de um contato, num método inserir por exemplo,
eu teria de usar dois parâmetros, um Pessoa e outro Telefones. E desta forma o método se tornaria “mais trabalhoso”.
A minha pergunta é a seguinte: É realmente assim que funciona o conceito sobre baixo acoplamento? Ele visa os benefícios na
manutenção do código, no reuso ou em nenhum dos dois? Forte abraço a todos!

xandinhocavalcante, acoplamento refere-se a quantidade de classes que a classe sendo considerada “conhece”, ou seja, invoca métodos, mantêm referencias e extende (pra citar alguns relacionamentos). A decisão de quanto criar ou não a classe “adicional” telefone não depende somente do acoplamento, mas se telefone é suficientemente bem "mapeado"como uma String ou seja lá o que for (menos classe, dado que você não pretendia, lembra). Digamos que telefone tenha comportamentos… mapear como String é razoável? Claro que não.
Espero ter ajudado, melhorou ou lascou? :smiley:
Abraços. :wink:

Opa,

No caso alto acoplamento seria você colocar métodos de controle do Telefone na classe Pessoa.

Um mais baixo acoplamento seria você gerar uma classe Telefone e então manter os métodos de controle do telefone na mesma.
Então na classe Pessoa você declara um objeto do tipo Telefone, invés de declarar o atributo e os métodos de controle do telefone.
Agora na hora de persistir os dados no BD, não será necessário você passar vários argumentos, apenas passará Pessoa, pois Telefone está dentro desta.

Como o amigo acima disse.
" Espero ter ajudado, melhorou ou lascou?"

haha
valeu \o\

Olá,

Isso ta mais parecendo uma classe com boa coesão e nao uma classe com baixo acoplamento.

]['s

Desculpe mas… qual o objetivo em entrar num tópico, criticar a resposta de outro usuário, e não fornecer uma resposta própria???

Bom, de qualquer forma, tenho de mostrar esses dois conceitos da ciência da programação:

“Acoplamento é o nível de inter-dependência entre os módulos de um programa de computador. Quanto maior for o acoplamento menor será o nível de coesão.”

“Coesão é a medida da força relativa de um módulo. Quanto maior for a coesão, menor será o nível de acoplamento de um módulo.”

Ou seja, fabgp2001, coesão e acoplamento são duas palavras, na informática, contextualmente antônimas. Elas formam, juntas, o paradoxo entre excesso e precariedade de acoplamento em sistemas programáveis.


Respondendo ao xandinhocavalcante, acredito que manter o Telefone sob o objeto Pessoa mantém melhor o conceito de baixo acoplamento.
Ao que você citara sobre partir à persistência desses objetos, acredito que possa ser raciocinado mais efemeramente da seguinte forma: um objeto Pessoa trabalha com objetos Telefone. O objeto Pessoa “precisa” de objetos Telefone. O objeto Telefone armazenado junto ao objeto Pessoa faz com que a preocupação do programador se mantenha em manejar o objeto Pessoa, e não necessariamente aos dados que esse objeto comporta. Em uma aplicação prática, poderia até supor que o objeto Pesso pude-se conter métodos como getTelefone() que retornaria um valor “chamado” a um objeto Telefone interno. Ou seja, submetendo o Telefone internamente à Pessoa, o vínculo da classe cliente (aquela que usa objetos Pessoa) com o objeto Telefone (dispensável) fica quase nulo. Digo que a classe Telefone é dispensável porque ela possivelmente armazenará somente informações que não têm relação direta com um objeto Pessoa; isso em uma aplicação de Agenda seria implementado somente em casos específicos. Provavelmente o mais normal será a Agenda trabalhar com objetos Pessoa que “contenham” Telefone’s.

Vê-se, a partir disso, que manter o Telefone separado da Pessoa pode exigir, como você mesmo citara, código e esforço extra do programador, que precisará, programaticamente, estar identificando Pessoa -> Telefone, Telefone -> Pessoa.

Perai pessoal muita calma nessa hora rsrs.
A ideia é tentar responder com conhecimentos certos, e que tenhamos certeza do estamos falando a fim de não confundir mais a cabeça de quem esta querendo tirar duvida, mas as vezes acontece de estarmos enganado, e não vejo problema algum em questionar a resposta do outro, para que chegamos em uma resposta coesa rsrs.

A respeito de baixo acoplamento, quanto mais baixo melhor principalmente em Java que é orientada a objetos, ou seja, quanto menos amarrada as classes menor o acoplamento.

xandinhocavalcante da um pouco mais de trabalho, mas no final é compensador pra manutenção ou ate mesmo pra progressão, não é atoa que a maioria de programadores odeiam Java, rsrs.

Att…

Luz!!! Pô, valeu ai rapaziada pela explicação! Havia tido aula e lido sobre o conceito, mas algumas coisas ainda estavam meio obscuras… A dúvida me voltou agora estudando pra prova de certificação, mas vocês conseguiram sanar. Obrigado à todos que responderam!

Yky… esse assunto muito me interessa, e vc parece manjar bem disso…

me tira uma duvida entao amigo: suponhamos q na minha classe pessoa, eu tivesse por exemplo objetos telefones, enderecos, fotos, decadatilar (trabalho pra policia civil), e uma pancada de objetos…

o método getLista() de pessoas, obrigatoriamente busca também a lista de todos esses objetos contidos na classe pessoa??

Isso aí Yky

já sobre o Telefone, realmente ele pode ser meio inútil, mas isso é só um exemplo.
Mas ainda poderíamos ter um objeto telefone que nos retornasse separadamente DDI, DDD e Número evitando o trabalho de separar uma String toda hora :slight_smile:
Endereço então fica melhor, já que temos por exemplo: Rua, Número, Complemento, Bairro, Cidade, Estado…

vlw aí
até mais.

Desculpe mas… qual o objetivo em entrar num tópico, criticar a resposta de outro usuário, e não fornecer uma resposta própria???

Bom, de qualquer forma, tenho de mostrar esses dois conceitos da ciência da programação:

“Acoplamento é o nível de inter-dependência entre os módulos de um programa de computador. Quanto maior for o acoplamento menor será o nível de coesão.”

“Coesão é a medida da força relativa de um módulo. Quanto maior for a coesão, menor será o nível de acoplamento de um módulo.”

Ou seja, fabgp2001, coesão e acoplamento são duas palavras, na informática, contextualmente antônimas. Elas formam, juntas, o paradoxo entre excesso e precariedade de acoplamento em sistemas programáveis.[/quote]

Olá Yky,

Bom, nao sei onde foi feita critica a resposta do colega, eu só fiz um comentário para não confundirmos mais ainda as coisas.

Querendo ou não o comentário dele foi equivocado.

]['s

Coesão não diz nada sobre acoplamento e vice-versa. Você pode ter uma classe altamente coesa que está fortemente acoplada com outra. E acomplamento não acotnece apenas entre classes, acotnece entre sistemas, subsistemas, módulos, pacotes, classes e métodos: qualquer divisão que você estabeleça.