Oberon奥伯龙是一种通用编程语言,也是一种同名操作系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操作系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth创造并实现,由Pascal发展而来,其语法优雅简洁,高效易用,适用于ARM等多种处理器应用。并且Oberon可用于开发系统程序和应用程序,而一般常见的程序语言较偏系统或应用的某一方面。

**1,设计**

  从维基百科处可知,Oberon设计有一个座右铭是艾伯特爱因斯坦的想法:“把事情变得尽可能的简单,而不是更简单。”的方针是将注意力集中在那些基本的和必要的,忽略短暂的问题特征。另一个因素是在如C/C++和Ada语言复杂性的增长识别:相对于这些,奥伯伦强调扩展语言的图书馆概念的使用。枚举、子界类型,这是目前在Modula-2,已被删除;同样,设置类型一直局限于小的整数,和底层设施的数量已大幅减少(最特别的是,型传递函数已被淘汰)。剩余的潜在的不安全设施消除的结论对获得真正的高级语言的最重要的一步。非常接近甚至跨模块的类型检查,在运行时检查严格的指标,空指针检查,和安全类型扩展的概念在很大程度上允许程序员依靠语言规则。

  这一思想理念的目的是产生一种更容易学习的语言,容易实现,而且非常有效,并且它的理念产生的结果是可用于研究和工程两方面。奥伯龙编译器一直被认为是紧凑和速度很快的,同时相比商业编译器能提供或许更好的代码质量。

但Oberon没有流传于世并发展起来,最主要的原因是UNIXT/C的这对黄金组合奠定了现代开放计算机技术的基石,现在没有任何技术可以撼动(不要说Windows,现代操作系统在发展上都是相互相成的)。IBM的AS400是个例外,Oberon是个例外。虽然它是个理想式的编程语言工具,但它却没有函数式编程语言Lisp那么的纯粹。现代编程语言朝着两个方向在继续发展。

**2,特点**

1,方法与关键字大写敏感的句法

  2,试验型和扩展型

  3,分离和混合模

  4,字符串操作

  5,垃圾收集器

  6,代码分离

  7,支持系统编程

**3,面向对象**

该支持为抽象和异质结构的施工记录类型的扩展,但没有一个调度机制作为语言的特性而是编程技术或设计模式。这给予了极大的灵活性,在面向对象的世界。在该操作系统的两个编程技术已被用于连接的调度通信:方法和消息处理方法。

**4,方法套件**

示例的程序变量的定义和该类型的一个全局变量在扩展模块声明和分配在通用模块:

MODULE Figures; (* Abstract module *)

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; (* Other procedures here *) END Figures.

由上述示例,扩展了通用型图形到一个特定的形状:

MODULE Rectangles;

IMPORT Figures;

TYPE
Rectangle* = POINTER TO RectangleDesc; RectangleDesc* = RECORD
(Figures.FigureDesc)
x, y, w, h : INTEGER;
END; VAR
if : Figures.Interface; PROCEDURE New* (VAR r : Rectangle);
BEGIN
NEW(r);
Figures.Init(r, if);
END New; PROCEDURE Draw* (f : Figure);
VAR
r : Rectangle;
BEGIN
r := f(Rectangle); (* f AS Rectangle *)
(* ... *)
END Draw; (* Other procedures here *) BEGIN (* Module initialisation *)
NEW(if);
if.draw := Draw;
if.clear := Clear;
if.mark := Mark;
if.move := Move;
END Rectangles.

动态调度是通过程序的数据模块,通用模块。

**5,消息处理程序**

该技术包括更换一个程序的设置方法,各种方法之间的区别:

MODULE Figures; (* Abstract module *)

TYPE
Figure* = POINTER TO FigureDesc; Message* = RECORD END;
DrawMsg* = RECORD (Message) END;
ClearMsg* = RECORD (Message) END;
MarkMsg* = RECORD (Message) END;
MoveMsg* = RECORD (Message) dx*, dy* : INTEGER END; Handler* = PROCEDURE (f : Figure; VAR msg : Message); FigureDesc* = RECORD
(* Abstract *)
handle : Handler;
END; PROCEDURE Handle* (f : Figure; VAR msg : Message);
BEGIN
f.handle(f, msg);
END Handle; PROCEDURE Init* (f : Figure; handle : Handler);
BEGIN
f.handle := handle;
END Init; END Figures. 扩展了通用型图到一个特定的形状:
MODULE Rectangles;

IMPORT Figures;

