UMLモデリングの勘所




             http://www.flickr.com/photos/jcraveiro/114311213


   わんくま同盟 名古屋勉強会 #26
自己紹介
• 名前 : @furuyoshi
• 年齢 : 後厄を過ぎた頃
• 出身 : 空港のあるまち、常滑
• 本職 : システムエンジニア
• UMTP L3モデラー
• OMG Advanced保有者
• 認定スクラムマスター

            わんくま同盟 名古屋勉強会 #26
本日の内容
• UMLを使ったモデリングについて幾つかの
  ポイントをお話したいと思います。
‒単一責任の原則を守ろう
‒「もの」と「こと」を意識しよう
‒レイヤーを意識しよう




        わんくま同盟 名古屋勉強会 #26
単一責任の原則を守ろう




                http://www.flickr.com/photos/75659300@N00/2615848530


      わんくま同盟 名古屋勉強会 #26
オブジェクト指向設計原則
「オブジェクト指向設計原則」って幾つかあり
ますよね




       わんくま同盟 名古屋勉強会 #26
オブジェクト指向設計原則
「オブジェクト指向設計原則」って幾つかあり
ますよね
‒オープン・クローズドの原則(OCP)




        わんくま同盟 名古屋勉強会 #26
オブジェクト指向設計原則
「オブジェクト指向設計原則」って幾つかあり
ますよね
‒オープン・クローズドの原則(OCP)
‒リスコフの置換原則(LSP)




        わんくま同盟 名古屋勉強会 #26
オブジェクト指向設計原則
「オブジェクト指向設計原則」って幾つかあり
ますよね
‒オープン・クローズドの原則(OCP)
‒リスコフの置換原則(LSP)
‒依存関係逆転の原則(DIP)




        わんくま同盟 名古屋勉強会 #26
オブジェクト指向設計原則
「オブジェクト指向設計原則」って幾つかあり
ますよね
‒オープン・クローズドの原則(OCP)
‒リスコフの置換原則(LSP)
‒依存関係逆転の原則(DIP)
‒インターフェース分離の原則




        わんくま同盟 名古屋勉強会 #26
オブジェクト指向設計原則
「オブジェクト指向設計原則」って幾つかあり
ますよね
‒オープン・クローズドの原則(OCP)
‒リスコフの置換原則(LSP)
‒依存関係逆転の原則(DIP)
‒インターフェース分離の原則
‒単一責任の原則(SRP)



        わんくま同盟 名古屋勉強会 #26
オブジェクト指向設計原則
「オブジェクト指向設計原則」って幾つかあり
ますよね
‒オープン・クローズドの原則(OCP)
‒リスコフの置換原則(LSP)
‒依存関係逆転の原則(DIP)
‒インターフェース分離の原則
­単一責任の原則(SRP)



        わんくま同盟 名古屋勉強会 #26
単一責任の原則って?




      わんくま同盟 名古屋勉強会 #26
単一責任の原則って?



 クラスを変更する理由は1つ以上
 存在していてはならない




      わんくま同盟 名古屋勉強会 #26
単一責任の原則って?



 クラスを変更する理由は1つ以上
 存在していてはならない
       要するに




      わんくま同盟 名古屋勉強会 #26
1つのクラスでいろいろやらない


                                                      テキスト




http://www.flickr.com/photos/andreknu/5817696055


                                                   わんくま同盟 名古屋勉強会 #26
守ると何が
嬉しいの?
   わんくま同盟 名古屋勉強会 #26
シンプルに保てる




             http://www.flickr.com/photos/xelvia/3505893018


わんくま同盟 名古屋勉強会 #26
責務が隠れない




http://www.flickr.com/photos/gi/4161241424


                                             わんくま同盟 名古屋勉強会 #26
どうすると守れる?




              http://www.flickr.com/photos/ores2k/394359583



 わんくま同盟 名古屋勉強会 #26
