UTI UML教育研究所
トップページ> 読み物> コラム> 使えるUML 第9回
はじめるUML(全12回)
  はじめてみよう!
  モデル要素の整理整頓
  システム全体の構造(1)
  システム全体の構造(2)
  システム全体の構造(3)
  システム化対象の業務(1)
  システム化対象の業務(2)
  システムの動き(1)
  システムの動き(2)
  状態の移り変わり
  OCUPにチャレンジ!
  UML2.0総括(最終回)
続はじめるUML(全10回)
  使ってみよう!
  UMLによる業務分析
  営業職のOCUP受験体験記
  UMLによる要求分析
  インターメディエイト受験体験記
  UMLによるシステム分析
  アドバンスト受験体験記
  UMLによるシステム設計
  情報システム管理者が利用するUML
  続はじめるUML総括
使えるUML(全10回)
  使いこなしてみよう!
  物事を分けてとらえる
  コンポーネント図のいくつかの表現方法
  枠組みを使用してとらえる
  内容とその表現方法をわける
  パターンの表現
  続・パターンの表現
  モデルのモデル
  あいまいさを排除する
  「どのように(How)」から「何を(What)」へ
  大人のオブジェクト指向(最終回)
資格取得までのステップ
FAQ
教育コンテンツ
キャンペーン
ブックプラス
パートナープログラム
認定ユーザープログラム
メールマガジン登録
お問合わせ
使えるUML 第9回

パターンウィーバー(PatternWeaver) ver2.2
さらに使いやすく、新機能満載!
  • 多言語によるモデル開発をサポート
  • モデル駆動型のSOA(サービス指向アークテクチャ)をサポート
  • MS-Word形式へのドキュメント出力をサポート
  • RCP(Rich Client Platform)版の提供を開始
  • 洗練された各種ダイアグラム
  • 操作性の強化
  • リポジトリ(UML要素管理機能)の強化
  • ソースコード連携の強化

評価版がダウンロードできますので、ぜひお試しください。
http://pw.tech-arts.co.jp/download/community_edition.html

●商品に関するお問い合わせ
株式会社テクノロジックアート
e-mail : pw@tech-arts.co.jp
http://pw.tech-arts.co.jp/

パターンウィーバー無料プライベートセミナー 〜知らなかったこんな使い方〜
申込受付中!第三回目は10/17(水)開催
2007.10.4 掲載
あいまいさを排除する
UMLの追加機能的な仕様である OCL(Object Constraint Language : オブジェクト制約言語)という言語に注目します。OCLとは、UMLで記述したモデルをより厳密にするための追加情報を記述するための言語です。システム開発の現場では、まだそれほど浸透していませんが、状況によってはとてもメリットのある技術です。今回の記事では、OCLを使用することで回避できる問題と、OCLの概要について説明します。

◇飼育担当が所属する組を表現できないクラス図
学校の教室で、モルモットとセキセイインコのペットを飼っており、それぞれに学生の飼育担当がいるものとします。これをクラス図で表現すると図 1のようになるでしょう。

図1 飼育係りのクラス図
図1 飼育係りのクラス図

ところで、当然ながらペットの飼育担当は同じ教室の学生でなければなりません。しかし上記図1のクラス図ではこのことを表現できていません。例えば図2のようなオブジェクト図で表現される関係が許されてしまいます。

図2 飼育係りのオブジェクト図
図2 飼育係りのオブジェクト図

このような問題は、クラス図中に制約を加えることで回避することができます。制約は日本語などの自然言語や、プログラミング言語の書式での擬似コードなどでも記述することができますが、ここでは、内容を誤解される心配がなく、制約を記述するための言語として標準化されているOCLで記述することにします。OCLで「ペットの飼育担当は同じ教室の学生」ということを表現する場合には、図3のように「ペット」クラスにノートを追加します。

図3 飼育係りのクラス図(OCL付き)
図3 飼育係りのクラス図(OCL付き)

OCLによる制約を、UMLの図の中ではなく、別の場所に記述する場合は、次のような書式になります。

図4 別の場所に記述する際のOCL
図4 別の場所に記述する際のOCL

このOCLの解説は以下のとおりです。

記号 説明
(a) “Context”はOCLが属するクラスや属性を表し、この例では「ペット」クラス。
(b) “inv:”は不変条件(invariant)を意味し、その後に続く式が常に満たすべき条件であることが示される。
(c) “->includes()”はコレクション(セットを含む)に対する操作の一種で、引数がコレクション中に存在する場合に真となる。
(d) “self”はContextであるペットを意味する。その後の「.場所.所属学生」のように関連の関連端をドットでつなげることで、関連を走査することができる。ここでは所属学生の多重度が * なので、全体として学生のセットとなる。
表1 OCLの説明

まとめて、このOCLを日本語で表現すると、「ペットの場所の所属学生に、ペットの飼育担当は含まれなければならない」となります。
OCLは、一見するとJavaやC#のようなオブジェクト指向言語の文法表現に似ていることが分かります。これらの言語に親しんでいれば理解するのは簡単です。また式による記述なので自然言語のような曖昧さがなく、誰が読んでも同じ意味となり誤解をあたえることがありません。

◇OCLの特徴
例でみてきたように、OCLによってクラス図で表現できなかった制約を追記することができます。もちろんこれ以外にもOCLが活用できる場面は数多くあります。以下にOCLの主な特徴をまとめました。

  1. 宣言的言語
  2. 契約による設計(不変条件、事前条件 事後条件)
  3. 派生属性や動的な多重度を定義できる
  4. メッセージの引数やガード条件に使用できる

1.の「宣言的言語」というのは、「何を(What)」したいのかということを記述する言語ということです。これはJavaなどのような命令型言語が「どのように(How)」処理を行うのかについて記述する言語であることと対照的です。リレーショナルデータベースを使ったことがある方はSQLを思い浮かべれば分かりやすいかもしれません。SQLは最も有名な宣言的言語の1つです。SQLでは、どのようなデータ(何を)を欲しいのかが問い合わせ命令(SELECT文)で指定し、その処理の方法はデータベースに任されます。

2.の「契約による設計(DbC : Design by Contract)」とは、不変条件・事前条件・事後条件によって、クラスまたはメソッドの仕様を記述することを指しています。「契約による設計」についての解説はまた次の機会に行いたいと思います。

3.の派生属性とは、それ自身が値を持たずに、その他の属性や関連先のクラスから導出することによって値が求められる属性です。この導出方法をOCLで定義することができます。また、OCLでは、オブジェクトの状態によって変化する関連の多重度を定義することができます。

4.の「メッセージの引数やガード条件に使用できる」というのは、例えばシーケンス図の中でのメッセージの引数をOCLで記述したり、ステートマシン図の中のガード条件をOCLで記述したりすることで、自然言語に比べてより厳密にモデルを記述することができるということです。またOCLはクラス図以外のダイアグラムでも使用することができるということもポイントです。

◇まとめ
今回は、クラス図で不足していた制約をOCLで補うこと、またOCLの概要について紹介しました。モデルからあいまいさを排除するための制約は、必ずしもOCLで記述しなければいけないというものではなく、日本語などの自然言語で記述した方がよい状況がたくさんあることに注意してください。
「契約による設計」を通して、より多くのOCLに触れる機会は、今後の回にとっておくこととさせていただきます。


■筆者紹介
山下 智也/Tomonari Yamashita
株式会社テクノロジックアート テクニカルデプト UMLモデリングチーム