面向对象的方法及UML图的绘制.docx
- 文档编号:5087395
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:15
- 大小:443.54KB
面向对象的方法及UML图的绘制.docx
《面向对象的方法及UML图的绘制.docx》由会员分享,可在线阅读,更多相关《面向对象的方法及UML图的绘制.docx(15页珍藏版)》请在冰豆网上搜索。
面向对象的方法及UML图的绘制
面向对象的方法及UML图的绘制
一、面向对象方法的产生与发展
1.面向对象方法的起源
面向对象的方法起源于面向对象的编程语言(简称为OOPL)。
50年代后期,在用FORTRAN语言编写大型程序时,常出现变量名在程序不同部分发生冲突的问题。
鉴于此,ALGOL语言的设计者在ALGOL60中采用了以"Begin……End"为标识的程序块,使块内变量名是局部的,以避免它们与程序中块外的同名变量相冲突。
这是编程语言中首次提供封装(保护)的尝试。
此后程序块结构广泛用于高级语言如Pascal、Ada、C之中。
60年代中后期,Simula语言在ALGOL基础上研制开发,它将ALGOL的块结构概念向前发展一步,提出了对象的概念,并使用了类,也支持类继承。
70年代,Smalltalk语言诞生,它取Simula的类为核心概念,它的很多内容借鉴于Lisp语言。
由Xerox公司经过对Smautalk72、76持续不断的研究和改进之后,于1980年推出商品化的,它在系统设计中强调对象概念的统一,引入对象、对象类、方法、实例等概念和术语,采用动态联编和单继承机制。
2.面向对象方法的进一步发展
从80年代起,人们基于以往巳提出的有关信息隐蔽和抽象数据类型等概念,以及由Modula2、Ada和Smalltalk和等语言所奠定的基础,再加上客观需求的推动,进行了大量的理论研究和实践探索,不同类型的面向对象语言(如:
Object-c、Eiffel、c++、Java、Object-Pascal等)逐步地发展和建立起较完整的和雨后春笋般研制开发出来,OO方法的概念理论体系和实用的软件系统。
面向对象源出于Simula,真正的OOP由Smalltalk奠基。
Smalltalk现在被认为是最纯的OOPL。
正是通过Smalltalk80的研制与推广应用,使人们注意到OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性等独特之处,这些优异特性为研制大型软件、提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径。
3.面向对象方法的应用普及
80年代以来,人们将面向对象的基本概念和运行机制运用到其它领域,获得了一系列相应领域的面向对象的技术。
面向对象方法已被广泛应用于程序设计语言、形式定义、设计方法学、操作系统、分布式系统、人工智能、实时系统、数据库、人机接口、计算机体系结构以及并发工程、综合集成工程等,在许多领域的应用都得到了很大的发展。
1986年在美国举行了首届"面向对象编程、系统、语言和应用(OOPSLA'86)"国际会议,使面向对象受到世人瞩目,其后每年都举行一次,这进一步标志OO方法的研究已普及到全世界。
二、面向对象方法的基本概念及组成
1.基本概念
面向对象
Coad和Yourdon给出的定义:
面向对象=对象+类+继承+通信
如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统是面向对象的。
一个面向对象的程序的每一成份应是对象,计算是通过新对象的建立和对象之间的通信来执行的。
对象
对象是要研究的任何事物。
从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。
对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。
从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。
在对内的操作通常称为方法。
一个对象请求另一对象为其服务的方式是通过发送消息。
类
类是对象的模板。
即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。
类是在对象之上的抽象,对象则是类的具体化,是类的实例。
类可有其子类,也可有其它类,形成类层次结构。
消息
消息是对象之间进行通信的一种规格说明。
一般它由三部分组成:
接收消息的对象、消息名及实际变
多态
根据为请求提供服务的对象不同可以得到不同的行为,这种现象称为多态。
在运行时对类进行实例化,并调用与实例化对象相应的方法,称为动态绑定、后期绑定或运行时绑定。
相应地,如果方法的调用是在编译时确定的,则称为是静态绑定、前期绑定或编译时绑定。
通过在子类中覆盖父类的方法实现多态。
继承
继承是使用既存类做为基础建立新类的技术。
既存类称为基类、父类或超类,新类称为派生类或子类。
子类除了拥有父类的属性和方法,还可以增加新的属性和方法。
通过覆盖父类的方法,可以对继承来的方法进行修改,也可以禁用继承来的方法。
方法
客观世界是由各种各样的对象组成的,每种对象都有各自的内部状态和运动规律,不同对象之间的相互作用和联系就构成了各种不同的系统。
在设计和实现一个客观系统时,在满足需求的条件下,把系统设计成一些不可变的(相对固定)部分组成的最小集合(最好的设计)。
这些不可变的部分就是所谓的对象。
2.组成
面向对象的分析OOA
Object-OrientedAnalysis(面向对象分析方法)是确定需求或者业务的角度,按照面向对象的思想来分析业务。
例如:
OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。
OOA与结构化分析有较大的区别。
OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
面向对象的设计OOD
面向对象设计(Object-OrientedDesign,OOD)方法是OO方法中一个中间过渡环节。
其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。
面向对象的程序OOP
面向对象编程(ObjectOrientedProgramming,OOP,面向对象程序设计)是一种计算机编程架构。
OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
三、面向对象方法的基本原理与思想
从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在构造中尽可能运用人类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点把他们抽象的表示为系统中的对象,作为系统的基本构成单位,这可以使系统直接的映射问题域,保持问题域中的事物与其相关系的本来面貌。
面向对象的思想就是把他们抽象。
对于面向对象方法所提倡的原则,各种OOA方法遵从的程度有所不同,例如有的方法不体现数据与操作的封装,有的方法不支持操作的继承。
四、面向对象方法的基本步骤
1.分析确定在问题空间和解空间出现的全部对象及其属性;
2.确定应施加于每个对象的操作,即对象固有的处理能力;
3.分析对象间的联系,确定对象彼此间传递的消息;
4.设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;
5.分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;
6.确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;
7.设计每个类关于对象外部特性的描述;
8.设计每个类的内部实现(数据结构和方法);
9.创建所需的对象(类的实例),实现对象间应有的联系(发消息)。
五、面向对象方法的特征及优缺点
1.主要特征
封装性
封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。
封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。
封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性
继承性是子类自动共享父类之间数据和方法的机制。
它由类的派生功能体现。
一个类直接继职其它类的全部描述,同时可修改和扩充。
继职具有传达室递性。
继职分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。
类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。
继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
多态性
对象根据所接收的消息而做出动作。
同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。
利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。
例如:
Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。
多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。
在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
综上可知,在OO方法中,对象和传递消息分别表现事物及事物间相互联系的概念。
类和继承是是适应人们一般思维方式的描述范式。
方法是允许作用于该类对象上的各种操作。
这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。
通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。
2.优点
使人们的编程与实际的世界更加接近,所有的对象被赋予属性和方法,结果编程就更加富有人性化。
1)面向对象的方法更接近于人类的自然思维,更容易被理解和运用。
2)系统分析、系统设计及实现之间采用同样的角度看待问题甚至同样的表示方法来描述间题,它们之间的连接是自然的无缝连接。
3)面向对象的方法将对象的属性及服务视为一个整体。
这更符合客观世界的规律,从而使其理解与实现起来更加容易,进一步减少维护的费用。
4)继承的方法一方面符合客观世界的规律,一方面加强代码重用的可能性,提高了软件开发效率。
5)信息隐蔽原理使系统在变化的环境中有良好的适应性,从而使整个系统更加稳定和易于维护。
3.缺点
就C++而言,由于面向更高的逻辑抽象层,使得C++在实现的时候,不得不做出性能上面的牺牲,有时候甚至是致命的。
此外,面向对象的方法不易用于大型系统的开发。
六、UML图的绘制方法
UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。
它溶入了软件工程领域的新思想、新方法和新技术。
它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
在系统分析阶段,我们一般用UML画很多图,包括用例图、状态图、类图、活动图、序列图、协作图、构建图、配置图等等,要画哪些图根据具体情况而定。
UML的作用就是用很多图从静态和动态方面来全面描述我们要开发的系统。
1.UML的特点
(1)统一标准
UML不仅统一了Booch、OMT和OOSE等方法中的基本概念,还吸取了面向对象技术领域中其他流派的长处,其中也包括非OO方法的影响。
已经成为OMG的标准。
(2)面向对象
UML支持面向对象技术的主要概念,它提供了一批基本的表示模型元素的图形和方法,能简洁明了地表达面向对象的各种概念和模型元素。
(3)可视化,表达能力强大
UML是一种图形化语言,用UML的模型图形能清晰地表示系统的逻辑模型或实现模型。
UML还提供了语言的扩展机制,用户可以根据需要增加定义自己的构造型、标记值和约束等。
(4)独立于过程
UML是系统建模的语言,不依赖特定的开发过程。
(5)容易掌握使用
UML概念明确,建模表示法简洁明了,图形结构清晰,容易掌握使用。
(6)与编程语言的关系
支持UML的一些CASE工具(如Rose)可以根据UML所建立的系统模型自动产生Java、C++等代码框架。
2.UML基本模型及基本实物
UML符号为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。
这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。
UML模型由事物、关系和图组成。
(图1、UML模型组成)
(图2、UML图的基本事物)
3.五类图
标准建模语言UML可以由下列5类图来定义。
1)用例图:
从用户角度描述系统功能,并指出各功能的操作者。
2)静态图:
包括类图和对象图。
类图描述系统中类的静态结构,不仅定义系统中的类,表示类之间的联系,如关联、依赖、聚合等,也包括类的属性和操作,类图描述的是一种静态关系,在系统的整个生命周期都是有效的。
对象图是类图的实例,几乎使用与类图完全相同的标识。
一个对象图是类图的一个实例。
由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
3)行为图:
描述系统的动态模型和组成对象间的交互关系,包括状态图和活动图。
状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件,状态图是对类图的补充,活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并进行活动。
4)交互图:
描述对象间的交互关系,包括时序图和协作图。
时序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;协作图描述对象间的协作关系,协作图跟时序图相似,显示对象间的动态合作关系。
除显示信息交换外,协作图还显示对象以及它们之间的关系。
如果强调时间和顺序,则使用时序图;如果强调上下级关系,则选择协作图。
5)实现图:
包括组件图和部署图。
组件图描述代码部件的物理结构及各部件之间的依赖关系,组件图有助于分析和理解部件之间的相互影响程度;部署图定义系统中软硬件的物理体系结构。
4.九种视图
采用UML来设计系统时,第一步是描述需求;第二步根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。
其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图、对象图、组件图和部署图等5种图形,是标准建模语言UML的静态建模机制。
其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。
它包括状态图、活动图、时序图和协作图等4种图形,是标准建模语言UML的动态建模机制。
UML中的各个图的功用做一个简单介绍:
1)用例图
描述角色以及角色与用例之间的连接关系。
说明的是谁要使用系统,以及他们使用该系统可以做些什么。
一个用例图包含了多个模型元素,如系统、参与者和用例,并且显示了这些元素之间的各种关系,如泛化、关联和依赖。
2)类图
类图是描述系统中的类,以及各个类之间的关系的静态视图。
能够让我们在正确编写代码以前对系统有一个全面的认识。
类图是一种模型类型,确切的说,是一种静态模型类型。
3)对象图
与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类。
它描述的不是类之间的关系,而是对象之间的关系。
4)活动图
描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并行活动。
能够演示出系统中哪些地方存在功能,以及这些功能和系统中其他组件的功能如何共同满足前面使用用例图建模的商务需求。
5)状态图
描述类的对象所有可能的状态,以及事件发生时状态的转移条件。
可以捕获对象、子系统和系统的生命周期。
他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。
一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。
状态图是对类图的补充。
6)序列图(顺序图,时序图)
序列图是用来显示你的参与者如何以一系列顺序的步骤与系统的对象交互的模型。
顺序图可以用来展示对象之间是如何进行交互的。
顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的。
7)协作图
和序列图相似,显示对象间的动态合作关系。
可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。
如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。
8)构件图(组件图)
描述代码构件的物理结构以及各种构建之间的依赖关系。
用来建模软件的组件及其相互之间的关系,这些图由构件标记符和构件之间的关系构成。
在组件图中,构件时软件单个组成部分,它可以是一个文件,产品、可执行文件和脚本等。
9)部署图(配置图)
是用来建模系统的物理部署。
例如计算机和设备,以及它们之间是如何连接的。
部署图的使用者是开发人员、系统集成人员和测试人员。
5.几种图的关系
1)这九种模型图各有侧重,
a.用例图侧重描述用户需求,
b.类图侧重描述系统具体实现;
2)描述的方面都不相同,
a.类图描述的是系统的结构,
b.序列图描述的是系统的行为;
3)抽象的层次也不同,
a.构件图描述系统的模块结构,抽象层次较高,
b.类图是描述具体模块的结构,抽象层次一般,
c.对象图描述了具体的模块实现,抽象层次较低。
在有的文献书籍中,将这九种模型图分为三大类:
结构分类、动态行为和模型管理:
a.结构分类包括用例图、类图、对象图、构件图和部署图,
b.动态行为包括状态图、活动图、顺序图和协作图,
c.模型管理则包含类图。
6.绘图说明
UML(统一建模语言):
是面向对象的可视化建模的一种语言。
是数据库设计过程中,在E-R图(实体-联系图)的设计后的进一步建模。
UML中有3种构造块:
事物、关系和图,事物是对模型中最具有代表性的成分的抽象;关系是把事物结合在一起;图聚集了相关的的事物。
具体关系图标如下:
(图3、UML关系图)
说明:
构件事物是名词,是模型的静态部分。
行为事物是动态部分,表示行为。
分组事物是组织部分。
注释事物是解释部分。
依赖:
一个事物变化会引起另一个事物变化。
聚集:
特殊的关联,描述整体与部分的组合关系。
泛化:
是一种特殊与一般的关系,如子元素(特殊)与父元素(一般),箭头指向父元素。
实现:
类元之间的关系,其中一个类元指定了由另一个类元保证执行的契约。
一般用在接口和实现他们的类之间或用例和实现它们的协作之间。
1)类图:
描述一组对象、接口、协作等事物之间的关系。
如下图(摘自网络):
注:
#表示protected,+表示Public,-表示private
2)对象图:
描述一组对象之间的关系,是具有具体属性值和行为的一个具体事物,其是类图中所建事物实例的静态快照,其与类图的主要区别是一个是抽象的,而对象图是具体的。
如下图(摘自网络):
3)用例图:
描述一组用例、参与者以及它们之间的关系,其展示的是该系统在它的外面环境中所提供的外部可见服务。
如下图(摘自网络):
4)交互图:
包括序列图(顺序图)和协作图,两者对应,顺序图是强调消息时间顺序,有对象生命线和控制焦点。
协作图是强调接收和发送消息的对象的结构组织,有路径和顺序号。
如下图(摘自网络):
序列图:
5)协作图:
6)状态图:
展示了一个状态机,由状态、转换、事件和活动组成。
强调事件行为的顺序。
如下图(摘自网络):
7)活动图:
是一种特殊的状态图,实现一个活动到另一个活动的流程。
如下图(摘自网络):
8)构件图和部署图:
构件图展示一组构件之间的组织和依赖关系,并以全局的模型展示出来。
部署图是构件的配置及描述系统如何在硬件上部署。
如下图(摘自网络):
七、面向对象方法的个人理解
就分析设计层面来说,面向对象技术提供了更高级的抽象能力以及更多的方法和工具,如设计模式;就实现维护层面来说,面向对象技术使代码重用更容易,且使代码具有可扩展性,便于软件的维护和升级更新。
从大背景来看,近代的软件产业发展非常的迅速,但是却出现了让软件开发人员越来越不能忽视的危机,比如,软件的开发成本,尤其是大型软件开发成本、软件维护升级等费用非常的昂贵,针对出现的危机,人们提出了能够提高代码复用等的面向对象技术,面向对象技术的提出可以使客户于软件开发人员、软件开发人员之间的交流更加的顺畅,原因在于:
首先,面向对象技术通常对现实世界的对象进行抽象,这种抽象使得即是非专业人员也能明软件要做什么,使得客户于专业的软件开发人员交流起来更加顺畅,节约开发成本;其次,面向对象技术通常会采用封装,继承等技术,这些技术会使得不同的程序模块之间的关联度减小,可以使得开发人员专注于程序的研发,而不是把大量的精力都放到各个模块的协调上。
当然,并不是说我们利用了面向对象的语言,比如C++、JAVA,面向对象技术的好处就会出现,实际上在小的程序设计上,可能根本不需要这么复杂。
真正的大型软件开发用到时需要采用相应的技术方法,不断的优化,比如瀑布模型法,快速原型法。
瀑布模型法主要是把软件分为若干阶段,在每一个阶段,都充分的和客户交流;快速模型法主要是首先提出一个总的模型提交给客户,然后在不断的修改,通常这种方法只适用于较小的工程。
无论采用那种方法我们可以遵从一个原则:
就是把大的软件项目不断的细化,最后细化到一个个小函数,然后在根据之间的关系封装、继承等。
于是,库中各类对象按继承关系可形成一棵倒置的树,分枝不断增加,到一定时候一个新程序要用到的对象类库中全有,只要“摘取”出来就可以直接使用,几乎不用编程。
所以说,继承支持高度的软件重用。
八、UML图绘制心得
对于开发团队的层面来说:
有利于队员间在各个开发环节间确立沟通的标准,便于系统文档的制定和项目的管理。
因为UML的简单、直观和标准性,在一个团队中用UML来交流比用文字说明的文档要好得多。
对与各个开发项目来说:
可以通过UML共享开发经验和资源,当然uml只是面象对象分析、设计思想的体现,和具体的实现平台无关,用UML建模和设计的系统可以用JAVA或C#来实现。
这也说明了UML技术具有跨越语言的通用性。
最重要的是,UML可以做为系统分析设计过程使用的表示和体现工具。
而且对于公司的运营层面:
UML已经是世界标准,使用UML方便公司的国际化。
图形是最简洁的表述思想方式,在用编程语言去开发或实现某个系统和产品时,首先需要了解和回答用它要做什么?
你可以用文档也可以用图形来说明,但UML表示法是最标准和通用的,UML可让其它与你配合的人更清楚你的想法。
让想法更加生动具体,容易理解,更好地表达想要传递的意思。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 方法 UML 绘制