適切な名前を付けて命を吹き込む


    ○○マネージャ、
    ☓☓コントローラとか
    注意
                 http://www.flickr.com/photos/achew/3987039984



     わんくま同盟 名古屋勉強会 #26
重 要
名 前
 わんくま同盟 名古屋勉強会 #26
「もの」と「こと」を意識しよう




                 http://www.flickr.com/photos/msstatelibraries/5514557993


      わんくま同盟 名古屋勉強会 #26
クラスをどうやって見つける?
• ロバストネス分析
 –コントロールクラス
 –バウンダリクラス
 –エンティティクラス

• 名詞抽出法
 –名詞をクラス(属性)にする
 –動詞をメソッドにする

• 責務に着目する
          わんくま同盟 名古屋勉強会 #26
これって「もの」が中心だよね




http://www.flickr.com/photos/jillclardy/5772655733


                                                     わんくま同盟 名古屋勉強会 #26
「もの」と「もの」の間にある関係
(例えば契約とか)にも着目する
http://www.flickr.com/photos/frank3/6053973411



                                                 わんくま同盟 名古屋勉強会 #26
レイヤーを意識しよう




http://www.flickr.com/photos/26790780@N07/2939999926


                                                       わんくま同盟 名古屋勉強会 #26
DDD本に於けるレイヤーの定義
ユーザーインターフェース層     ユーザに情報を表示して、ユーザのコマンドを
(又はプレゼンテーション層)    解釈する責務を負う。

アプリケーション層         ソフトウェアが行うことになっている仕事を定義し、
                  ドメインオブジェクトが問題を解決するように導く。
                  ビジネスルールや知識を含まず、やるべき作業を調整す
                  るだけで、実際の処理はドメインオブジェクトによって
                  実行される共同作業に委譲される。


ドメイン層             ビジネスの概念と、ビジネスが置かれた状況に関する情
(又はモデル層)          報、及びビジネスルールを表す責務を負う。
                  この層がビジネスソフトウェアの核心。


インフラストラクチャ層       上位の層を支える一般的な技術的機能を提供する。
                  メッセージの送信、永続化、ウィジェット描画等があ
                  る。

                 わんくま同盟 名古屋勉強会 #26
ユーザーインターフェース層         ユーザーインターフェース層
(又はプレゼンテーション層)        (又はプレゼンテーション層)




              }
アプリケーション層
                      ドメイン層
ドメイン層                 (又はモデル層)
(又はモデル層)




インフラストラクチャ層           インフラストラクチャ層




              わんくま同盟 名古屋勉強会 #26
ユーザーインターフェース層                GUI等
(又はプレゼンテーション層)




ドメイン層
(又はモデル層)




インフラストラクチャ層                  デバイスへのI/F等
                  DB   HDD

              わんくま同盟 名古屋勉強会 #26
薄く保つ

ユーザーインターフェース層                GUI等
(又はプレゼンテーション層)




ドメイン層
(又はモデル層)




インフラストラクチャ層                  デバイスへのI/F等
                  DB   HDD

              わんくま同盟 名古屋勉強会 #26
依存関係逆転の原則


ユーザーインターフェース層    Interface               Interface
(又はプレゼンテーション層)    △                        △




ドメイン層
(又はモデル層)                     Interface               Interface
                                △                        △




インフラストラクチャ層

                               DB                     HDD

              わんくま同盟 名古屋勉強会 #26
依存関係逆転の原則


ユーザーインターフェース層    Interface               Interface
(又はプレゼンテーション層)    △                        △




ドメイン層
(又はモデル層)                     Interface               Interface
                             △ △                         △

 容易に交換可能

インフラストラクチャ層

                   DB           DB                    HDD

              わんくま同盟 名古屋勉強会 #26
まとめ
• クラスに責務が明確になる名前を付けて、
単一責任の原則を守る
• 「もの」だけでなく「こと」にも注目する
• レイヤーを意識してクラス構造を考える




        わんくま同盟 名古屋勉強会 #26

Umlモデリングの勘所