Cosa usare in UML per il modulo incluso in ruby?

2

Mi piace creare semplici diagrammi di classe per i miei progetti. Il più delle volte uso solo composizione, ereditarietà e associazioni. La risorsa UML di base di IMB parla di tutto questo.

Comunque sto usando il rubino quindi ho avuto la possibilità di definire un modulo con alcuni metodi. Posso solo includere questo modulo in ogni classe in cui voglio usare questi metodi. Questo potrebbe essere interpretato come un'eredità, tuttavia alcune delle mie classi sono già classi figlio di un'altra classe e non voglio mescolare il significato di un simbolo usato nei miei diagrammi.

Come dovrei visualizzare un modulo incluso nei miei diagrammi di classe in UML?

    
posta p1100i 30.07.2013 - 09:46
fonte

3 risposte

1

UML non ha questo tipo di concetto di modulo, quindi non ha un modo definito per rappresentarli in un diagramma.

Alcune possibilità sono:

  1. Non mostrare l'inclusione del modulo nei tuoi diagrammi UML. UML non richiede che tutti i dettagli siano presenti nei diagrammi e puoi solo decidere che il fatto che alcuni dei metodi siano effettivamente forniti attraverso il meccanismo dei moduli di Ruby è uno di questi dettagli nascosti.
  2. Modella i moduli Ruby come pacchetti / classi UML e usa una dipendenza semplice per indicare l'inclusione.
  3. Modella i moduli Ruby come un tipo speciale di classe base (puoi contrassegnarli come speciali utilizzando uno stereotipo per loro, ad esempio <<module>> )
risposta data 30.07.2013 - 10:15
fonte
1

Come è stato suggerito in un'altra risposta, potrebbe essere inutile includere il modulo nel tuo diagramma.

Se lo fai comunque, penso che potresti fare quanto segue (alcuni sono stati suggeriti in un'altra risposta):

  • È possibile considerare i metodi e le variabili in un modulo come statici. dovresti quindi sottolinearli.
  • Puoi creare uno stereotipo specifico per i moduli per qualificarli meglio.
  • Dovresti usare solo depency relazioni (come < < usa > >)
risposta data 30.07.2013 - 10:51
fonte
1

Un'opzione potrebbe essere l'estensione di UML. Questo è ciò che Schärli e altri hanno fatto quando hanno inventato i tratti, che sono parenti stretti dei mixin. Semplicemente ha inventato un'aggiunta a UML che ha permesso loro di rappresentare i tratti. Ovviamente, tale UML non può più essere prodotto o elaborato da strumenti UML esistenti, è necessario estendere anche questi strumenti.

Un'alternativa è guardare a ciò che un mixin è veramente al centro: un mixin è una classe parametrizzata rispetto alla sua superclasse. (Pensa: class MyMixin<T> extends T .) In Ruby, questo è anche il modo in cui è effettivamente implementato: include crea una nuova classe che condivide il suo metodo, la costante e le tabelle di variabili modulo / classe con il mixin, ottiene la superclasse corrente della classe che è incluso nella sua superclasse e quindi diventa la superclasse di classi miste.

Confrontato con l'ereditarietà multipla: con ereditarietà multipla, una classe può avere più superclassi, ma appare solo una volta nel grafico dell'ereditarietà. Con i mixin, una classe di mixin può apparire più volte nell'albero ereditario, ma ad ogni occorrenza ha solo una superclasse (che potrebbe essere diversa dalle altre occorrenze).

Quindi potresti rappresentare un mixin come una superclasse nella catena di ereditarietà di ogni classe in cui viene mescolato, con qualche relazione aggiuntiva tra quelle classi per indicare che quelle sono in realtà lo stesso mixin, solo con diverse superclassi. Ad esempio, li rappresentano come istanze di modello ( <<bind>> ) di un modello MyMixin<T> che ha T come superclasse (se possibile). Oppure crea la tua relazione, ad esempio <<same mixin>> o qualcosa di simile.

    
risposta data 30.07.2013 - 14:38
fonte

Leggi altre domande sui tag