Oberon是一种通用编程语言,最初由尼克劳斯·维尔特在1987年推出,是维尔特风格的类ALGOL语言中的最后一员(继Euler(英语:Euler (programming language))、ALGOL W、Pascal、Modula和Modula-2之后)。Oberon是增进Pascal的直接后继者Modula-2的能力,并减少其复杂度的集中努力的结果。它的原理性新特征是记录类型的类型扩展的概念。它允许新数据类型构造在现存数据类型之上并关联于它们,脱离了严格的静态类型数据的教条。Oberon是在瑞士的苏黎世联邦理工学院作为Oberon操作系统(英语:Oberon (operating system))实现的一部分而开发的。这个名字来自天王星的卫星奥伯隆。
Oberon的当前版本是2007年修订的Oberon-07,它仍由维尔特来维护而Oberon计划编译器仍在随时更新。
Oberon的基本指导原则是集中于基础和根本的特征,并忽略短暂性的问题。另一个因素是认识到了在语言如C++和Ada中复杂度的增长。与它们相反,Oberon强调使用库概念来扩展语言。在Modula-2中提供的枚举和子范围类型被省略了;类似的集合类型被限制为小的整数集合,而低层设施的数量被大幅度缩减(特别是省略了类型转移函数)。省略余下的潜在不安全设施,是得到真正的高级语言的最根本步骤。甚至跨越模块的非常紧密的类型检查,严格的运行时间索引检查,空指针检查,和安全的类型扩展概念,在很大程度上允许编程单独的依仗于语言规则。
这种策略的意图是产生易于学习、实现更简单和高效的语言。Oberon编译器被认为是简明和快速的,却提供了可比拟于商业编译器的代码质量。
刻画Oberon语言的特征包括:
Oberon支持对记录类型的扩展,用于抽象和异构结构的构造。不同于后期方言即1991年提出的Oberon-2(英语:Oberon-2)和1998年提出的Active Oberon(英语:Active Oberon),最初的Oberon缺乏作为语言特征的分派机制,而是把它作为一种编程技术或设计模式。这给出了在OOP上的巨大灵活性。在Oberon操作系统(英语:Oberon (operating system))中,两种技术被一起用于分派调用:方法套件和消息处理器。
在这种技术中,泛化模块定义过程变量的一个表格类型,而扩展模块中声明这个类型的一个共享变量,泛化模块中的方法要访问这个表格的对应项目,而扩展模块将这个表格的项目指派到自己相应的过程:
MODULE Figures; (* 抽象模块 *) TYPE Figure* = POINTER TO FigureDesc; Interface* = POINTER TO InterfaceDesc; InterfaceDesc* = RECORD draw* : PROCEDURE (f : Figure); clear* : PROCEDURE (f : Figure); mark* : PROCEDURE (f : Figure); move* : PROCEDURE (f : Figure; dx, dy : INTEGER); END; FigureDesc* = RECORD if : Interface; END; PROCEDURE Init* (f : Figure; if : Interface); BEGIN f.if := if; END Init; PROCEDURE Draw* (f : Figure); BEGIN f.if.draw(f); END Draw; (* 这里是其他过程Clear、Mark和Move *) END Figures.