オブジェクト指向モデリングに関する世界観です。
クラス設計の基本は、それぞれのクラスやメソッドの「役割」と、クラス同士の「関連性」を考えることです。
まず、自分の作りたいと思っているプログラムに、どのような機能が必要なのかを、洗い出して全部考えます。
そして、そのプログラムの機能を、クラスという単位で、どのような機能をクラスに担当させるのかという「役割」と、クラスとクラスはどのように分割され、どのような関係性をもって関連するのかという「関連性」を考えます。
このような時に、それぞれのクラスを図にする方法を「クラス図」と呼びます。
オブジェクト指向モデリングでは、このようなクラス図を記述し、プログラムを機能ごとに分割しながら、関連性だけに注目して、プログラムの実装方法を分析することができます。
オブジェクト指向モデリングとは、情報収集、分析、設計、実装、運用といったフェーズを用いてプログラムを開発する手法のこと。
特に大切なのは分析工程。静的分析や動的分析を用いて、プログラムをクラスとユースケースへと落とし込んでいく。
オブジェクト指向モデリングにおいては、UMLを用いて、クラスの構造と関係性をクラス図に記述していく。
クラス図は、四角形と線や矢印を用いて、クラス同士の関係や属性とメソッド、全体・部分の関係、関連性や結びつき、たとえば継承、実装、包有、呼び出しなどを記述していく。
ユースケース図は利用者から見たシステムとの関係を記述する。
シーケンス図は上から下へと流れていく時系列での「オブジェクトが互いに呼び出される順番と関係」を記述する。
UMLは、クラス図などを描く際のダイアグラム(図式)のこと。プログラミングの解説書などでも、クラスの関係性や全体の構造を表現するためにUMLが使われている。
以下の書籍が参考になります。
UMLは、クラス図を書く時に使われるダイアグラム。仕様は巨大で、使い方や用語も場合によって異なるが、ここではJava言語で学ぶデザインパターン入門でのクラス図に使われているUMLの簡単な概要を引用して記述しておく。
・クラスは線で3つに分割された縦組みの四角形で表現する。一番上はクラス名。クラスではなくインターフェースの場合は<<interface>>と明記する。二番目は属性(アトリビュート)で、Javaではフィールド、C++ではメンバ変数と呼ばれる。三番目は操作(オペレーション)で、Javaではメソッド、C++ではメンバ関数と呼ばれる。
・staticメソッドやabstractメソッドが含まれる時は、abstractメソッドはイタリック体(斜字体)、staticメソッドはアンダーライン(下線)で表現する。
・継承関係は白抜きの矢印で表す。派生クラスのクラス図から親クラスのクラス図へと矢印を引く。また、インターフェースの実装は点線(破線)の矢印で、包有関係(集約)はひし形をつけた白抜きの矢印で表す。これ以外の関連(使用、生成、通知など)は黒の矢印で表し、その操作を矢印の上に英語で(Uses, Creates, Notifiesなどとなる)明記する。
・public, private, protectedを明示する場合は、名前の左に-(private), +(public), #(protected)などを付属する。
また、クラス図とは別にシーケンス図がある。これはタイムライン(時系列)ごとにクラスのインスタンスを通じて行われる処理について、左から右(あるいは右から左)の呼び出しなどの関係性を上から下へと流れる形で記述したもの。
ここでは概要だけを示すが、具体的な図を見たい場合はJava言語で学ぶデザインパターン入門やほかのUMLの例を参照してほしい。
オブジェクト指向も参照のこと。
保守性も参照のこと。
インターフェースも参照のこと。