收藏 分享(赏)

软件工程第9章 面向对象方法学导论.ppt

上传人:精品资料 文档编号:10541929 上传时间:2019-11-27 格式:PPT 页数:84 大小:701.50KB
下载 相关 举报
软件工程第9章 面向对象方法学导论.ppt_第1页
第1页 / 共84页
软件工程第9章 面向对象方法学导论.ppt_第2页
第2页 / 共84页
软件工程第9章 面向对象方法学导论.ppt_第3页
第3页 / 共84页
软件工程第9章 面向对象方法学导论.ppt_第4页
第4页 / 共84页
软件工程第9章 面向对象方法学导论.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

1、第九章 面向对象方法学引论,9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型 9.6 功能模型 9.7 3种模型之间的关系,9.1 面向对象方法学概述,- 传统的软件工程方法学应用于大型软件产品的开发时,似乎很少取得成功。 - 源于20世纪60年代后期出现的面向对象编程语言Simula-67(类和对象的概念),逐步形成了面向对象方法学 。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。,9.1 面向对象方法学概述,面向对象方法学的要点,9.1 面向对象方法学概述,语义断层 不同的语言(/对象)来表达问题和解.客

2、观世界中的实体既具有静态的属性又具有动态的行为。然而传统语言提供的解空间对象实质上却仅是描述实体属性的数据,必须在程序中从外部对它施加操作,才能模拟它的行为。,9.1 面向对象方法学概述,对象?(面向对象语言),在问题空间中,对象是现实世界中存在的实体应用所关心的抽象概念、规则、事件、或者具有明确边界和意义的具体事物在解空间 (计算机系统) 中,对象是问题空间中的对象在计算机系统中的表示封装 (encapsulation) 了数据和行为的通信单位,9.1 面向对象方法学概述,与传统方法相反,面向对象方法是一种以数据或信息为主线,把数据和处理相结合的方法。 面向对象方法把对象作为由数据及可以施加

3、在这些数据上的操作所构成的统一体。 对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。,9.1 面向对象方法学概述,面向对象方法是一种新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。 这样就减小了语义断层:系统中解空间对象可以直接模拟问题空间的对象,解空间与问题空间的结构十分一致。,9.1 面向对象方法学概述,面向对象方法具有下述4个要点: 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。因此,面向对象的软件系统是由对象组成的。 类(class)是对一组对象的抽象,集中了该组对象的共同特性

4、(一组数据和一组方法)。对象是类的实例。,9.1 面向对象方法学概述,面向对象方法具有下述4个要点(续): (3) 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种结构中,下层的派生类自动具有和上层的基类相同的特性,这种现象称为继承(inheritance)。 (4) 对象彼此之间仅能通过传递消息互相联系。一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中一样,在外界是看不见的,更不能直接使用,这就是“封装性”。,9.1 面向对象方法学概述,面向对象的方法学可以用下列方程来概括: OO=obje

5、cts+classes+inheritance+communication with messages 面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。 也可以说,只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法。,9.2 面向对象的概念,对象 类 类间关系 消息与事件 多态性,9.2 面向对象的概念,对象,在解空间 (计算机系统) 中,对象的非严格记法::= ,9.2 面向对象的概念,对象的基本特征每个对象均有自己的惟一标识,从而区别于其他对象。 对象之间通过消息进行通信。 对象总是处于一定的状态。 对象有若干种行为。 对象的行为分为三类:

6、创建新对象、与其他对象通信、改变自身状态。 对象的状态只能被自身的行为所改变。,9.2 面向对象的概念,类 在问题空间中 “人以类聚,物以群分” 类代表着具有类似性质的一组对象 类中的每一个对象即为类的不同实例 (instance)在解空间 (计算机系统) 中 类是对一组对象的抽象,集中了该组对象的共同特性。 在构造软件时,类实际上是具有特定功能的模块,其代码由该种所有对象所共享。 类 vs. 对象:静 vs. 动。,9.2 面向对象的概念,类的两种图形记法:,9.2 面向对象的概念,对象 状态:张三,30岁,计算机系,讲师,1000元 行为:提职称,调工资类 (教师) 属性:姓名,年龄,系别

