面向对象技术的理论研究综述Word下载.docx
《面向对象技术的理论研究综述Word下载.docx》由会员分享,可在线阅读,更多相关《面向对象技术的理论研究综述Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
角色(学生、教师、工人、农民、公务员);
事件(禽流感、恐怖活动、空中救援);
互相作用(批评、上课、宣传);
人员;
场所;
组织;
设备;
和地点。
当重要的对象被发现后,通过一组互相关联的模型详细表示对象之间的关系和对象的行为,这些模型从四个不同的侧面表示了软件的体系结构:
静态逻辑、动态逻辑、静态物理和动态物理。
静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。
这被称为对象模型。
一般化关系表示属性和方法的继承关系。
定义对象模型的图形符号体系通常是从用于数据建模的实体关系图导出的。
对设计十分重要的约束,如基数(一对一、一对多、多对多),也在对象模型中表示。
动态逻辑模型描述对象之间的互相作用。
互相作用通过一组协同的对象,对象之间消息的有序的序列,参与对象的可见性定义,来定义系统运行时的行为。
静态物理模型通过模块描述代码的布局。
动态物理模型描述软件的进程和线程体系结构。
(2)、类面向对象程序由类的定义和类的使用两部分组成,类是对一组客观对象的抽象,它将该组对象所具有的共同特征(包括结构特征和行为特征)集中起来,以说明该组对象的能力和性质。
面向对象技术将数据和对数据的操作封装在一起,作为一个整体来处理,采用数据抽象和信息隐蔽技术,将这个整体抽象成一种新的数据类型,也就是类。
在面向对象程序设计中,类的确定与划分非常重要,是软件开发中关键的一步,划分的结果直接影响到软件系统的质量。
如果划分得当,既有利于程序进行扩充,又可以提高代码的可重用性。
因此,在解决实际问题时,需要正确地进行分“类”。
理解一个类究竟表示哪一组对象,如何把实际问题中的事物汇聚成一个个的“类”,而不是一组数据。
这是面向对象程序设计中的一个难点。
类的确定和划分并没有统一的标准和固定的方法,基本上依赖设计人员的经验、技巧以及对实际问题的把握。
但有一个基本原则:
寻求一个大系统中事物的共性,将具有共性的系统成分确定为一个类。
确定某事物是一个类的步骤包括:
第一步,要判断该事物是否有一个以上的实例,如果有,则它是一个类;
第二步,要判断类的实例中有没有绝对的不同点,如果没有,则它是一个类。
另外,还要知道什么事物不能被划分为类。
不能把一组函数组合在一起构成类,也就是说,不能把一个面向过程的模块直接变成类。
类不是函数的集合!
(3)、消息消息是对象之间相互请求或相互协作的途径,是要求某个对象执行其中某个功能操作的规格说明。
同一对象可接收不同形式的多个消息,产生不同的响应;
相同形式的消息可以送给不同的对象,所作出的响应可以是截然不同的;
消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会,对消息的响应并不是必须的。
(4)、面向对象技术面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。
面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。
2、面向对象技术的基本特征
(1)、抽象性把众多的事物进行归纳、分类是人们在认识客观世界时经常采用的思维方法,“物以类聚,人以群分”就是分类的意思,分类所依据的原则是抽象。
抽象(Abstract)就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。
从而找出事物的共性,并把具有共性的事物划为一类,得到一个抽象的概念。
例如,在设计一个学生成绩管理系统的过程中,考察学生张华这个对象时,就只关心他的班级、学号、成绩等,而忽略他的身高、体重等信息。
因此,抽象性是对事物的抽象概括描述,实现了客观世界向计算机世界的转化。
将客观事物抽象成对象及类是比较难的过程,也是面向对象方法的第一步。
(2)、封装性封装是指将一个数据和与这个数据有关的操作集合在一起,形成一个有机的实体¬
——对象。
用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象即可。
封装有两个含义:
一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位。
对象的属性值(除了公有的属性值)只能由这个对象的行为来读取和修改;
二是尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接口实现。
封装机制将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需要用设计者提供的外部接口让对象去做。
封装的结果实际上隐蔽了复杂性,并提供了代码重用性,从而降低了软件开发的难度。
(3)、多态性面向对象设计借鉴了客观世界的多态性,体现在不同的对象收到相同的消息时产生多种不同的行为方式。
例如,在一般类“几何图形”中定义了一个行为“绘图”,但并不确定执行时到底画一个什么图形。
特殊类“椭圆”和“多边形”都继承了几何图形类的绘图行为,但其功能却不同,一个是要画出一个椭圆,另一个是要画出一个多边形。
这样一个绘图的消息发出后,椭圆、多边形等类的对象接收到这个消息后各自执行不同的绘图函数。
具体来说,多态性(Polymorphism)是指类中同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数。
(4)、继承性继承所表达的是两类或更多类对象之间的相交关系,它使得某类对象可以继承另外一类对象的特征和能力。
继承意味着“自动地拥有”,即特殊类中不必重新定义已在一般类中定义过的属性和行为,而它却自动地、隐含地拥有其一般类的属性与行为。
继承允许和鼓励类的重用,提供了一种明确表述共性的方法。
一个特殊类既有自己新定义的属性和行为,又有继承下来的属性和行为。
尽管继承下来的属性和行为是隐式的,但无论在概念上还是在实际效果上,都是这个类的属性和行为。
当这个特殊类又被它更下层的特殊类继承时,它继承来的和自己定义的属性和行为又被下一层的特殊类继承下去。
因此,继承是传递的,体现了大自然中特殊与一般的关系。
3、面向对象与面向过程的区别
在面向对象程序设计(ObjectOrientedProgramming,OOP)方法出现之前,程序员用面向过程的方法开发程序。
面向过程的方法把密切相关、相互依赖的数据和对数据的操作相互分离,这种实质上的依赖与形式上的分离使得大型程序不但难于编写,而且难于调试和修改。
在多人合作中,程序员之间很难读懂对方的代码,更谈不上代码的重用。
由于现代应用程序规模越来越大,对代码的可重用性与易维护性的要求也相应提高。
面向对象技术便应运而生了。
面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。
它以数据为中心而不是以功能为中心来描述系统,数据相对于功能而言具有更强的稳定性。
它将数据和对数据的操作封装在一起,作为一个整体来处理,采用数据抽象和信息隐蔽技术,将这个整体抽象成一种新的数据类型──类,并且考虑不同类之间的联系和类的重用性。
类的集成度越高,就越适合大型应用程序的开发。
另一方面,面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际。
事件驱动程序执行围绕消息的产生与处理,靠消息循环机制来实现。
更重要的是,可以利用不断扩充的框架产品MFC(MicrosoftFoundationClasses),在实际编程时可以采用搭积木的方式来组织程序,站在“巨人”肩上实现自己的愿望。
面向对象的程序设计方法使得程序结构清晰、简单,提高了代码的重用性,有效地减少了程序的维护量,提高了软件的开发效率。
例如,用面向对象技术来解决学生管理方面的问题。
重点应该放在学生上,要了解在管理工作中,学生的主要属性,要对学生做些什么操作等等,并且把它们作为一个整体来对待,形成一个类,称为学生类。
作为其实例,可以建立许多具体的学生,而每一个具体的学生就是学生类的一个对象。
学生类中的数据和操作可以提供给相应的应用程序共享,还可以在学生类的基础上派生出大学生类、中学生类或小学生类等,实现代码的高度重用。
在结构上,面向对象程序与面向过程程序有很大不同,面向对象程序由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律,程序中的一切操作都是通过向对象发送消息来实现的,对象接到消息后,启动消息处理函数完成相应的操作。
二、面向对象发展过程及现状
1、面向对象技术的需求
随着计算机技术的日益发展,新的应用领域需要面向对象技术的支持,为面向技术的应用开辟新的天地,并在应用中提出了一些传统的面向对象技术所不能支持的新的需求。
(1)、能表示客观中各种复杂对象
(2)、能依据用户所需的数据类型扩大其类型集
(3)、结构与行为要相互关联
(4)、要求具有灵活的知识表达能力
2、面向对象技术的发展趋势
(1)、面向对象分析与设计的方法将被越来越多的人接受
迄今为止,“面向对象”本身还没有一个统一的让所有人都能接受的概念。
然而,面向对象中的一些最基本的概念已经和正在被人们所接受,比如类、对象、继承、封装等;
一些最有效的表示方法也正在被人们所共同采用,比如图形表示、基本输入要求和输出结果等。
并且这种趋势在越是较晚出现的方法和工具中越是明显,面向对象的方法学研究在计算机领域正在朝着普及化的方向发展。
(2)、新的分析与设计的方法和工具将不断涌现
随着SDL92和ObjectTime的问世,新的分析方法和工具将朝着动态化、标准化、可执行性、可测试性的方向发展。
同时,新的面向对象的设计方法也以越来越成熟的面孔出现。
新方法和工具的相继出现,将会大大缩短软件开发周期,节省软件开发成本。
(3)、集成面向对象分析和设计将成为趋势
由于设计过程本身也涵盖有部分的分析,分析过程中也有设计的成分。
基于这种关系,集成了分析和设计两方面的方法和工具的研究也将成为面向对象分析与设计领域的一个趋势。
它的主要特点就是有机地集成比较著名的分析方法和设计方法来共同完成从分析到设计甚至到实现的全部任务。
集成分析与设计方法最重要的环节是要能够把分析方法的输出结果变换成为一个设计方法的工具的输人,即需要一个“翻译程序”。
然而,它与普通的翻译程序是不同的,比普通的“翻译程序”更智能化。
集成分析和设计方法虽然还处于尝试阶段,但这个方向对于软件开发界是很有吸引力的。
三、面向对象技术的设计语言
一般认为,较典型的面向对象语言有一下几种:
1、混合型面向对象程序设计语言C++C++是AT&TBell实验室的BjarneStroustrup博士于20世纪80年代早期提出的,是迄今为止商业上最受欢迎的混合型面向对象程序设计语言。
C++兼容了C语言并弥补了其缺陷,支持面向过程程序设计方法;
增加了面向对象的能力,支持面向对象程序设计方法。
许多软件公司都为C++设计编译系统。
如AT&
T、Apple、Sun、Borland和Microsoft等,国内最为流行的是BorlandC++和VisualC++。
同时,许多大学和公司也在为C++编写各种不同的类库,其中Borland公司的OWL(ObjectWindowsLibray)和Microsoft公司的MFC(MicrosoftFoundationClass)是优秀的代表作,尤其是MFC在国内外都得到广泛应用。
C++被数以十万计的程序员应用到几乎每个领域中。
早期的应用趋向于系统程序设计,有几个主要操作系统都是用C++写出的:
Compbell、Rozier、Hamilton、Berg、Parrington,更多系统用C++做了其中的关键部分。
C++还用于写设备驱动程序,或者其他需要在实时约束下直接操作硬件的软件。
许多年来,美国的长途电话系统的核心控制依赖于C++。
图形学和用户界面是使用C++最深入的领域,如AppleMacintosh或Windows的基本用户界面都是C++程序。
此外,一些最流行的支持UNIX中X的库也是用C++写的。
C++能够有效地用到各种各样的应用系统中,并且广泛应用于教学和研究。
2、纯面向对象程序设计语言JavaJava是由SUN公司的J.Gosling、B.Joe等人在20世纪90年代初开发出的一种纯面向对象程序设计语言。
Java是标准的又是大众化的面向对象程序设计语言。
首先,Java作为一种解释型程序设计语言,具有简单性、面向对象性、平台无关性、可移植性、安全性、动态性和健壮性,不依赖于机器结构,并且提供了并发的机制,具有很高的性能;
其次,它最大限度地利用了网络,Java的应用程序(Applet)可在网络上传输,可以说是网络世界的通用语言;
另外,Java还提供了丰富类库,使程序设计者可以方便地建立自己的系统。
因此,Java具有强大的图形、图像、动画、音频、视频、多线程及网络交互能力,使其在设计交互式、多媒体网页和网络应用程序方面大显身手。
Java程序有两种类型:
一种是可在Web网页上运行的Applet,称为小应用程序。
考虑到网络环境、连接速度等原因,Applet一般都比较小,适合客户端下载,很多网站利用Java开发出了商业网络平台,实现交互运行,还有大量的Applet嵌入到网页,使页面变得更加活泼生动,但Applet不能单独运行,必须嵌入在HTML文件中,由Web浏览器执行;
另一种是Application,即应用程序,可完成任何计算任务,运行时不必借助于Web浏览器,可单独执行。
Java从C++发展而来。
Java摒弃了C++中许多不合理的内容,真正做到了面向对象。
在Java中,一切都是对象。
Java通过new运算符创建对象,通过new运算符返回的对象引用来操纵对象,而不是直接操作指针,这样可以防止程序员的误操作而导致的错误。
Java通过内存垃圾收集机制,自动管理内存,不需要程序员显式地释放所分配的内存,从而大大减轻了程序员的负担。
Java与C++都有类的概念,其最大的差异是C++支持多重继承,而Java只支持单重继承。
Java抛弃多重继承是为了使类之间的继承关系更加清晰,不会造成任何混乱。
3、可视化程序设计语言1991年Microsoft公司推出了基于BASIC语言的可视化面向对象开发工具VisualBasic,标志着软件设计和开发技术一个新时代的开始。
在其带动下,相继产生了VisualC++、VisualJ++、VisualFoxPro以及BorlandDelphi、PowerBuilder等众多可视化开发工具,这些工具的共同特点是,提供了Windows界面下一些常用界面元素样本。
所谓可视化技术一般是指软件开发阶段的可视化和对计算机图形技术和方法的应用。
这里是指前者,即可视化程序设计,是应用可视化开发工具开发图形用户界面(GUI)应用程序的方法。
软件开发人员不需编写大量代码去描述界面元素的外观和位置,而只需选定特定界面元素的样本,并用鼠标拖放到屏幕的窗体上,然后再通过不同的方法,编写一些容易理解的事件处理程序,就可完成应用软件的设计。
在VisualBasic中,既继承了BASIC语言所具有的语法简单、容易学习、容易使用、数据处理能力强的特点,又引入了面向对象、事件驱动的编程机制和可视化程序设计方法,大大降低了开发Windows应用程序的难度,有效地提高了应用程序开发的效率。
同时,VisualBasic还兼顾了高级编程技术,不仅可以编写功能强大的数据库应用程序、多媒体处理程序,还可以用来建立客户与服务器应用程序、通过Internet访问遍及全球的分布式应用程序、创建ActiveX控件以及与其他应用程序紧密集成。
它可以实现Windows的绝大部分高级功能,如多任务、多文档界面(MDI)、对象的链接与嵌入(OLE)、动态数据交换、动态链接库(DLL)子程序的调用等,尤其是动态链接技术,使得VisualBasic可以调用Windows系统的各种资源。
4、Smalltalk语言Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境(IDE)。
由AlanKay,DanIngalls,TedKaehler,AdeleGoldberg等于70年代初在XeroxPARC开发。
Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:
Objective-C,Actor,Java和Ruby等。
90年代的许多软件开发思想得利于Smalltalk,例如DesignPatterns,ExtremeProgramming(XP)和Refactoring等。
5、Eiffel语言Eiffel语言是继Smalltalk-80之后的另一个“纯”OOPL。
这种语言是由OOP领域中著名的专家BertrandMeyer等人20世纪80年代后期在ISE公司(InteractiveSoftwareEngineeringInc.)开发的,它的主要特点是全面的静态类型化、有大量的开发工具、支持多继承。
四、面向对象技术的开发方法
1、OMT/RumbaughOMT(ObjectModelingTechnique)方法最早是由Loomis、Shan和Rumbaugh在1987年提出的,曾扩展应用于关系数据库设计。
JimRumbaugh在1991年正式把OMT应用于面向对象的分析和设计。
OMT覆盖了分析、设计和实现三个阶段,它包括一组相互关联的概念:
类(class)、对象(object)、一般化(generalization)、继承(inheritance)、链(link)、链属性(linkattribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scene)、属性(attribute)、子系统(subsystem)、模块(module)等。
OMT方法包含分析、系统设计、对象设计和实现4个步骤,它定义了3种模型,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充。
这3种模型是:
对象模型,用类和关系来刻画系统的静态结构;
动态模型,用事件和对象状态来刻画系统的动态特性;
功能模型,按照对象的操作来描述如何从输入给出输出结果。
分析的目的是建立可理解的现实世界模型。
系统设计确定高层次的开发策略。
对象设计的目的是确定对象的细节,包括定义对象的界面、算法和操作。
实现对象则在良好的面向对象编程风格的编码原则指导下进行。
2、OOD/BoochOOD(ObjectOrientedDesign)方法是GradyBooch从1983年开始研究,1991年后走向成熟的一种方法。
OOD主要包括下述概念:
类(class)、对象(object)、使用(uses)、实例化(instantiates)、继承(inherits)、元类(metaclass)、类范畴(classcategory)、消息(message)、域(field)、操作(operation)、机制(mechanism)、模块(module)、子系统(subsystem)、过程(process)等。
其中,使用及实例化是类间的静态关系,而动态对象之间仅有消息传递的连接。
元类是类的类。
类范畴是一组类,它们在一定抽象意义上是类同的。
物理的一组类用模块来表达。
机制是完成一个需求任务的一组类构成的结构。
Booch方法在面向对象的设计中主要强调多次重复和开发者的创造性。
方法本身是一组启发性的过程式建议。
OOD的一般过程:
在一定抽象层次上标识类与对象;
标识类与对象的语义;
标识类与对象之间的关系(如继承、实例化、使用等);
实现类与对象。
3、RDD/Wirfs—BrockRDD(Responsibility-DrivenDesign)方法是Wirfs-Brock在1990年提出的。
这是一个按照类、责任以及合作关系对应用进行建模的方法。
首先定义系统的类与对象,然后确定系统的责任并划分给类,最后确定对象类之间的合作来完成类的责任。
这些设计将进一步按照类层次、子系统和协议来完善。
RDD方法主要包含以下概念:
类(class)、继承(inheritance)、责任(responsibility)、合作(collaboration)、合同(contract)、子系统(subsystem)。
对每个类都有不同的责任或角色以及动作。
合作是为完成责任而需要与之通信的对象集合。
责任进一步精化并被分组为合同。
合同又进一步按操作精化为协议。
子系统是为简化设计而引入的,是一组类和低级子系统,也包含由子系统中的类及子系统支持的合同。
RDD分为探索阶段和精化阶段:
探索阶段确定类、每个类的责任以及类间的合作;
精化阶段精化类继承层次、确定子系统、确定协议。
RDD按照类层次图、合作图、类规范、子系统规范、合同规范等设计规范来完成实现。
4、OOAD/Coad–YourdonOOAD(Object-OrientedAnalysisandDesign)方法是由PeterCoad和EdwardYourdon在1991年提出的。
这是一种逐步进阶的面向对象建模方法。
在OOA中,分析模型用来描述系统的功能,主要包括以下概念:
类(class)、对象(object)、属性(attribute)、服务(service)、消息(message)、主题(subject)、一般/特殊结构(Gen-Spec-Structure)、全