「クラス (コンピュータ)」の版間の差分

削除された内容 追加された内容
「概念」の連発を除去
タグ: モバイル編集 モバイルウェブ編集
(同じ利用者による、間の1版が非表示)
13行目:
 
== 概要 ==
{{独自研究|section=1|date=2019年1月}}
{{正確性|section=1|date=2019年1月}}
ダイクストラの[[構造化プログラミング]]は、プログラムの大規模開発への道を開いたが、あくまで単一スレッド(single thread)計算機を前提としたトップダウン型開発方法であった。すなわち、プログラムのすべての機能は単線の計算プロセス上で実行する必要があり、たとえ甲と乙という汎用的な単機能を提供する検証済みのプログラムがそれぞれ独立に存在していても、両機能を実現するプログラムを作成するためには、ソースコードから該当機能部分を抜き出し、単線上に乗るように連接(concatenation)した上で、一つのプログラムとして正しく動作するように修正し、さらに再度検証しなければならない。
 
一方で、複数スレッド(multi thread)計算機においては、主プログラムから、甲と乙のプログラムなどの従プログラムをそれぞれ並列に実行させた上で、処理内容を従プログラムに(OSの機能などを仲介して)伝言受け渡し(message passing)して代わりに処理させることで、検証済みプログラムのソースコードに手を加えることなく、低コストで開発することができる(以下、これ[[コルーチン]]{{独自研究範囲|date=2019年1月|第0世代オブジェクト指向用いたプログラミング}}と呼ぶ)<ref>ただし、随所にOSの機能を利用することになるため異なるOSへの移植性が低い上に、主プログラムと並列呼び出しする従プログラムが異なる言語で記述されている場合、複数の異なるコンパイラが必要となり、場合によっては複数の異なる言語を使用しなければならなくなってしまう。</ref>。
 
[[オーレ=ヨハン・ダール]]と[[アントニー・ホーア]]は、この第0世代オブジェクト指向プログラミングのような考え方の有効性を主張し<ref>[[#構造化プログラミング(1975)|構造化プログラミング(1975)]] pp.201-202</ref>、上記のような一連の操作を一つの言語の中で完結させるための機構を提案した。それがクラスの構文である。
 
ダールとホーアは、まず主プログラムから従プログラムを並列呼び出しする際、読み込みするにあたって新たに(new)割り当てられたメモリ領域に限定して走る計算プロセスを実例(instance;インスタンス)と名付け、さらにその実例の集まり('''class''' of instances)をそれが記述されたソースコードと同一視した。その上で、呼び出されたときだけではなく、存在し続ける従プログラムの実例のもとになる手続きを'''クラス'''(class)、その実例を(「クラスの実例」ではなく)改めてクラスの'''対象'''(object)と名付けた<ref name=sp202>[[#構造化プログラミング(1975)|構造化プログラミング(1975)]] p.202</ref>。さらに、その考えに基づいて[[Simula|Simula 67]]にクラスの構文を実装した<ref>