クラス (コンピュータ)
クラス(class)は、クラスベースのオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。クラスから生成したオブジェクトのことをインスタンスという。
クラスには、インスタンスの保持するデータ(メンバ変数、フィールド(UMLでは「属性」ともいう))と操作(メソッド、メンバ関数)が記述される。テンプレート:要出典範囲
クラスは、継承・ポリモーフィズム・カプセル化などの、オブジェクト指向プログラミングにおける重要な概念を実現する強力な手段である。
目次
カプセル化 (encapsulation)
テンプレート:Main 通常クラスには、インスタンスが持つデータと、そのインスタンスに対して行える操作が定義される。これらのデータや操作をばらばらに扱うのではなく、一つのクラスという単位に集約することで、データと操作の関連やインスタンスが持つ役割を明確にし、整理することができる。これをカプセル化という。
クラスを言語の機能として有するプログラミング言語の多くでは、クラスに定義されたデータ(フィールド)や操作(メソッド)に対してアクセス権を指定することで、クラスの外から直接扱えるフィールドやメソッドを制限することができる。これにより、クラスの外から不用意にフィールドの値が変更されたり不適切なメソッドが実行されたりしてしまうのを防ぐことができる。また、アクセスが制限されたフィールドやメソッドはクラスの外から見れば無いに等しいので、これらのフィールドやメソッドを修正してもクラスの外の部分には影響を与えずに済む。これを情報隠蔽という。
多くのプログラミング言語ではフィールドやメソッドの定義とアクセス権の指定は同時になされるため、カプセル化と情報隠蔽はしばしば混同される。
継承 (inheritance、extension、generalization)
テンプレート:Main あるクラスを基にして別のクラスをつくることを継承という。 継承は拡張ともいうことがあり、UMLでは汎化 (generalization) と呼んでいる。 継承の基になったクラスを親クラス・基本クラス・スーパークラス等といい、継承してできたクラスを子クラス・派生クラス・サブクラス等という。
複数のクラスを基にしてクラスを継承することを多重継承という。多重継承は、二つのクラスの同名メソッドのオーバーライドによるコンフリクトを始めとするいくつかの問題点が指摘されており、Java、C#、D言語等では実装多重継承はサポートされておらず、インタフェース多重継承のみサポートされている。
また、オブジェクト指向を効率よく使いこなすためには継承だけでなく集約 (aggregation)、委譲 (delegation) を理解する必要がある。
ポリモーフィズム (polymorphism)
テンプレート:Main 継承する際に、親クラスの関数を子クラスの関数で置き換えることをオーバーライドという。オーバーライドをうまく使うと、オブジェクトによって、実質的に実行される関数が変わるようにできる。このようにして、見かけが一緒なのに動作が違うようにできることをポリモーフィズム(ポリモルフィズム)・多様性・多態性などという。
関連項目
- メタクラス
- クラス図
- サブクラス (計算機科学)
- スーパークラス (計算機科学)
- メソッド (計算機科学)
- オブジェクト指向
- オブジェクト指向プログラミング
- 多重ディスパッチ
- this (プログラミング)
- 凝集度 - オブジェクト指向言語に限らない概念