AdaにはGUIが組み込まれていますか?また、継承に対する独自のアプローチはOberonと同じですか?
3 に答える
GUIプリミティブがプログラミング言語自体の本質的な部分であることを意味する場合、組み込みのGUIを提供するプログラミング言語はほとんどありません。Ada は、他の言語と同様に GUI ツールキットを利用できます。Ada ですぐに使用できるものには、 GtkAdaとQtAdaがあります。RAPIDは、Ada アプリケーションのユーザー インターフェイスを作成するために特別に設計されたインターフェイス デザイナーです。
Oberon の継承へのアプローチについて話すことはできませんが、Ada WikiBook には、Ada のオブジェクト指向へのアプローチに関する優れた記事があります。
いいえ、Ada には GUI が組み込まれていません。しかし、私が考えることができる最も近い言語は PostScript です。(技術的には、Java 言語はそうではありませんが、含まれているライブラリはそうです。) そうは言っても、GTK バインディング (私はまったく使用していません) と OpenGL バインディング (私は遊んだだけです) があります。正直なところ、OpenGL バインディングは私が望むよりもはるかに薄いバインディングです)。
Oberon の継承モデル (私が理解しているように) は、Ada と同じ単一拡張継承です。ただし、Ada には Java に似たインターフェイス システムが組み込まれています。私は実際に Oberon を使用したことがないので、2 つの例を並べて紹介することはできませんが、Ada の例を示すことはできます。
ベース:
Type Base is Abstract Tagged Record
Null;
End Record; -- Base
-- Base Operations
Procedure Op( Object : In Out Base );
Procedure Dispatching_Op( Object : In Out Base'Class );
拡大:
Type Extended is New Base With Record
Null;
End Record; -- Extended
Overriding Procedure Op( Object : In Out Extended );
の本体で、次のように言います。
Procedure Op( Object : In Out Base ) is
begin
Put( "Hello" );
end Op;
Procedure Dispatching_Op( Object : In Out Base'Class ) is
begin
Op( Object );
Put_Line( " World." );
end Dispatching_Op;
Procedure Op( Object : In Out Extended ) is
begin
Put( "Goodbye" );
End Op;
タイプ P {P : K.Base'Class:= K.Extended'(Others => <>);} のオブジェクトを指定すると、次のように呼び出すことができます。
P.Dispatching_Op;
この場合、次の結果が生成されます。
Goodbye World.
GUI が付属しているプログラミング言語は多くありません。Oberon にはありますが、実際にはオペレーティング システム全体(その OS の GUI を含む) が付属しているからです。Java にもいくつかありますが、まったく同じ理由です (JVM は本質的に Java のオペレーティング システムです)。Delphi は、特定の GUI と組み合わせた場合、本質的に Pascal の名前であるため、Delphi には 1 つがあります。
典型的なプログラミング言語は、特定のプラットフォームを超越することを意図しているため、ほとんどのユーザーは、たまたま作業しているプラットフォーム (Windows、Linux など) に関係なく、標準の GUI を使用したいと考えるでしょう。エイダもその一人です。
これは、Ada で使用するための統合環境がないという意味ではありません。Gnaviは、Delphi のようなことをしようとするプロジェクトですが、Ada と標準の Windows GUI を使用します。GTKAdaは、Ada プログラムが GTK+ ウィジェット ツールキットを使用してGUI を作成するのに役立つ別のプロジェクトです。GTK+ は、Linux で使用される標準 GUI ツールキットの 1 つです (Windows にも移植可能です)。
継承に関しては、前回 Oberon で遊んだときは、レコード タイプに基づく単純な拡張継承を使用しているように見えました。これは、エイダも採用するアプローチです。ただし、Ada のディスパッチ メソッドは、Oberon が行うことと C++ が行うことの中間のようなものです。機械的にはオベロンに似ています。少し変わっている唯一のことは、ある種のキーワードで明示的にではなく、そのクラスをパラメーターとして使用し、クラスと同じパッケージで定義されていることによって、ルーチンがクラス (レコード) にバインドされることです。それ以外の場合は、非常に似ています。
しかし、Oberon ではすべてのオーバーライド メソッドが動的ディスパッチであると考えていますが、Ada では C++ のように、クラス全体のポインターまたは参照が使用されているために必要な場合にのみ動的ディスパッチを使用します。それがあなたの OO の質問をカバーしていない場合、あなたが疑問に思っている Oberon の OO システムの内容について、より具体的に知る必要があるかもしれません。