2010/06/30
カテゴリ : Tech
オブジェクト指向設計
UML
UMLを描こう - Vol.1 クラス図
はじめましての方は,はじめまして!
4月からアシアルに入社した浦本と申します。
まずは簡単に自己紹介させていただきます。
アシアルに入社する前は,電気通信大学の鈴木研究室で,IPネットワークや,オブジェクト指向開発プロセスに関する研究を行っていました。
元々趣味でWeb開発をやっていて,業務でのWebシステムの開発経験は今年で5年目になります。
最近では,個人的にSpring Frameworkにはまっております。
どこかでお会いすることがあるかもしれませんが,どうぞ宜しくお願い致します。
さて,今回はUML(Unified Modeling Language)について取り上げたいと思います。
UMLとは?
UMLとは,システムの設計を様々な切り口でモデル化し図示するためのグラフィカル言語です。
オブジェクト指向設計では,設計概念を表す何らかの設計図が必ず必要になります。
なぜならば,コードだけでは,コンポーネントの構成や,オブジェクトの相互作用を
分かりやすく表現できないからです。
特に,ある程度規模の大きなシステム開発においては,設計図が無い場合,
拡張性やメンテナンス性に乏しいクラスの山が作られがちです。
設計図が無いと,システムが要求を満たしていることを保証するユニットテストも行えません。
そこで,オブジェクト指向設計を,標準化された図として表現できるUMLが役に立つわけです。
最低限必要なのはクラス図とシーケンス図
UMLには10種類以上もの図があるのですが,もちろん全て覚える必要はありません。
システムの詳細設計ドキュメントを読み書きする際に最低限知っておくべき図は,クラス図とシーケンス図の2種類です。
クラス図はクラスの静的な設計を表し,シーケンス図はオブジェクトの動的な設計を表します。
今回は,クラス図について説明します。
3秒で分かるクラス図
クラス図とは,クラスの構成やクラス間の関係を記述するための図です。
クラスを表現するには,長方形を描いて,上から「クラス名」「属性」「メソッド」を記述します。

属性とメソッドの前には,以下のアクセス修飾子を指定できます:
+ public
- private
# protected
属性の型や,メソッドのパラメタの型,メソッドの戻り値の型は,
コロン区切りで後ろに記述します。
abstractクラスや,abstractメソッドは斜体で表します。

static属性や,staticメソッドには下線を付けます。

インターフェイスもクラスと同様に描けます。
インターフェイス名の上には≪interface≫を付けます。

インターフェイスのメソッドはabstractメソッドと決まっているので,
斜体にする必要はありません。
ちなみに≪~≫はステレオタイプといって,
図の要素に補足的な情報を付加するときに記述します。
クラス図では,クラス同士を線でつなぐことで,
以下のように様々な「リレーションシップ」を示すことができます。
generalization(汎化)は,継承関係を表します。
下図ですと,class AjaxResponse extends Responseという意味です。

realization(実現)は,簡単にいえばimplementsに対応します。
下図ですと,class JapaneseMailer implements IMailerという意味です。

association(関連)は,要するに「has」です。
下図ですと,Userの属性として,Accountを持っているという意味になります。

aggregation(集約)は,associationの特別なケースで,
単なるhasではなく,構成員として持っているという意味になります。
下図ですと,「WishlistはProductを構成員としてたくさん持っている」という意味になります。

ポイント:
・Wishlistが削除されても,Productは削除されません。
・1つのProductが複数のWishlistに所属することができます。
composition(合成集約)は,aggregationの特別なケースで,より結びつきが強くなります。
下図ですと,「Orderは一心同体の関係でOrderItemをたくさん持っている」という意味になります。

ポイント:
・Orderが削除されると,OrderItemも削除されます。
・1つのOrderItemが複数のOrderに所属することはありません。
dependency(依存)は,その他の雑多な依存関係を表します。
下図ですと,「PurchaseControllerは,属性としてCartを持っているわけではないが,一時的にCartを参照している」という意味になります。

