「クラスベース」の版間の差分
表示
削除された内容 追加された内容
編集の要約なし |
m編集の要約なし タグ: Refタグつき記述の除去 モバイル編集 モバイルウェブ編集 改良版モバイル編集 |
||
(3人の利用者による、間の21版が非表示) | |||
1行目: | 1行目: | ||
{{出典の明記|date=2015年12月}} |
{{出典の明記|date=2015年12月}} |
||
'''クラスベース''' ({{lang-en-short|class-based}}) とは[[オブジェクト指向]]のスタイルのひとつで、まず「鋳型」あるいは「設計図」となる[[クラス (コンピュータ)|クラス]]があり、その鋳型によってオブジェクトの実体である[[インスタンス]]を生成する、というスタイルである。クラスベースの[[システム]]や[[プログラミング言語]]では、併せて[[カプセル化]]や[[継承 (プログラミング)|継承]]のメカニズムをサポートすることが多い。代表的なプログラミング言語は[[C++]]<ref>C++はマルチパラダイム言語であり、[[手続き型プログラミング]]言語の性質も持つが、ここではプロトタイプベースの対義語としての比較説明をするため、クラスベースの[[オブジェクト指向プログラミング]]言語に分類するものとする。</ref>や[[Java]]など。 |
|||
'''クラスベース''' ({{lang-en-short|Class-based}}) は、[[オブジェクト指向プログラミング]](OOP)のスタイルのひとつであり、[[オブジェクト (プログラミング)|オブジェクト]]の生成に[[クラス (コンピュータ)|クラス]]を用いるスタイルを指している。OOPの標準的スタイルである。それと対比されるスタイルに[[プロトタイプベース]]がある。 |
|||
クラスベースのほか、オブジェクト指向における「同類のオブジェクトに同じような振舞いをさせるためのメカニズム」のもうひとつのスタイルとして、[[プロトタイプベース]]がある。プロトタイプベースのプログラミング言語の代表例としては[[JavaScript]]や[[Lua]]などがある。ただしJavaScriptの標準規格である[[ECMAScript]]は、バージョン6 (2015) 以降でクラス構文もサポートするようになった(実際には[[糖衣構文|シンタクティックシュガー]]的な機能であるが、そのような構文があると、「クラス構文もサポートするように」と言えばいかにもクラスベースになったように見えるのである)。 |
|||
クラスベースOOPは、先発の[[アラン・ケイ]]の[[Smalltalk]]流と、後発の[[ビャーネ・ストロヴストルップ]]の[[C++]]流で二分されている。Smalltalk流は[[メッセージパッシング]]を基礎にしており、C++流は[[継承 (プログラミング)|継承]]と動的ディスパッチを加えた[[抽象データ型]]のスーパーセットを基礎にしている。 |
|||
なおオブジェクト指向のスタイルとして、[[ビャーネ・ストロヴストルップ]]の[[C++]]流と、[[アラン・ケイ]]の[[Smalltalk]]流という分類がなされることもある。前者は由来となった[[Simula]]のクラスを強く受け継いだものであり、C++から派生した[[Java]]や[[C Sharp|C#]]などの大多数のオブジェクト指向言語にも受け継がれている。後者は[[アラン・ケイ]]の提唱した[[メッセージ (コンピュータ)|メッセージパッシング]]の概念に基づくものであり、[[Objective-C]]にも受け継がれている。 |
|||
<!--<ref>http://d.hatena.ne.jp/sumim/20040525/p1 を参照</ref>--> |
|||
クラスベースOOPでの[[オブジェクト (プログラミング)|オブジェクト]]は、総じて[[クラス (コンピュータ)|クラス]]を実体化した[[インスタンス]]と定義されている。クラスは、[[プロパティ (プログラミング)|状態]]と[[メソッド (計算機科学)|振る舞い]]の構成を定めた一種の[[型システム|型]]であり、オブジェクトのひな型や設計図に例えられている。クラスには[[カプセル化]]、[[継承 (プログラミング)|継承]]、[[ポリモーフィズム]]をサポートするメカニズムが備えられているのが普通である。Smalltalkのクラスは、[[メタクラス]]の[[インスタンス]]でもあるので[[オブジェクト (プログラミング)|オブジェクト]]である。C++流の[[クラス (コンピュータ)|クラス]]はただの[[型システム|型]]であり、そのインスタンスがオブジェクトである。 |
|||
<!-- 信頼性が担保されない個人のブログ記事は、単体では有効な出典になりえない。[[Wikipedia:信頼できる情報源]] --> |
|||
C++流のクラスベースは、[[静的型付け]]と[[動的型付け]]で二分されている。[[静的型付け]]はクラスの構成解釈=オブジェクトの型チェックをコンパイル時にする機構であり、[[動的型付け]]はクラスの構成解釈=オブジェクトの型チェックを実行時にする機構である。 |
|||
== 脚注 == |
== 脚注 == |
2022年8月8日 (月) 00:37時点における最新版
クラスベース (英: Class-based) は、オブジェクト指向プログラミング(OOP)のスタイルのひとつであり、オブジェクトの生成にクラスを用いるスタイルを指している。OOPの標準的スタイルである。それと対比されるスタイルにプロトタイプベースがある。
クラスベースOOPは、先発のアラン・ケイのSmalltalk流と、後発のビャーネ・ストロヴストルップのC++流で二分されている。Smalltalk流はメッセージパッシングを基礎にしており、C++流は継承と動的ディスパッチを加えた抽象データ型のスーパーセットを基礎にしている。
クラスベースOOPでのオブジェクトは、総じてクラスを実体化したインスタンスと定義されている。クラスは、状態と振る舞いの構成を定めた一種の型であり、オブジェクトのひな型や設計図に例えられている。クラスにはカプセル化、継承、ポリモーフィズムをサポートするメカニズムが備えられているのが普通である。Smalltalkのクラスは、メタクラスのインスタンスでもあるのでオブジェクトである。C++流のクラスはただの型であり、そのインスタンスがオブジェクトである。
C++流のクラスベースは、静的型付けと動的型付けで二分されている。静的型付けはクラスの構成解釈=オブジェクトの型チェックをコンパイル時にする機構であり、動的型付けはクラスの構成解釈=オブジェクトの型チェックを実行時にする機構である。