知識を整理するためにオブジェクト指向の用語を載せている。ただし網羅的なものではない。随時更新する。
オブジェクト指向(object oriented)
- オブジェクトを主軸に添えた設計手法やプログラミング手法のこと。
オブジェクト(object)
- 次の4つを持つもの
- 属性(attribute): 山田さんは、出社中かを表す属性を持つ。
- 操作(operation): 山田さんは、出社する。出社すると、出社中属性に影響を与える。
- 関連(relation): 山田さんは、会社と関連している。
- アイデンティティ(identity): 山田さんは、田中さんと区別されなければならない。
抽象データ型(abstract data type, ADT)
- 抽象データ型 = 集合 & 集合の名前 & 集合の要素で成り立つ公理
- ユーザが定義した型。
- 定義するということは名付けること。
- 抽象データ型は値の集合である。(値の配列やコレクションオブジェクトではなく、あくまで概念的なもの)
- 普通のデータ型の例
- uint型 = データ型
- uint型は、非負の整数値の集合: {0, 1, 2, 3, ..., n}
- 抽象データ型の例
- 年月日の月 = 抽象データ型
- 月 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
- つまり、int型の1から12
- 普通のデータ型の例
- 抽象データ型は、集合の要素に対しての公理を持つ。
- 月が持つ公理: 次の月はn + 1である。もしも、nが12なら、次の月は1である。
- 公理は、オブジェクト指向プログラミングでは、methodで表現されることがある。
- 抽象データ型があるおかげで、「一月と二月と三月と…」とすべて列挙する必要がなく、「月」と呼べば済む。
- 抽象データ型はオブジェクト指向の文脈に限らなければ「値の集合」と言えるが、オブジェクト指向では「オブジェクトの集合」を指すことが多い。
クラス(class)
- クラス = 抽象データ型 + 継承 + 多態性
- クラスは、抽象データ型に継承と多態性を加えたもの
- オブジェクトのひな形と俗称されるが、本質は抽象データ型であり、要するに、クラスはオブジェクトの集合を指す。
オブジェクトベース(object-based)
- オブジェクトを使うが、カプセル化のみを扱うプログラミング。
- オブジェクトベースでは、継承と多態性のどちらか、または、両方ともサポートされない。
- オブジェクト指向プログラミング言語は、継承と多態性どちらもサポートしている。
- 広い意味で言えば、オブジェクト指向もオブジェクトベースの一部と言える。
- プロトタイプベース(prototype-based)のことを指すこともあるが、プロトタイプベースは真のオブジェクト指向言語なので厳密には異なる。
- Object-based language - Wikipedia
クラスベース(class-based)
プロトタイプベース(prototype-based)
- オブジェクト指向プログラミングのひとつのスタイル。
- 振る舞いを再利用する方法が継承によるものではなく、既存のオブジェクトを複製して新しいオブジェクトを作る形でふるまいの再利用を実現する。元になるオブジェクトはプロトタイプと呼ばれ、新しいオブジェクトにない振る舞いは元となったプロトタイプに移譲される。
インスタンス(instance)
- クラスをから作られたオブジェクト。