オブジェクト指向プログラミングにおいて、クラスはオブジェクトを生成するための設計図であり、抽象データ型の一つです。クラスから生成されたオブジェクトの実体をインスタンスと呼びます。クラスは、データ(
属性やフィールド、メンバー変数など)と、そのデータに関連する操作(メソッドやメンバー関数など)を定義することができます。また、アクセス修飾子を用いることで、データのアクセス範囲を制御することが可能です。
クラス設計のための基本概念
カプセル化 (encapsulation)
カプセル化とは、データとそのデータに対する操作をひとまとめにして管理する仕組みです。これにより、データの変更がクラスの内部に限定され、外部への影響を最小限に抑えることができます。また、アクセス修飾子を用いることで、クラスの外部からアクセスできる情報を制限し、情報隠蔽を実現することも可能です。
継承 (inheritance/extension/generalization)
継承とは、既存のクラスを基にして新しいクラスを作成する機能です。これにより、コードの再利用性を高め、クラスの階層構造を構築することができます。継承元のクラスを親クラス(スーパークラス、基底クラスなど)、継承先のクラスを子クラス(サブクラス、派生クラスなど)と呼びます。子クラスは親クラスの特性を受け継ぎつつ、独自の特性を追加することができます。また、ポリモーフィズムを実現する上で重要な役割を果たします。
ポリモーフィズム (polymorphism)
ポリモーフィズムとは、同じ名前の操作(メソッド)が、異なるクラスで異なる動作をすることを指します。継承関係にあるクラスにおいて、親クラスで定義されたメソッドを子クラスで上書き(オーバーライド)することで実現できます。これにより、同じインターフェースを持つ複数のオブジェクトを、型を意識することなく扱うことができます。
クラスの歴史
クラスの概念は、
オーレ=ヨハン・ダールによってSimula 67で初めて導入されました。当時はオブジェクト指向の概念や用語はまだ確立されていませんでしたが、Simulaの影響を受けた
C++やSmalltalkによって、
オブジェクト指向プログラミングが発展しました。
Simulaにおけるクラス
Simulaにおけるクラスは、並列処理におけるプログラムの実行単位を抽象化する目的で導入されました。ダールとホーアは、プログラムの並列実行を容易にするため、各実行単位をインスタンスとして扱い、その集まりをクラスとして定義しました。これにより、検証済みのプログラムを部品として再利用しやすくなり、効率的な開発が可能になりました。
まとめ
クラスは、
オブジェクト指向プログラミングの中核をなす概念であり、
カプセル化、継承、ポリモーフィズムといった重要な原則を支えています。クラスを効果的に活用することで、再利用性が高く、保守性の優れたプログラムを開発することができます。また、クラスの歴史を理解することは、
オブジェクト指向プログラミングの本質を理解する上で非常に重要です。
参考文献
オーレ=ヨハン・ダール, C.A.R. ホーア (1972), 階層的プログラム構造
E.W.ダイクストラ、C.A.R.ホーア、O.-J.ダール 著、野下浩平,川合慧,武市正人 訳『
構造化プログラミング』サイエンス社、1975年。
川合 慧『システム プログラム』近代科学社〈コンピュータサイエンス大学講座〉、1982年。
落水 浩一郎『ソフトウェア工学実践の基礎』日科技連〈実践ソフトウェア開発工学シリーズ〉、1993年。
Ole-Johan Dahl (2001), The Birth of Object Orientation: the Simula Languages
関連項目
クラス図
サブクラス (計算機科学)
スーパークラス (計算機科学)
メソッド (計算機科学)
フィールド (計算機科学)
プロパティ (プログラミング)
オブジェクト指向
*
オブジェクト指向プログラミング