矢沢久雄

 この連載では,UML(Unified Modeling Language)を使ったオブジェクト指向設計の手法を学習します。UMLは,システムの分析結果と設計結果を図示するための表記法のグローバル・スタンダードです。皆さんがプログラマなら,プログラムのアルゴリズムをフローチャートという図で表すのが普通でしょう。それと同様に,オブジェクト指向プログラミングでシステムを開発するのが主流となった現在では,UMLでシステムの設計図を表すことが一般的になっています。これからは,UMLを使いこなせることは,プログラマに限らず,コンピュータにかかわるすべてのエンジニアにとって不可欠な技能と言えるのです。今回はオブジェクト指向の概念を理解し,UMLで使われる様々な図の役割とかき方をマスターしましょう!

●UMLとは何か?

 UML(ユー・エム・エル)は,Unified Modeling Language(統一モデリング言語)の略です。言語とは言っても,BASICやC言語のようなプログラミング言語ではなく,システムをモデル化して図示するための表記法を規定したものです。システムのモデル化とは,すなわちオブジェクト指向設計のことです。UMLは,オブジェクト指向設計のための統一モデリング言語ということになります。

 UMLの仕様は,オープンであり,特定の企業に依存したものではありません。UMLは,オブジェクト指向技術の標準化団体であるOMG(Object Management Group)によって認可されています。OMGは,分散オブジェクトの標準仕様であるCORBA(Common Object Request Broker Architecture:「コルバ」と読みます)を策定したことで有名です。UMLの現時点の最新バージョンは,1.3であり,OMGのWebサイト(http://www.omg.org)から仕様書がダウンロードできます。

図1●スリー・アミーゴの知識を集結して開発されたUML

 書店に行けば,UML関連の解説書を数多く見ることができます。コンピュータ関連の雑誌でも,UMLが何度も取り上げられています。これほどまでにUMLが注目されていることには,理由があります。それは,過去にあったいくつかのモデリング言語を統一した形でUMLが開発されたからです。

 UMLが登場する前には,James Rumbaugh氏が開発したOMT,Grady Booch氏が開発したBooch法,Ivar Jacobson氏が開発したOOSEなど,数10種類の異なるモデリング言語が存在していました(現在も消えてしまったわけではありません)。企業戦略的な意味合いがあるのかもしれませんが,1995年にこれら3氏が同じ米Rational Softwareに加わったことで,統一的なモデリング言語であるUMLが開発されたのです。Rumbaugh,Booch,Jacobsonの三氏は,UML開発者として「スリー・アミーゴ」と呼ばれています(図1[拡大表示])。

 Rationalでは,UMLを使ったビジュアル設計ツールであるRational Roseを開発・販売しています。Rationalの日本法人である日本ラショナルソフトウエアのWebサイト(http://www.rational.co.jp)からも,UMLに関する様々な情報が入手できます。マイクロソフトのビジュアル開発ツールVisual Studio 6.0に付属しているVisual Modelerは,Rational Roseのサブセット版です。マイクロソフトのドローイング・ツールであるVisio 2000を使ってUMLの様々な図をかくこともできます。もちろん,手書きでUMLの図を作成してもOKです。

●オブジェクト指向とUMLの重要性

 ここまで読んで,「オブジェクト指向設計のための表記方法は,UMLで決まりだ!」ということがお分かりいただけたところで,なぜオブジェクト指向が重要なのかを説明しておきましょう。簡単に言ってしまえば,現在のプログラムには複雑な機能が要求され,それに伴いプログラムが大規模になってしまったからです。複雑な機能が要求されるようになったのは,コンピュータが安価で身近なものとなったため,あらゆる業務でコンピュータを利用するようになったからでしょう。オブジェクト指向は,複雑なプログラムを整理して効率的に開発することを目的としています。構造化設計や構造化プログラミングと呼ばれる従来の開発スタイルでは,複雑なプログラムを作成することはできても,効率的にはできないのです。

 C++やJavaが,オブジェクト指向プログラミングを実現するためのプログラミング言語であることをご存知でしょう。オブジェクト指向プログラミングを行うためには,システムをオブジェクト指向設計することが必要になります。設計の結果は,何らかの図で表さなければなりません。このような図は,世界中の誰が見ても理解できる統一的な表記法で表記されるべきです。それが,UMLなのです。

 ユース・ケース図(後述)などUMLの一部の図は,システムの開発者だけではなく,システムのユーザーにも容易に理解できるものとなっています。コンピュータに関する知識の少ないユーザーにC++やJavaのソースコードを見せても意味がありませんが,UMLの図を示せば,開発者とユーザーがシステムの設計段階でコミュニケーションできます。システム開発の早期のコミュニケーションは,システム開発を成功へと結び付けてくれます。

●オブジェクト指向の考え方とメリット

図2●システム開発の考え方の変化
 オブジェクト指向は,難しいものだと思われているようですが,そんなことはありません。オブジェクト指向は,自動車や家電品などの工業製品の生産方法を,そのままソフトウエアの開発に適用させたものであり,とても自然な考え方なのです。従来,目に見えないソフトウエアを取り扱う世界では,システムの「機能」に注目した開発手法が採用されてきましたが,冷静に考えてみれば,「物(オブジェクト)」に注目する方が自然なはずです。機能を組み合わせてシステムが構築されるのではなく,物を組み合わせてシステムが構築されると考えるのがオブジェクト指向というわけです(図2[拡大表示])。

 オブジェクトは,ソフトウエアの部品(コンポーネント)となります。部品を組み合わせれば,複雑で大規模なシステムであっても容易に構築できます。また,プログラミングとテストも部品単位で可能です。不具合のある部品は,部分的に交換できるのです。部品単位で機能を追加・変更することもできます。1つの部品をベースに,他の部品を作成することもできます。同じ部品を他のシステムで再利用することもできます。これらは,すべて効率化という目的を実現するものとなることが分かるでしょう。

 オブジェクトは,データと処理の集合体です。オブジェクト指向の世界では,データのことを「属性」と呼び,処理のことを「操作」と呼びます。プログラムのソースコードでは,属性は変数となり,操作は関数となります。ソフトウエアは,現実世界の業務をコンピュータで自動化するものであり,現実世界に存在する個々の物が1つのオブジェクトとなります。属性と操作を組み合わせたオブジェクトで,現実世界の物をシミュレートするのです。

●UMLで使用する図の種類

 オブジェクト指向では,システムの設計に多くの時間が割かれることになります。いままでに,設計が不十分なまま,プログラミングしながらシステムを設計していたという開発者は,考え方を改めなければなりません。

 UMLでは,目的に応じて様々な種類の図が使用されます。表1に,UML Ver.1.3で規定されている図の種類と役割を示しておきます。これらの図をすべて使わなければオブジェクト指向設計ができないというわけではありません。目的のシステムを設計するために必要な図だけを使えばよいのです。図の種類が多いのは,開発者やユーザーの考えを様々な角度から分析して表現できるようにしているためです。

名称役割
ユース・ケース図(use case diagram)システムの使われ方を示す
シーケンス図(sequence diagram)オブジェクトの相互の関係を時間軸に沿って示す
コラボレーション図(collaboration diagram)オブジェクト間の相互作用を示す
クラス図(class diagram)クラスとクラス間の関係を示す
オブジェクト図(object diagram)オブジェクトとオブジェクト間の関係を示す
ステートチャート図(statechart diagram)オブジェクトの状態の変化を示す
アクティビティ図(activity diagram)オブジェクトのアクションの変化を示す
コンポーネント図(component diagram)コンポーネントとコンポーネント間の関係を示す
配置図(deployment diagram)オブジェクトの物理的な配置を示す
表1●UML Ver.1.3で規定されている図の種類

図3●ノートの使い方
 せっかくですから,「ノート」と呼ばれる図記号を1つだけ憶えておきましょう。ノートは,UMLの任意の図の中で,注釈を記入するために使われます。ノートは,角の折れた長方形で表されます。使い方は,注釈の対象となる他の図記号からノートに引き出し線を引くだけです(図3[拡大表示])。

●今後の予定

 今回は,オブジェクト指向の概念とUMLの概要を説明しました。次回からは,UMLで使われる様々な図のかき方を学習します。できる限り簡単な例で説明する予定ですので,一つひとつ確実にマスターしてください。

第2回 クラス図とオブジェクト図をかいてみよう
第3回 ユース・ケース図をかいてみよう
第4回 シーケンス図,コラボレーション図,及びステートチャート図をかいてみよう
第5回 オブジェクト指向によるシステム開発の手順