Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト
MSDN
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home > MSDN アカデミック アライアンス > 第 2 回:Visio と UML

第 2 回:Visio と UML

〜 Visio によるオブジェクト指向設計入門 〜

2.1 はじめに

システム設計は、複雑で大規模なソフトウェアを開発する場合、欠くことができない要素です。本章の前半では、近年非常に注目を集めている UML によるオブジェクト指向設計について解説します。また、後半では、UML の記述に用いられる 8 つのダイアグラムについて Visio を利用して解説します。

2.2 オブジェクト指向設計の概要

2.2.1 システム設計の必要性

システム設計とは、システムの仕様を固める作業です。仕様とは、システムにどのような機能を持たせ、何を結果として表示し、データをどのように扱うかなど、システムの具体的な内容を明確に決定することです。

システム設計を行わずにプログラムを作成する場合、主に以下の 3 つの問題点が挙げられます。1 つ目は、プログラム中に同じ処理が点在することです。そのため、修正を行う場合、複数の修正個所を探し出し書き直さなければならないという弊害が生じます。2 つ目は、1 つの関数に処理を集中して実装する可能性が増してしまうことです。そのため、プログラム全体を把握することが非常に困難になるという弊害が生じます。3 つ目は、ソースコード同士が複雑に関係して処理を行うプログラムを実装する可能性が増してしまうことです。そのため、1 つの場所を修正することにより、新たなバグが発生してしまう弊害が生じます。

上記のような問題点を解消するため、システム開発を行う場合は、システム設計は必要不可欠な工程となります。

2.2.2 オブジェクト指向設計

従来から用いられている設計手法には、プロセス中心設計やデータ中心設計がありました。DFD (Data Flow Diagram) で有名なプロセス中心設計は、処理主体のシステム設計です。また、プロセス中心設計において、データは、システムの入力や出力を行うための位置付けになっており、システムと切り離すことができません。そのため、システムの仕様変更に対応する場合、データ設計を大幅に変更する必要があります。

ER モデルで有名なデータ中心設計では、データの流れやデータ間の関係 (Relation) を中心に設計を行います。また、データをシステムから分離することにより、部品として様々なシステムに再利用することが可能になります。しかし、これらの手法は、処理やデータの片方を中心に設計しているため、プログラムの再利用が困難でした。

そこで、処理とデータの両方を再利用できるオブジェクト指向設計が考案されました。オブジェクト指向設計は、データと処理の両方を一体化した「オブジェクト」に着目して設計を行います。そのため、オブジェクト単位に処理を分散し、プログラムを容易に把握することが可能です。オブジェクト指向設計の概念を図 1 に示します。

図 1 オブジェクト指向設計の概念

図 1 オブジェクト指向設計の概念

2.2.3 オブジェクト指向設計の利点

