web-dev-qa-db-ja.com

UMLクラス図に「作成」を表示するにはどうすればよいですか?

私のコードが次のようになるとしましょう:

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.";
    }
}

つまり、MyControllerにはFooGeneratorがあり、FooからFooGeneratorが返されます。これは、MyControllerが利用します。

問題は、これをUMLダイアグラムでどのように表すかです。

2
dwjohnston

[免責事項:私はUMLジョッキーではないので、私のWordをそれに取ってはいけません。]

こんな感じになると思います。

enter image description here

簡潔にするため、一部の詳細は省略されています。

6
Nick Alexeev

最初に一歩下がって考えるべきだと思います。図とやり取りしようとしているのは誰ですか?

あなたがクラス図を介してそれを絶対にやらなければならない場合、ニックの答えは合理的なアプローチです。ただし、クラス図は通常、静的な構造を示すために使用され、createsは行動/寿命の関係のように見えるため、アクティビティ図などの行動図に適しています

最後に図は必要ですか?これはそのような低レベルの実装の詳細のように思えますが、それに興味があるのは別の開発者だけだと私が考えることができる唯一の人ですか?開発者としては、コードを読んだほうがいいと思います。また、FooGeneratorはUMLを経由するのではなく、Fooのファクトリーであると簡単に説明しているかもしれません。

1
jk.

これは、進行中の「モデルベース」と「モデル駆動型」のエンジニアリング論争の非常に小さな例です。問題は、モデルの目的は何ですか?

  • モデル駆動型-モデルから直接コードを生成しようとしています。これが「Executable UML」などの論文・目標でした。この種のチームで作業している場合、UML自体はコードの生成方法に関する規範的なガイダンスを提供しないため、特定のツールがコードを生成する方法の詳細を調査する必要があります。
  • モデルベース-(通常は多様な)一連の利害関係者間で「真実の単一バージョン」を作成するための通信方法としてモデリング図を使用しようとしています。たとえば、今後のコードレビューがあるとします。次に、聴衆について考える必要があります。会議室の画面にこのレベルの詳細が必要ですか?もしそうなら、私は上記の他のコメンターに同意します... FooGeneratorがFooを作成するという事実は活動です。シーケンス図を使用して見てください。 FooGeneratorは1つのスイムレーンに入り、「Foo」を含む別のスイムレーンに「Create」メッセージを発行します...またはこのようなもの。

お役に立てれば

1
Dave in Austin