面向对象的系统分析与设计方法_第1页
面向对象的系统分析与设计方法_第2页
面向对象的系统分析与设计方法_第3页
面向对象的系统分析与设计方法_第4页
面向对象的系统分析与设计方法_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第 2 章章 面向对象的系统分析与设计方法面向对象的系统分析与设计方法2.1 面向对象的基本思想和基本概念面向对象的基本思想和基本概念 2.2 面向对象的系统开发方法面向对象的系统开发方法 返回主目录2.1 面向对象的基本思想和基本概念面向对象的基本思想和基本概念 2.1.1 面向对象的基本思想面向对象的基本思想 与传统的结构化程序设计方法用过程化的方式描述应用系统不同,面向对象的方法认为,客观世界是由各种各样的对象组成的,每个对象都有各自的内部状态和运动规律,不同对象之间通过消息传送相互作用和联系就构成了各种不同的系统。 采用对象的观点看待所要解决的问题,并将其抽象为系统是极其自然与简单的

2、,因为它符合人类的思维习惯,使得应用系统更容易理解。同时,由于应用系统是由相互独立的对象构成的,使得系统的修改可以局部化,因此系统更易于维护。 2.1.2 对象对象 对象是客观世界中事物在计算机领域中的抽象,是一组数据和施加于该组数据上的一组操作(行为)组成的集合体。 对象是面向对象方法的主体。当一个对象映射为软件实现时由三个部分组成: (1) 私有的数据结构。它用于描述对象的内部状态。 (2) 处理。也称为操作或方法,它施加于数据结构之上。 (3) 接口。这是对象可被共享的部分,消息通过接口调用相应的操作。接口规定哪些操作是允许的。它不提供操作是如何实现的信息。 C+语言中的对象由描述对象状

3、态的数据结构和作用于这个数据结构上的方法(或称为操作)构成,它们都可以分为私有的和公有的两个部分,私有部分从对象的外部不可直接访问,而公有部分可以由对象的外部访问。C+语言中对象之间的相互联系和作用通过 对公有数据和方法(操作)的访问来实现。例如对于某个人,它的状态可能是: 身高: 175 cm 年龄: 20 性别: 男 肤色: 黄色 它的操作可能是: 回答身高 回答年龄 回答性别 回答肤色 其它对象不能直接访问它的内部状态信息,只能通过调用这些公共操作来访问该对象。 客观世界的同一对象在不同的应用系统中,由于考察对象的角度不同,对其抽象的数据结构和操作都可能是不同的。例如对于一个学生,在学籍

4、管理系统与户籍管理系统两个不同的应用系统中,抽象出的表示内部状态的数据结构和对数据结构进行的操作都是不同的。因此,在对实际应用系统中的对象进行分析时,应注意该系统的要求,区分哪些是该对象的本质特征。 2.1.3 类与实例类与实例 采用面向对象方法进行系统分析与设计时,对于一个具体的系统而言,可能存在很多具有相同特征的对象。例如,对于一个学籍管理系统,存在许多学生对象,它们具有相同的结构特征和行为特征,只是表示内部状态的数据值不同。为了描述这种相同结构特征和行为特征的对象,面向对象方法引入了类的概念。这一点与人们在认识客观世界的事物时所采取的分类思想相同。人们在认识事物时总是将具有相同特征的事物

5、归为一类,属于某类的一个事物具有该类事物的共同特征。 类是对一组具有相同特征的对象的抽象描述,所有这些对象都是这个类的实例。对于学籍管理系统,学生是一个类,而一个具体的学生则是学生类的一个实例。 一个类的不同实例具有相同的操作或行为的集合和相同的信息结构或属性的定义,但属性值可以不同;不同的实例具有不同的对象标识。对于学生类中的每一个对象,描述它们所使用的数据结构相同,但是其值不同。在程序设计语言中,类是一种数据类型,而对象是该类型的变量,变量名即是某个具体对象的标识。 因此,一个类的定义至少包含以下两个方面的描述: (1) 该类所有实例的属性定义或结构的定义。 (2) 该类所有实例的操作(或

6、行为)的定义。 在C+语言中,一个类的定义包含数据成员和函数成员两部分内容。数据成员定义该类对象的属性,不同的对象属性的值可以不同;函数成员定义了该类对象的操作。 在一个系统中,每一个对象均属于某个类,类是对象的属性和操作的定义模板,而实例是某个具体的对象。 2.1.4 继承性继承性 人们在对客观世界的事物进行描述时,经常采取分类的方法。类是有层次的,即某个大类的事物可能分为若干小类,而这些小类可能又分为若干个更小的类。 面向对象思想采纳了事物分类的层次思想,在描述类的时候,某些类之间具有结构和行为的共性。例如教师类与学生类,在结构方面均具有姓名、年龄、身高、体重等,在行为(或操作)方面均具有

