Ci sono due diversi modi di mostrare la palla e la presa in EA.
Con quello che hai usato, hai disegnato i connettori dalle tue classi Consumer e Producer all'interfaccia IProducer (rispettivamente una dipendenza e una realizzazione). Hai quindi attivato la visualizzazione di interfacce dipendenti e realizzate sulle tue classi.
Fare in questo modo significa che le sfere e le prese sono fisse. Non è possibile selezionarli (la classe viene invece selezionata), non è possibile spostarli nelle classi parent e non possono essere endpoint per i connettori.
L'altro modo è utilizzare Expose Interface.
Con questo metodo, non si disegna alcun connettore dalle classi all'interfaccia. Invece, usi Expose Interface per creare un elemento incorporato, che ha l'interfaccia come suo classificatore, in ogni classe.
Queste interfacce esposte, essendo elementi a sé stanti, si comportano nel modo in cui le si desidera: è possibile spostarle lungo il perimetro delle rispettive classi e si possono disegnare connettori tra di loro.
Nell'esempio, notare l'assenza di connettori sull'elemento di interfaccia IProducer.
Per esporre le interfacce, ci sono due modi per farlo. È possibile selezionare Esponi interfaccia nella casella degli strumenti diagramma, ma si noti che è disponibile solo nella casella degli strumenti Componente, non nella casella degli strumenti Classe. Questo è quello che ho fatto con il produttore in questo esempio.
L'altro modo è fare clic con il tasto destro del mouse sulla classe e selezionare Nuovo elemento -> Porta. Questo crea una porta, che puoi dare qualsiasi nome. Quindi fai clic con il tasto destro sulla porta e seleziona Nuovo elemento -> Interfaccia fornita/richiesta.
In entrambi i casi viene visualizzata la finestra di dialogo Interfaccia esposta, che consente di selezionare l'elemento dell'interfaccia che deve essere esposto utilizzando il pulsante con i puntini di sospensione (...) e sfogliando l'albero del progetto per le interfacce.
L'utilizzo di una porta può sembrare un po 'macchinoso ma è, a rigor di termini, UML più corretto. Si noti inoltre che una singola porta può esporre diverse interfacce, sia fornite che richieste, consentendo di raggruppare le interfacce che formano una sorta di unità logica. Potrebbe essere che tu abbia diverse interfacce che formano un servizio e quindi vanno insieme, ma che la classe fornisce e richiede diversi servizi.
Questo (per me) ha più senso quando si discute non di singole classi ma piuttosto di componenti, e generalmente utilizzo realizzazione/dipendenza quando sto modellando le classi e le porte e le interfacce esposte quando modifico i componenti.
Questo sembra essere il migliore disponibile in EA. Ma perché dovremmo avere quel connettore di dipendenza che separa/colma il divario tra la fornitura dell'interfaccia e il requisito dell'interfaccia? Vale a dire, posso creare un singolo connettore "assembly" sul diagramma, ma non posso associarlo a una specifica classe di interfaccia, che la rende semanticamente priva di significato anche se rende come ci si aspetterebbe ... nessun modo per farlo ? – laurelnaiad
In altre parole, voglio diagrammi che assomigliano a questo: http://www.uml-diagrams.org/component-diagrams.html ma si basano su effettive classi di interfaccia ... come? – laurelnaiad