3

なぜ私たちは最初に設計の問題に取り組み、視覚的な方法 (UML) を決定するのかについて頭を悩ませようとしています.簡単に動作することが証明されません。したがって、モデルのプロパティを証明するときが来たら、設計に制約を定義する必要があることがわかります。そのため、モデルの制約を定義する形式構文 (OCL) を設計します。この跳躍が出発点に戻るのを理解するのに苦労しています。OCL で邪魔された UML デザイン (パンフレットに示されているサンプルでさえ) は判読できず、無数の UML シンボルや規則よりもさらに難解です。だから私が知りたいのは、今日のソフトウェア開発の世界でOCLが使用されている主要な分野は何ですか? また、学ぶことは誰にとって関連性があるか、または学ぶ価値がありますか? あなたの仕事の役割はどのように見えますか? コードをまったく書かないアーキテクトは UML と OCL を使用しますか? それとも、それを実装する同じチームでシステムを設計および設計するプログラマーもそれを使用しますか?

[更新: 第二に、アジャイル開発は「重い」手順に反するように思われ、OCL のような設計図の制約のためのドメイン固有言語はあまりアジャイルに見えない. UML+OCL はどの「アジャイル」ショップでも使用されていますか、それともスクラム担当者によって一般的に避けられていますか?]

4

4 に答える 4

5

興味深い質問です。

オブジェクト制約言語の「聖杯」は、UML と組み合わせると、ツールがそれを具体的なオブジェクト グラフ/メタ モデルに変換できるようにするフレームワークを提供することでした。そのため、開発者はビジネス メソッドを実装するだけで済みました。(これはすべて言語に依存しない方法で)

Borland の JBuilder は、エンタープライズ エディションでこれをサポートしようとしました。また、Delphi with ECO も、Query 機能をサポートすることによって (変換入力としてではなく) 実用的な方法で OCL を利用しました。実際、Borland / BoldSoft の Anders Inver と ECO チームの 1 人が、OCL バイブル The Object Constraint Language, Second Edition (addison wesley) に前書きを書きました。

私の個人的な意見は、学習曲線を正当化するのに十分な見返りがないということです. 特殊な (そして高価な) ツールを使用しない限り、UML/OCL モデルは実際には簡単にテストできず、得られる価値は (どちらかと言えば) 反復的なテスト駆動開発よりもわずかです。Java、C#、Delphi、C++、またはその他のパスを開始したら、言語の独立性は過大評価されています。他の方法で再生成する方法はまったくありません。それは実用的ではありません。

実際のプロジェクトで実際に使用されている OCL を使用したモデル駆動型開発をまだ見たことがありません。(概念実証として以外)最近現実の世界で機能しているように見えるのは、アジャイルプロセス、スクラムなど、および標準言語とユーザーストーリー(おそらくホワイトボードまたはストーリーボードのUML)を備えた標準IDEを使用した反復開発です。

于 2010-07-21T23:51:46.050 に答える
2

モデルに OCL 制約を定義する利点は、UML のグラフィカル構造では表現できないドメインのすべてのビジネス ルールを指定できる可能性があることです (たとえば、多重度は、関連定義の一部としてグラフィカルに表現できる制約です)。 、クラス C の属性 A が 5 よりも大きくなければならないということも制約ですが、UML はこのためのグラフィカルな構文を提供していないため、この場合は OCL で定義する必要があります)

明らかに、コード生成ツールがこれらの制約を取り、それらを強制するコードを自動的に生成できる場合、これは非常に便利です (たとえば、Java メソッドの if 条件や、データが制約に違反したときに例外を発生させるデータベースのトリガーとして)。ルール)。

残念ながら、この機能を提供するツールは多くありません (リストはこちらを参照してください: http://modeling-languages.com/content/list-ocl-tools ) が、状況は徐々に改善されています。

于 2010-07-22T21:46:15.630 に答える
1

私は、卒業論文のごく一部として OCL 制約を扱いました。Borland (現在の Microfocus) Together には興味深いアプローチがあり、OCL Constraint から Java コードを生成していました。変数 X が >= 0 または空でないことを定義し、Together はそれを自動的に検証する assert コマンドを作成しました。

于 2012-02-08T17:46:56.267 に答える