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)
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.
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.
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.
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.