7、回答身高、回答体重等操作。将这些共性抽取出来,形成一个单独的类人,描述教师类和学生类中的共性。类人的结构特征和行为特征可以被多个相关的类共享,例如教师类和学生类继承了类人的结构和行为特征。 在C+语言中,通过类的派生机制来实现类的继承,可以从一个类中派生出一个新的类,这个类称为派生类的基类或父类,派生出的新类称为基类的派生类或子类。派生类的对象具有基类对象的特征,同时又有其自身特有的特征。一个教师类的对象与一个学生类的对象都具有类人所描述的特征,同时又具有各自所属教师类和学生类特有的特征。 利用类之间的继承关系,可以简化类的描述。在类人中描述教师类和学生类的共性,而在学生类和教师类中只需描述各

8、自的个性。利用继承机制可以提高软件代码的可重用性。在设计一个新类时,不必从头设计编写全部的代码,可以通过从已有的具有类似特性的类中派生出一个类,继承原有类中的部分特性,再加上所需的新的特性。 这一点与面向过程的设计语言中的过程或函数不同,要使用具有相似功能的过程或函数,必须修改源程序代码以使其适应新系统的功能需求,而类的派生机制无须原有类的源代码即可派生出新的类。 利用类及其继承性描述系统时,由于类之间的继承关系,可能会形成一种具有层次性的类结构。在使用类的层次结构描述系统时,某些类之间的层次关系可以有多种实现方案。例如中学生类,既可以直接从类人派生出来,也可以从类人的派生类学生类派生出来。在

9、设计类的层次结构时,应注意建立的类层次结构是否易于理解以及组织类结构的费用等方面的问题。设计出来的类层次结构是否合理,往往取决于系统分析员的经验等因素。 另外,人们在对客观世界的事物分类时,一个事物可能属于多个类,具有多个类的特性。例如一个黑人学生,他既属于学生类,又属于黑人类。这种情形在面向对象方法中称为多继承,即一个类同时从多个类中派生出来,此时类的层次结构是网状的。多继承在有些面向对象的程序设计语言中是不允许的,C+语言允许多继承。只允许派生类有一个基类称为单继承,单继承的类层次结构是树状的。 2.1.5 多态性多态性 多态性是面向对象系统的又一重要特性。所谓多态即一个名词可具有多种语义

10、。 在C+语言中,多态性主要表现在下述几个方面:(1) 重载:在C+语言中,同一函数名以及运算符可以具有不(2) 同含义的多种实现版本,编译器将根据函数调用的参数(3) 形式决定调用哪一种实现版本。 显示图形、擦除图形、移动图形。移动图形的操作都是首先擦除图形,然后改变图形的位置基准点,再在新位置显示出图形。在类Shape中实现移动图形的操作,每种图形的显示、擦除、改变基准点等操作在派生类中分别实现。若程序中使用某图形对象的移动操作,编译器采用动态联编的手段,在执行时根据该图形对象是哪一个类的实例,决定调用哪一个类的显示、擦除、改变基准点的方法。这种多态性称为运行时的多态性。而重载在编译时编译

11、器即可确定使用哪一个实现版本,是静态的。 2.1.6 封装封装 封装是一种信息隐藏技术,对象内部对用户是隐藏的,不可直接访问;用户只能见到对象封装界面上的信息,通过对象的外部接口访问对象。用户向对象发送消息,对象根据收到的消息调用内部方法作出响应。封装的目的在于将对象的使用者和对象的设计者分开,使用者无须知道对象内部实现的细节,只需要知道对象接收的消息即可。 封装的定义为: (1) 一个清楚的边界。所有对象的内部软件的范围被限定在这个边界内。 (2) 一个接口。该接口用以描述这个对象和其它对象之间的相互作用。 (3) 受保护的内部实现。这个实现给出了由软件对象提供的功能的实现细节,实现细节不能

12、在定义这个对象的类的外面访问。 在C+语言中,对象的构成由类来描述,每个类的成员可以分为私有和公有两种类型,对象的外部不能直接访问对象的私有部分。 对象的封装特性可以提高模块之间的独立性,使得系统易于调试和维护。下面举一个简单的例子。 假设应用系统中有两个模块:一个模块从计算机的串行通讯口接收数据,放入缓冲区;另一个为数据处理模块。数据处理模块可以直接访问缓冲区,从缓冲区中读取数据。此时这两个模块之间的关联程度密切,模块独立性很差。如果接收数据的模块改变缓冲区的管理方法,则第二个模块必须作相应的改变。如果数据处理模块对缓冲区操作有误,将影响数据接收模块,在程序调试时难以确定错误发生在哪一个模块

