面向对象语言的技术特点

1.支持类与对象概念的机制

所有面向对象语言都允许用户动态创建对象,并且可以用指针引用动态创建的对象。允许动态创建对象,就意味着系统必须处理内存管理问题,如果不及时释放不再需要的对象所占用的内存,动态存储分配就有可能耗尽内存

有两种管理内存的方法:
一种是由语言的运行机制自动管理内存,即提供自动回收“垃圾”的机制;
另一种是由程序员编写释放内存的代码

2.实现整体-部分(即聚集)结构的机制

一般说来,有两种实现方法:
(1)使用指针
(2)独立的关联对象
实现整体-部分结构。大多数现有的面向对象语言并不显式支持独立的关联对象,在这种情况下,使用指针是最容易的实现方法,通过增加内部指针可以方便地实现关联。

3.实现一般-特殊(即泛化)结构的机制

既包括实现继承的机制也包括解决名字冲突的机制。
所谓解决名字冲突,指的是处理在多个基类中可能出现的重名问题。
这个问题仅在支持多重继承的语言中才会遇到。某些语言拒绝接受有名字冲突的程序,另一些语言提供了解决冲突的协议。不论使用何种语言,程序员都应该尽力避免出现名字冲突。

4.实现属性服务的机制

对于实现属性的机制应该着重考虑以下几个方面:
支持实例连接的机制;属性的可见性控制;对属性值的约束。
对于服务来说,主要应该考虑下列因素:
支持消息连接(即表达对象交互关系)的机制;控制服务可见性的机制;动态联编。
 所谓动态联编,是指应用系统在运行过程中,当需要执行一个特定服务的时候,选择(或联编)实现该服务的适当算法的能力。

5.类型检查

程序设计语言可以按照编译时进行类型检查的严格程度来分类。
如果语言仅要求每个变量或属性隶属于一个对象,则是弱类型的;
如果语法规定每个变量或属性必须准确地属于某个特定的类,则这样的语言是强类型的。
 面向对象语言在这方面差异很大,例如,Smalltalk实际上是一种无类型语言(所有变量都是未指定类的对象);C++和Eiffel则是强类型语言。混合型语言(如C++、Objective_C等)甚至允许属性值不是对象而是某种预定义的基本类型数据(如整数和浮点数等),这可以提高操作的效率。
强类型语言主要有两个优点
一是有利于在编译时发现程序错误
二是增加了优化的可能性
通常,
使用强类型编译型语言开发软件产品
使用弱类型解释型语言快速开发原型
总地说来,强类型语言有助于提高软件的可靠性和运行效率,现代的程序语言理论支持强类型检查,大多数新语言都是强类型的。

6.类库

大多数面向对象语言都提供一个实用的类库。某些语言本身并没有规定提供什么样的类库,而是由实现这种语言的编译系统自行提供类库。存在类库,这为实现软件重用带来很大方便。
类库中往往包含实现通用数据结构(例如,动态数组、表、队列、栈、树等)的类,通常把这些类称为包容类。在类库中还可以找到实现各种关联的类。
更完整的类库通常还提供独立于具体设备的接口类(例如,输入输出流),此外,用于实现窗口系统的用户界面类也非常有用,它们构成一个相对独立的图形库。

7.效率

许多人认为面向对象语言的主要缺点是效率低
一个原因是,某些早期的面向对象语言是解释型的而不是编译型的
事实上,使用拥有完整类库的面向对象语言,有时能比使用非面向对象语言得到运行更快的代码。这是因为类库中提供了更高效的算法和更好的数据结构。
另一个原因是,这种语言在运行时使用动态联编实现多态性,这似乎需要在运行时查找继承树,以得到定义给定操作的类。
事实上,绝大多数面向对象语言都优化了这个查找过程,从而实现了高效率查找。

8.持久保存对象

任何应用程序都对数据进行处理,如果希望数据能够不依赖于程序执行的生命期而长时间保存下来,则需要提供某种保存数据的方法。希望长期保存数据主要出于以下两个原因: 
(1) 为实现在不同程序之间传递数据,需要保存数据;
(2) 为恢复被中断了的程序的运行,首先需要保存数据
一些面向对象语言(例如C++),没有提供直接存储对象的机制。这些语言的用户必须自己管理对象的输入输出,或者购买面向对象的数据库管理系统。
另外一些面向对象语言(例如Smalltalk),把当前的执行状态完整地保存在磁盘上。还有一些面向对象语言,提供了访问磁盘对象的输入输出操作。
通过在类库中增加对象存储管理功能,可以在不改变语言定义或不增加关键字的情况下,就在开发环境中提供这种功能。然后,可以从“可存储的类”中派生出需要持久保存的对象,该对象自然继承了对象存储管理功能。这就是Eiffel语言采用的策略。

9.参数化类

所谓参数化类,就是使用一个或多个类型去参数化一个类的机制。
有了这种机制,程序员就可以先定义一个参数化的类模板(即在类定义中包含以参数形式出现的一个或多个类型)
然后把数据类型作为参数传递进来,从而把这个类模板应用在不同的应用程序中,或用在同一应用程序的不同部分。
Eiffel语言中就有参数化类,C++语言也提供了类模板。

10.开发环境

软件工具和软件工程环境对软件生产率有很大影响。
编译程序或解释程序是最基本、最重要的软件工具。
在开发大型系统的时候,需要有系统构造工具和变动控制工具


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斜阳雨陌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值