UMTP 勉強法

UMLの資格試験であるUMTPをL3まで取得できましたので、自分の勉強内容まとめてみます。


試験の構成
UMTPはL1,L2,L3と分かれていて、L1はT1,T2と分かれているのですがT2のみとればL1認定されるので
わざわざT1を取る必要はないようです。


各レベル試験で求められる知識
L1:図の読み書き。
L2:図の使い方の詳細な理解。
L3:オブジェクト指向的な考え方、図についてより詳細な理解。


という感じです。
L1は参考書一通りやれば問題無いレベル。


L2は複数選択式が曲者でクラス図とか回答の答え合わせが出来るところ
を100%とらないとキツイ感じです。


L3はL2に加えてオブジェクト指向GOFデザパタ本を一通り目を通す)
と用語とかを覚えればいい感じです。


L3対策
L2までは参考書が出ているので、L3の対策について自分のまとめを記載します。


【知識問題のカテゴリ】
結合度と凝集度
オブジェクト指向分析の指針
オブジェクト指向設計原則
モデリング技法
OCL(オブジェクト制約言語)
責務を適切に分配する(GRASPのイメージ)
リスコフの置換原則などの設計原則を問う


■凝縮度
高い方がよい。一つの機能が一つの関数などにまとまっている事。
なんでもかんでも一つの関数にしない。


偶発的凝集度:適当に集めた処理がモジュールになっている。 
→凝集度最低

機能的凝集度:単一のうまく定義されたタスクを実現するモジュール 
→凝集度最高


■結合度
低い方がよい。モジュール間のデータの受け渡しについて。
複数のモジュールを容易に切り離せるか?という指針。


共通結合:グローバルデータで値をやり取りする。 結合度高
データ結合:必要なデータのみを引数で渡す。   結合度低


ロバストネス分析
ユースケース記述から抽出したクラスの役割をバウンダリ(boundary→UI)、
コントロール(control)、エンテイテイ(entity→ドメイン)に分析し、
ロバストネス図を描く。
クラス図、シーケンス図、コラボレーション図を用いて表現する。


CRC
ブレインストーミング方法。
インデックスカード(76x127mm)を用いる。
そのカードにクラス、パッケージ名、クラスの責務、関連クラスを描く。
小さなカードを使うことで、設計の複雑さを最小にする。


■リスコフの置換原則
派生クラスはスーパークラスと置き換えができなければならない。
スーパークラスに依存しているクラスに派生クラスを渡しても正常動作する。
スーパークラスの意図から離れるオーバーライドはしない。
同じインターフェイスを持っていれば、違うオブジェクトでも同じように扱える。
このとき、オブジェクトによって動作は異なる。
ただし、クライアントからは同じ動作をしているように見える。


■データ中心アプローチ
DOAとは対象業務のモデル化を行う際、データが最も安定した情報資源であること、
また、共有資源であることに着目して、資源側からシステム、
ソフトウエアの分析や設計を行うという考え方。
DB構造を作ってから、ソフト構造を決めるタイプの作り方。
データ中心の反対にあるのが、手続き型のプログラミング。


■GRASPパターン
■Expert
必要な属性を持つクラスで操作を定義する。
例:スプライトクラスに描画、拡大処理を実装する。
外部にこれらの処理を実装すると関連が増える。


Creator
インスタンスの作成は意味的に関連するオブジェクト、包括するオブジェクトなどで実施
する。
個人的な意見:Factoryに移譲するのもありかも

■High Cohesion(高凝集性)
凝集度を高める。

■Low Coupling(疎結合性)
結合度を下げる。


■Controller
システムイベント(クリックなど)の処理を行う責務割当について。
GUIからイベントを受ける時に、単一のコントローラーで管理する。
ポイント:キー入力、マウス入力はひとつのクラスにまとめると、MememtoとかCommandも使えて便利。


■Polymorphism(多相性)
スーパークラスにサブクラスを入れてスーパークラスのインターフェースで
メソッドを実行する。
ポイント:オブジェクト指向の中核


■Pure Fabrication(純粋仮想物)
ドメインクラス(非人工的、ビジネスモデリングから生まれた具体的なもの)と
ドメインクラス(システムを実現するために必要な人工的なもの)を分け、
凝集度を高める。
ポイント:Animalクラス,Catクラス,Dogクラスとか実際あるものだけでなく
FacotryとかManagerとかプログラム的に必要なものもまとめろという話。


■Indirection(間接化)
クラスを直接利用するのではなく、橋渡し役を間に挟む。
文字出力、ファイル出力、ネットワーク出力、すべてに対して同じインターフェースで
対応できるように、汎用出力クラスをスーパークラスとして作る。


■Variation Protected(バリエーション防御パターン)
Don't Talk to Strangers(知らないヤツには話し掛けない)
デメテルの法則(the Low of Demeter)
とも言われる。

インタフェースに対してプログラミングする方法。
直接依存するオブジェクトに対してのみ、通信を行う。
オブジェクトを操作するときインターフェースに対して指示を出す手法。


例えば、テキストエディタを作る際、
ファイルクラスを作ってすべてのファイル処理をそのクラスで実装すると、
ファイル形式が追加された時にすべての処理を見直す必要がある。
汎用的な処理はインタフェースや、抽象クラスを作る。
そして、テキストエディタはそれらインタフェース、抽象クラスを実装した
クラスを作成し使用する。


■その他L3のポイント
クラスの関連、多重度関連の問題ではあるクラスが他のクラスとどのような
数量関係になるか?っていうのがすごく重要です。
クラス図から数量関係を読み解けるように、また数量関係を表現する方法を
しっかり理解しておきましょう。


また、公式の練習問題で、偶然正解したってレベルではなく、
これはこうだから答えがこうなる!
という感じに解説できるまで仕上げておきましょう。



■結合度、凝集度GRASPについて 参考サイト
http://www.ogis-ri.co.jp/otc/hiroba/technical/Cohesion_Coupling/Cohesion_Coupling.html


まとめ
■L1,L2は参考書と公式サイトで対策をする。


■L2は答え合わせ出来るところは100%とれるように仕上げる事。


■L3は用語と、オブジェクト指向の知識(GOF本がよい対策になる)、クラス図を完全にマスター
擦る感じで勉強


ちなみに、L3は実践的で試験問題も面白かったです。
L3まで受けてようやく、UMLを深く理解してまた、プログラムするときにも
役立る方法がわかった感じがします。
受けるなら是非L3までやることおすすめします。(会社補助とかないとお金がきついですが)