任意のあるオブジェクト指向のプログラミング言語クラスのパラダイムに基づいていませんか?
任意のあるオブジェクト指向のプログラミング言語クラスのパラダイムに基づいていませんか?
回答:
私の知る限り、Selfはプロトタイプに基づいた「クラスフリー」パラダイムを発明した元の言語です。1980年代には既に(実験段階で)存在しており、Smalltalkのプロトタイプパターンのエレガントな使用法を極端に押し上げ、クラスが完全に排除されました。
私が知っている他のすべての「クラスフリー」オブジェクト指向言語に影響を与えました。
JavaScriptのような言語はプロトタイプに基づいており、既存のオブジェクトを複製することで動作が再利用されます。私がリンクしたウィキペディアの記事は、Lua、ActionScript、および他の多くの言語がこのパラダイムに従っていることを示しています。
世界で最も人気のあるオブジェクト指向プログラミング言語にはクラスがなく、Javascriptと呼ばれ、プロトタイプベースです:http : //en.wikipedia.org/wiki/Prototype-based_programming
オブジェクト指向とは、互いに部分的にしか依存しないいくつかの重要な概念の総称です。たとえば、prototype
Thomasが書いたように、継承はクラス間ではなくインスタンス間で個別に宣言したり、クラス全体を具体的なオブジェクトで表すことができます 。インスタンスの作成から構造の説明を分離するのがより一般的です。同様に、遅延バインディングは、名目上同じメソッドを持つオブジェクトが呼び出されたときに必ずしも同じことを行うわけではなく、実行時に決定が行われることを意味します。プロトタイプベースのアプローチでも同様に可能です。また、カプセル化は、オブジェクトが宣言されたクラスのインスタンスであるかどうかとは本質的に完全に独立しています。
そうは言っても、ほとんどのオブジェクト指向言語はクラスベースのキャンプにしっかりと入っています。しかし、それでも線を曖昧にするイディオムがあります:ドメイン駆動設計は、特定のオブジェクトのアイデンティティが静的クラス図よりもはるかに重要であり、デコレータが同じクラスまたはインターフェースのオブジェクトに異なる動作。
Fortressは、クラスではなく特性に基づいたオブジェクト指向言語です。違いは主に実装構成にあります。オブジェクトの動作(メソッド定義)は、プログラムテキストの特定のポイントでの宣言によって決定されます。その意味では、クラスベースのシステムに似ています。
純粋にオブジェクトベースのオブジェクト計算(Cardelliによると思います)があります。すべてのメソッドはインスタンスメンバーです。既存のオブジェクトの内容を取得し、そのメンバーの一部を追加、削除、または置換することにより、新しいオブジェクトを作成します。新しいオブジェクトは古いオブジェクトへのリンクを持たず、その内容の一部だけを持っているため、プロトタイプとは少し異なります。
IIRCでは、Pythonおよびその他のハッシュテーブル指向言語を使用して同様の方法でプログラミングできます。インスタンスメンバとして関数を追加し、メソッドとして呼び出すことができます。
Adaは1995年の改訂時点でオブジェクト指向ですが、他の多くのOO言語とは異なり、オブジェクト指向のタイプとモジュールを「クラス」と呼ばれる単一の構造に結合していません。型を「class Foo」として宣言し、関連するすべてのメソッド宣言をクラス宣言内に置くのではなく、パッケージを宣言し、(aとしてrecord
)型およびパッケージ内の他のことを宣言します。他の言及された言語のいくつかがそうであるように、それは「クラスフリー」ではなく、物事を整理するわずかに異なる方法です。
Ada 95のオブジェクト指向機能は、既存の1983バージョンの言語に追加されました。継承などをサポートするために既存のレコードとパッケージの構成を拡張しました。
アーラン。そして、はい、Erlang はオブジェクト指向言語であり、OOの定義の3つのポイントすべてを満たします。