2回に渡りオブジェクトについてざっくりと説明しました。今回は、オブジェクトのメリットと重要な3つの特徴(概念)について説明します。
オブジェクトのメリットについて
1. 設計しやすい
人や文書など、プログラミングの対象を現実に近い形で表すことができます(例えば、人の名前、文書のタイトルなど)。そのため、直感的に分析や設計をすることができます。
2. 部品化しやすい
構造化プログラミングでは、プログラムはサブルーチンなどコード単位でモジュール化されていました。オブジェクト指向プログラミングでは、プログラムはオブジェクト単位(プロパティとメソッドの固まり)で分割されるため、1つの部品として再利用しやすくなり、プログラミングの効率が上がります。
3. 多人数で開発しやすい
プログラムを部品化することにより、各開発者に細分化された部品を明確に割り当てることができます。開発者は担当外の部分に影響されることなく、担当箇所のプログラミングに集中することができます。
4. 保守しやすい
以下に説明するオブジェクトの特徴により、オブジェクトそのものに変更を加えなくても、オブジェクトの処理方法を変更するだけで、プログラムの仕様変更や修正に対応できます。
オブジェクトの特徴
1. カプセル化(encapsulation)
オブジェクトはプロパティとメソッドをメンバとして含有しています。オブジェクトは、オブジェクトの外部から内部のメンバに直接アクセスすることを禁止できます。つまり、オブジェクト内のメンバを外部から隠蔽することでそのメンバを保護できます。
外部からのアクセスを制御するには、クラスやメンバの先頭にアクセス修飾子(access modifier)を付けます。以下はJavaの例です(設計時に指定するため「クラス」と表記しています)。
- Public:どこからでもアクセス可能
- Protected:同じクラスと同じパッケージ(次回説明)、そのサブクラスからアクセス可能
- 無指定:同じクラスと同じパッケージからアクセス可能
- Private:同じクラスからのみアクセス可能
2. 継承(inheritance)
すでに定義されているオブジェクトからそのメンバをそのまま引き継いだ子オブジェクトを新たに作成できます。親オブジェクトのクラスを基底クラス(またはスーパークラス)といい、子オブジェクトのクラスを派生クラス(またはサブクラス)といいます。 継承という概念により、基底クラスのプロパティやメソッドをそのまま継承した派生クラスに新たなプロパティやメソッドを加えたり、再定義したりすることで機能を拡張することができます。
3. 多態性(polymorphism)
クラスが異なれば同じ名前を持ったプロパティやメソッドでも異なる機能を定義できます。これを多態性(または多様性)といいます。下記の図は、同じ名前「Z」のメソッドを実行してもオブジェクトが異なるため、得られる結果が異なることを示しています。
まとめ
難しい概念ばかり続いていますが、結局のところオブジェクト指向は複雑なプログラムを楽に開発できるように考えられたものです。ある程度理解していれば、VBAなどのプログラミングは理解しやすいのではないかと思います。
次回は、オブジェクト指向で重要と思われる用語をいくつか説明します。
では、また。