4

アプリケーションの一部で使用する可能性のあるアルゴリズムをどこに記述すればよいか、少し混乱しています。

Use Case一連の値を入力し、アプリケーションがそれらの値の平均を返す方法を説明するを作成したいとしUserます (もちろん、これは非常に簡単なケースですが、このように説明する方が簡単です)。

1. The User tells the System he wants to calculate the average of a set of numbers.
2. The System asks the User for a number.
3. The User tells the System a number.
Repeat steps 2-3 until the User tells the System there are no more numbers left.
4. The System returns the average of all those numbers.

では、数値の平均を計算するアルゴリズムをどこに記述すればよいでしょうか。

数値の平均を計算する代わりに、ゲームの構成を変更したり、次のレベルに移動したり、一連の条件を指定してデータベースにユーザーを追加したりしなければならなかったとしたら?

ドメインについて持っている知識を何らかの方法で形式化する必要があるように感じます。そうしないと、それを忘れるか、さらに悪いことに、書き留めるだけではわからないことを知っていると思い込んでしまう可能性があります。

別のスレッド、トピックで、誰かがビジネス ルールについて話しました。私が読んだことから、それらはクラス図に小さなメモとして置かれているようです。たぶん私は間違っています?もしそうなら、より複雑なアルゴリズムに使用するには扱いにくいと思います。

ありがとう

4

3 に答える 3

3

本当にユース ケースに固執したい場合は、エンド ユーザーの視点ではなく、システムの機能の視点からユース ケースを作成します。多分このようなもの:

  1. システムが起動し、合計変数とカウント変数がゼロになります。
  2. システムが番号を受け取ります。
  3. 合計に数値を追加し、カウントをインクリメントします。
  4. システムが停止するように指示されるまで、ステップ 2 と 3 が繰り返されます。
  5. 停止するように指示されると、システムは合計をカウントで割り、結果を返します。

Alastair Cockburn の優れた著書「 Writing Effective Use Cases 」を読んでください。さまざまなレベルのユース ケースがあることについて説明します。最初の例はユーザー目標 (または青) のユース ケースと見なされますが、上記の手順はサブ機能 (またはインディゴ) のユース ケースの一部になります (非常に単純なので、黒のユース ケースとして分類され、マージされることさえあります)。その親に)。

他の人が言うように、ユースケースはアルゴリズムを説明する最良の方法ではない場合があり、古き良きフローチャート、状態図、シーケンス図などにフォールバックする必要があります. これらのツールはあなたの利益のためにあります - 特定の方法がうまくいかないときに強制することによって制約されないでください.

編集

@devoured elysium:あなたのコメントに応えて、以下にいくつかのメモを追加しました:

ドメイン オブジェクトを識別する場合、書き込まれていないオブジェクトについて考える必要がある場合があります。それはすべて、それがどのように書かれているかに依存します。したがって、あなたが示した例では、「システム」は「電卓」であり、数値を加算するために使用される変数は「アキュムレータ」であり、数値を受け取る「キュー」がある可能性があります。範囲検証や入力構文チェックなどの明確な動作が可能な場合、数値自体が「数値」型のオブジェクトである可能性があります。考慮する必要がある「表示」オブジェクトはありますか?

それは、あなたが扱っている境界のあるコンテキストにあるとあなたが考えるものに依存します。おそらく、ユーザーの観点からは、「電卓」のみを扱うコンテキストが 1 つありますが、システムの観点からは、「アキュムレータ」、「ALU」、「ビット」、「ワード」などの下位レベルのコンテキストを扱う別のコンテキストがあります。レジスタ」、「クロック」、「ラッチ」など。言語がより技術的になるでしょう。どれがドメイン オブジェクトで、どれが単なる実装オブジェクトであるかを判断する必要があります。それは、記述および構築しようとしているものの種類に大きく依存します (そして、大部分は、対象者が誰であるか、ユビキタス言語などすべてに依存します)。 !)。逆に、「なぜ?」と尋ねることで、スタックを上に行くことができます。機能が実行されています。

サブ機能ユース ケースの主要なアクターは、通常、それを呼び出す上位レベルのユース ケースのアクターと同じです。ただし、一部の「技術的な」ユース ケースでは、主要なアクターはシステム コンポーネント/サブシステムになります。たとえば、システム メッセージ ロギングのユース ケースでは、サブシステムがログを必要とする原因となったタスクを実行していたアクターではなく、主要なアクターとして呼び出しサブシステムを持っている場合があります。なにか。

この例では、アルゴリズムが非常に単純なので、おそらくメインのユース ケースに埋め込むだけです。ただし、他の複数の高レベルのユースケースで使用されている場合は、他のドキュメントから含めることができるようにスタンドアロンにします。単なる機能分解アプローチ。

これには厳格なルールはありません。時代とともに変化していく働き方です。他の人が言ったように、仕事に適したツールを選択できるように、他の形式のダイアグラムに精通していることを確認してください。百聞は一見に如かずということもありますが、実際にはそれらの言葉も必要になる場合があるので、図だけに頼らないでください。

于 2010-07-16T23:23:51.317 に答える
1

ユースケースを誤用しています:ユースケースは静的ビューです:)

動的ビューでは、アクティビティ図またはオブジェクト図/シーケンス図を使用する必要があります。

于 2010-07-17T04:51:37.397 に答える
1

モデルに制約を追加して解決したアルゴリズムとは関係のないシステム モデリングの複雑な問題がありました。それが役に立つかどうかはわかりませんが、私がしたのと同じトリックを使用できるようです。ダイアグラムにモデル情報を追加し、複数のダイアグラムを使用してユースケースの複数のビューを表示することを意味します。

このマルチ ダイアグラム ビューと独自のプロパティを保持するユースケースは本当にクールでした。ユースケースをモデルに保存すると、別のダイアグラムで使用できるため、特定のダイアグラムでは不可能だったことを説明できるからです。メタモデルを xmi データベースとして使用し、UML エディターをモデル自体ではなくモデルのビューアーとして使用する非常に強力な概念。以前は不可能だったことができるようになり、はるかに強力になりました。また、ダイアグラム レベルだけでなくメタモデル レベルも見なければならないため、より複雑ですが、慣れると素晴らしいものでした :-) 代替テキスト http://www.forum-omondo.com/download/file.php?id= 253&モード=ビュー

于 2010-07-18T08:15:34.517 に答える