Eiffel语言教程——常规属性(An Eiffel Tutorial——ET:General Properties)

来源:互联网 发布:笑傲江湖 新修版 知乎 编辑:程序博客网 时间:2024/05/22 14:22

常规属性

以下是Eiffel语言支持的特性的一个概览:

  • 面向对象方法。Eiffel是面向对象技术的一个成熟应用,而不是面向对象和传统概念的一个“杂交品种”。
  • 外部接口。Eiffel是一套软件开发工具,并且它可以轻松地与C/C++、Java、C#等语言开发的软件向结合。
  • 生命周期内全程支持。Eiffel可以应用在整个开发过程中,包括分析、设计、实现和维护。
  • 以类作为最基本的构建工具。一个类是一组运行时对象的描述,它通过适当的操作和抽象属性指定。一个Eiffel系统完全由类组成,并作为其唯一的模块机制。
  • 统一类型系统。每个类型都基于一个类,包括如整型、布尔型、实数型、字符型、字符串和数组型等。
  • 契约式设计。每个系统组件都可以伴随一个关于它的抽象属性的精准规范,用于管理它的内部操作和与其它组件之间的交互。
  • 断言。这种方法和表示法支持编写对象状态的逻辑属性,用来表达契约方式。我们可以监视这些被认作断言的属性,以便我们在运行时进行测试并确保系统质量。它们同时也可以充当建档机制。断言包括前置断言、后置断言、类不变式、循环不变式,也出现在“检查”指令中。
  • 异常处理。您可以将您的软件设置成可以检测异常情况,如意外的操作系统信号、非法契约,修正它们并恢复。
  • 信息隐藏。每个类编写者都可以决定这个类的每个属性是否对客户类可用、仅对指定的客户类可用抑或仅为内部使用。
  • 结构化自我文档编制。它可以使环境工具编制出类和系统的文本或图形格式的抽象视图,并适用于复用者、维护者和客户端编写人员。
  • 继承。您可以定义一个类作为其它类的扩展和或特化。
  • 重定义。一个继承的属性(方法)可以被赋予不同实现或特性。
  • 显式重定义。任意属性的重定义都需要显式指定。
  • 转契承包。重定义规则要求新的断言与继承的相匹配。
  • 延期属性和延期类。对于一个属性或封闭的类(包括断言),它可能仅被声明,而不被实现。延期类通常被称为抽象类。
  • 多态。一个实体(变量、参数等)可以附属于其它不同的类。
  • 动态绑定。调用一个对象的属性部分触发这个对象特定的属性版本,甚至在多态和重定义的情况下调用时也是如此。
  • 静态类型。编译器会静态地检查所有的类型绑定都是否合法,以防止在运行时将一个不存在的属性绑定至一个对象。
  • 赋值(“类型截取”)。我们可以在运行时检查一个对象类型是否和我们预期的类型相一至,比如在一个对象来自数据库或来自网络时。
  • 多继承。一个类可以继承自多个其它类。
  • 重命名属性。为了解决在多继承情况下的命名冲突,或要在本地优化命名,一个类可以重命名一个继承的属性。
  • 重复继承:共享与复制。多继承会产生这样一种情况,一个类会由多个路径继承自另一个类,这时,对象编写人员可以指定每个继承的属性可以产生一个属性(共享)还是两个(复制)。
  • 重复继承时无二义性。重复继承时产生的重定义冲突可以被一种称为“选择”的机制解决。
  • 无约束的范型。一个类可以用参数表示,或者说用“范化”来描述一个随意类型的对象容器。
  • 垃圾收集。Eiffel设计了一个动态模态来进行垃圾的收集,它在支持的支持的环境下,可以自动运行而不用程序员手动控制。
  • 无泄漏模块结构。所有软件都同类组成,然而这些类仅有一层关系,便是继承与被继承。
  • 一次实现。一个属性一但被声明,则它将在第一次被调用时执行,随后产生一个静态返回值(如果要求返回)。这可以作为一个方便的初始化机制而且可以为共享对象服务。
  • 标准化库。Eiffel核心库提供了标准化的基本抽象类。
  • 其它库。Eiffel的开发很大范围的基于它的高质量库,这些涵盖了软件开发的普遍需求:从一般算法和数据结构到网络和数据库。

列出一些Eiffel所没有的特性也是相当有用的。在表达方式上事实上也基于少量清晰易懂的概念,以便易于掌握。学习Eiffel通常仅需要几个小时至几天时间,并且在用户理解了基本概念后,很少会返回来看参考手册。让Eiffel如此简单的原因部分来自于它摒弃了如下几点:

  • 无全局变量,全局变量的存在可能破坏系统的模块性和限制其扩展性、重用性和可靠性。
  • 无联合类型(或带有变量的记录类型),它会强制显式枚举所有变量;相比之下,继承是一种开放性机制,它允许在不改变现有代码的情况下在任意时刻向其中添加变量。
  • 无内类重载,在单一的上下文中赋予不同属性同一个名称将会导致面向对象机制上的混淆,错误和冲突,例如动态绑定。(动态绑定本身即是一种强大的类间重载,它没有如此的这些危险。)
  • 无goto结构或其它类似的控制结构(break,循环出口,多出口循环),这些会破坏控制流的简单性,并会对软件的开发造成困难或阻碍。(特别是通过循环不变量和变量时)。
  • 无side-effect(译:如C/C++中的i++和++i)表达式操作给计算和修改造成困惑。
  • 无低级指针,指针运算,一个熟知的Bug来源。(但存在一个POINTER类型,为使Eiffel提供与C和其它语言的接口)。

    英文原文地址:http://docs.eiffel.com/book/method/et-general-properties