Programação OO voltadas para interface

Olá,

Quando se adquiri um pouco de experiência em OO percebemos que uma boa prática de programação é manter os conceitos de baixo acoplamento e alta coesão entre classes. Minha dúvida é como se representar no diagrama de classes quando se usa interfaces para receber vários tipos de implementação dela.

De acordo com a imagem a seguir

A classe EquipamentoControle apenas conhece a interface de seu repositório, eu quero dizer que através do método setRepository(EquipamentoRepository repository) ele recebe qualquer implementação da interface,

isso é correto ou minha composição no diagrama tem que ser diretamente a minha classe específica( que implementa a interface)

Se alguém puder me ajudar fico muito agradecido

Falar de arquitetura sem se conhecer tod o contexto é dar um tiro no escuro.

Entretanto posso dizer que seu método que recebe uma inteface esta mais coeso e menos acoplado do que um método que recebe apenas uma implementação. Agora vai do seu sistema poder ou não receber qualquer implementação.

Muito obrigado pela ajuda Giulliano,

meu objetivo é realmente fazer com que o controle receba qualquer tipo de implementação de repositório, isso vai ser feito através de injeção

Falando apenas da representação o seu diagrama está quase correto. A classe EquipamentoControle tem um EquipamentoRepository.
Ela não é composta por EquipamentoRepository , por isso o lousangulo junto a EquipamentoControle não deveria existir.

Em relação a apontar a classe ou a interface, vc aponta a interface. Afinal é isso que vc quer. se vc apontar a classe, a classe EquipamentoControle dependerá da implementação real do repositorio que não é o que vc quer.

Obrigado sergiotaborda

No caso, você não precisa representar a implementação neste diagrama de classes, justamente porque essa escolha será feita em tempo de execução. Assim, isso seria representado em diagramas que representam aspectos dinâmicos do sistema, como o diagrama de atividades ou o diagrama de seqüências.

So um detalhe a adicionar ao que ja foi falado.

Quando se fala “Programar voltado para a interface” não quer dizer que vc tem que usar interfaces e classes que a implementam, mas que vc deve programar pensando
no que os outros objetos conhecem do seu objeto,ou seja a “interface” de acesso a troca de mensagens com ele, sem se preocupar em como isso esta implementado.

[]´s