Ada 是否带有内置 GUI,它是否具有与 Oberon 相同的独特继承方法?
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.
没有很多编程语言带有 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 系统中的内容。