180 likes | 308 Views
Eiffel. 胡轶文 5110379034. 历史与发展. Eiffel 是 由 ISE 公 司 ( Interactive Software Engineering )在 1985 年设计的。最初 ISE 在项目开发中,需要一种能体现现代软件工程学思想、现代的、面向对象的开发环境,但 ISE 认为当时没有这样的工具。因此, ISE 开发了 Eiffel 作为开发产品的内部工 具
E N D
Eiffel 胡轶文 5110379034
历史与发展 • Eiffel是由ISE公司(Interactive Software Engineering)在1985年设计的。最初ISE在项目开发中,需要一种能体现现代软件工程学思想、现代的、面向对象的开发环境,但ISE认为当时没有这样的工具。因此,ISE开发了Eiffel作为开发产品的内部工具 • 1986年10月,Eiffel 1在OOPSLA(Object-Oriented Programming Systems Language and Applications)大会上一举成名,由此踏上了商业化之路。随后几年中,Eiffel在美国、加拿大、欧洲和远东地区迅速传播,实施了一系列成功的工程项目。同时,学术界也认为Eiffel是教授各种软件概念的理想途径,世界上很多大学都已经采用Eiffel作为主要的教学语言。
Eiffel之父: 伯特兰·迈耶 • 于巴黎综合理工学院取得学士学位,美国史丹佛大学硕士,于法国南锡大学取得博士学位。 • 2001年10月,成为苏黎世联邦理工学院软件工程教授。 • 著作:《面向对象软件构造》(Object-Oriented Software Construction),为面向对象编程的经典作品。
Eiffel的理论基础 • Design By Contract™ Design By Contract™(DBC,按契约设计)几乎是Eiffel方法的标志。对于DBC的直接支持是Eiffel最著名的特性。Bertrand Meyer以数学形式严格证明了DBC的合理性,并且建立了严格而有灵活的契约体系。DBC理论和机制在软件开发的分析、设计、文档、调试、测试甚至项目管理中都扮演着关键角色,这使得Eiffel历来以长于开发高质量软件而著称。 • DBC来源于对人类生活中契约的理解。DBC认为软件系统是由许多相互交流的组件构造的,这些组件在交流时应该遵守彼此共有的约定(权利和义务),这些规约应该被精确定义。断言就是很好的规约表达工具。
Eiffel的语言特点 • 层次化的语言描述Eiffel仔细区分了语言描述的三个层次:语法、有效性、语义。语法是最低层次,有效性是中间层次,语义是最高层次。高层次语言描述是应用在低层次语言描述上的。每个层次都提供了丰富的规则进行约束。在实现上,语法和有效性由编译器保证,语义则依赖于契约检查和调试工具。 • 一致的类型系统Eiffel中所有的类型都是基于class的。从而被纳入到Eiffel整体类型体系中,因此,Eiffel与Smalltalk一样,都是最纯的面向对象语言。 • 静态编译型语言 • 引入了断言Eiffel语言中引入了断言(Assertion)使用Design By Contract™作为辅助设计工具,你可以在建立软件的同时,加入验证正确性的参数。使用Eiffel编译器作为测试和调试工具,开发者可以选择在运行时要监视的断言。开发者可以分别为每个类设置不同的监视级别(不检查、只检查前置断言、检查前置断言和后置断言、检查全部)。如果在运行时发现某个断言不成立,则意味着存在Bug,这时就会抛出异常中断运行。这不仅增强了测试和调试的针对性,而且有软件应作什么(断言)和作了什么(do子句中的可执行部分)的精确描述,所以能使软件尽快调试到正确状态。
多重继承和重复继承多重继承,是指一个程序单元可以同时继承多个其它类的特性。多重继承的好处很多,它有助于改善重用,优化整个系统结构设计,更加灵活,维护和调试也更加方便。不少面向对象流派都在警告开发者“警惕多重继承”。但在Eiffel中,多重继承是面向对象密不可分的特性之一。重复继承是指一个类通过两个以上路径继承到同一祖先类。它的难点在于子孙类如何对待祖先类的特性,是作为一个特性还是作为多个特性来继承。许多面向对象语言视重复继承为“死亡菱形”,不敢越雷池一步。Eiffel对重复继承的特性,明确规定了哪些特性需要共享,哪些特性需要复制,从而灵活地绕过了这块暗礁。多重继承和重复继承多重继承,是指一个程序单元可以同时继承多个其它类的特性。多重继承的好处很多,它有助于改善重用,优化整个系统结构设计,更加灵活,维护和调试也更加方便。不少面向对象流派都在警告开发者“警惕多重继承”。但在Eiffel中,多重继承是面向对象密不可分的特性之一。重复继承是指一个类通过两个以上路径继承到同一祖先类。它的难点在于子孙类如何对待祖先类的特性,是作为一个特性还是作为多个特性来继承。许多面向对象语言视重复继承为“死亡菱形”,不敢越雷池一步。Eiffel对重复继承的特性,明确规定了哪些特性需要共享,哪些特性需要复制,从而灵活地绕过了这块暗礁。 • 一致的编码风格Eiffel认为,作为工业级语言,编码风格应当作为语言规范规定下来,而不应该任由个人肆意发挥。因此,Eiffel编译器对于标识符大小写、下划线格式等进行了严格的检查,甚至连注释都作检查。这种近乎严苛的规则,使得世界上几乎所有Eiffel程序员写出来的Eiffel程序都像是一个模子里出来的。
不支持的语言特点 • Eiffel为了完整准确地表达“质量至上”的设计开发理念,舍弃了一些设计概念。 • 全局变量、union类型、类内重载(in-class overloading)、goto及类似的控制结构(break、exit等)、类型规则特例(exceptions to the type rules)、副作用表达运算符、底层指针和指针算法等。
开发平台和主要技术 • Eiffel的主要技术主要体现在专为Eiffel面向对象语言设计的集成开发环境EiffelStudio™中。EiffelStudio™是一个完全的图形环境,包含了有回溯功能的分析设计平台、快速重编译、编辑、浏览工具、自动生成文档、先进的调试机制等众多功能。整个IDE的设计都体现了Eiffel对开发环境构建的独特见解。 • 其产品族包括EiffelStudio for Windows、EiffelStudio for Unix、EiffelStudio for Linux、EiffelStudio for VMS等,EiffelStudio for MacOS也正在开发中。这极大地提高了Eiffel代码在各种操作系统平台上的可移植性。
一个Eiffel "system"或"program"是指一个classes的集合。Eiffel系统有一个Cluster的概念。通过一个叫做ACE的外部组件描述类之间的组合关系的,Cluster可以是几个类,或者几个子Cluster,或者是它们的混合。但是Cluster不是Eiffel语言的一个概念,Eiffel语言中,CLASS是惟一的模块。 • 这支程式有类别(class)HELLO_WORLD.其建构元(create routine)名称是make,会呼叫print的系统函式程序(system library routine)将“Hello,world!”的讯息给输出。 Eiffel中不像C系列【C、C++、Java、C#】的语言,通过约定某个叫做main的函数来启动应用,而是通过ACE来指定一个类作为整个应用的启动。