TYPE
Rectangle* = POINTER TO RectangleDesc; RectangleDesc* = RECORD
(Figures.FigureDesc)
x, y, w, h : INTEGER;
END; PROCEDURE Draw* (r : Rectangle);
BEGIN
(* ... *)
END Draw; (* Other procedures here *) PROCEDURE Handle* (f: Figure; VAR msg: Figures.Message);
VAR
r : Rectangle;
BEGIN
r := f(Rectangle);
IF msg IS Figures.DrawMsg THEN Draw(r)
ELSIF msg IS Figures.MarkMsg THEN Mark(r)
ELSIF msg IS Figures.MoveMsg THEN Move(r, msg(Figures.MoveMsg).dx, msg(Figures.MoveMsg).dy)
ELSE (* ignore *)
END
END Handle; PROCEDURE New* (VAR r : Rectangle);
BEGIN
NEW(r);
Figures.Init(r, Handle);
END New; END Rectangles.
 
												

Oberon程序设计语言简介的更多相关文章

  1. [零] JavaIO入门简介 程序设计语言 为什么需要IO库

     本文旨在引申出来Java IO的概念含义,作为学习JavaIO一个起步的了解知识点 部分内容引自<计算机操作系统第三版>  操作系统的文件管理   "在现代计算机系统中,要用到 ...

  2. 01. Go 语言简介

    Go语言简介 引用原文地址:http://m.biancheng.net/golang/ Go语言也称 Golang,兼具效率.性能.安全.健壮等特性.这套Go语言教程(Golang教程)通俗易懂,深 ...

  3. 计算机程序和C++语言简介

    C++程序设计 第一章 计算机程序和C++语言简介 1.计算机是一台能够存储并处理数据的电子设备,包含硬件和软件两部分. 2.计算机硬件由: 1)中央处理单元(Central Processing U ...

  4. 《C程序设计语言》【PDF】下载链接:

    <C程序设计语言>[PDF]下载 https://u253469.pipipan.com/fs/253469-230382180 内容简介 在计算机发展的历史上,没有哪一种程序设计语言像C ...

  5. 《C++程序设计语言(十周年纪念版)》【PDF】下载

    <C++程序设计语言(十周年纪念版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382171 内容简介 <C++程序设计 ...

  6. 《C++程序设计语言(英文第四版)》【PDF】下载

    <C++程序设计语言(英文第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382177 内容简介 本书是C++领域经典的参 ...

  7. 《程序设计语言——实践之路》【PDF】下载

    程序设计语言--实践之路>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 本书在美国大学已有使用了十余年,目前被欧 ...

  8. 《程序设计语言——实践之路(英文第三版)》【PDF】下载

    <程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...

  9. 《程序设计语言——实践之路【PDF】下载

    <程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...

随机推荐

  1. iOS导航标题不居中问题(转载)

    前言 一直以来都让我很头痛的一个问题:系统自带的导航条,在标题文字很长时,进入到下一个界面,而下一个界面的标题也很长时,就会出现标题不居中显示. 曾经,我尝试过很多种办法,但是都没有从根上解决问题.下 ...

  2. jsp中使用java函数

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> ${fn ...

  3. Beego学习笔记——Logs

    日志处理 这是一个用来处理日志的库,它的设计思路来自于database/sql,目前支持的引擎有file.console.net.smtp,可以通过如下方式进行安装: go get github.co ...

  4. PHPStorm 安装 SASS、SCSS + Compass

    许久没更新博客啦,这两天研究了下 SASS 和 LESS ,最终选了 SASS,因为相对比较成熟些吧,试了很多坑之后,终于成功了,下面上步骤: 1. 安装 PHPStorm 的 SASS 插件 好像是 ...

  5. 原生JavaScript封装Ajax

    第一次开个人技术博客了,发的第一篇技术文章,欢迎指点…… 欢迎访问本人的独立博客:蓝克比尔 Ajax的实现主要分为四部分: 1.创建Ajax对象 // 创建ajax对象 var xhr = null; ...

  6. [Q]将图纸转换为JPG、PNG、plt、DWF、DWFx,XPS等格式文件

    如要将图纸打印为图片,请选择“PublishToWeb JPG.pc3”或“PublishToWeb PNG.pc3”打印机. 如要将图纸打印为plt格式文件,请选择“Windows Default ...

  7. jsp日期插件My97DatePicker 强大的日期控件 使用方便简单

    本文属转载(希望对编程爱好者有所帮助)详情请访问官方网站 http://www.my97.net/dp/index.asp 一. 简介 1. 简介 目前的版本是:4.7 2. 注意事项 My97Dat ...

  8. 在.Net MVC中自定义ValidationAttribute标签对Model中的属性做验证

    写一个继承与ValidationAttribute类的自定义的验证方法 MVC中传递数据时,大多数都会用Model承载数据,并且在传到控制器后,对Model进行一系列的验证. 我平时经常使用的判断方法 ...

  9. python基础(八)-迭代器与生成器

    一.迭代器 li=[1,2,3] f=li.__iter__() print(f) print(f.__next__()) print(f.__next__()) print(f.__next__() ...

  10. Jquery实现双击表单元格可编辑

    <script type="text/javascript"> function doTableTdEditClick(param){ doTdEditable(par ...