面向对象系统的分析与设计.docx
- 文档编号:9771784
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:24
- 大小:26KB
面向对象系统的分析与设计.docx
《面向对象系统的分析与设计.docx》由会员分享,可在线阅读,更多相关《面向对象系统的分析与设计.docx(24页珍藏版)》请在冰豆网上搜索。
面向对象系统的分析与设计
《面向对象系统的分析与设计》学习报告
面向对象系统的分析与设计课程是本专业的一门重要的专业课。
通过本课程的学习,使我在已有的计算机软硬件基础知识、程序设
计知识、数据库和网络通信知识的基础上系统掌握了面向对象系统
的分析与设计方法和技术,并初步具备了针对特定环境下的应用问
题进行信息系统开发(包括系统分析、设计与实现)的能力。
现将
学习情况作以下汇报。
一、面向对象概述
在 20 世纪 60 年代以前,软件开发者构造的软件系统大多都是
较小的,且相对简单。
编程语言及编程环境也相对简单,随着软件
复杂性的增长,为了更好地维护代码,软件开发也需要方法来进行
约束。
传统的方法中,结构化方法和基于建模方法是典型的软件开
发方法。
结构化方法是结构化分析、结构化设计和结构化编程的总
称。
结构化方法的思想萌发于 20 世纪 60 年代,是在 70 年代由 Tom
DeMacro 和 EdYourdon 等人被系统地进出来。
其目的在于,提供
一个有序的机制,通过抽象来理解待开发的系统,试图产生结构良
好的软件系统。
但对于较复杂的系统而言,容易导致模块的低内聚
和模块间的高耦合,从面使得系统缺乏灵活性和可维护性。
基于建
模方法在 20 世纪 70 年代末提出,即 Peter Chen 的实体——关系法
与 Ed Codd 的关系数据库理论相结合提出的一种新的软件开发方法。
1
其强调对信息实体建模,而不是对象建模。
结构化方法和基于建模
方法都没有较强地描述系统的动态行为的能力。
随着计算机技术的
飞速发展,计算机管理系统应用的普及,企业信息化势在必行。
传
统开发方法结构化开发的软件存在很多问题,其有稳定性、可修改
性和可重用性都比较差,生产效率低等缺陷,这是因为传统的软件
开发是面向过程的。
然而,用户需求的变化大部分是针对功能的,
采用面向对象方法开发可以满足用户的需求,因为面向对象有以下
优点:
能够比较自然地反映现实事物,可重用性、可维护性和可扩
展性比较强。
什么是面向对象呢?
“面向对象”本身没有任何意义。
“对象”
大概是英语中最普通的一个单词。
它在字典中的定义是这样的。
对
象:
能感觉到或能够被感觉到的东西。
换句话说,对象可以是任何
东西!
“面向”也没有任何特别的含义,它的定义是“指向”。
在这种
定义下,“面向对象”被理解为形容词。
因此,面向对象可以定义成
这样,面向对象:
指向你可以想到的任何东西。
毫无疑问,软件工业无法为“面向对象”下一个统一的定义。
这种模糊性使得任何一个软件零售商都声称他们的商品是“面向对
象”的。
1 面向对象的基本概念
尽管权威人士对面向对象的概念没有达成一致的意见,但从程
2
序设计方法的角度来看,面向对象是一种新的程序设计范型。
其基
本思想是使用对象、类、封装、继承、关联、聚合、消息、多态性
等基本概念来进行程序设计。
1.1 对象(Object)
对象是人们要进行研究的任何事物,它可以是有形的(比如一辆
汽车),也可以是无形的(比如一项计划)。
对象是构成世界的一个独
立单位,它具有自己的静态特征和动态特征。
对象是系统中用来描
述客观事物的一个实体,它是构成系统的一个基本单位。
一个对象
由一组属性和对这组属性进行操作的一组服务构成。
1.2 类(Class)
具有相同或相似性质的对象的抽象就是类。
因此,对象的抽象
是类,类的具体化就是对象,也可以说类的实例是对象。
类的确定
主要是确定该类的所有对象有哪些属性和哪些行为。
这些属性和行
为必须覆盖该类中的所有对象。
例如在一个学生类中,它的属性有
姓名、学号、性别、所在院系,它的行为有选课、注册等。
抽象是
指忽略事物的非本质特征,只注意那些与当前目标有拳本质特征,
从而找出事物的共性;而分类是把具有共同性质的事物划分为一类,
得出一个抽象的概念。
另外,每一个属性与行为都被封装后,只能
在类的内部起作用。
3
1.3 封装(Encapsulation)
为了实现信息的隐蔽,又提出了封装,就是把对象的属性和行
为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。
1.4 继承(Inheritance)
任何一个子类都具有其父类所有的属性、方法、事件。
这一特
性叫做类的继承。
如果父类的特性发生变化,其子类也相应改变。
面向对象的编
程技术强调了代码的重用性,而可重用性即是能过继承来实现的。
简化了人们对事物的认识和描述,也简化了系统的构造强度及其文
档,非常有益于软件复用。
1.5 关联
类之间的静态联系称为关联。
关联表示了类与类之间的关系,
在实现这种关系时,可以通过对象的属性表达出来。
例如“,学生”
与“课程”类之间存在着关联“选课”,用类“学生”的对象的属性
来记录该对象具体选课的课程对象(由“课程”类创建)。
1.6 聚合
是关联的一种,只是关联的语义没有聚合那么明显。
聚合是具
有整体一部分关系语义的关联。
4
1.7 消息(Message)
在面向对象方法中,把向对象发出的操作请求称为消息。
对象
之间通过消息进行通信,实现了对象之间的动态联系。
1.8 多态性
面向对象设计借鉴了客观世界的多态性,体现在不同的对象收
到相同的消息时产生多种不同的行为方式。
例如,在一般类“几何
图形”中定义了一个行为“绘图”,但并不确定执行时到底画一个什
么图形。
特殊类“椭圆”和“多边形”都继承了几何图形类的绘图
行为,但其功能却不同,一个是要画出一个椭圆,另一个是要画出
一个多边形。
这样一个绘图的消息发出后,椭圆、多边形等类的对
象接收到这个消息后各自执行不同的绘图函数。
面向对象方法是一种运用对象、类、封装、继承、关联、聚合、
消息、多态性等概念来构造系统的软件开发方法。
2 面向对象的特征
面向对象技术强调在软件开发过程中面向客观世界或问题域中
的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,
直观、自然地描述客观世界中的有关事物。
面向对象技术的基本特
征主要有对象唯一性、分类性、继承性和多态性。
5
2.1 对象唯一性
每个对象都有自身唯一的标识,通过这种标识,可找到相应的
对象。
在对象的整个生命期中,它的标识都不改变,不同的对象不
能有相同的标识。
2.2 分类性
分类性是指将具有一致的数据结构(属性)和行为(操作)的对象
抽象成类。
一个类就是这样一种抽象,它反映了与应用有关的重要
性质,而忽略其他一些无关内容。
任何类的划分都是主观的,但必
须与具体的应用有关。
2.3 继承性
继承性是子类自动共享父类数据结构和方法的机制,这是类之
间的一种关系。
在定义和实现一个类的时候,可以在一个已经存在
的类的基础之上来进行,把这个已经存在的类所定义的内容作为自
己的内容,并加入若干新的内容。
继承性是面向对象程序设计语言
不同于其它语言的最重要的特点,是其他语言所没有的。
采用继承
性,提供了类的规范的等级结构。
通过类的继承关系,使公共的特
性能够共享,提高了软件的重用性。
2.4 多态性(多形性)
多态性使指相同的操作或函数、过程可作用于多种类型的对象
6
上并获得不同的结果。
不同的对象,收到同一消息可以产生不同的
结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方
式去响应共同的消息。
多态性增强了软件的灵活性和重用性。
3 面向对象开发的工作过程
面向对象开发的过程一般包括:
系统调查和需求分析、分析问
题的性质和求解问题、整理问题、程序实现。
3.1 系统调查和需求分析
对系统将要面临的具体管理问题以及用户对系统开发的需求进
行调查研究,即先弄清要干什么的问题。
3.2 分析问题的性质和求解问题
面向对象系统分析(ObjectOrientedAnalysisOOA),在繁杂的问
题域中抽象地识别出对象以及其行为、结构、属性、方法等。
3.3 整理问题
面向对象系统设计(ObjectOrientedDesignOOD)即对分析的结果
作进一步地抽象、归类、整理,并最终以范式的形式将它们确定下
来。
7
3.4 程序实现
面向对象的程序设计(ObjectOrientedProgramming)
即用面向对象的程序设计语言将上一步整理的范式直接映射
(直接用程序语言来取代)为应用程序软件。
4 面向对象开发的常用方法
目前,面向对象开发方法的研究已日趋成熟,国际上已有不少
面向对象产品出现。
面向对象开发方法有 Coad 方法、Booch 方法、
OMT 方法和 UML(UnifiedModelingLanguage)语言等。
4.1Booch 方法
Booch 最先描述了面向对象的软件开发方法的基础问题,指出
面向对象开发是一种根本不同于传统的功能分解的设计方法。
面向
对象的软件分解更接近人对客观事务的理解,而功能分解只通过问
题空间的转换来获得。
4.2Coad 方法
Coad 方法是 1989 年 Coad 和 Yourdon 提出的面向对象开发方法。
该方法的主要优点是通过多年来大系统开发的经验与面向对象概念
的有机结合,在对象、结构、属性和操作的认定方面,提出了一套
系统的原则。
该方法完成了从需求角度进一步进行类和类层次结构
的认定。
尽管 Coad 方法没有引入类和类层次结构的术语,但事实上
8
已经在分类结构、属性、操作、消息关联等概念中体现了类和类层
次结构的特征。
4.3OMT 方法
OMT 方法是 1991 年由 JamesRumbaugh 等 5 人提出来的,其经典
著作为“面向对象的建模与设计”。
该方法是一种新兴的面向对象的开发方法,开发工作的基础是
对真实世界的对象建模,然后围绕这些对象使用分析模型来进行独
立于语言的设计,面向对象的建模和设计促进了对需求的理解,有
利于开发得更清晰、更容易维护的软件系统。
该方法为大多数应用
领域的软件开发提供了一种实际的、高效的保证,努力寻求一种问
题求解的实际方法。
4.4UML(UnifiedModelingLanguage)语言
软件工程领域在 1995 年~1997 年取得了前所未有的进展,其
成果超过软件工程领域过去 15 年的成就总和,其中最重要的成果之
一就是统一建模语言(UML)的出现。
UML 将是面向对象技术领域内
占主导地位的标准建模语言。
UML 不仅统一了 Booch 方法、OMT 方法、
OOSE 方法的表示方法,而且对其作了进一步的发展,最终统一为大
众接受的标准建模语言。
UML 是一种定义良好、易于表达、功能强
大且普遍适用的建模语言。
它融入了软件工程领域的新思想、新方
法和新技术。
它的作用域不限于支持面向对象的分析与设计,还支
9
持从需求分析开始的软件开发全过程。
二、面向对象系统的分析
在进行了需求分析和业务流程分析并得到客户的认可之后,对
项目进行系统分析是极其重要的。
系统分析是能体现整个系统的灵
魂的文档,将客户的需求从具体到抽象的一个过程,并制定编码人
员可实施的规范和标准。
在系统分析的过程中需要对需求分析进行
进一步的深化和分析,通常客户及业务人员在需求分析和流程分析
的过程中比较注重功能上的表现和定义,即使是做出正规的用户界
面原型,对系统的需求也是不完整的,处于非技术人员的缘故,很
难苛求能提出完整清晰专业的性能需求,但不意味着这需求不存在,
而且这隐藏的需求对编码人员来说是极其重要的。
如果眼光仅仅放
在满足客户眼下的需求,当问题不断出现时再不断修补,头痛医头,
脚痛医脚,甚至系统构架需要不断调整或重新设计,那么,很快就
会陷入代码泥潭或坠入系统重复开发的无底深渊,当初项目完成时
的成就感将被无止境的沮丧所代替。
因此,客户的需求能否在系统
中得到真正的体现和实施,系统分析是至关重要的。
1.对象的特性
基本上,软件对象本身具有三项特性,分别是继承、封装、动
态连结(即多态)。
“继承”特在面向对象设计上,是非常重要的一项
观念,同样的数据和程序代码,不必在每个需要的地方在重写一遍。
10
只要归纳整理成一个 class,需要时再重制出所需要的 instance 即
可。
简单的说,继承性是 class 之间的一种再分类关系,它会让几
个 class 之间会具有相同的数据结构或操作程序,减少重复的程序
代码,达到对象重复使用的目的。
封装性的意思是整个对象的数据
和处理程序『包』在一起,透过一个标准、简单的接口才能存取对
象内的数据及使用对象提供的功能,这里所谓的接口就是指对象的
属性〈properity〉和方法〈method〉由于软件的开发功能越强,相
对的也使得系统变得更复杂,为了降低整个系统的复杂度,所以就
把整体分成许多块对象,将每一块对象的复杂度降低到一般软件开
发者可以负荷的程度,而且让开发者能针对每一块对象去作分析、
设计的工作,不会影响到其它块对象,这就是对象必须有的独立特
性,而对象封装的目的就是为了达到对象的独立。
但是,对象封装
的前提是;对象里面封装的程序代码必须是正确的,而且要符合当初
设计的需求。
所谓动态连结是指在程序执行时,系统才将 message 和 method
连结在一起,而不是在编译的时候。
message 是送到对象的接口,
用来启动对象的工具,而 method 则是在 message 送达对象接口后,
被选取的操作程序。
透过动态连结的功能,我们不用事先考虑使用
对象的型别,只要把 message 送出即可。
等到程序执行中,看哪个
对象应该配合这个 message,再把 message 和这个对象的 method 连
结,然后执行这个 method。
一个对象是由数据〈Data〉与方法〈Method〉两部分所组成。
11
在传统的结构化程序设计中,数据结构与函数是分离的,这样我们
维护程序时会产生很大的困扰;而在对象导向中将这两个东西紧密的
包围在一起,使得对象内的数据只有透过适当的接口〈方法〉才能
予以修改,这便是信息隐藏〈InformationHiding〉。
2.面向对象的分析
面向对象分析的主要任务是根基用户的需求,建立一个准确的、
完整的、一致的系统模型。
使用面向对象分析方法能将客户变化的
需求映射到模型中,大大提高系统的扩展性和开发效率。
面向对象
的分析方法要求在设计中要映射现实世界中指定问题域中的对象和
实体,例如:
房子,楼盘,开发商,业主等。
这就需要设计要尽可
能地接近现实世界,即以最自然的方式表述实体。
所以面向对象技
术的优点即为能够构建与现实世界相对应的问题模型,并保持他们
的结构、关系和行为为模式。
面向对象的概念是在近 10 年才进入中
国的,而它的思想至今也没有真正意义上得到普及。
简单的说,面
向对象就是面向世界,世界上的任何事物都是对象,因此面向对象
是很自然的思想,是符合我们的思维习惯的。
面向对象的语言包括
了 Smalltalk、C++、Java,C#⋯⋯需求是不稳定的,那么需求之中
是不是没有稳定的东西呢?
有的,就是对象。
世界都是由对象组成的,
而对象都是持久的,例如动物、植物已经有相当长的时间。
虽然对
象也在变化,动物,植物也在不断的进化。
但对象在一个相当长的
时期内都存在,动植物的存在时间肯定比任何一家企业长久。
面向
12
对象的开发方法的精髓就是从企业的不稳定需求中分析出企业的稳
定对象,以企业对象为基础来组织需求、构架系统。
这样得出的系
统就会比传统的系统要稳定得多,因为企业的模式一旦变化,只需
要将稳定的企业对象重新组织就行了。
这种开发的方法就被称为面
向对象的分析和设计,而分析出的企业对象就被称为
BusinessObject。
3.面向对象系统的分析方法
面向对象分析的关键,是识别出问题域内的对象,并分析它们
之间的关系,最终建立起问题域简洁、精确、可理解的正确模型。
面向对象分析建模需要建立的是软件系统的用户领域模型,需要着
重了解的是该软件系统的需求概念与术语,其分析内容是现实世界
中的实体对象和各对象之间的关系,并不涉及编程概念。
3.1 用况图(需求模型)
UML 建模语言中,用况图被用来描述用户与系统之间的交互关
系,说明系统所具有的业务能力和业务流程,能够方便开发者理解
用户领域的专有术术语和业务内容。
参入者(Actor):
系统之外与系统有关的类,涉及与系统交互
的人,机器或其他系统,用于反映系统跟周围环境的关系。
关系分
为通信关系、使用关系和扩展关系。
通信关系(CommunicatesRelationship):
描述参入者与用例
13
之间的关系,其中单个参入者可以与多个用例联系,反之,一个用
例也可与多个参入者联系。
清晰的描述了“谁使用了哪个用例”。
用
况图况例之间的关系。
扩展关系(ExtendsRelationship):
当一个基本用例由需要附
加一个用例来扩展或延伸其原有功能时,附加的扩展用例和原有用
例之间的关系就体现为扩展关系。
扩展用例可以继承原有基本用例
的一些功能,同时它又可以具有一些新的特有功能。
使用关系(UsesRelationship):
当在一个基本用例中使用到
了另一个用例时,则这两个用例之间就构成了使用关系。
一般说来,
如果多个用例中有一些共同的功能,则可以把这些共同的功能提取
出来单独构成为一个实例,而其他用例则可以通过“使用关系”共
同使用这些用例。
3.2 类图(建立基本模型)
类图的获取是一个不断细化的过程,一般我们先从分析类开始。
分析类是概念层面上的类,是进行类设计的基础,获取分析类是系
统分析中一项很重要的工作。
获取分析类的是一个需要大量技巧的
工作,我们主要根据用例描述来确定分析类。
属性与操作
(1)属性:
属性用来描述类的特征,表示需要处理的数据。
(2)操作:
对数据的具体处理方法的描述则放在操作部分,操
作说明了该类能做些什么工作,完成什么任务。
操作通常称为函数,
14
它是类的一个组成部分,只能作用于该类的对象上。
确定关系
3.3 建立辅助模型
顺序图:
是一种交互图,描述对象之间的动态合作关系以及合
作过程,常用来描述一个用例的行为。
通信图:
通信图是一种强调发送和接受消息的对象结构组织的
图,用以展示围绕对象以及他们之间的连接器而组织的交互。
活动图:
描述操作实现中完成的工作以及用例实例或对象中的
活动,活动图是状态图的一个变种。
状态图:
描述某个对象,子系统,系统的生命周期。
包图:
描述对模型元素分组以及分组之间的依赖的图,其中要
用到的包是对模型元素进行分组的机制。
四、面向对象系统的设计
设计建模需要把分析阶段的结果扩展成技术解决方案。
需要建
立的是软件系统的技术构造模型。
从 OOA 到 OOD 不是转换;而是调
整和增补。
增补人机交互部分、构建及部属部分、控制驱动部分、
数据管理部分。
4.1 问题域部分的设计
问题域部分的设计要对 OOA 结果按实现条件进行补充与调整。
15
即要继续运用 OOA 的方法,包括概念、表示法及一部分策略。
不但
要根据实现条件进行 OOD 设计,而且由于需求变化或新发现了错误,
也要对 OOA 的结果进行修改。
4.2 人机交互部分的设计
把人机交互部分作为系统中一个独立的组成部分,进行分析和
设计,有利于隔离界面支持系统的变化对问题域部分的影响。
4.3 控制驱动部分的设计
为了描述问题域固有的并发行为,表达实现所需的设计决策,
需要在 OOD 部分对控制驱动部分进行建模。
控制流驱动部分,用于
定义和表示并发系统中的每个控制流。
用主动对象表示每个控制流
(进程、线程)所有的主动类构成控制流驱动部分。
4.4 数据管理部分的设计
数据管理部分是负责在特定的数据管理系统中存储和检索对象
的组成部分。
其目的是,存储问题域的持久对象、封装这些对象的
查找和存储机制,以及为了隔离数据管理方案的影响。
在传统的结
构化设计方法中,很容易将实体关系图映射到关系数据库中。
而在
面向对象设计中,我们可以将 UML 类图看作是数据库的概念模型,
但在 UML 类图中除了类之间的关联关系外,还有继承关系。
16
4.5 构件及部署部分的设计
当前的一种主流的做法是在面向对象的系统设计阶段的后期,
考虑如何对系统的构件进行描述、构造和组织,以及构件如何在节
点上进行分布。
五、面向对象分析与设计的发展趋势
5.1 面向对象分析与设计的方法将被越来越多的人接受
迄今为止,“面向对象”本身还没有一个统一的让所有人都能接
受的概念。
然而,面向对象中的一些最基本的概念已经和正在被人
们所接受,比如类、对象、继承、封装等;一些最有效的表示方法
也正在被人们所共同采用,比如图形表示、基本输入要求和输出结
果等。
并且这种趋势在越是较晚出现的方法和工具中越是明显,面
向对象的方法学研究在计算机领域正在朝着普及化的方向发展。
5.2 新的分析与设计的方法和工具将不断涌现
随着 SDL92 和 ObjectTime 的问世,新的分析方法和工具将朝着
动态化、标准化、可执行性、可测试性的方向发展。
同时,新的面
向对象的设计方法也以越来越成熟的面孔出现。
新方法和工具的相
继出现,将会大大缩短软件开发周期,节省软件开发成本。
17
5.3 集成面向对象分析和设计将成为趋势
由于设计过程本身也涵盖有部分的分析,分析过程中也有设计
的成分。
基于这种关系,集成了分析和设计两方面的方法和工具的
研究也将成为面向对象分析与设计领域的一个趋势。
它的主要特点就是有机地集成比较著名的分析方法和设计方法
来共同完成从分析到设计甚至到实现的全部任务。
集成分析与设计
方法最重要的环节是要能够把分析方法的输出结果变换成为一个设
计方法的工具的输入,即需要一个“翻译程序”。
然而,它与普通的
翻译程序是不同的,比普通的“翻译程序”更智能化。
集成分析和
设计方法虽然还处于尝试阶段,但这个方向对于软件开发界是很有
吸引力的。
六、小结
面向对象的开发方法的精髓就是从企业的不稳定需求中分析出
企业的稳定对象,以企业对象为基础来组织需求、构架系统。
这样
得出的系统就会比传统的系统要稳定得多,因为企业的模式一旦变
化,只需要将稳定的企业对象重新组织就行了。
这种开发的方法就
被称为 OOAD(Object Orient Analysis & Design 面向对象的分析
和设计),而分析出的企业对象就被称为 CommonBusiness
Object。
OOAD 是现代软件企业广为采用的一项有效技术,要求在设
计中要映射现实世界中指定问题域中的对象和实体。
面向对象技术
的优点即为能够构建与现实世界相对应的问题模型,并保持他们的
18
结构、关系和行为为模式。
目前,面向对象的分析与设计方法正处
于发展阶段,实际上都还没有真正解决从应用领域知识到需求模型
的演变问题。
要解决这个问题,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 系统 分析 设计