|
Oberon-2 とは、プログラミング言語 Oberon を拡張し、オブジェクト指向的なコンセプトを取り入れた言語である。 1991年、チューリッヒ工科大学のニクラウス・ヴィルトと Hanspeter Mössenböck(現リンツ大学システムソフトウェア研究所)が開発した。Oberon-2 は Oberon の上位互換である。Oberon-2 は Object Oberon(Oberon にオブジェクト指向のコンセプトを導入した最初の試み)の再設計でもあった。 Oberon-2 は Oberon から限定されたリフレクションとインタフェースなどを持たない単一継承(型拡張)を受け継いでいるが、効果的な仮想メソッド(型束縛プロシージャ)を追加している。メソッド呼び出しは、C++のような仮想メソッドテーブルを使って実行時に確定する。 Smalltalk などの完全なオブジェクト指向言語に比べると、Oberon-2 の基本データ型はオブジェクトになっておらず、クラスもオブジェクトではなく、多くの操作がメソッドではないし、メッセージパッシングの概念もなく、ポリモーフィズムも限定的である(SmalltalkやRubyのようなダックタイピングがなく、Javaのようなインタフェースも定義できない)。オブジェクト/クラスレベルでのカプセル化もサポートしていないが、モジュールをその目的で使用することができる。 Oberon-2 のリフレクションはメタオブジェクトを使わず、実行ファイル内に含まれる型記述子を単に読み、それが型やプロシージャを定義しているモジュールに渡される。その構造体の形式が言語レベルで渡されるなら(例えば Oberon System 3 がそうである)、ライブラリレベルでのリフレクションの実装が可能である。従って、言語コードを全く変えずにライブラリレベルでほとんど全てを実行することも可能である。実際、Oberon System 3 は言語レベルとライブラリレベルのリフレクションを多用している。 == コード例 == 以下の Oberon-2 のコードは、単純なリストクラスを実装したものである。 MODULE ListClass; TYPE List * = POINTER TO ListNode; ListNode = RECORD value : INTEGER; next : List; END; PROCEDURE ( l : List ) Add * ( v : INTEGER ); BEGIN ( * ... *) END Add; PROCEDURE ( l : List ) AddLast *( v : INTEGER ); BEGIN ( * ... *) END AddLast; PROCEDURE ( l : List ) AddAt * ( i : INTEGER; v : INTEGER ); BEGIN ( * ... *) END AddAt; PROCEDURE ( l : List ) Remove *; BEGIN ( * ... *) END Remove; PROCEDURE ( l : List ) RemoveLast *; BEGIN ( * ... *) END RemoveLast; PROCEDURE ( l : List ) RemoveAt * ( i : INTEGER ); BEGIN ( * ... *) END RemoveAt; END ListClass. 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Oberon-2」の詳細全文を読む スポンサード リンク
|