オブジェクト指向設計では、現実世界で興味のある部分を強調し、関心の薄い部分を淘汰することにより、抽象化したオブジェクトを自然にプログラムで表現できます。オブジェクト指向設計の利点は、オブジェクト指向設計を行ったモデリングの結果をオブジェクト指向言語 (Java、Visual C# など) で記述することができることです。そのため、システム開発における上流工程から下流工程までシームレスに移行できます。また、オブジェクト指向設計に基づいて、作成されたシステムは、仕様変更に強く、処理やデータなどを再利用できます。オブジェクト指向設計の利点について図 2 に示します。

図 2 オブジェクト指向設計の利点

図 2 オブジェクト指向設計の利点

2.2.4 オブジェクト指向設計と UML

オブジェクト指向設計の手法が、1990 年代に数多く提唱され、異なった表現法で記述したモデル図が世の中に多数登場しました。その結果、ユーザとシステムエンジニア間でモデル図に記述している要求仕様や設計情報などを容易に伝えることができないという問題が生じました。そこで、オブジェクト指向設計の統一表記法であるUMLが誕生しました。

本連載では、UML を使用してオブジェクト指向設計を行う方法について説明します。UML には 8 つのダイアグラム (図) があります、それぞれの利用用途を表 1 に示します。

表 1 UML の 8 つのダイアグラム

UMLダイアグラムの種類利用用途
静的構造図 (クラス図) クラスとクラス間の静的な関係を表現するための図
静的構造図 (オブジェクト図) 実体化されたオブジェクト間の関係を表現するための図
シーケンス図オブジェクト間のメッセージのやり取りを時系列に沿って表現するための図
コラボレーション図オブジェクト間の相互作用を協調作業に着目して表現するための図
ユースケース図システムに対する要求を明示的に表現するための図
ステートチャート図一つのオブジェクトの状態変化について表現するための図
アクティビティ図一つのユースケースや処理の内容等処理の流れを表現するための図
コンポーネント図開発環境内に存在するコンポーネントの構成を表現するための図
配置図コンポーネントをどの領域に配置するかを表現するための図

オブジェクト指向設計を行う場合に、一般的によく利用するユースケース図、シーケンス図と静的構造図 (クラス図) のダイアグラムについて、次節で詳しく解説します。

2.3 Visio によるオブジェクト指向設計

Visio の最近のバージョンでは、UMLモデル図テンプレート、リバースエンジニアリングやコードの自動生成など、オブジェクト指向ベースのソフトウェアエンジニアリングを支援する CASE (Computer Aided Software Engineering) ツールとしての機能が充実してきました。

本節では、Visio を CASE ツールとして利用し、作図したモデル図について説明します。また、Visio によるオブジェクト指向設計の利点を説明した後、各ダイアグラムについて紹介します。

2.3.1 Visio によるオブジェクト指向設計の利点

オブジェクト指向設計にVisioを利用することにより、主に以下の 5 つの利点が挙げられます。1 つ目は、マスタシェイプを図面にドラッグアンドドロップすることでUMLを記述するため、UMLを描く時間を大幅に短縮できます。2 つ目は、論理エラーを自動でチェックするため、モデル図の信頼性を向上できます。3 つ目は、マスタシェイプごとに詳細情報を設定するため、マスタシェイプとデータをひとまとまりに記述できます。4 つ目は、すでに実装したプログラムから、UML を自動で出力するため、システムが所有する機能やデータの関係をグラフィカルに把握できます。5 つ目は、作成した図面から自動でソースコードを生成するため、設計段階から開発段階までつながったシステム開発ができます。

Visio を使用することにより、UML を描く効率が飛躍的に向上すると同時に、システム設計から開発工程への移行をシームレスに行うことが可能になります。

2.3.2 ユースケース図

(1) 利用用途

ユースケース図は、実装するべきシステムの機能やシステムに対する要求を明示的に表現できます。そのため、ユースケース図は、システムの要求仕様を決定する場合、ユーザとシステムエンジニア間で、円滑にコミュニケーションを図るために用いられます。また、ユースケース図は、システムの機能をグラフィカルに示すことによりシステムの仕様変更が発生するリスクを軽減できます。ユースケース図の例を図 3 に示します。

図 3 ユースケース図の例

図 3 ユースケース図の例

(2) 用語解説

ユースケース図を記述する場合に、主に用いられるモデル要素について解説します。ユースケース図に使用するマスタシェイプを図 4 に示します。

図 4 ユースケース図に使用するマスタシェイプ

ユースケースには、利用者がシステムにおいて起こす行動を1つずつ抽象化して指定します。ユースケースとは、開発するシステムが実装する機能を指します。アクターは、ユースケースに基づきシステムと情報のやり取りを行います。アクターには、開発するシステムに対して相互に作用するシステム利用者や外部システムを指定します。システム境界は、開発するシステムとアクターとの境界線を指します。関連とは、アクターとユースケースの関係を示します。関連は、ユースケースがどのアクターと関係を持つかを表現します。

2.3.3 静的構造図 (クラス図)

(1) 利用用途

クラス図は、システム全体の静的な構造を論理的に示します。クラス図は、全てのクラスの関係を表した図やパッケージごとに表示した図など、様々な視点から作成できます。パッケージとは、モデルの要素をグループ化したもので、設計時に、開発の単位となります。クラス図は、8 つのダイアグラムを作成する基礎となる重要な役割を担っています。クラス図を記述する事により、システムの全体の構成を明確に把握できます。

Visioで作図したクラス図は、各クラスに割り振られた役割 (責務) をプロパティとして持つことやクラス同士の関係に基づいてクラスを作成する枠組み部分のソースコードを自動で生成できます。クラス図の例を図 5 に示します。

図 5 クラス図の例

図 5 クラス図の例

(2) 用語解説

クラス図を記述する場合に、主に用いられるモデル要素について解説します。クラス図に使用するマスタシェイプを図 6 に示します。

図 6 クラス図に使用するマスタシェイプ

図 6 クラス図に使用するマスタシェイプ

クラスは、データ構造や振る舞い、他のクラスとの関係を定義します。関連は、クラス間の関係を表現します。ロール名は、他のクラスの観点から見た、目的や立場を明示的に示すことができます。多重度は、1つのクラスに対して関連する他のクラスの数を示します。集約は、関連するクラス間の関係が全体と一部分の時に使用します。例えば、車 (全体) に対するフロントガラス (車の一部分) の関係などが集約として挙げられます。汎化は、一般的なクラスと一般的なクラスから派生した特殊なクラスとの関係を表します。例えば、花 (一般的) に対するコスモス (一つの花の名称) の関係などが汎化として挙げられます。

2.3.4 シーケンス図

(1) 利用用途

シーケンス図は、オブジェクト同士の相互作用を時系列に沿って表現できます。そのため、シーケンス図は、オブジェクト間の相互作用および、オブジェクトの生存期間を明確に表現できます。オブジェクトは、クラス図で定義された振る舞いや属性を持つことができます。シーケンス図は、各ユースケースに必要なオブジェクトを確認するために利用できます。シーケンス図の例を図 7 に示します。

図 7 シーケンス図の例

図 7 シーケンス図の例

シーケンス図は、Visio を利用して作図することにより、ユースケース図やクラス図を記述する際に使用したマスタシェイプを利用することが可能です。このことにより、Visio で作図したシーケンス図は、各オブジェクトの持つ機能に整合性を持たせることができます。例えば、シーケンス図のオブジェクトに機能を追加した場合、クラス図に描かれている同じオブジェクトにも機能が自動的に追加されます。そのため、機能を追加する度に各図面を逐次修正する必要がなくなり効率が飛躍的に向上します。

(2) 用語解説

シーケンス図を記述する場合、主に用いるモデル要素について解説します。シーケンス図に使用するマスタシェイプを図8に示します。

図 8 シーケンス図に使用するマスタシェイプ

図 8 シーケンス図に使用するマスタシェイプ

メッセージは、1 つの振る舞いをオブジェクトに実行させるなど、オブジェクト間の情報のやり取りを示します。オブジェクト指向に基づいて開発したシステムは、メッセージの送受信によって処理を進めます。活性区間は、全体の処理フローの中で、オブジェクトが制御対象になっている相対的な期間を示します。活性区間が記述されているオブジェクトは、制御が移っていることを示します。ライフラインとは、オブジェクトが生成されてから、破棄されるまでの期間を表しています。

2.3.5 その他のダイアグラム

(1) 静的構造図 (オブジェクト図)

オブジェクト図は、クラス図の 1 事例を表し、システム実行時のオブジェクト間の関係を表現します。クラス図は、システムの持つ構造を表現する一般的なモデル図であるのに対して、オブジェクト図は、システム実行時のインスタンスの関係を表現するモデル図です。そのため、表現記法もクラス図とほぼ同様になっています。オブジェクト図の例を図 9に示します。

図 9 オブジェクト図の例

図 9 オブジェクト図の例

(2) アクティビティ図

アクティビティ図は、ユースケースや処理の順序を表現します。アクティビティ図は、記述する処理に関わる複数の業務手順や処理フローを処理の順番に従い記述します。アクティビティ図を使用することにより、各ユースケースの処理の流れから企業や業務モデルのワークフローまで、様々な処理の流れを明確に表現できます。アクティビティ図の例を図 10 に示します。

図 10 アクティビティ図の例

図 10 アクティビティ図の例

(3) コラボレーション図

コラボレーション図は、オブジェクト間のメッセージやデータのやり取りを記述します。コラボレーション図とシーケンス図をまとめて相互作用図と呼ばれ、双方とも処理の流れを表現できます。特に、コラボレーション図は、オブジェクトやクラス間の接続関係を確認するのに適しています。コラボレーション図で表現することにより、オブジェクト間の関係が明確に把握できます。そのため、オブジェクト間の相互作用が、クラス図と対応しているかを確認できます。コラボレーション図の例を図 11 に示します。

図 11 コラボレーション図の例

図 11 コラボレーション図の例

(4) ステートチャート図

ステートチャート図は、1 つのオブジェクトにおける、生成から消滅までのライフサイクルを状態の変化を表現できます。ステートチャート図を使用することにより、外部からの刺激 (イベント) に対する、オブジェクトの状態遷移を表現できます。状態遷移とは、オブジェクトがある状態から、別の状態へ移り変わることを指します。ステートチャート図の例を図 12 に示します。

図 12 ステートチャート図の例

図 12 ステートチャート図の例

(5) コンポーネント図

コンポーネント図は、開発環境内のソフトウェアの内部 (モジュール) 構成や一部のモジュールを変更することにより、影響を及ぼし合う関係を表現します。コンポーネントとは、ソースファイル、ヘルプファイル、ダイナミックリンクライブラリや実行モジュールなどのことを示します。コンポーネント図の例を図 13 に示します。

図 13 コンポーネント図の例

図 13 コンポーネント図の例

(6) 配置図

配置図は、システム実行時に稼動している各モジュールの物理的な配置を表現するために使用します。配置図では、各ハードウェア上でどのようなコンポーネント (ソースファイルやヘルプファイルなど) を配置するかを定義します。配置図の例を図14に示します。

図 14 配置図の例

図 14 配置図の例

2.4 まとめ

本章では、システム開発に必要不可欠なシステム設計の必要性を解説し、その設計方法の一つであるオブジェクト指向設計の利点について説明しました。また、オブジェクト指向設計を表現する Visio の CASE ツールとしての充実した機能を説明すると同時に、UML (8 つのダイアグラム) について説明しました。

本章で説明した通り、オブジェクト指向設計は、プロセス中心設計とデータ中心設計の利点を併せ持つ設計手法です。システム設計をオブジェクト指向で行うことにより、従来、開発者の頭を悩ませていた、設計から開発への移行をスムーズに行うことができます。次回は、Visio の CASE ツールとしての機能について詳しく説明します。


著者紹介

田中 成典 (たなか しげのり)

1986年関西大学工学部土木工学科卒業
1988年関西大学大学院工学研究科 土木工学専攻博士課程前期課程修了
1996年博士 (工学) 授与,関西大学
1997年関西大学総合情報学部助教授 (現在に至る)
主な著書:やさしいCのはじめかた,オーム社,1993年
 建設技術者のための知識情報処理の実践,関西大学出版部,1999年
 DirectX8,工学社,2001年
 ステップアップXML,工学社,2002年
 Linuxアプリケーション入門,森北出版,2002年    ほか

中山 浩太郎 (なかやま こうたろう)

2001年3月関西大学総合情報学部卒業
2001年4月関西大学大学院総合情報学研究科入学 (現在に至る)
2002年4月同志社女子大学非常勤講師 (現在に至る)
主な著書:Web工房シリーズ Perlの達人,森北出版,1999年
 DirectX8,工学社,2001年
 Linuxアプリケーション入門,森北出版,2002年    ほか

石井 健一 (いしい けんいち)

1999年4月関西大学総合情報学部総合情報学科入学 (現在に至る)
主な著書:ステップアップXML活用法,工学社,2002年

野中 一希 (のなか かずき)

1999年4月関西大学総合情報学部総合情報学科入学 (現在に至る)
2002年1月株式会社関西総合情報研究所入社 (現在に至る)

中村 健二 (なかむら けんじ)

2000年4月関西大学総合情報学部総合情報学科入学 (現在に至る)
2002年4月株式会社関西総合情報研究所入社 (現在に至る)


Microsoft