1.67k likes | 1.89k Views
面向对象系统分析与设计. 面向对象系统分析与设计. 7.1 面向对象的发展历史 7.2 面向对象的基本概念 7.3 面向对象的方法论 7.4 面向对象的分析 7.5 面向对象的设计 7.6 面向对象与统一建模语言. 面向对象系统分析与设计. 面向对象的历史与发展. 古希腊哲学家的论著. K.Nyguard 等设计的 Simula 67. Alan Keyz 主持设计的 Smalltalk. 以 Smalltalk 80 和 C++为代表的语言. 面向对象 的应用深入. 面向对象 的系统开发. Integer Real Boolean ….
E N D
面向对象系统分析与设计 • 7.1 面向对象的发展历史 • 7.2 面向对象的基本概念 • 7.3 面向对象的方法论 • 7.4 面向对象的分析 • 7.5 面向对象的设计 • 7.6 面向对象与统一建模语言
面向对象系统分析与设计 面向对象的历史与发展 古希腊哲学家的论著 K.Nyguard等设计的Simula 67 Alan Keyz主持设计的Smalltalk 以Smalltalk 80和C++为代表的语言 面向对象的应用深入 面向对象的系统开发
Integer Real Boolean … 抽象数 据类型 用户 定义 01010101 100100 面向对象系统分析与设计 • 数据抽象 – 一种设计方法 • 把一组数据及作用与其上的操作组成一个设计实体或单位。接口说明外部可见,其实现是隐蔽的,不可见的。 • 发展的三个阶段
功能抽象 模块 数据抽象 模块 面向对象系统分析与设计 • 抽象数据类型 • 抽象数据类型是指“一个值集和作用在该值集上的操作集”。抽象数据类型的定义只决定于其逻辑特性,与其具体的计算机内部实现无关。一个抽象数据类型可以分解为语法、语义、表示和算法4个部分。
面向对象系统分析与设计 • 抽象数据类型的实现 • 实现抽象数据类型需要借助于高级程序设计语言(Pascal,C,C++,…); • 在面向过程的语言中,用户可以自己定义数据类型;(ADA Package, Pascal Unit) • 在面向对象的程序设计语言中,借助于对象描述抽象数据类型。(Class)
面向对象系统分析与设计 • 问题求解 • 面向对象设计方法:实现问题空间和问题求解空间的近似和直接模拟。 抽象部分 教室类 意识部分 教室 物质部分 303教室 具体部分 一个对象:教室实例 解空间 现实问题空间
面向对象技术概述 面向对象的特点 • 封装机制 • 基于消息的通信 • 继承机制 • 多态机制
面向对象系统分析与设计 • 7.1 面向对象的发展历史 • 7.2 面向对象的基本概念 • 7.3 面向对象的方法论 • 7.4 面向对象的分析 • 7.5 面向对象的设计 • 7.6 面向对象与统一建模语言
7.2面向对象的基本概念 • 基本概念与特点 • 对象(Object) • 消息(Message) • 类(Class) • 实例(Instance) • 继承(Inheritance) • 封装(Encapsulation) • 多态(Polymorphism)
面向对象的世界观 • 把客观世界从概念上看成是一个由相互配合而协作的对象所组成的系统 • 面向对象=对象+分类+继承+通信 • 一个实例——椅子
类:家具 价格 尺寸 重量 位置 颜色 对象:椅子 价格 尺寸 重量 位置 颜色 对象:桌子 价格 尺寸 重量 位置 颜色 买 卖 移动 买 卖 移动 买 卖 移动 一个面向对象的实例——椅子
7.2面向对象的基本概念 • 对象(Object) • 对象是用来描述客观存在的事物,它是构成系统的基本单位,是对客观世界中事物的抽象描述。 对象 = 行为(功能、方法、服务) + 属性(数据) 对象 对象 属性 对象 行为 对象 接口
7.2面向对象的基本概念 • 对象是由私有数据(属性)及作用于其上的一组操作(行为)所构成的一个封闭整体 • 由于对象的数据是私有的,所以要想访问其数据的正确方法是向该对象发送消息,让对象自身选择其内部相应的操作以完成对该项数据的访问 • 对象的动作取决于外界给对象的刺激,这就是消息,消息告诉对象所要求它完成的功能。对象具有一定的智能功能,即“知道”如何选择相应的操作来处理对象所接收的消息 • 从设计人员的角度看,对象是一个完成特定功能的程序块 • 从用户的角度看,对象为他们提供了所希望的行为
7.2面向对象的基本概念 • 对象(Object) • 对象标识 • 对象生命周期 • 一般对象 • 主动对象 • 永久对象
7.2面向对象的基本概念 • 类(Class) • 一个对象类描述的是具有相似性质(属性)的一组对象,这组对象具有一般行为(操作),一般的关系(对象之间)及一般语义。 • 类是对象类的缩写,类中的对象有着相同的属性、行为模式。 将事物进行归纳划分成不同的一些类是人们认识客观世界的基本思维方法。这种方法依据的原则是抽象,它忽略了客观事物非本质特性,将客观事物所具有的共同点,即本质特性划分为一类,形成对事物的本质认识,得出事物的抽象结果。
7.2面向对象的基本概念 • 类(Class) 结构化程序设计 面向对象的程序设计
数据 消息到达 方法 7.2面向对象的基本概念 • 消息(Message) • 对象之间的联系是通过传递消息来实现的。 • 是对象之间进行通讯的一种数据结构。 • 消息统一了“数据流”和“控制流”。
7.2面向对象的基本概念 • 消息 - 消息传送与函数调用的区别 • 函数调用可以带或不带参数,但是消息至少带一个参数,它表明接收该消息的对象,消息中告诉对象做什么的部分称为消息操作; • 消息操作名类似于函数名,其本质区别在于:函数名代表一段可执行的代码,但消息操作名具体功能的选定还取决于接收消息的对象本身 • 函数调用是过程式的(如何做),消息传送是说明式的(做什么),具体如何做,由对象根据收到的消息自行确定。
7.2面向对象的基本概念 • 属于某类的具体对象就是该类的实例。一个类的不同实例必定具有: • 相同的操作(或行为)的集合 • 相同的信息结构或属性定义,但可以有不同的属性值 • 不同的对象标识
7.2面向对象的基本概念 • 实例(Instance)
7.2面向对象的基本概念 • 继承(Inheritance) • 是自动共享类、子类和对象中的方法和数据的机制。是实现从可重用成分构造系统的最有效的特性
7.2面向对象的基本概念 • 封装(Encapsulation) • 封装封装是一种信息隐蔽技术,就是把对象的属性和行为相结合构成一个独立的基本单位,用户只能见到对象封装界面上的信息,对象内部对用户是隐蔽的。封装的目的在于将对象的使用者和对象的设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息访问对象
7.2面向对象的基本概念 • 封装的定义为: • (1)一个限定所有对象内部软件的一个清楚界面; • (2)一个描述这个对象和其它对象之间相互作用的接口 • (3)受保护的内部实现,这个实现给出了由软件对象提供的功能细节,实现细节不能在定义这个对象的类的外面访问 方法 存储结构 公有消息 Pos Color … … 协..……议 一个对象 私有消息
7.2面向对象的基本概念 • 多态(Polymorphism) 即一个名字具有多种语义。 • 同一对象接收到不同消息采用不同的行为方式 • 不同对象收到相同消息时产生不同的动作 • 重载(overload) • 动态绑定 • 类属
面向对象系统分析与设计 • 7.1 面向对象的发展历史 • 7.2 面向对象的基本概念 • 7.3 面向对象的方法论 • 7.4 面向对象的分析 • 7.5 面向对象的设计 • 7.6 面向对象与统一建模语言
分析方法的改进 • 分析工作面临的问题 • 问题域和系统任务 • 通信 • 需求变化 • 重用
7.3面向对象的方法论 • 处理复杂问题的原则 • 抽象(Abstract) • 封装(Encapsulation) • 继承(Inheritance) • 相关(Association) • 消息通讯(Communication with message) • 组织方法(Method of organization) • 规模(Scale) • 行为规范(Categories of behavior)
7.3面向对象的方法论 • 从认识论看面向对象 信息系统认识的三个方面
7.3面向对象的方法论 采用面向对象的概念及其抽象机制建立应用系统模型,将系统开发视为对象模型的转换和不断细化过程 • 优点 • 与其他建模方法的关系
面向对象方法的优点 • 它是在人类思维的3个基本方法的框架(即:对象分类、封装和继承)之内定义并表达需求; • 主要集中于对问题空间的分析与理解; • 使属性和对属性的服务作为一个整体看待; • 使对象之间的依赖达到最小; • 可以对一类对象的共同特征显式的表示; • 使分析与设计拥有共同和一致的基本表示
分析方法的改进 • 分析方法 • 功能分解法 • 数据流法 • 信息模拟法 • 面向对象法
分析方法的改进 • 分析方法 – 功能分解法 功能分解 = 功能 + 子功能 + 功能接口 • 将问题域映射为功能和子功能。 • 为系统必须提供的功能和子功能编写文档。 • 产生的规格说明只能间接的反映问题域。
分析方法的改进 • 分析方法 – 数据流法(结构化方法) 数据流法 = 数据流 + 数据变换 + 数据存储 + 过程规格说明 + 数据字典 • 将现实世界映射为数据流图。刻画数据从输入到输出的信息流。 • 面向对象方法代表了相对于面向过程的根本性变化。面向过程的观点是系统被分解后,用过程来实现系统的基础构造,把对问题域的分析转化为对求解域的设计,分析的结果是设计阶段的输入
分析方法的改进 • 分析方法 – 信息模拟法 信息模拟法 = 对象 + 属性 + 关系 + 超类/子类 + 有关对象 • 面向对象方法相对于面向数据的方法学仅仅是适当增补
分析方法的改进 • 分析方法 – 面向对象法 面向对象法 = 对象 + 类 + 继承 + 消息通信 面向对象的方法是采用构造模型的观点。在系统的开发过程中,各个步骤的共同目标是建造一个问题域的模型,因此虽然分析与设计是不同的系统开发阶段,但它们全是为实现这一目的而努力的。系统分析不是设计的输入,从分析到设计的转移是一致的。这就是在分析阶段把系统分解成实体及其关系,设计则是解决这些实体和关系如何实现的问题
面向对象的方法论 • 解决语言的鸿沟
面向对象的方法论 • 语言的鸿沟变窄
面向对象的方法论 • 分析与设计的鸿沟
面向对象分析设计的基本思路 • 识别对象和类 • 通过一组互相关联的模型详细表示类之间的关系和对象的行为,并最终描述系统的信息、功能和行为 • 静态逻辑模型 • 动态逻辑模型
识别对象和类 • 为了发现对象和类,开发人员要在系统需求分析的文档中查找名词和名词短语,包括可感知的事物(雷达、火炮、传感器);角色(指挥官、操作员、士兵);事件(线路中断、登陆、收到命令);互相作用(指挥、控制、战斗);人员;场所;组织;设备;地点等 • 发现重要的对象和其责任,是面向对象分析设计的初期重要的技术
静态逻辑模型 • 静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。这被称为对象模型。一般化关系表示属性和方法的继承关系。定义对象模型的图形符号体系通常是从用于数据建模的实体关系图导出的。对设计十分重要的约束,如基数(一对一、一对多、多对多),也在对象模型中表示
动态逻辑模型 • 动态逻辑模型描述对象之间的互相作用。互相作用通过一组协同的对象,对象之间消息的有序的序列,加上对象的可见性定义,来定义系统运行时的行为
面向对象方法综述 • Booch方法 • Coad/Yourdon方法 • Jocobson方法(OOSE方法) • Rambaugh方法(OMT方法) • Wirfs-Brock方法 • RDD方法 • VMT方法
标识类和对象 标识类和对象的语义 提出候选对象 进行行为分析 标识相关场景 为每个类定义属性和操作 选择场景并分析 赋予责任以完成希望的行为 划分责任以平衡行为 选择一个对象,枚举其角色和责任 定义操作以满足责任 寻找对象间的协作 标识类和对象间的关系 进行一系列精化 定义对象间存在的依赖 描述每个参与对象的角色 通过走查场景进行确认 对上面的工作制作适当的图解 定义合适的类层次 完成基于类共性的聚合 Booch方法
微观过程 宏观过程 Booch方法 把系统的开发工作分为两个部分:微观过程和宏观过程。
属性 认定属性; 确定属性的位置; 认定和定义实例关联; 重新修改关于对象的认定; 对属性及实例关联进行规格说明 类和对象 从问题域、文本、图形中寻找; 哪些可以作为对象; 对候选对象要考察什么; 什么是需要质疑的; 如何命名对象 服务(方法) 认定基础服务; 认定辅助服务; 认定消息关联; 对服务进行规格说明 结构 一般-特殊结构的认定; 整体-部分结构的认定; 消息连接 主题(子系统) 主题的划分; 主题的合并; 主题层次的控制 Coad/Yourdon方法 五个层次的 问题域模型
用户标识 建造需求模型 标识系统的用户和他们 的整体责任 定义参与者和他们的责任; 为每个参与者标识使用实例; 准备系统对象和关系的初步视图; 应用使用实例作为场景去复审模 型以确定有效性 建造系统模型 使用参与者交互的信息来 标识界面对象; 创建界面对象的结构视图; 表示对象行为; 分离出每个对象的子系统和模型; 使用使用实例作为场景去复审模 型以确定合法性 Jocobson方法(OOSE方法) 使用实例(use case)驱动,它建立的所有模型都是以使用实例模型为基础的。 使用实例——用以描述用户和系统间如何交互的场景
对问题范围的陈述 建造对象模型 标识和问题相关的类; 定义属性和关联; 定义对象链接; 用继承来组织对象类 构造系统的功能模型 开发动态模型 标识输入和输出; 使用数据流图表示流变换; 为每个功能开发PSPEC; 规定约束和优化标准 准备场景; 定义事件并为每个场景 开发一个事件轨迹; 构造事件流图; 开发状态图; 复审行为的一致性和完整性 Rambaugh方法(OMT方法) 创建三个模型:对象模型(对象类、层次和关系的表示)、动态模型(对象和系统行为的表示)和功能模型(高层的类似DFD的系统信息流的表示)
Rambaugh方法(OMT方法) 主要分为分析、设计和实现三个阶段。 分析阶段:确定对象模型、动态模型和功能模型 设计阶段:系统设计和对象设计 实现阶段的细节和具体的实现环境有关 OMT方法突出的特点是在分析阶段,它可以较为全面地描述系统的静杰结构,所以0MT方法适合于数据密集型的信息系统的开发。