7、,职称,工资 操作:提职称,调工资 方法 (指操作的具体代码实现)实际上,类是创建对象的模板!,9.2 面向对象的概念,类间关系 继承 (inheritance) 聚合 (aggregation) 关联 (relationship),9.2 面向对象的概念,继承的含义 继承是一种“求同存异”的高度抽象方式相关术语 超类 (super-class) / 父类 (parent class) / 祖先类 (ancestor class) 子类 (sub-class) / 后裔类 (descendant class)一般化 (generalization) 具体化 (specialization),9

8、.2 面向对象的概念,继承的分类 单继承 多继承 多继承使类层次复杂化 多继承容易产生配置控制方面的潜在问题继承的图形记法,9.2 面向对象的概念,一般化、具体化、继承等术语均是复用思想的体现 一般化和具体化是对同一个类间关系的不同角度审视 父类是子类的一般化 (从父类角度出发) 子类是父类的具体化 (从子类角度出发)继承强调一般化 / 具体化关系中共享属性和操作的机制,9.2 面向对象的概念,聚合的含义 聚合表示“部分整体”关系相关术语 组元类 (component class) 组合类 (assembly class)注意,组合对象的存在依赖于组元对象!,9.2 面向对象的概念,聚合的图形

9、记法,9.2 面向对象的概念,关联的含义 对象实例之间的物理或概念联结被称为链 关联是对一组语义与结构相似的链的抽象 链是关联的实例关联 vs. 链:类 vs. 对象,(a) 二元关联,(b)三元关联,9.2 面向对象的概念,聚合 vs. 继承 聚合更强调对象实例之间的关系,本质上是“与关系” (is part of,ISP) 继承更关注对象类之间的关系,本质上是“或关系” (is a,ISA) 聚合树 vs. 继承树聚合 vs. 关联 聚合是关联的一种特殊形式 聚合与关联之间的模糊差异无关紧要,9.2 面向对象的概念,消息和事件(message & event)消息是对象之间进行通信的构造或

10、结构 消息分为请求消息和完成消息两种 (由消息模式描述) 消息模式:发送对象、接收对象、内容事件指对象之间一次消息的传递 多个事件按照时间顺序可构成事件序列消息 vs. 事件:静 vs. 动,9.2 面向对象的概念,消息与对象 一个对象能接收不同形式不同内容的多个消息。 相同形式的消息可以送往不同的对象。 对于相同形式的消息,不同对象可以有 不同的解释,可以作出不同的反映。消息与方法 对象接收到有效消息后,总会以某种行为做出适当反映。期间,对象行为复用了类操作的代码实现 (即类方法)。 在某种程度上,消息与方法可视为同义词。但是,必须牢记:消息与代码无关,而方法是操作的代码实现。,9.2 面向

11、对象的概念,多态性( polymorphism) -含义 同一个操作可以是多个不同类的行为。 不同对象接收到同一个消息后,可产生完全不同的反映。 同一个消息可调用不同的方法。-意义 允许每个对象以自己最合适的方式去响应共同的消息,从而增强软件的灵活性和可复用性。,9.2 面向对象的概念,多态性的示例,9.3 面向对象建模,建立问题模型是人们理解表达问题的方法之一。 模型是对事物作出的一种抽象,是对事物的一种形式化的描述。 模型常由专门的语言 (一组图示符号和规则)来描述. 面向对象建模就是根据面向对象观点(模拟人类习惯的思维方式)建立问题的解模式. 面向对象的实现能将此模式在计算机上实施.,9

12、.3 面向对象建模,面向对象方法需要建立3种形式的模型: 描述系统数据结构的对象模型 描述系统控制结构的动态模型 描述系统功能的功能模型 在不同的应用问题中,这3种模型的相对重要程度会有所不同,对象模型始终都是最重要、最基本、最核心的。 典型的软件系统组合了上述3方面内容: 使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。 本课程介绍UML作为描述这些模型的语言.,9.3 面向对象建模,UML(Unified Modeling Language)产生于90年代中期。它不仅统一了Booch、OMT和OOSE方法中的概念和表示法,而且对其作了进一步扩展,最终成为在

13、面向对象技术领域占主导地位的、并被大众所接受的标准建模语言。 1、UML概述 UML的发展历程(下图) UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行可视化建模。UML不是一个开发过程,也不是一个方法,但允许任何一种开发过程和面向对象方法使用它。,统一建模语言UML,9.3 面向对象建模,UML,事物,关系,图,结构 事物,行为 事物,组织 事物,辅助 事物,静态 图,实现 关系,泛化 关系,依赖 关系,关联 关系,动态 图,交 互,状 态 机,包,注 释,顺 序 图,活 动 图,用 例 图,实 施 图,类 图,构 件 图,对 象 图,状 态 图,协 作 图,节 点

