システムの構築や設計において、処理や対象となるもの(オブジェクト)同士のやり取りの関係としてシステムをとらえる考え方です。データと手続きをひとまとめにしてカプセル化することで実現します。オブジェクト指向の考え方を取り入れたプログラム言語(オブジェクト指向言語)にはC++やJavaなどがあり、カプセル化、継承、多態性などの特徴を持っています。
カプセル化(情報隠蔽)
オブジェクトの内部を外部から見えないようにして、ブラックボックス化すること。
オブジェクトのデータとそれに対する操作をセットで定義し、外部には特定の手続きだけを公開することで実現する。使う人は内部の情報を知らなくともオブジェクトを扱うことができる。
具体例:
1. 銀行口座クラス:
- 残高 (データ) と、入金・出金 (メソッド) をカプセル化します。
- 外部からは、入金や出金といったメソッドを通してのみ残高にアクセスできます。直接残高フィールドにアクセスすることはできません。
- 例えば、出金時に残高が不足している場合は、エラーを返すなど、内部で不正な操作を防ぐ処理を実装できます。
2. ユーザー情報クラス:
- ユーザー名、パスワード、メールアドレスなどの個人情報 (データ) と、パスワードの変更 (メソッド) をカプセル化します。
- パスワードは暗号化して保存し、直接アクセスできないようにします。
- パスワード変更時には、新しいパスワードの妥当性検証(長さや複雑さなど)を行い、安全なパスワード設定を保証します。
3. ゲームキャラクタークラス:
- キャラクターの体力、攻撃力、防御力などのステータス (データ) と、攻撃、回復、防御などの行動 (メソッド) をカプセル化します。
- 外部からは、攻撃や回復といったメソッドを通してのみステータスを変更できます。
- 例えば、攻撃時に、防御力に応じてダメージを計算するなど、ステータスに応じた処理を実装できます。
4. 商品の在庫管理クラス:
- 在庫数 (データ) と、商品の入庫、出庫 (メソッド) をカプセル化します。
- 出庫時に、在庫数が不足している場合は、エラーを返すなど、不正な操作を防ぐ処理を実装できます。
カプセル化のメリット:
- 情報の隠蔽:外部から内部構造を見えなくすることで、不要なアクセスや誤った操作を防ぎます。
- 保守性の向上:内部実装の詳細を隠蔽することで、外部への影響を最小限に抑え、変更や修正が容易になります。
- 再利用性の向上:独立したオブジェクトとして他の場所でも再利用しやすくなります。
- バグの局所化:問題が発生した場合、影響範囲を特定しやすくなります。
カプセル化は、オブジェクト指向プログラミングにおいて、オブジェクトの信頼性と保守性を高めるための重要な設計手法です。
継承(インヘリタンス)
あるクラスが上位のクラスの特性を引き継いでいる関係のこと。例えば、自動車クラスに対して、それを特化させた乗用車クラスやトラッククラスなどとの関係がこれにあたる。上位の特性を引き上げることで差分プログラミングが可能となる。
差分プログラミング:主にオブジェクト指向プログラミングにおいて、既存のクラスを継承して、そのクラスに無い部分(差分)だけを実装するプログラミング手法
多態性(ポリモルフィズム)
オブジェクトへの操作呼び出しが、呼び出し側でなく受けて川の特性で決まること。例えば、犬クラスの「鳴く」という手続きを呼び出せば「ワン」、猫クラスの「鳴く」という手続きを呼び出せば「ニャー」というように、同じメッセージを送っても受け手のオブジェクトによって行われる操作が異なる様子を表す。
コメント