面向对象(Object-oriented)这一术语来自于20世纪60年代推出的Simula仿真语言,其概念可追溯到20世纪40年代末人们利用数学仿真作为分析工具时类的概念。目前,面向对象方法的应用范围已从开始的程序设计语言领域扩展到应用于软件工程、操作系统、数据库、人工智能、系统仿真等计算机科学的各个分支,并对信息科学、工程科学等许多其他学科产生了重要影响。这一思想和方法虽然还很年轻,在理论和实施技术上还不够完善,但实践已充分证实了它的有效性和优越性。
5.2.1.1 面向对象技术的基本思想
所谓面向对象就是着眼于对象的一种方法,也就是把现实世界模型化的一种方法。众所周知,现实世界是由许多事物(对象)构成的,事物之间通过相互发出消息进行联系。因此,面向对象不以控制为中心,而是以事物(对象)的行为为中心来研究问题。
人们在现实生活中,为应付现实世界的复杂性,已逐渐形成了很强的对客观事物概括分类和抽象的能力,几乎每个名词都表示一类对象,都含有一组属性和行为特性。面向对象的方法正是利用了人们对事物分类和抽象的这样一种自然倾向,将感兴趣的或要研究的事物及概念都统称为对象。在分析解决问题时,以对象作为基本元素,去构造所要研究的系统模型。显然,面向对象的方法十分符合人的认识规律,因而易于被人们理解与接受。
5.2.1.2 面向对象技术的基本概念
(1)对象(Object)。将一个单一实体内的属性(通常指数据结构和表示)以及对属性的操作过程组合在一起所形成的描述称为一个对象。面向对象方法的基本元素及核心就是对象这一概念。现实世界中任何事物都可看作是对象,从最简单的整数到复杂的地质体等,都可以抽象为对象。换句话说,对象是指把人所看到的现实世界构造到计算机上使之再现的一种想法。在实际建模中,对象是指数据连同对这些数据的操作。
(2)类(Class)。人们认识事物时,总是把事物通过分类而体系化。面向对象方法中的类就相当于这种分类。将具有相同属性和操作的对象组成一组,进行统一的说明和实现,即称为类。因此,类是对象的抽象数据类型,或者说,对象是类的一个实例。由于面向对象的方法提出了类的概念,显著地减少了开发工作量,避免重复说明。
类由类说明和类实现两大部分组成。类说明统一描述类的属性(数据)、应遵守的约束规则、可执行的操作等,以便使用户了解类的具体作用和功能,也可由用户根据需要自己定义和说明类中应具有的功能。类说明部分是用户使用面向对象方法必须了解的,有三种声明形式:私有的(Private)、保护的(Protect)、公用的(Public)。私有部分通常定义基本数据类型的数据结构,也定义只能在本类的内部可以访问的方法,这些方法通常用作支持公有部分的实现;保护部分定义的数据和方法除了从这个类中派生的子类外,在这个类外面不能被访问,它兼顾了类的继承性和封装性。
类实现是实现类说明功能的详细过程和方法,往往由系统开发人员研制,用户不必了解;类实现隐藏了详细实现的全部细节,这就是面向对象方法的信息隐藏性。
(3)方法(Methods)。方法是指在对象中被定义的过程,即对类的某些属性进行操作以达到某一目的的过程。它的实现类似于非面向对象语言中的过程和函数,是与类的属性封装在一起的。如果一个类的公有方法可用在许多应用领域,这个类就可作为重复利用的组件。
(4)消息(Messages)。消息是对象间唯一的接口方式,即当多个对象联系在一起进行处理时,便要使用消息,这样的接口方式称为消息传递。因此,面向对象的程序实现过程就是发送消息,激活所需类的“方法”的过程,这相当于非面向对象方法中的函数调用。消息传递是指示对象做什么的唯一手段。在面向对象的方法中,由于只有通过“消息”才能使对象进行某种操作,因此可防止对象被错误地使用。
(5)抽象性(Abstraction)。在面向对象方法中,对象本身是对现实世界的各种事物的一种抽象描述,而类又是对具有相同特性的对象的进一步抽象。一个类定义了一种对象类型,描述了属于该种类型的所有对象的性质。类将数据结构及内部操作封装在一起,作为一个整体进行描述,提供了实现用户定义数据类型及相关函数和操作的手段,充分体现了抽象数据类型的思想。
(6)封装性(Encapsulation)。封装是把数据结构同操作数据的方法组合在一起,使数据和过程实现了一体化。封装是借助于类这种新的结构和数据类型机制达到的。封装限制了类的属性和方法的可访问性,使各类成为独立的模块。由于其他类不得引用本类的私有数据与操作,因此避免了传统程序设计中大量的数据传递,减少了数据误操作的可能,提高了系统实现的可靠性和可维护性,并可大大提高开发大型软件的效率。
需要指出的是,封装化也可能带来不便,即封装迫使用户必须使用这个类所定义的方法来处理这个类的数据,即类B将不可能直接访问类A的私有数据。作为对封装的补充,面向对象方法中还有另一种常用的技术,称为友元(Friend),即若将类B中的某种特定方法宣布成为类A的友元,则类B中的此方法就被允许直接访问类A的私有数据,这样可避免许多函数调用的开销。(www.xing528.com)
(7)继承性(Inheritance)。在面向对象的方法中,类是按一定层次组合起来的,称为类层次,即通过类层次把类进行体系化。面向对象方法规定下位类(或称为子类)继承上位类(或称为父类)的数据和方法,即子类可以照样使用父类定义的内容。利用这种特性,在生成新类时,可以只定义与已定义的父类不同的数据和操作,如图5.3所示。
图5.3 继承性示意图
继承性常常用来反映在一个应用领域中的抽象与结构,图5.4给出了岩体岩性分类对象的层次结构。继承性使系统自然而然地形成了清晰的层次结构,并且与现实事物的分类习惯相吻合,使人易懂且易实现。对父类的数据及操作的继承性可大大提高代码的重用性。
(8)多态性(Polymorphism)。对象是受到所接受的消息触发而执行动作的,不同的对象在接受相同的消息时会导致完全不同的行动,这种特性称为多态性。利用多态性,用户可以发送一般形式的消息,而将执行该消息的所有细节留给接受对象。
5.2.1.3 水利水电工程地质对象分类
在水利水电工程地质领域,所研究的地质空间对象包含大量复杂、不规则的地表地形、地层、覆盖层、褶皱构造、断层、侵入体、层间层内错动带、节理以及深裂缝等。众多的地质信息使得地质体在人们眼中显得杂乱无章,难以对其获得清楚的理解与认识。而基于面向对象技术采用分类的思想,将实际工程中可能遇到的地质对象的几何形态特征和属性特征进行认真分析,特征相似的对象可归为一个大类,形成相应的层次结构关系,从而有利于三维地质模型的构建。
图5.4 岩体岩性分类对象的层次结构图
根据对各类地质对象的分析和相应建模方法的不同,采用面向对象技术将其分为以下几类:地形类、地层类、断层类和界限类,各大类所包含的具体对象如图5.5所示。
图5.5 水利水电工程地质对象分类结构图
地形类单独作为一类,包括地表地形,这是由其不同的数据来源和在三维模型中的基础地位所决定的;地层类包含覆盖层、地层和层间错动带,虽然层间错动带在构造特征上类似于断层,但由于处于两个地层之间,其几何形态与地层类似,因此采用与地层一样的建模方法;断层类主要包括断层、侵入体、深裂缝和层内错动带,它们共同的特征是几何上的不连续,对完整地层造成切割破坏,其中断层又分为单个断层、两相交断层和断层网络(三个以上断层交错构成),须采用不同的建模方法;界限类则主要是人们根据地质表生作用和地下水作用对岩体的作用效果,按照强、弱、微三个等级划分的风化、卸荷界限以及地下水位面。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。