オブジェクト指向分析は、システム内のオブジェクトの特性と振る舞いの定義に焦点を当てるんだ。今、国際的には色々なオブジェクト指向手法が登場してるよね。業界で広く受け入れられてるのはUML(Unified Modeling Language、統一モデリング言語)だよ。
統一モデリング言語は、オブジェクト指向ソフトウェアの標準的なモデリング言語なんだ。シンプルで統一されてるし、ソフトウェア設計における動的な情報も静的な情報も表現できるから、今やビジュアルモデリング言語の事実上の業界標準になってるんだよ。
UMLは3つの要素で構成されてるんだ。UMLの基本的な構成ブロック、これらの構成ブロックをどう配置するかを支配するルール、そして言語全体に適用される共通のメカニズムだね。
UMLの語彙には、3種類の構成ブロックが含まれるんだ。それは「物事(Thing)」「関係(Relationship)」「図(Diagram)」だよ。物事っていうのは、モデルの中で最も代表的な要素を抽象化したものだね。関係は物事を結びつけるもの。図は関連する物事をまとめたものさ。
物事(Thing)
UMLには4種類の物事があるんだ。構造物事、振る舞い物事、グループ化物事、そして注釈物事だよ。
(1) 構造物事 (Structural Thing)
構造物事はUMLモデルにおける名詞のようなものだね。それらはたいていモデルの静的な部分で、概念や物理的な要素を記述するんだ。
構造物事には以下が含まれるよ。
- クラス (Class)
- インターフェース (Interface)
- コラボレーション (Collaboration)
- ユースケース (Use Case)
- アクティブクラス (Active Class)
- コンポーネント (Component)
- アーティファクト (Artifact)
- ノード (Node)

(2) 振る舞い物事 (Behavior thing)
振る舞い物事はUMLモデルの動的な部分さ。それらはモデルにおける動詞のようなもので、時間と空間を超えた振る舞いを記述するんだ。
振る舞い物事には以下が含まれるよ。
- 相互作用 (Interaction)
- ステートマシン (State Machine)
- アクティビティ (Activity)

(3) グループ化物事 (Grouping Thing)
グループ化物事はUMLモデルの組織化部分で、モデルが分解された「箱」みたいなものだね。全てのグループ化物事の中で、一番主要なのが「パッケージ (Package)」だよ。パッケージは要素をグループにまとめるための仕組みで、いろんな用途があるんだ。構造物事、振る舞い物事、さらには他のグループ化物事もパッケージの中に入れられるよ。パッケージはコンポーネント(実行時にのみ存在する)とは違って、純粋に概念的なものなんだ(つまり、開発時にのみ存在するってこと)。

(4) 注釈物事 (Annotational Thing)
注釈物事はUMLモデルの解説部分だよ。これらの注釈物事は、モデルのあらゆる要素を記述したり、説明したり、マークしたりするのに使われるんだ。「注釈 (Note)」が主要な注釈物事の一つだね。注釈は、ある要素や一連の要素に付随して、それを制約したり説明したりするシンプルな記号のことだよ。

関係(Relationship)
UMLには4種類の関係があるよ。依存、関連、汎化、そして実現だね。
依存 (Dependency)
依存は2つの物事間の意味的な関係なんだ。一方の物事(独立物事)が変化すると、もう一方の物事(依存物事)の意味合いに影響を与えるんだよ。図上では、依存は方向を持つかもしれない点線で描かれるんだ。

関連 (Association)
関連は構造的な関係で、オブジェクト間の繋がりである「リンク」の集合を記述するんだ。「集約 (Aggregation)」は特殊な種類の関連で、全体と部分の間の構造的な関係を記述するよ。関連には多重度 (Multiplicity) と役割 (Role) を表記できるんだ。


関連、集約、コンポジション
関連:関連は構造的な関係で、オブジェクト間の繋がりである「リンク」の集合を記述するんだ。関連には多重度と役割を表記できるよ。 例:雇用主と従業員
集約:部分と全体のライフサイクルが一致しないんだ。全体がなくなっても、部分はまだ存在していて、全体から切り離して存在できるんだね。 例:クラスと生徒、会社と従業員
コンポジション:部分と全体のライフサイクルが一致するんだ。全体がなくなると部分もなくなっちゃうし、部分は全体から切り離して存在できないよ。 例:人と脳
依存と単方向関連
依存は比較的偶発的で一時的なものだね。例えば、人と食べ物。お腹が空いてるときだけ依存するけど、満腹になったら依存しないよね。
単方向関連はもっと強くて、単方向の線で表すんだ。例えば、人と酸素、魚と水とかだね。
汎化 (Generalization)
汎化は特殊/一般の関係だよ。特殊な要素(子要素)のオブジェクトは、一般的な要素(親要素)のオブジェクトに置き換えられるんだ。この方法で、子要素は親要素の構造と振る舞いを共有することになるんだね。図上では、親要素の方を指し示すんだ。

実現 (Realization)
実現はクラス要素間の意味的な関係で、あるクラス要素が、別のクラス要素によって実行が保証される契約を規定するんだ。実現関係は2つの場合で使われるよ。1つはインターフェースと、それを実装するクラスやコンポーネントの間。もう1つはユースケースと、それを実現するコラボレーションの間だね。