13、中。实际上,数据处理模块并不需要缓冲区的管理信息,它只需知道缓冲区中有没有数据以及有什么样的数据。上面的处理方法违反了软件工程中的信息隐藏原则,数据处理模块访问了它不需要的信息。 将数据接收模块封装为一个对象,缓冲区的管理信息作为其私有数据,即可避免上面的问题。数据接收模块只要提供一个从缓冲区获得数据的接口即可。数据处理模块只能访问该接口,而不能直接操作缓冲区。此时两个模块之间的独立性提高,如需改变缓冲区的管理方法,只需修改数据接收模块,数据处理模块将不受任何影响,因为数据接收模块提供的外部接口没有改变。图2.1与图2.2是两种处理方法的示意图。 图2.1 传统的处理方法缓冲区模块1模块2 图

14、2.2 对象封装的处理方法 模 块 1 缓冲区 获取数据的外部接口 模 块 2 *2.2 面向对象的系统开发方法面向对象的系统开发方法 2.2.1 概述概述 计算机应用系统的开发过程是一个相当复杂的过程,使用面向对象方法进行系统开发,首要任务是采用面向对象的概念及其抽象机制将开发的系统对象化和模型化,建立应用系统模型;然后使用面向对象的程序设计语言来实现系统中的对象。面向对象的开发方法可分为四个阶段: (1) 系统调查和需求分析。即对应用系统将要实现的功能以及用户对系统开发的需求进行调查研究。这是所有开发方法都必须进行的。 (2) 分析问题的性质和求解问题。在繁杂的问题域中抽象地识别出对象及其

15、行为、结构、属性、方法等。这一阶段称为面向对象分析,简称为OOA。 (3) 整理问题。即对分析的结果作进一步的抽象、归类、整理,最终以规范的形式描述对象和类。这一步称为面向对象设计,简称为OOD。 (4) 程序实现。即用面向对象的程序设计语言将上一步整理的对象和类的描述映射为应用程序软件。这一步一般称为面向对象程序设计,简称为OOP。 面向对象开发方法的几个阶段的最主要工作是系统的对象化和模型化,使用对象模型描述系统。OOA阶段建立初步的对象模型,然后在OOD阶段对对象或类进行归类,对类及对象的属性、方法和结构等进行归类,抽象出它们的共同部分,使类的层次结构更为合理。 下面简单介绍一下在面向对

16、象分析与设计阶段建立对象模型的基本步骤。 2.2.2 分析与设计的基本步骤分析与设计的基本步骤 面向对象方法分析与设计可采取下面的步骤: 1标识对象和它们的属性标识对象和它们的属性 标识应用系统的对象和它们的属性是面向对象设计方法中最艰难的工作。首先要搞清楚系统要解决的问题到底涉及到哪些事物以及它们在系统中的作用。现实世界中的事物可以分成五大类: (1) 有形物:指那些看得见摸得着的东西,例如人、书、汽车等。这一部分事物很容易识别。当要解决的问题确定下来以后,很容易将与此问题有关的有形物都找出来。 (2) 人或组织机构所扮演的角色:例如“医生”、“病人”、“教师”和“学生”等都属于这一类对象。

17、 (3) 事件:事件对象用来表示所发生的事件,例如“出诊”、“备课”等都属于此类对象。 (4) 交互:交互对象常常能够把多个对象联系起来,例如“上课”将老师、课程和学生联系起来。 (5) 规范:规范对象具有“标准”或“定义”的性质,例如产品的技术指标和学校的专业培养目标都是规范对象。 上述分类是按照事物的存在形式来进行的。按照面向对象的观点,可以将事物归纳为三类: (1) 客观存在物:包括有形对象和角色对象,体现问题的结构特性。 (2) 行为:包括事件对象和交互对象。行为是对象的一部分,行为依赖于对象。它体现问题的行为特性。 (3) 概念:现实世界中事物和它们行为规律的抽象,是识别对象时的一类

18、认识和分析对象。 标识对象可以从应用系统非形式化描述中的名词来导出。对象标识出来后,还应注意对象之间的类似之处,以建立对象类。例如,Windows多窗口用户界面中,不同的窗口具有类似的特性,每个窗口都可以看作某些窗口类的实例。每个窗口都具有大小、位置、标题等属性。 2. 标识每个对象所要求的操作和提供的操作标识每个对象所要求的操作和提供的操作 标识出每一个对象执行的功能,这些功能描述对象的行为。例如窗口被打开、关闭、缩放和滚动等。同时还应关心由其它对象提供于它的操作,因为通过标识这些操作有可能导出新对象。 3. 建立对象之间的联系和每个对象的接口建立对象之间的联系和每个对象的接口 这一步建立对象和对象类之间的联系,标识出每一个对象都与什么对象和对象类有关。这一步中可能找出一些对象的模式,并决定是否要建立一个新类以表示这些对象的共同行为特性。 识别出系统中的对象和类以后,还应该识别出对象之间的相互作用,即对象的外部接口。在面向对象系统中,对象和对象之间的联

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论