2

Ada 是否带有内置 GUI,它是否具有与 Oberon 相同的独特继承方法?

4

3 回答 3

3

很少有编程语言提供内置的GUI,如果您的意思是 GUI 原语是编程语言本身的固有部分。Ada 可以像其他语言一样使用 GUI 工具包。可以与 Ada 一起使用的有GtkAdaQtAdaRAPID是专为创建 Ada 应用程序用户界面而设计的界面设计器。

我不能谈论 Oberon 的继承方法,但 Ada WikiBook 对 Ada 的面向对象方法有很好的描述。

于 2011-08-27T12:21:58.237 回答
3

不,Ada 没有内置 GUI。但是我能想到的最接近的语言是 PostScript。(从技术上讲,Java 语言没有;尽管它包含的库​​有。)话虽如此,有一个 GTK 绑定(我根本没有使用过)和一个 OpenGL 绑定(我只玩过;并且老实说,OpenGL绑定比我想要的要薄得多)。

Oberon 的继承模型(据我所知)是单扩展继承,与 Ada 相同;尽管 Ada 确实包含一个类似于 Java 的接口系统。我实际上并没有使用过 Oberon,所以我无法真正为您提供两者的并排示例,但可以向您展示 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.
于 2011-08-29T01:58:10.307 回答
3

没有很多编程语言带有 GUI。Oberon 确实如此,但这只是因为它实际上带有整个操作系统(包括该操作系统的 GUI)。Java 有几个,但出于完全相同的原因(JVM 本质上是 Java 的操作系统)。Delphi 有一个,因为当与特定的 GUI 结合使用时,Delphi 本质上就是 Pascal 的名称。

典型的编程语言旨在超越特定平台,因此大多数用户希望在他们碰巧使用的任何平台(Windows、Linux 等)上使用标准 GUI。阿达就是其中之一。

这并不意味着没有与 Ada 一起使用的集成环境。Gnavi是一个尝试做类似 Delphi 的项目,但使用 Ada 和标准 Windows GUI。GTKAda是一个不同的项目,它帮助 Ada 程序使用 GTK+ 小部件工具包创建 GUI。GTK+ 是 Linux 上使用的标准 GUI 工具包之一(可移植到 Windows)。

至于继承,我上次玩 Oberon 时,它看起来像是使用基于记录类型的简单扩展继承。这也是 Ada 采用的方法。然而,Ada 的调度方法是介于 Oberon 所做的和 C++ 所做的之间的一半。机械上它类似于 Oberon。唯一有点奇怪的是,例程通过使用该类作为参数在与该类相同的包中定义,而不是使用某种关键字显式定义,从而将例程绑定到该类(记录)。否则,它看起来会非常相似。

但我相信在 Oberon 中,所有重写方法都是动态调度,而 Ada 仅在需要动态调度时使用动态调度,因为使用了类范围的指针或引用,就像 C++ 一样。如果这不包括您的 OO 问题,您可能需要更具体地了解您想知道的 Oberon 的 OO 系统中的内容。

于 2011-08-29T13:19:59.253 回答