Come faccio a mostrare "crea" in un diagramma di classe UML?

2

Supponiamo che il mio codice assomigli a questo:

public class MyController
{
    private Foo foo;
    private FooGenerator fooGen;

    //setters

    public void work()
    {
        this.foo = this.fooGen.generateFoo();
        System.out.println(this.foo.toString());
    }
}   

public class FooGenerator()
{
    public Foo generateFoo()
    {
        String[] names = ["Andy", "Bob", "Charlie"];
        String[] colors =  ["Red", "Green", "Blue"];

        int nameIndex = new Random().nextInt(names.length);
        int colorIndex = new Random().nextInt(colors.length);

        return new Foo(names[nameIndex], colors[colorIndex], new Random().nextInt(100));
    }
}

public class Foo()
{
    private String color;
    private String name;
    private int age;

    public Foo(String color, String name, int age)
    {
        this.color = color;
        this.name = name;
        this.age = age; 
    }

    @Override
    public String toString()
    {
         return "This Foo's name is " + this.name + ", color is " + this.color + ", and is " + this.age + " years old.";
    }
}

Quindi quello che abbiamo è MyController HAS a FooGenerator , e viene restituito un Foo da FooGenerator , che MyController quindi utilizza.

La domanda è, come posso rappresentarlo in un diagramma UML?

    
posta dwjohnston 21.05.2015 - 03:33
fonte

3 risposte

6

[Disclaimer: non sono un fantino UML, quindi non credetemi.]

Penso, sembrerebbe questo.

Alcuni dettagli omessi per brevità.

    
risposta data 21.05.2015 - 08:17
fonte
1

Penso che prima dovresti fare un passo indietro e pensare; cosa stai cercando di comunicare con il diagramma e a chi?

Se devi assolutamente farlo tramite uno schema di classe, la risposta di Nick è un approccio ragionevole. Tuttavia, i diagrammi di classe vengono solitamente utilizzati per mostrare la struttura statica, creates sembra una relazione comportamentale / lifetime quindi è più adatto a un diagramma comportamentale come un diagramma di attività

Infine, lo schema è addirittura necessario? Questo sembra un dettaglio di implementazione di così basso livello l'unica persona che posso pensare a chi sarebbe interessato sarebbe un altro sviluppatore? Come sviluppatore, penso che preferirei solo leggere il codice, e forse un breve commento affermando che FooGenerator è una fabbrica per Foo di wade attraverso UML.

    
risposta data 21.05.2015 - 10:28
fonte
1

Chiming in: questo è un esempio molto piccolo del dibattito ingegneristico in corso "Model-Based" e "Model-Driven" in corso. La domanda è qual è lo scopo del tuo modello?

  • Guidato dal modello - stai provando a generare il tuo codice direttamente dal tuo modello. Questa era la tesi / obiettivo di "UML eseguibile" e altri. Se lavori in questo tipo di team, dovrai studiare i dettagli di come il tuo particolare strumento genera codice perché UML stesso non fornisce indicazioni prescrittive su come il codice dovrebbe essere generato.
  • Basato sul modello - stai provando a utilizzare i diagrammi di modellazione come metodo di comunicazione per creare "una singola versione della verità" tra un gruppo (solitamente diverso) di parti interessate. Ad esempio, potresti avere una prossima revisione del codice? Quindi devi pensare al tuo pubblico. Hanno bisogno di questo livello di dettaglio sullo schermo nella sala conferenze? Se è così, sono d'accordo con l'altro commentatore sopra ... il fatto che FooGenerator crei Foo è un'attività. Si potrebbe guardare usando un diagramma di sequenza. FooGenerator entra in una nuota e invia un messaggio "Crea" ad un'altra nuota che contiene "Foo" ... o qualcosa del genere.

Spero che questo aiuti

    
risposta data 21.05.2015 - 16:43
fonte

Leggi altre domande sui tag