トップ
トップ >  オブジェクト指向 >  オブジェクト指向の基礎
オブジェクト指向の基礎
概要
ソフトウェア開発手法の一つで、オブジェクト同士が互いにメッセージをやりとりしながら
処理を進めていく方式です。
分析から実装までがシームレスになりやすいという特徴があります。
敷居が若干高いですが、生産性は桁違いになりうるので、習得する価値はあります。
また、最近の技術はオブジェクト指向に基づくので必須とも言えます。

クラス
クラスとは、システムで扱う物の抽象です。
データとメソッドを含みます。
カプセル化、継承、多態性を考慮します。
カプセル化は安全性を、継承と多態性は柔軟性を提供します。
詳細は後述します。

オブジェクト
クラスを具体化したものがオブジェクトです。
逆にオブジェクトを抽象化したものがクラスです。
オブジェクトは実行中に生成されたり削除されたりします。
関連した用語にインスタンスがありますが、インスタンスは実体や実例のことです。
クラスのインスタンスがオブジェクトです。

カプセル化
データと操作をまとめます。
データを外部から隠蔽し、メソッドを通してのみ値にアクセスできるようにします。
整合性の保障、詳細の隠蔽など以下の利点があります。
整合性の保証
有効な値のみを受け付けるようにすれば、
無効な値になる可能性がなくなり、値の有効性を保証できます。
例として、月を保持するデータと、
月を設定するメソッドsetMonthがあるとします。
カプセル化の原則に従い、1〜12のみを受け付ける
ようにすれば、0や13のような値が入る可能性
をなくすことができます。
単独のデータに対してだけでなく、データ同士の整合性
も保証することも可能です。

詳細の隠蔽
詳細を意識せずに利用可能になります。
また、チューンナップ等の最適化を行っても、
外部に影響せずに済ませることができます。

継承
あるクラスから性質を引き継いだクラスを作成することです。 サブクラスでは、差分のみを定義するだけですみます。 差分コーディングと呼ばれます。 サブクラスでスーパークラスのメソッドの定義を変更することも 可能で、これをオーバーライドと言います。 継承にはis-aの関係が存在します。つまり、サブクラスはスーパークラスの一種であると言うことです。 共通部分が存在することが多いので共通部分の局所化し、 差分をサブクラスで定義することで定義の重複をなくすことができます。
汎化と特化
サブクラスを汎化したものがスーパークラスであり、 逆にスーパークラスを特化したものがサブクラスです。

抽象クラス
  インスタンスを生成しないクラスです。
派生されることを前提としています。
ちなみに、抽象メソッドがあるクラスは自動的に抽象クラスになります。

多態性
同一メッセージに対して異なる振る舞いをすることです。
詳細を意識せずにメッセージを送れるという利点があります。
対象が同一のメソッドを備えていれば、一様に扱えるようになります。
利用する側は、対象が何であるかを知る必要がなくなり、
追加、入れ替えが容易になります。これにより柔軟性が増します。

クラス間関係
クラス同士の間に存在する関連です。
リンクとも言います。
関連
一方が他方を知ってる場合を指します。
単方向にすることも双方向にすることも可能です。

集約
has-aの関係とも言います。一方が他方を含む場合を指します。

コンポジション
集約のうち、ライフタイムが一致するものを言います。

開発手法
オブジェクト指向による開発手法は統一されているわけではなく、 現在さまざまな手法が存在します。 現実世界のうち、システム化に必要なものを抽出していきます。 現実世界をそのままモデリングするイメージですが、 完全一致するわけではありません。 やりかたは十人十色です。 ただ、同じ対象をモデリングしているのだから似たものにはなります。 センスや経験が問われます。 どれが、正解とは言い切れません。まあ、明らかな間違いはありますが。 それゆえ、奥深いといえます。
トップ >  オブジェクト指向 >  オブジェクト指向の基礎