リレーションシップの選択でややこしいのは
aggregationかcompositionかの判断なのですが,
迷うぐらいならaggregationにしておけば大丈夫です。
その他の仕様
以上で,クラス図の基本を説明しました。
その他のクラス図の細かな仕様はググってみてください。
UMLを描画できるソフト
無料で使える描画ソフトとしては,Change Visionのastah* communityがあります。
また,本格的な業務向け製品としては,Sparx SystemsのEnterprise Architectがあります。
まとめ
今回はUMLの主要な図の一つであるクラス図を取り上げました。
活用例を見たい場合は"class diagram"とかで画像検索してください。
皆さんもぜひ,UMLをバリバリ描いて,特定の言語に依存しないオブジェクト指向設計を実践してみてください。
コードとにらめっこするよりも,はるかに設計ノウハウが身につくはずです。
次回の予定
シーケンス図について説明する予定です。
参考文献
・UML spec. http://www.omg.org/spec/UML/2.3
4月からアシアルに入社した浦本と申します。
まずは簡単に自己紹介させていただきます。
アシアルに入社する前は,電気通信大学の鈴木研究室で,IPネットワークや,オブジェクト指向開発プロセスに関する研究を行っていました。
元々趣味でWeb開発をやっていて,業務でのWebシステムの開発経験は今年で5年目になります。
最近では,個人的にSpring Frameworkにはまっております。
どこかでお会いすることがあるかもしれませんが,どうぞ宜しくお願い致します。
さて,今回はUML(Unified Modeling Language)について取り上げたいと思います。
UMLとは?
UMLとは,システムの設計を様々な切り口でモデル化し図示するためのグラフィカル言語です。
オブジェクト指向設計では,設計概念を表す何らかの設計図が必ず必要になります。
なぜならば,コードだけでは,コンポーネントの構成や,オブジェクトの相互作用を
分かりやすく表現できないからです。
特に,ある程度規模の大きなシステム開発においては,設計図が無い場合,
拡張性やメンテナンス性に乏しいクラスの山が作られがちです。
設計図が無いと,システムが要求を満たしていることを保証するユニットテストも行えません。
そこで,オブジェクト指向設計を,標準化された図として表現できるUMLが役に立つわけです。
最低限必要なのはクラス図とシーケンス図
UMLには10種類以上もの図があるのですが,もちろん全て覚える必要はありません。
システムの詳細設計ドキュメントを読み書きする際に最低限知っておくべき図は,クラス図とシーケンス図の2種類です。
クラス図はクラスの静的な設計を表し,シーケンス図はオブジェクトの動的な設計を表します。
今回は,クラス図について説明します。
3秒で分かるクラス図
クラス図とは,クラスの構成やクラス間の関係を記述するための図です。
クラスを表現するには,長方形を描いて,上から「クラス名」「属性」「メソッド」を記述します。
属性とメソッドの前には,以下のアクセス修飾子を指定できます:
+ public
- private
# protected
属性の型や,メソッドのパラメタの型,メソッドの戻り値の型は,
コロン区切りで後ろに記述します。
abstractクラスや,abstractメソッドは斜体で表します。
static属性や,staticメソッドには下線を付けます。
インターフェイスもクラスと同様に描けます。
インターフェイス名の上には≪interface≫を付けます。
インターフェイスのメソッドはabstractメソッドと決まっているので,
斜体にする必要はありません。
ちなみに≪~≫はステレオタイプといって,
図の要素に補足的な情報を付加するときに記述します。
クラス図では,クラス同士を線でつなぐことで,
以下のように様々な「リレーションシップ」を示すことができます。
generalization(汎化)は,継承関係を表します。
下図ですと,class AjaxResponse extends Responseという意味です。
realization(実現)は,簡単にいえばimplementsに対応します。
下図ですと,class JapaneseMailer implements IMailerという意味です。
association(関連)は,要するに「has」です。
下図ですと,Userの属性として,Accountを持っているという意味になります。
aggregation(集約)は,associationの特別なケースで,
単なるhasではなく,構成員として持っているという意味になります。
下図ですと,「WishlistはProductを構成員としてたくさん持っている」という意味になります。
ポイント:
・Wishlistが削除されても,Productは削除されません。
・1つのProductが複数のWishlistに所属することができます。
composition(合成集約)は,aggregationの特別なケースで,より結びつきが強くなります。
下図ですと,「Orderは一心同体の関係でOrderItemをたくさん持っている」という意味になります。
ポイント:
・Orderが削除されると,OrderItemも削除されます。
・1つのOrderItemが複数のOrderに所属することはありません。
dependency(依存)は,その他の雑多な依存関係を表します。
下図ですと,「PurchaseControllerは,属性としてCartを持っているわけではないが,一時的にCartを参照している」という意味になります。
リレーションシップの選択でややこしいのは
aggregationかcompositionかの判断なのですが,
迷うぐらいならaggregationにしておけば大丈夫です。
その他の仕様
以上で,クラス図の基本を説明しました。
その他のクラス図の細かな仕様はググってみてください。
UMLを描画できるソフト
無料で使える描画ソフトとしては,Change Visionのastah* communityがあります。
また,本格的な業務向け製品としては,Sparx SystemsのEnterprise Architectがあります。
まとめ
今回はUMLの主要な図の一つであるクラス図を取り上げました。
活用例を見たい場合は"class diagram"とかで画像検索してください。
皆さんもぜひ,UMLをバリバリ描いて,特定の言語に依存しないオブジェクト指向設計を実践してみてください。
コードとにらめっこするよりも,はるかに設計ノウハウが身につくはずです。
次回の予定
シーケンス図について説明する予定です。
参考文献
・UML spec. http://www.omg.org/spec/UML/2.3
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













コメントフォーム