14、,组 件,活 动 类,协 作,接 口,类,用 例,(1) 统一标准UML统一了Booch、OMT和OOSE等方法中的基本概念,已成为OMG的正式标准,提供了标准的面向对象的模型元素的定义和表示。(2) 面向对象UML还吸取了面向对象技术领域中其他流派的长处。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。(3) 可视化、表示能力强系统的逻辑模型或实现模型都能用UML模型清晰的表示,可用于复杂软件系统的建模。(4) 独立于过程UML是系统建模语言,独立于开发过程。(5) 易掌握、易用由于UML的概念明确,建模表示法简洁明了,图形结构清晰

15、,易于掌握使用。,面向对象建模,9.3 面向对象建模,对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。用UML表达的对象模型由类图(类和类间关系)构成.,9.4 对象模型,类图描述类及类与类之间的静态关系。类图是一种静态模型,它是创建其他UML图的基础。一个系统可以由多张类图来描述,一个类也可以出现在几张类图中。 1. 定义类 UML中类的图形符号为长方形,用两条横线把长方形分成上、中、下3个区域(下面两个区域可省略),3个区域分别放类的名字、属性和服务,如图9.5所示。,9.4.1 类图的基本符号,图9.5 表示类

16、的图,9.4.1 类图的基本符号,为类命名时应该遵守以下几条准则: (1) 使用标准术语。例如,“交通信号灯”比“信号单元”这个名字好,“传送带”比“零件传送设备”好。 (2) 使用具有确切含义的名词。例如,“库房”比“房屋”或“存物场所”更确切。 (3) 必要时用名词短语作名字。例如,“最小的领土单元”、“储藏室”、“公司员工”等都是比较恰当的名字。 总之,名字应该是富于描述性的、简洁的而且无二义性的。,9.4.1 类图的基本符号,2. 定义属性 UML描述属性的语法格式如下: 可见性 属性名: 类型名=初值 性质串 属性的可见性: 公有的(public) (+) 、 私有的(private

17、) (-)保护的(protected) (#) 注意: 没有默认的可见性。 类型名表示该属性的数据类型,它可以是基本数据类型,也可以是用户自定义的类型。 性质串明确地列出该属性所有可能的取值,也可以说明属性的其他性质。 e.g. “+婚否:布尔=假真,假”,9.4.1 类图的基本符号,2. 定义属性 UML描述属性的语法格式如下: 可见性 属性名: 类型名=初值 性质串 类的属性中还可以有一种能被该类所有对象共享的属性,称为类的作用域属性,也称为类变量。C+语言中静态数据成员就是这样的属性,在类图中表示为带下划线的属性。 例如:发货单类的类变量“货单数”:-货单数:Integer,9.4.1

18、类图的基本符号,3. 定义服务 服务也就是操作,UML描述操作的语法格式如下: 可见性 操作名(参数表): 返回值类型性质串 参数表是用逗号分隔的形式参数的序列。描述一个参数的语法如下: 参数名: 类型名=默认值 当操作的调用者未提供实在参数时使用默认值。 与属性类似,在类中也可定义类作用域操作:这种操作只能存取本类的类作用域属性。 “- set_counters(Integer=0, Integer): Integer -1,0”,类与类之间通常有关联、泛化(继承)、依赖和细化 等4种关系。 1. 关联 关联表示两个类的对象之间存在某种语义上的联系。例如,作家使用计算机,我们就认为在作家和计

19、算机之间存在某种语义连接,因此,在类图中应该在作家类和计算机类之间建立关联关系。,9.4.2 表示关系的符号,(1) 普通关联 普通关联是最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示。普通关联的图示符号是连接两个类之间的直线,如图所示。 通常,关联是双向的,可在一个方向上为关联起一个名字,在另一个方向上起另一个名字(也可不起名字)。为避免混淆,在名字前面(或后面)加一个表示关联方向的黑三角。,9.4.2 表示关系的符号,在表示关联的直线两端可以写上重数(multiplicity),它表示该类有多少个对象与对方的一个对象连接。重数的表示方法通常有: 01 表示0到1个对象

20、0*或* 表示0到多个对象 1+或1* 表示1到多个对象 115 表示1到15个对象 3 表示3个对象 如果图中未明确标出关联的重数,则默认重数是1。,9.4.2 表示关系的符号,(2) 关联的角色 在任何关联中都会涉及到参与此关联的对象所扮演的角色(即起的作用),在某些情况下显式标明角色名有助于别人理解类图。例如,下图是一个递归关联(即一个类与它本身有关联关系)。一个人与另一个人结婚,必然一个人扮演丈夫的角色,另一个人扮演妻子的角色。如果没有显式标出角色名,则意味着用类名作为角色名。,9.4.2 表示关系的符号,(3) 限定关联 限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数

21、从一对多变成一对一,或从多对多简化成多对一。在类图中把限定词放在关联关系末端的一个小方框内。 例如,某操作系统中一个目录下有许多文件,一个文件仅属于一个目录,在一个目录内文件名确定了惟一一个文件。图利用限定词“文件名”表示了目录与文件之间的关系,可见,利用限定词把一对多关系简化成了一对一关系。,9.4.2 表示关系的符号,(4) 关联类 为了说明关联的性质可能需要一些附加信息。可以引入一个关联类来记录这些信息。关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。,9.4.2 表示关系的符号,2. 聚集 聚集也称为聚合,是关联的特例。聚集表示类与类之间的关系是整体与部分的关系

22、。在陈述需求时使用的“包含”、“组成”、“分为部分”等字句,往往意味着存在聚集关系。除了一般聚集之外,还有两种特殊的聚集关系,分别是共享聚集和组合聚集。,9.4.2 表示关系的符号,(1) 共享聚集 如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。例如,一个课题组包含许多成员,每个成员又可以是另一个课题组的成员,则课题组和成员之间是共享聚集关系,一般聚集和共享聚集的图示符号,都是在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形。,9.4.2 表示关系的符号,(2) 组合聚集 如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消

23、失(或失去存在价值了),则该聚集称为组合聚集(简称为组成)。 例如,在屏幕上打开一个窗口,它就由文本框、列表框、按钮和菜单组成,一旦关闭了窗口,各个组成部分也同时消失,窗口和它的组成部分之间存在着组合聚集关系。图9.11是窗口的组成,组成关系用实心菱形表示。,9.4.2 表示关系的符号,图9.11 组合聚集示例,9.4.2 表示关系的符号,3. 泛化 UML中的泛化关系就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。 在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。 注意,泛化针对类型而

24、不针对实例,一个类可以继承另一个类,但一个对象不能继承另一个对象。实际上,泛化关系指出在类与类之间存在“一般-特殊”关系。泛化可进一步划分成普通泛化和受限泛化。,9.4.2 表示关系的符号,(1) 普通泛化 普通泛化与9.2.2节中讲过的继承基本相同,对普通泛化的概念此处不再赘述。 需要特别说明的是,没有具体对象的类称为抽象类。抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为。图示抽象类时,在类名下方附加一个标记值abstract。,9.4.2 表示关系的符号,图9.12 抽象类示例,9.4.2 表示关系的符号,图下方的两个折角矩形是模型元素“笔记”的符号,其中的文字是注释,分别说明

25、两个子类的操作drive的功能。,图9.13 复杂类图示例,9.4.2 表示关系的符号,(2) 受限泛化 给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。 预定义的约束有4种: 多重、不相交、完全和不完全。 多重继承指的是,一个子类可以同时多次继承同一个上层基类。 例如图9.14中的水陆两用类继承了两次交通工具类。 不相交继承(与多重继承相反),即一个子类不能多次继承同一个基类(这样的基类相当于C+语言中的虚基类)。如果图中没有指定多重约束,则是不相交继承,一般的继承都是不相交继承。,9.4.2 表示关系的符号,图9.14 多重继承示例,9.4.

26、2 表示关系的符号,完全继承指的是父类的所有子类都已在类图中穷举出来了,图示符号是指定完全约束。 不完全继承与完全继承恰好相反,父类的子类并没有都穷举出来,随着对问题理解的深入,可不断补充和维护,这为日后系统的扩充和维护带来很大方便。不完全继承是一般情况下默认的继承关系。,完全,人,女人,男人,性别,9.4.2 表示关系的符号,4. 依赖和细化 (1) 依赖关系 依赖关系描述两个模型元素(类、用例等)之间的语义连接关系: 其中一个模型元素是独立的,另一个模型元素依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。 在UML的类图中,用带箭头的虚线连接有依赖关系的两个类,箭

27、头指向独立的类。在虚线上可以带一个版类标签,具体说明依赖的种类,例如,图9.15表示一个友元依赖关系,该关系使得B类的操作可以使用A类中私有的或保护的成员。,9.4.2 表示关系的符号,(2) 细化关系 当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。假设两个模型元素A和B描述同一个事物,它们的区别是抽象层次不同,如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。细化的图示符号为由元素B指向元素A的、一端为空心三角形的虚线(注意,不是实线),如图9.16所示。细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次的模型之间的相关性,常常用于跟踪模型

28、的演变。,9.4.2 表示关系的符号,动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。每一个对象都具有自己的生命周期(或称为运行周期)。对一个对象来说,生命周期由许多阶段组成。生命周期中的阶段也就是对象的状态。,9.5 动态模型,状态,是对对象属性值的一种抽象。 (在定义状态时应该忽略那些不影响对象行为的属性)事件,各对象之间相互触发就形成了一系列的状态变化。我们把一个触发行为称作一个事件。状态与事件密不可分,一个事件分开两个状态,一个状态隔开两个事件。 事件表示时刻,状态代表时间间隔。,9.5 动态模型,UML提供的状态图和交互图来描绘对象的状态、触发

29、状态转换的事件以及对象的行为(对事件的响应)。每个类的动态行为用一张状态图来描绘; 动态模型是基于事件共享而互相关联的一组状态图的集合。 事件 与消息 行为 与服务/方法 状态 与属性 (方法改变属性),9.5 动态模型,软件开发的第一步工作是什么?结构化方法对系统功能描述的主要工具是什么?假如你是系统的一名普通用户,你最关心的是什么?,9.6 功能模型,UML提供的用例图是进行需求分析和建立功能模型的强有力工具。(面向对象方法)用例模型描述的是外部行为者(actor)所理解的系统功能。(从用户的角度来看待系统),9.6 功能模型,用例建模的元素(参与者、用例、关系) 参与者:系统之外,通过系

30、统边界来和系统进行有意义的交互的人或事物。两点说明:系统边界人和事物主要是指和系统交互时的角色符号:,9.6.1 用例图,9.6.1 用例图,用例 :表示系统提供的服务,主要刻画系统如何被参与者使用。 也可以理解为参与者为了使用系统提供的某一完整功能而和系统之间发生的一段对话。 符号:,关系:关联 执行者参与用例的通信路经包含 基础用例会用到被包含用例扩展 扩展用例对基础用例的功能进行扩充泛化 一般和特殊的关系,实例:银行储蓄账户管理系统(简化) 一个客户可以在多个银行开设账户,一个客户也可以在一个银行开设多个不同的账户。 客户可以通过银行职员进行开户、存款、取款、转帐、注销账户等活动。其中转

31、帐指客户将自己某个账户的钱款转入同一个银行的不同账户或转入不同银行的账户。系统管理员负责系统账户的管理及业务报表的生成。,9.6.2 用例建模,1. 识别参与者 为获取用例首先要找出系统的行为者,可以通过请系统的用户回答一些问题的办法来发现行为者。下述问题有助于发现行为者: 谁将使用系统的主要功能(主行为者)? 银行职员(客户代理),客户,管理人员 谁需要借助系统的支持来完成日常工作? 银行职员(管理人员和用户代理) 谁负责维护,管理并保持系统的正常运行? 系统管理员 系统需要与哪些外部系统交互? 其他银行账户管理系统,9.6.2 用例建模,2. 识别用例 用例总是被执行者启动的,因此,可利用

32、参与者来识别用例: 执行者需要系统提供哪些功能?执行者自身需要做什么? 执行者是否需要读取、创建、删除、修改或存储系统中的某类信息? 3.识别关系,9.6.2 用例建模,4.建模,9.6.2 用例建模,面向对象建模技术所建立的3种模型,分别从3个不同侧面描述了所要开发的系统。 功能模型指明了系统应该“做什么”; 动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做; 对象模型则定义了做事情的实体。 我们依靠对象模型完成3种模型的集成。下面扼要地叙述3种模型之间的关系。,9.7 3种模型之间的关系,(1) 针对每个类建立的动态模型(状态转换图),描述了类实例的生命周期或运行周期。

33、(2) 状态转换图中,事件引发行为,行为可改变状态并产生事件,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。行为者与系统的交互常为事件。 (3) 功能模型中的处理(或用例)对应于对象模型中的类所提供的服务。复杂的处理(或用例)对应于复杂对象提供的服务,简单的处理(或用例)对应于更基本的对象提供的服务。一个处理(或用例)可对应多个服务,一个服务可对应多个处理(或用例)。,(4) 数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。 (5) 数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。 (6) 用例图中的行为者,可能

34、是对象模型中的对象。 (7) 功能模型中的处理(或用例)可能产生动态模型中的事件。 (8) 对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。,1. 与人类习惯的思维方法和现实更接近/一致, 传统的程序设计技术: 方便计算机 面向对象方法学: 方便人对象统一了数据与操作, 减少了出错的原因, 有利于数据与操作的协调。,面向对象方法学的优点,面向对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。 - 它强调模拟现实世界中的概念而不强调算法,它鼓励开发者用应用领域的概念去思考。它从始至终都围绕着建立问题领域的对象模型来进行:对问题领域进行自然的分解,

35、确定需要使用的对象和类,建立适当的类等级,在对象之间传递消息实现必要的联系,从而按照人们习惯的思维方式建立起问题领域的模型。,认识客观世界解决现实问题的过程,是一个渐进的过程(迭代),人的认识需要在继承(重用)以前的有关知识的基础上,经过多次反复才能逐步深化。 认识深化过程既包括了从一般到特殊的演绎(父-子类),也包括了从特殊到一般的归纳(子-父抽象类) 。 认识和解决复杂问题时使用的最强有力的思维工具是抽象,也就是集中研究对象的与目的有关的实质,忽略该对象的那些与此目的无关的部分。 对象,是对客观世界中实体的抽象。对象是抽象数据类型的实例,提供了较理想的数据抽象机制和过程抽象机制。,2. 稳

36、定性好 传统的软件开发方法以算法为核心,基于功能分析和功能分解。所建立起来的软件系统的结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。而用户需求变化大部分是针对功能的,故这样的软件系统不稳定。 对象模拟问题领域中的实体。面向对象的软件系统的结构是根据问题领域的实体模型建立起来的。现实世界中的实体是相对稳定的,对象为中心构造的软件系统也就比较稳定。 例如,从已有类派生出一些新的子类以实现功能/服务扩充或修改。,3. 可重用性好 重用是提高生产率的最主要的方法。 传统的软件重用技术是利用缺乏“柔性”的标准函数库,加之数据与处理的分离,导致重用率低。 面向对象方法统一

37、了数据和操作,此外,对象固有的封装性和信息隐藏机制,使得对象的内部实现与外界隔离,具有较强的独立性。对象是较理想可重用的软件。 继承性机制使得子类不仅可以重用其父类,而且可以对父类方便地修改和扩充而令对象具有灵活的“柔性”。,4. 较易开发大型软件产品 对于大型软件产品来说,面向对象范型明显优于结构化范型: 把复杂庞大的软件分解为一系列相互独立的小产品(对象/类),不仅降低了开发工作的技术难度,而且也使得对开发工作的管理变得比较容易了。 开发过程各阶段的 “无缝”连接,反复迭代的渐进性,都更利于对大型软件实施分而治之, 化整为零的策略.,5. 可维护性好 (1) 面向对象的软件稳定性比较好。

38、如前所述,当对软件的功能或性能的要求发生变化时,通常不会引起软件的整体变化,往往只需对局部作一些修改。由于对软件所需做的改动较小且限于局部,自然比较容易实现。 (2) 面向对象的软件比较容易修改。 类是独立性好的模块。如果不修改该类的对外接口,则可以完全不影响软件的其他部分。 继承机制,使得对软件的修改和扩充比较容易实现。 多态性机制(见9.2.2节),使得当扩充软件功能时对原有代码所需作的修改进一步减少。,(3) 面向对象的软件比较容易理解。 面向对象的软件技术符合人们习惯的思维方式,所建立的软件系统的结构与问题空间的结构基本一致。 对象类有很强的独立性,当派生新类时候不需要了解其他类中的实现细节。因此,了解原有系统的工作量大幅度下降。 (4) 易于测试和调试。 软件是否易于测试和调试,是影响软件可维护性的一个重要因素。 类的独立性使对类的测试比较容易实现,如果发现错误也往往集中在类的内部,比较容易调试。,面向对象方法学的要点(OCIM) 和 5 大优点, 源于它的接近人类思维的恰当的解空间抽象模型:对象.用UML建立对象和用例模型.对象, 动态和功能模型及关系,9.8 小结,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报