クラス (コンピュータ)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

クラスclass)は、クラスベースオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。クラスから生成したオブジェクトのことをインスタンスという。

クラスには、インスタンスの保持するデータメンバ変数フィールドUMLでは「属性」ともいう))と操作(メソッドメンバ関数)が記述される。アクセス範囲(public、private、protectedなど)や可変かどうか(final、 constantなど)等についても記述されている。[要出典]

クラスは、継承ポリモーフィズムカプセル化などの、オブジェクト指向プログラミングにおける重要な概念を実現する強力な手段である。

カプセル化 (encapsulation)[編集]

通常クラスには、インスタンスが持つデータと、そのインスタンスに対して行える操作が定義される。これらのデータや操作をばらばらに扱うのではなく、一つのクラスという単位に集約することで、データと操作の関連やインスタンスが持つ役割を明確にし、整理することができる。これをカプセル化という。

クラスを言語の機能として有するプログラミング言語の多くでは、クラスに定義されたデータ(フィールド)や操作(メソッド)に対してアクセス権を指定することで、クラスの外から直接扱えるフィールドやメソッドを制限することができる。これにより、クラスの外から不用意にフィールドの値が変更されたり不適切なメソッドが実行されたりしてしまうのを防ぐことができる。また、アクセスが制限されたフィールドやメソッドはクラスの外から見れば無いに等しいので、これらのフィールドやメソッドを修正してもクラスの外の部分には影響を与えずに済む。これを情報隠蔽という。

多くのプログラミング言語ではフィールドやメソッドの定義とアクセス権の指定は同時になされるため、カプセル化と情報隠蔽はしばしば混同される。

継承 (inheritance、extension、generalization)[編集]

あるクラスを基にして別のクラスをつくることを継承という。 継承は拡張ともいうことがあり、UMLでは汎化 (generalization) と呼んでいる。 継承の基になったクラスを親クラス基本クラススーパークラス等といい、継承してできたクラスを子クラス派生クラスサブクラス等という。

複数のクラスを基にしてクラスを継承することを多重継承という。多重継承は、二つのクラスの同名メソッドのオーバーライドによるコンフリクトを始めとするいくつかの問題点が指摘されており、JavaC#D言語等では実装多重継承はサポートされておらず、インタフェース多重継承のみサポートされている。

また、オブジェクト指向を効率よく使いこなすためには継承だけでなく集約 (aggregation)、委譲 (delegation) を理解する必要がある。

ポリモーフィズム (polymorphism)[編集]

継承する際に、親クラスの関数を子クラスの関数で置き換えることをオーバーライドという。オーバーライドをうまく使うと、オブジェクトによって、実質的に実行される関数が変わるようにできる。このようにして、見かけが一緒なのに動作が違うようにできることをポリモーフィズム(ポリモルフィズム)多様性多態性などという。

関連項目[編集]