1、第七讲 面向对象的系统分析与设计,主讲:肖红彦 武汉理工大学管理学院信管系,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,2,本章教学目标,理解并掌握 基本概念 清晰、准确、熟练地掌握面向对象方法的主要思想、基本概念与原则。 面向对象的分析( OOA ) 掌握 OOA 的主要概念,了解建模过程,会应用 面向对象的设计( OOD ) 掌握 OOD 的主要概念,了解建模过程,会应用。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,3,本章主要内容,面向对象方法概述(2学时) 系统开发的方法论 传统开发方法综述 面向对象的基本思想 面向对象方法的主要概念 面向
2、对象的开发方法 面向对象的建模语言(2学时) 类图及用例图 状态图及顺序图 活动图及协作图 配置图及组件图 面向对象的系统分析与设计(2学时) 面向对象的系统分析 面向对象的系统设计 面向对象的系统实施,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,4,面向对象方法入门,7.1 面向对象方法概述,本节要点 系统开发的方法论 传统开发方法综述 面向对象的基本思想 面向对象方法的主要概念 面向对象的开发方法概述,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,5,7.1.1 系统开发的方法论,1.计算机系统求解问题的过程 明确现实世界的问题 根据求解问题的目的
3、将现实世界问题作相应限定,就获得求解问题的空间 经抽象规范化处理就获得了计算机求解问题的空间 再经计算机求解并可获得问题的解。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,6,2.软件系统开发的主要活动,软件开发过程可以归结为两项主要活动: (1)认识 (2)描述 最初的描述是借助于自然语言 最终的描述必须使用一种计算机所能够阅读理解的编程语言,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,7,3. 语言的鸿沟,编程 语言,语言的鸿沟,语言的过渡(人),对问题域的认识(人),编程(人),程序的理解执行(机器),自然 语言,2018/10/17,主讲:管
4、理学院信息管理与信息系统系 肖红彦,8,编程语言的发展使鸿沟变窄,自然 语言,编程 语言,语言的鸿沟,机器语言,汇编语言,非面向对象语言,面向对象语言,怎么办,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,9,软件工程学的发展进一步缩小鸿沟,语言的鸿沟,自然 语言,编程 语言,详细设计,编程/测试,总体设计,需求分析,分析与设计的鸿沟,分析与设计概念及表示法的不一致,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,10,对象化开发方法消除鸿沟,自然 语言,面向对象的 编程语言,OOD (面向对象的设计),OOA (面向对象的分析),语言的鸿沟,OOP/ O
5、OT (面向对象的程序设计/面向对象的测试),2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,11,7.1.2传统开发方法综述,功能分解法(function decomposition) 数据流法(data flow approach) 基于数据的方法(E-R方法) 信息建模法(information modeling) 其他方法 有限状态机方法 基于规则的系统,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,12,传统开发方法总结,传统的方法大都只从人的一种视角,作为构造块来描述系统,而没有容纳其他视角。 例如 结构化分析和设计集中于将功能作为系统的构造块
6、, 在数据分析方法中(实体关系模型)构造块是实体,但在该方法中用来满足系统需求的功能被完全忽略掉了。 两种方法都没有处理对动态行为的捕获。 声明性语义(规则)以及例外处理机制都被完全忽略了。 上述方法都仅基于一个角度看待系统,对系统的其 它视图建模方面的能力都很弱。但对 OO 的产生都做出了一 定的贡献。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,13,7.1.3 面向对象的基本思想,所谓“面向对象”是一种认识客观世界的世界观,从结构组织角度模拟客观世界的一种方法。 面向对象的基本出发点 尽可能按照人类认识世界的方法和思维方式来分析和解决问题。 客观世界可以看成由许多不
7、同种类的对象构成,每个对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用构成了完整的客观世界。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,14,7.1.3 面向对象的基本思想,对象=(算法)+(数据结构), 程序=,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,15,7.1.4 面向对象的基本概念,面向对象中的主要概念: 对象、属性、服务(操作)、类、继承、封装、消息、多态性、连接关系等 1.对象(object),Lamp on() off() brighten() dim() init light,抽象,Type Name,Inter
8、face,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,16,“计数器”counter,属性value,保存值; 具有三个服务: init() 置value为0; dec() 使value减1; inc() 使value加1。,抽象,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,17,对象的概念,对象:是指在系统中用来描述客观事物的一个实体,它是 构成系统的一个基本单位。一个对象由一组属性和 对这组属性进行操作的一组服务构成;,属性:用来描述对象静态特征的一个数据项,它表明了对象的一个状态;,服务(方法、操作):用来描述对象动态特征的一个操作序列,对象将
9、数据(属性)和功能(服务)封装在一起,对象标识:就是对象的名字,用来在问题域中区分其他对象。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,18,例:窗口对象,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,19,对象的特点,以数据为中心。 对象是主动的。 实现了数据封装。 本质上具有并行性。 模块独立性好。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,20,2. 类(Class),抽象与分类是人们认识客观世界的基本方法。 抽象:忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,叫做抽象; 分类:把具有共同
10、性质的事物划分为一类,得出一个抽象的概念,叫做分类。 不同程度的抽象可得到不同层次的分类,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,21,类(Class)的概念,在面向对象的程序设计过程中,实际做的是建立新的类 (class) 在一个类中,每个对象都是类的实例(Instance)它们都可使用类中提供的函数。对象的状态则包含在它的实例变量(即实例的属性)中。,类:是具有相同属性和服务的一组对象的集合,它为属 于该类的全部对象提供了统一的抽象描述,其内部 包括属性和服务两个主要部分,类是单个的语义单元,它可以很自然地管理系统中的对象,匹配数据定义与操作。类定义可以视为一个具
11、有类似特性与共同行为的对象的模板,可用来产生对象。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,22,类和对象的程序描述,class Lampon() this.light = 50; off() this.light = 0; brighten() this.light+; dim() this.light-; init light = 0; /亮度 ,一个类建立以后,就可以使用这个类建立任意多的对象,Lamp myLamp = new Lamp(); Lamp yourLamp = new Lamp(); ,2018/10/17,主讲:管理学院信息管理与信息系统系 肖
12、红彦,23,3. 继承(Inheritance),继承:特殊类拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 继承具有传递性,若类C继承类B,类B继承类A,则类C继承类A。 继承关系的语义:“is a kind of”,继承意味着自动拥有,或曰隐含地复制 继承者称为子类,被继承者称为父类(基类),单一父类的情形称为单继承(例如树形结构),两个以上父类的情形称为多继承。 子类从基类中继承属性和服务,根据需要添加自己的属性和方法。,例1,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,24,多继承,多继承:允许一个特殊类具有一个以上一般类的继承模式称作多继承 继承具有传
13、递性,若类C继承类B,类B继承类A,则类C继承类A。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,25,4. 封装(Encapsulation),封装:把对象的属性和服务结合成一个独立的系统单位(1)并尽可能隐蔽对象的内部细节(2),作用 (1) 把对象全部属性和全部服务结合在一起,形成一个不可分割的独立单位(对象) (2) 尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,26,5. 消息(Message),消息:就是向对象发出的服务请求,它应该含有下述信息: 提供服务的
14、对象标识 服务标识 输入信息和回答信息。 对象通过它对外提供的服务在系统中发挥自己的作用。当系统中的其它对象(或其它系统成分)请求这个对象执行某个任务时,它就响应这个请求,完成指定的服务所应完成的职责。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,27,6 . 多态性(Polymorphism),多态性是指“同一接口,多种方法”的面向对象原则,即同一个消息被不同的对象接收后,可以产生不同的动作或不同的执行结果。 多态意味着同一个命名可具有不同的语义。OO方法中,常指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。 对于子类,可用不同的
15、方法替代实现父类服务的方法。 用途:把具有共同基类的对象组成一组,并对它们进行一致的处理。 例如,多边形下的三角形、长方形、正多边形。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,28,多态举例,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,29,7. 连接关系,类(及其对象)之间的四种关系 分类关系、继承泛化(一般-特殊) Generalization (generalization-specialization) 构成关系聚合(整体-部分) Aggregation (whole-part) 静态联系关联(实例连接) Association (ins
16、tance connection) 使用关系(行为依赖)依赖 Dependency 这些关系形成了类图的关系层,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,30,7.1.5 面向对象的开发,一切都是对象 例题:编写一个开发票程序,需要对发票的明细栏进行计算。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,31,在软件生命周期全过程运用面向对象方法,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,32,7.2 统一建模语言UML,本节内容: 类图及用例图 状态图及顺序图 活动图及协作图 配置图及组件图,2018/10/17,主讲:管理学
17、院信息管理与信息系统系 肖红彦,33,构建系统模型的视图,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,34,使用视图对系统建模的含义,使用视图对系统建模有两个含义。 第一个含义是,可以把系统分解成几乎是正交的包,每个包表达了一组体系结构上的重大决策。 第二个含义是,这些包都拥有与相应视图密切相关的所有抽象。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,35,UML的视图,为了从不同视角完整地观察分析系统,UML定义了9种模型视图。在系统开发的不同阶段,会用到不同的视图。 这些视图可以划分为二大类 结构图(Structural Diagram) 结构图
18、描述的是系统的静态特性。 结构图包括4种图:类图、对象图和组件图、部署图。 行为图(Behavioral Diagram) 行为图描述系统的动态特性,即反映构件、类、用户和系统之间的交互、流程等。 行为图包括5种图:用例图、状态图、活动图、序列图和协作图等,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,36,UML的模型图标元素,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,37,7.2.1 用例图,用例(use case)图 用例是第二代面向对象技术的标志 从用户的观点描述系统行为或系统使用场景。,2018/10/17,主讲:管理学院信息管理与信息系统
19、系 肖红彦,38,7.2.2 类图,类图描述类之间的静态关系,如关联;聚类/组成;继承。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,39,7.2.3 状态图,什么是对象的状态? 对象技术词典的定义:对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、情况、条件、形式或生存周期阶段。 例1:一个容量为1000的栈,需要区分几种状态?在此例中,每一种状态是一组使对象呈现共同行为规则的属性值组合。 例2:为“设备”对象设立一个属性,名为“状态” 属性值:关闭、待命、运行、故障等。 在这里,“状态”是一个专门设置的属性,它的值反映了实际事物的状态,201
20、8/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,40,状态图,状态图 在任何给定的时刻,一个对象总处于某一特定的状态; 一个状态图包括一系列的状态以及状态之间的转移。 状态图图例如右图所示。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,41,7.2.4 顺序图,顺序图所表达的是系统运行中,对象之间的基于时间的动态交互关系,着重体现对象间消息传递的时间顺序。 图中,时间是由上向下,竖虚线为对象的生命线,其上的窄矩形表示对象处于活动期。实线箭头表示调用别的对象中的操作,虚线箭头表示被调用对象的返回,控制权回到调用者处 。,2018/10/17,主讲:管理学院信息管
21、理与信息系统系 肖红彦,42,7.2.5 活动图,既可用来描述操作(类的方法)的行为; 也可以描述用例和对象内部的工作过程。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,43,7.2.6 协作图,协作图表达为完成系统的工作目标,系统中相互合作的对象间的交互关系和链接关系。 与顺序图不同,协作图着重体现交互对象间的静态链接关系。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,44,7.2.7 组件图与配置图,组件图与配置图与整个计算机系统密切相关。 组件图表示信息系统的软件结构, 配置图显示信息系统的物理体系结构。,组件图,配置图,2018/10/17,
22、主讲:管理学院信息管理与信息系统系 肖红彦,45,7.3 面向对象的系统分析,面向对象分析的概念: 系统分析是指对问题领域进行分析,明确问题是什么,以及要做些什么来解决问题。 面向对象对象,类关系(结构与连接)继承封装消息通讯 面向对象分析的基本任务: 运用面向对象方法,对问题域和系统责任进行分析和理解,找出描述问题域及系统责任所需的对象,定义对象的属性、服务以及它们之间的关系。 目标是建立一个符合问题域、满足用户需求的OOA模型。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,46,不同的分析方法 对现实世界(问题域)的不同映射,2018/10/17,主讲:管理学院信息管
23、理与信息系统系 肖红彦,47,OOA模型,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,48,7.3.1 问题域陈述,问题域(problem domain): 问题域是指被开发系统的应用领域,即在现实世界中由这个系统进行处理的业务范围。 考虑问题的思路: 把系统看作一个黑箱,看它对外部的客观世界发挥什么作用,描述它外部可见的行为。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,49,问题域陈述,开发人员对问题域的陈述是系统分析的基础。用户最初提出的要求通常都是不够明确和具体,有时甚至是很含糊不清的。通过与用户不断交流,开发人员能够加深对问题领域的认识,经
24、过讨论、修改与补充,逐步明确与具体化获得对问题域详尽的陈述。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,50,问题域陈述的主要工具:用例图,用例图:主要用于对系统、子系统或类的行为进行建模。 通过表示在语境中参与者如何与系统交互,使得用户和开发者易于探讨和理解系统、子系统和类等问题域的概念。 易于对需求规范化 有利于进行OOA 有助于发现主动对象 对系统测试来说,产生测试用例。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,51,研究用户需求的方法,阅读:阅读一切与用户需求有关的书面材料 交流:与用户交流,澄清疑点, 调查:到现场调查(只限于澄清需求
25、) 记录、整理:产生一份符合工程规范、确切表达系统责任的需求文档(补充用况图)。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,52,7.3.2 识别对象类,构建分析模型的基础是对象类 对象可分为实体对象、接口对象和控制对象三类 实体对象:指在问题领域中直接认识到的对象它代表了要为之存储数据的现实或抽象的东西; 接口对象:是一种技术性对象,用于连接应用(应用问题应用软件)和外界系统或用户 如用户接口屏幕,尤其重要的是实体对象的数据通常都是经由接口对象进出应用的; 控制对象:主要用来协调实体对象和接口对象的活动。 在分析阶段识别的主要是实体对象。,2018/10/17,主讲:
26、管理学院信息管理与信息系统系 肖红彦,53,7.3.3 确定对象的属性,识别属性的方法 按常识这个对象应该有哪些属性? 在当前的问题域中,对象应该有哪些属性? 根据系统责任,这个对象应具有哪些属性? 如信用卡的使用 建立这个对象是为了保存和管理哪些信息? 对象为了完成其功能,需要增设哪些属性? 对象是否需要通过专设的属性区别其状态? 如设备 用什么属性表示聚合和关联? 可利用需求文档中的形容词或所有格短语。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,54,7.3.4 确定对象的服务,服务的种类 内部服务 外部服务 服务的类型 “做”型: 自己完成某件任务 触发其他对象执
27、行动作 控制和协调其他对象内的活动; “获知”型: 获知自己的属性 获知与自己相关联的对象的信息 获知自己派生或计算出来的事物。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,55,例:超级市场销售管理系统,超级市场业务管理系统的子系统,只负责前台的销售管理。 功能需求: 为顾客选购的商品计价、收费、打印清单。 记录每一种商品的编号、单价及现有数量。 帮助供货员发现哪些商品将要脱销,以及时补充货源。 随时按上级系统的要求报告当前的款货数量、增减商品种类或修改商品定价。 商品中有两类特殊商品:特价商品、计量商品 交接班时结算货款数目,报告上级系统。 发现对象: 商品、收款机、
28、销售事件、商品一览表、供货员、上级系统接口、特价商品、计量商品、帐册,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,56,识别对象,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,57,识别属性与服务,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,58,7.3.5 定义对象类的关系,对象之间的关系分为四种: 泛化(一般-特殊) Generalization (generalization-specialization) 聚合(整体-部分) Aggregation (whole-part) 关联(实例连接) Association (in
29、stance connection) 依赖 Dependency 在分析阶段侧重描述对象间的静态关系,对象间的消息连接则放在设计阶段完成。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,59,1、 识别泛化,(1)学习当前领域的分类学知识 (2)按常识考虑事物的分类 (3)利用泛化的定义(右图) (4)看两个类的对象之间是否有“是一个”关系。 (5)考察类的属性与服务(左图),2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,60,2、识别聚合,(1)物理上的整体事物和它的组成部分 例:机器、设备和它的零部件 (2)组织机构和它的下级组织及部门 例:公司与子
30、公司、部门 (3)团体(组织)与成员 例:公司与职员 (4)一种事物在空间上包容其它事物 例:生产车间与机器 (5)抽象事物的整体与部分 例:学科与分支学科、法律与法律条款 (6)具体事物和它的某个抽象方面 例:人员与身份、履历 (7)在材料上的组成关系 例如,面包由面粉、糖和酵母组成,汽车是由钢、塑料和玻璃组成。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,61,3、建立关联,(1)认识对象之间的静态联系 考虑问题域和系统责任哪些类的对象实例之间的关系需要在系统中表达。 (2)认识关联的属性与操作 对于考虑中的每一种关联,进一步分析它是否应该带有某些属性和操作。就是说,
31、是否含有一些仅凭一个简单的关联不能充分表达的信息。 (3)分析并表示实例连接的多重性 从连接线的每一端,看本端的一个对象可能与另一端的几个对象发生连接,把结果标注到连接线的另一端。 (4)对多对多的关联的处理 (5)确定对象类之间的依赖关系,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,62,7.4 面向对象的系统设计,面向对象设计阶段要解决的问题: 1.配置分析阶段确定出来的对象和类; 2.实现系统功能; 3.建立系统体系结构, 面向对象系统设计的具体任务: 对实体对象进行增、并、改,并识别接口对象和控制对象。 确定实体对象、接口对象和控制对象之间的各种关系。 完善对象类
32、结构图,设计系统的体系结构。,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,63,面向对象设计的基本步骤,1.识别接口对象和控制对象 2.系统结构设计 3.结构框架内各个子系统的详细设计 问题领域子系统的设计 人机交互子系统的设计 外部接口子系统的设计 数据管理子系统的设计 任务管理子系统的设计 基础对象子系统的设计,2018/10/17,主讲:管理学院信息管理与信息系统系 肖红彦,64,【本章小结】,面向对象开发方法是新兴的系统开发方法,涉及的内容很多,往往是作为一门专门的课程。本章只是这种方法的入门引导,与方法中的技术细节相比较,更需要注重的应是其中新的概念、新的思维方式,以及用户至上、实践至上的理念。 本章首先介绍了面向对象方法的由来与发展,基本概念及其特点。 接着,较详细地介绍了统一建模语言UML这一种重要的可视化建模语言、工具,对其中的视图逐个做了说明。 第三节介绍了面向对象的系统分析中最重要的几个方面,诸如用户需求陈述处理、事件分析、域模型等。 第四节介绍的是面向对象的系统设计中的设计准则及最基本的设计技术。,