どのようなお仕事でも設計は重要です。
「すべてのものは2度作られる、1度目は頭の中に」という言葉があります。
システム開発においては、 「すべてのシステムは3度作られる、1度目は頭の中に、2度めは紙の上で、3度めはメモリ上で」といったところでしょうか?
ここでは、設計で使われるUMLのツールを解説します。特に弊社新人エンジニア研修のシステム開発演習で実際に使用するオブジェクト指向開発のツールを紹介します。
1. UMLの基本
1.1 UMLとは何か?
UML(Unified Modeling Language:統一モデリング言語)は、ソフトウェアエンジニアリングの分野で広く用いられる視覚化の一手段です。システムやソフトウェアの設計、構造、行動を視覚的に表現し、コミュニケーションの手段として使用します。UMLは主にシステムの設計フェーズで使用され、システムの各部分がどのように連携するかを明確にします。
1.2 UMLの歴史とその重要性
UMLは1990年代中盤に、複数の既存のモデリング言語を統一する目的で開発されました。3人の著名なソフトウェア工学者によって設計されました。現在では、UMLはOMG(Object Management Group)によって標準化され、メンテナンスされています。
UMLの重要性はその普遍性と汎用性にあります。異なる国籍、異なる会社、異なるプロジェクトで共通の言語として使用されますから、コミュニケーションを促進します。また、システムを視覚的に理解することで、複雑なシステムをシンプルに理解することができます。
1.3 UMLを使用するメリット
UMLには以下のような利点があります。
- UMLを使用すると、複雑なシステムの設計と動作を視覚的に理解することができます。
- UMLは共通の言語として機能し、エンジニア、プロジェクトマネージャー、ステークホルダー間のコミュニケーションを助けます。
- UMLダイアグラムは、システムの設計と動作を詳細に記録し、将来のためにドキュメントを残すことができます。
以上がUMLの基本的な紹介になります。次からはより具体的なUMLの要素と使い方について学んでいきましょう。
2. 主要なUMLの紹介
2.1 ユースケース図
ユースケース図はシステムが提供する機能(ユースケース)とその機能を利用するアクターを示します。システムの「何をするか」を視覚的に表現します。
- ユースケースは、システムが提供する特定の機能を表し、通常は楕円で示されます。例えば、「商品を購入する」や「在庫を確認する」など。
- アクターは、ユースケースを利用するエンティティを表し、人や他のシステムが該当します。アクターは「棒人間」のアイコンで示されます。
- 関連性は、アクターとユースケース間の関連を示す線です。これはアクターがそのユースケースを利用することを示します。
<ユースケース図の例>
2.2 クラス図
クラス図はシステムの静的な構造を表現する主要な図で、クラス、その属性と操作、そしてクラス間の関係を示します。
- クラスは、システム内のオブジェクトのタイプを表し、一般的には長方形で表示されます。長方形は通常3部分に分かれており、上部にはクラス名、中部には属性、下部には操作が記載されます。
- 属性は、クラスが持つ特性を表します。例えば、「車」クラスなら「色」や「車種」、「排気量」が属性となります。
- 操作は、クラスが何をするかを表す振る舞いまたは機能です。例えば、「車」クラスなら「加速する」や「ブレーキをかける」、「ハンドルを切る」が操作となります。
- 関係は、クラス間の関係を表す線です。関係にはいくつかのタイプがあり、それぞれ異なる矢印や線で示されます(依存、関連、一般化/特化、集約、コンポジションなど)。
<クラス図の例>
クラスとオブジェクト
UMLでは、クラスとオブジェクトは基本的な概念です。クラスはオブジェクトを生成するための設計図と見なすことができます。それは特定のタイプのオブジェクトが持つべき属性(状態)と操作(振る舞い)を定義します。例えば、カジノの「Player」クラスは属性として残高「balance」を、操作として引き出す「withdraw」を持つように設計できます。
以下は色々なPlayerクラスの記述方法です。
一方、オブジェクトはクラスから具体的に生成された実体(インスタンス)を表します。つまり、「自動車」クラスから生成された「私の車」や「Aさんの車」というオブジェクトがあるとします。このオブジェクトは、「自動車」クラスで定義された属性と操作を持ちます。
リレーションシップとその種類
リレーションシップは、UMLの要素(クラス、オブジェクトなど)間の関係を表現します。主な種類には以下のものがあります。
関連【Association】は、二つのクラス間に一定の関係が存在することを示します。例えば、「学生」と「大学」の間には「所属する」という関連が存在します。なお、以下の集約、依存、一般化/特化も一種の関連といえます。
集約【Aggregation】は、「全体-部分」関係を示します。部分が全体から分離してもその存在は継続します。例えば、「車」(全体)と「タイヤ」(部分)の関係です。
依存【Dependency】は、ある要素が他の要素に依存している関係を示します。つまり、一方の要素が変更されると、他方にも影響が出ます。集約との違いは一時的な関係であることです。例えば、「パソコン」は「マウス」に依存しています。
汎化【Generalization】/特化【Specialization】は、「親-子」関係を示します。「子」クラスは「親」クラスの特性を“継承”します。例えば、「電気自動車」は「車」の特化型と言えます。
属性と操作
クラスには主に二つの要素、属性(データ)と操作(振る舞い)があります。
属性はクラスまたはそのインスタンス(オブジェクト)が持つ状態を表現します。これはクラスの特性(例えば、車の色やブランド、排気量)を表します。
一方、操作はクラスが持つべき振る舞いや機能を表現します。これはクラスが何をするか(例えば、車が走る、曲がる、停止する)を表します。
これらがUMLの基本要素についての説明です。次に、これらの要素がどのようにしてUMLダイアグラムを形成するかを詳しく見ていきましょう。
2.3 シーケンス図
シーケンス図はシステム内のオブジェクト間のメッセージの流れを時間の経過とともに示します。システムの動的な振る舞いを表す主要な図の一つです。
- オブジェクトは、システム内のエンティティを表し、図の上部に配置されます。
- ライフラインは、オブジェクトが存在する時間を表し、ダッシュラインで表示されます。ライフラインはオブジェクトから図の下部まで続きます。
- アクティベーションバーは、オブジェクトがメッセージを処理している時間を表します。
- メッセージは、オブジェクト間の通信を表す矢印です。これは一方のオブジェクトから他方のオブジェクトへ向かいます。
<シーケンス図の例>
以上がUMLの主要な3つのダイアグラム、ユースケース図、クラス図、シーケンス図の詳細な説明です。これらを理解し使いこなせるようになると、システム設計の内容が明確化し、効率化するでしょう。
次回は、「プログラミングの基本を身につける」を学びます。