




已阅读5页,还剩187页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
地理信息系统工程设计原理与方法 4 GIS工程面向对象设计方法 程承旗北京大学遥感所 一 发展经过 20世纪60年代初期流行的计算机语言有FORTRAN COBOL及ALGOL60在算法 处理 上是把整个程序分为若干个子程序 而在数据组织方面 只有全局数据 globaldata 这样 各个子程序就通过共用数据联系起来 因而 一处有错 就会涉及其他 造成致命的 水波 影响 程序经过几次修改 就可能会面貌全非 控关系也会变成所谓 老鼠窝 式的 如入迷宫 这样的程序最后就会变成完全不能满足其使用要求 几乎根本无法进行维护修改 终致废弃 20世纪60年代中叶到70年代初 程序模块化逐渐成为程序设计的一个重要原则 结构化程序设计也在这时期开始逐渐形成起来 模块化是软件和信息系统工程中分而治之原则的一个体现 它包含抽象化与信息隐藏 infonnationhiding 两个概念 模块的某种结构构成整个系统 其中层次结构是最常见及最有用的 60年代末先有模拟语言SIMULA67的出现 其中体现了类和对象等两个基本观念 到丁70年代 乃有Smalltalk等正式面向对象的语言的出现 在面向对象程序设计和语言的影响下 80年代初乃有面向对象设计的正式形成与发展 最后 到了80年代底与90年代初 正式出现了面向对象分析 整个发展过程中贯穿的一条线索 是程序模块化的发展 以及由此而发展起来的抽象数据型 abstractdatatype 简称ADT 从模块化和ADT产生了对象概念以及面向对象的程序设计和语言 随后乃有面向对象的设计与分析的兴起与发展 直至今日 仍在演进之中 面向对象语言的出现以及面向对象程序设计的正式形成后 到了20世纪80年代 才有面向对象设计的出现 首先在1983年 Booch发表其著作 提出面向对象设计这个名词 当时他是用基于对象语言Ada 来讲如何进行面向对象设计的 1991年他发表新著 从面向对象观点 讲述系统研制的分析 设计 演进 包括编程 测试及合成 以及修改等四阶段 重点是讲设计 标志面向对象技术进入新的阶段 现代软件工程模式 现代软件工程是在传统软件工程模式的基础上 为了强调人在系统开发中的作用 同时为了适应面向对象新技术的发展趋势而提出的 其基本要点是 软件开发过程是以人为主 利用软件开发方法及工具进行的各种活动的有序过程 其中 开发人员的组织管理是软件开发成功的重要因素 基于软件组件的软件开发过程是在设计好系统体系结构后 利用软件组件的构造或重构的过程 现代软件工程模式的内容如图所示 1 1系统分析 在系统分析阶段 系统的逻辑结构应从信息 行为与表示三方面全面反映系统的功能与性能 如图所示 1 2系统构造 系统构造包括系统设计与实现 系统设计是分析结果的细化 在系统设计阶段 第一步就是考虑具体的实现环境 即将系统分析空间扩展为系统设计空间 如图所示 设计软件组件的主要内容是定义组件的结构 功能和外部接口 以及组件之间的相互关系和通信方式 1 3系统测试 1 4软件组件 将软件组件作为一个单独的过程 目的是将组件作为构造软件的 零部件 在符合国际或工业标准与规范的前提下 应具有一定程度的通用性和可重用性 同一个组件可能应用到不同的应用中 同时易于修改与维护 可以在不同的应用中进行裁剪后使用 1 5系统开发人员的组织管理 现代软件工程不仅包括软件开发方法 工具和过程 更强调人在开发过程中的作用 系统开发人员的组织管理是现代软件工程中的主要方法 系统开发人员的组织管理方法有以下几个要点 1 明确系统开发人员与用户之间的责任与义务 2 明确各类人员的主要工作及责任 3 制定或选择工程开发规范 二 面向对象的系统分析与设计方法 基本概念软件工程中的数据抽象和信息隐藏的思想 概念模型化研究领域中的语义数据模型和知识表示 CAD领域中的复杂对象模型等研究成果都包含了面向对象的基本思想 采用面向对象的方法 不论什么样问题与系统 我们都可以将其视为许多对象及其相互作用 例如 我们的环境是以人 树 汽车 房子 街道等及其相互作用为主要内容的 1 对象 Object 对象可以定义为客观世界中具体的或客观的事物 在计算机领域中 对象可视为是由一组数据 信息 和施加于该组数据上的一组操作 行为 组成的集合体 对象具有如下特征 1 有一个标识符 如同人的身份证 该标识符在所研究的问题域中必须是一的 用以区别于其它对象 2 有一个状态 由一组数据或由数据与其它对象的组合来描述 该组数据称为对象的属性 3 有一组操作 每一个操作决定对象的一种行为 对象的操作可分成两类 一类是自身所承受的操作 用来改变自身的状态 一类是施加于其它对象的操作 用来通过其它对象的某种操作改变其它对象的状态 体现为对象之间的相互作用 4 对象的状态只能由自身的行为来改变 5 对象之间是通过消息相互通信的 当一个对象要求另一个对象执行某种操作时 就向它发送一个消息 6 一个对象的状态可以由多个其它对象的状态构成 如果一个对象的状态由其它对象表示 则称构成它的状态的那些对象是它的属性 例如 一个名为张三的人 他的状态可能是 性别 男 身高 180cm 体重 68kg 他的操作可能是 回答身高 how tall 回答体重 how heavy 其它对象向张三发送一条消息how tall 张三将执行他的操作how tall 如果其它对象向张三发送一条消息what syourname 张三则不会采取任何行动 因为他不具有该操作 因而不理解这条消息 图1表示了对象的基本概念 2 类及实例 有些对象具有相同的结构特征和行为特征 例如 若存在张三 李四 王五三个对象 则因为这三个对象都是人 因此具有相同的结构特征和行为特征 或者说具有相同的结构或属性和相同的行为或操作 引入类的概念 类是一组具有相同结构特征和行为特征的对象 所有这些对象都是类的实例 一个类的不同实例 必定具有1 相同的操作 或行为 的集合 2 相同的信息结构或属性定义 但可以有不同的属性值 3 不同的对象标识 类是表现对象结构共性和行为的一种定义或模板或机制 类中至少包含了以下两方面的描述 1 本类所有实例的属性定义或结构的定义 2 本类所有实例的操作 或行为 的定义 应用类的概念 不仅可以描述对象之间的结构共性和行为共性 而且一个系统中不同类之间也存在着某种关联 例如 教师类和学生类之间存在着某种共性 将这些类之间的共性抽取出来形成一个单独的类 人 在类人中描述学生类和教师类中的共性 这样的话 类人的结构及行为特征可以被多个有关的类共享 例如教师 学生等 也就是说 教师 学生等类继承了人的结构与行为特征 如图所示 继承关系 利用类之间的继承关系 在类人中描述教师 学生等类的共性 在教师和学生类中只描述教师和学生的个性 简化类的描述 由此 我们得到继承性的含义 如果类B继承A 那么 类A中的所有属性和方法均成为类B的组成部分 同时称类B为类A的子类 类A为类B的父类 利用继承的机制可以将多个类之间的共性用一个类来描述 以便其它有关类继承 因此 继承性可以说是实现软件重用的核心思想 继承性的突出特点在于 1 使系统的修改或维护局部化 例如 当我们修改人的属性或操作后 这种修改将自动被继承到教师类和学生类中 在教师类和学生类中无需作任何工作 2 可以有效地避免系统结构的冗余 有利于简化系统描述 例如 由于类人描述了教师类和学生类的共性 使得教师类和学生类的描述大为简化 而只需描述其个性 如教师所教课程或学生的年级等 层次性的类结构 在类结构中的某一个类可能是从其父类采用继承的方法派生而来 同时 该类又可能被其子类继承 从而形成层次性的类结构 利用继承性 如何能得到一个好的或适应性强的系统结构呢 例如在上图中 如果我们想进一步描述研究生的有关信息和行为 一般情况 可能有下图所示的几种解决方案 1 研究生作为人的子类 我们可以定义人与研究生差异 2 研究生由学生继承而来 我们定义研究生的特殊属性和操作 即重新定义学生类中的回答学习计划操作 3 创建一个新类 本科生和研究生均由学生类继承而来 并分别定义本科生和研究生的回答学习计划的操作 究竟选择哪一种好呢 这要具体问题具体分析 考虑的因素可能有以下几个方面 是否要建立一个易于理解的类结构 重新组织类结构的费用有多高 如何进行系统结构的修改与维护 通常情况下 采用面向对象的方法描述系统时 建立一个易于理解的系统结构是至关重要的 因此 图中方案 C 是首选方案 为了创建研究生类 可以在学生类中描述研究生和本科生的共性 所做的工作只是重新组织类结构并创建研究生类 当在类结构中添加一个新类时 一般有四种方法 1 查看类层次结构 寻找一个合适的父类 利用继承性创建新类 2 直接创建一个与其它类无关的新类 3 重新组织类结构 创建一个既满足需求又能作为某个子类的类 如图所示 4 重新定义某个类的属性或 和 操作 在创建或描述新类时 有时需要继承两个或两个以上现有类的属性和操作 我们称之为多重继承 4 多态性 所谓多态 polymorphic 即一个名词可具有多种语义 它有两方面的含义 同一对象接收到不同消息采用不同的行为方式 同一消息可以根据发送消息对象的不同采用多种不同的行为方式 1 重载的概念在面向对象系统中 重载的含义是通过为函数和运算符创建附加定义而使它们的名字可以重载 也就是说相同名字的函数或运算符在不同的场合可以表现出不同的行为 下面是一个C 语言中函数重载的例子 classnumber inti floatx char sl public intmax inta returna i a I floatmax floatb returnb x b x char max char c returnstrcmp c sl 0 c sl 在这里重载了三个函数 均为max 它们的功能为将函数的参数分别与类中各私有数据比较大小 它们的函数名相同 其差别在于函数参数的类型不同 2 虚函数概念虚函数使用户在一个类等级中可以使用相同函数的多个版本 每一个版本均属于类等级中的不同的类 究竟使用的是哪一个特定的版本需要在运行中决定 3 面向对象系统的多态性面向对象系统的多态性指的是 当同一对象收到不同的消息时产生不同的动作或不同的对象收到相同的消息时产生不同的动作 5 封装性 封装是一种信息隐藏技术 用户只能见到对象封装界面上的信息 对象内部对用户是隐蔽的 封装的目的在于将对象的使用者和对象的设计者分开 使用者不必知道行为实现的细节 只需用设计者提供的消息来访问对象 封装的定义为 一个清楚的边界 所有对象的内部软件的范围被限定在这个边界内 一个接口 这个接口描述这个对象和其它对象之间的相互作用 受保护的内部实现 这个实现给出了由软件对象提供的功能的实现细节 实现细节不能在定义这个对象的类的外面访问 面向对象的语言以对象协议 protocol 或规格说明 speciafication 作为对象的界面 协议指明该对象所能接收的消息 在对象的内部 每个消息对应一个方法 方法实施对数据的运算 对方法的描述是协议的实现部分或叫类体 将对象的定义和对象的实现显式地分开是面向对象系统的一大特色 封装本身即模块性 把定义模块和实现模块分开 就便得面向对象技术所开发设计的软件的可维护性 可修改性大为改善 三 面向对象的开发方法 面向对象开发方法的核心思想 采用面向对象的概念与方法 以贴近人类自然的思维方式分析 抽象 表达系统开发过程中各方面信息 控制系统开发的复杂性 采用模型化的手段 将系统的开发过程视为由用户需求为起点的用户模型到测试模型为终点的一系列模型转化过程 以进一步抽象和简化系统 将系统开发过程划分为分析 构造 测试等阶段 以便合理组织与管理各类开发人员与用户 进一步控制系统开发的复杂性 1 系统模型 面向对象开发方法将系统开发过程划分为五个相互关联 语义一致的模型 需求模型 分析模型 设计模型 实现模型 测试模型 2 开发过程 系统的开发过程是一系列 瀑布型 循环往复 螺旋式上升的过程 如图所示 1 系统分析系统分析包括需求分析和结构分析 用户需求描述经过需求分析产生需求模型 需求模型经过结构分析产生分析模型 分析模型和需求模型作为系统构造的输入 如图所示 2 系统构造 系统构造包括系统设计及系统实现 如图所示系统设计过程中 将需求模型和分析模型作为输入 考虑具体的实现环境 设计分析模型中的每一个对象及对象之间的相互关系 形成设计模型 最后用某种具体的编程语言描述设计模型 形成以源代码为主要内容的实现模型 3 系统测试 系统测试过程如图所示测试过程根据需求与设计模型验证实现模型的正确性 形成系统测试模型 测试模型描述系统的单元测试 集成测试 系统测试过程及其测试结果 3 系统分析 3 1概述 无论采用何种开发方法 系统开发的第一步均是系统分析 系统分析起始于用户的需求描述 通常情况下用户的需求是以文本的方式或口头讲座的方式表达的 这种方式对系统的功能 性能以及使用方式的描述通常是不完整 不准确 甚至是模糊不清的 系统的需求客观上是变化的 不变是相对的 再者 利用用户需求描述是无法进行系统设计的 因为用户需求描述不具备结构化与形式化的要求 无法用计算机的概念与术语表达系统结构 功能等设计与实现细节 因此 需要采用结构化和形式化的方式来描述与定义系统 方便系统的设计 这就是系统分析的需求所在 系统分析方法及其结果应达到以下目标 采用面向用户和应用的结构化 形式化方法描述与定义系统的结构 功能 性能及用户使用系统的方式与方法 系统的结构 功能 性能及用户使用系统的方式与方法易于为用户和开发人员理解 系统的结构与功能独立于具体的 实现环境 具有相对的稳定性 易于随需求的变化进行结构的重构和功能的重组 系统分析的结果方便系统的设计 在系统分析阶段 在用户需求描述和与用户充分交流的基础上 建立系统的需求模型和分析模型 如图3 1所示 系统需求模型用于完整 准确地描述系统的功能 用户界面及用户操作方式 系统分析模型以对象作为基本构造单元 描述系统的逻辑结构 该逻辑结构独立于具体的实现环境 以便于面向用户与应用环境 进行结构的重构和功能的重组 3 2建立系统需求模型 需求模型从用户的观点出发 确定与描述系统的功能 系统的用户以及用户与系统的交互方式 需求模型作为沟通用户与开发者的桥梁 应该具有很好的可读性 需求模型作为系统开发的基础 在系统开发过程中 具有极其重要的作用 如图3 2所示 以需求模型为基础 抽取问题域中的对象作为基本单元 构造系统的逻辑结构 形成分析模型 该模型独立于具体的实现环境 以便适应环境及需求的变化 在系统设计阶段 根据系统的分析模型和需求模型 考虑具体的实现环境 进一步精化系统结构及功能 形成系统的设计模型 此时 需求模型是精化系统结构及功能的主要依据 实现模型以源码的形式实现需求模型中确定的系统功能及性能 在测试阶段 需求模型是进行系统测试的主要依据 此外 需求模型还是编写用户使用手册和操作指令的基础 因为需求模型是从用户的观点出发描述系统的 需求模型由用户类 用例和界面描述三部分组成 用户类用来描述系统的各种用户 用例用来描述系统的功能 界面描述用来陈述用户与系统的交互方式 1 用户类 用户类是指与系统进行信息交换的预期对象 它可能是同一类使用者或操作者 也可能是与系统进行信息交换的其它系统 也就是说 用户类定义了系统的对外界面 一个用户类定义了与系统进行信息交换的一类使用者 操作者 或一类其它系统 描述了该类使用者 操作者 或系统的行为 用例如 在案例X MIS中 可以从其需求描述中得知具有三个用户类 分别为仓储管理员 仓库主管和库管员 这些用户类以不同的方式与系统进行信息交换 完成各自的工作 如图3 3所示 如何识别系统中的全部用户类呢 识别用户类的一般的做法是根据系统的需求描述或与用户的交谈 着重思考如下两个问题 为什么要开发该系统 系统开发完成后 谁使用或操作系统 从第一个问题的答案中就可以确定系统的主要功能 根据第一个问题的答案 结合第二个问题的答案 便可识别系统主要的或全部的用户类 有时 识别系统的用户类不是一步完成的 在建立系统的需求模型时 可能首先识别出系统的主要用户类 随着分析与设计工作的展开与细化 还可能会识别出其它的用户类 2 用例 确定了系统的用户类之后 实际上是确定了系统的对外界面 接下来的工作是确定与描述系统的内部功能 这里 我们采用用例的概念来确定与描述之 用例是指利用系统提供的某些功能使用系统的某种方式 一个系统包含多个用例 每一个用例由用户触发的一个完整的事件流或有关的事务处理的特定序列组成 它描述了用户与系统的交互过程 用例与用户类是密切相关的 一个用户类可能操作一个或多个用例 用例定义了用户类使用系统的全过程 将所有用户类所使用的所有用例完整地描述出来 实际上就全面地描述了系统的功能 因此 用例是从用户使用的角度描述系统功能的一种方法 识别用例是通过用户类进行的 我们将一个用户类所进行的 使用或操作的 完整的事件流或事务处理的特定序列定义为一个用例 考查系统中的每一个用户类 阅读系统的需求描述或与用户交谈 确定该用户如何使用或操作系统 完成哪些任务或功能 在识别用例的过程中 思考并试图回答下列问题有利于问题的解决 每个用户类的主要任务是什么 每个用户类需要与系统交互 读 写 修改 哪些信息 在X MIS中 我们可以根据已识别出的用户类及系统需求描述识别出系统的用例 例如 对于用户类仓储管理员来讲 其主要任务有六项 第一是接收客户保存货物定单 与系统交互的信息有客户的名称 地址等信息 货物名称 性质及数量 货物所在地等 第二是接收客户提取货物订单 与系统交互的信息有客户信息 提取货物的名称及数量 将货物运送到什么地方等 第三是重新安排库存项目的货位 包括在不同仓库之间转存 以便更充分地利用仓库 第四是查询客户保存货物 提取货物的执行情况 以便回答客户的有关问题 第五是客户信息管理 第六是查询客户的存货情况 因此 用户类仓储管理员具有六个用例 整个系统的用例如图3 4所示 识别用例 般是 个反复迭代不断细化的过程 一旦某些用例基本确定下来后 便要对这些用例进行详细的描述 对于系统中的每 个用例 一般由两部分组成 部分是其基本过程 反映用例主要功能 部分是用例的可选过程 用来陈述基本过程的可变部分和可能的出错处理 一个用例只能有 个基本过程 但可以有多个可选过程 在识别和描述用例时 应尽可能多地识别其可选过程 特别是错误处理过程 因为用例的可选过程越多 系统的适应性越强 稳定性越好 下面我们给出X MIS系统中主要的用例描述 1 接收客户存货订单1 当仓储管理员接收客户存货订单时 系统弹出如图3 5所示的界面 2 根据客户提供的信息 仓储管理员填写有关的信息 例如客户名称 通信地址 存放日期 货物所在地 货物名称 特性 数量等 订单号和管理员可由系统自动填写 但可以修改 3 在仓储管理员填写有关存货订单的信息时 各项内容均可修改 当按下 确认 后 完成订单录入 按下 取消 后 取消订单录入 按下 帮助 后 系统显示当前窗口的帮助信息 4 系统根据录入的订单进行计划调度 确定货物存放的仓库 根据客户提供的货物地点 时间及数量 确定运输任务 5 确定运输任务后 根据各运输工具 例如卡车 的任务状况 按照费用最小的原则 制定运输计划 即将运输任务分配到特定的运输工具 可选过程 仓库中没有足够的仓储能力 系统通知仓储管理员不能接收客户存货订单 仓库中的货位不易存放该种货物 系统通知仓储管理员不能接收客户存货订单 在客户指定的时间 没有足够的运输能力将货物从存放地运到某一仓库 系统通知仓储管理员不能接收客户存货订举 一个用例应该是一个逻辑上关联的 内聚性强的事务处理序列 3 用例之间的关系 1 扩展关系扩展关系是指在一个用例中插入另一个完整的用例 用来扩充原来用例的功能 而又不影响原用例的基本功能和结构 被插入的用例必须是独立的和完整的 强调其独立性是使被插入的用例不影响原用例的结构 强调其完整性是使用例的插入作为原用例功能扩充的手段 并不影响用例原有的功能 例如 在用例 接收客户存货订单中 当用户按下 确认 后 系统要检查是否具有足够的仓储能力 如果有 是否能够存放该种特性的货物 是否有足够的运输能力等 这些过程实际上是被作为可选过程描述在用例中 但为了使用例的描述更简洁明了 具有很强的结构性 可以将这些可选过程分离出来 作为单独的用例 并利用扩展关系与原来用例联系起来 如图3 11所示 利用扩展关系将用例功能扩展后 原来的用例在其事务处理的某一个时刻 调用被插入的用例 当该用例的功能完成后 返回调用点 继续原来的处理流程 类似于结构化方法中的功能调用和逻辑分支 引入扩展关系后 可以使系统具有一个易于修改与扩充的系统结构 增强了系统对需求变化的适应能力 一般情况下 遇到下述情况时 可利用扩展关系组织系统中的用例 描述用例的可选部分 描述用例中某些不经常出现的过程 例如错误处理过程 扩充用例的功能 2 引用关系 在用例描述中 有时会出现多个用例描述具有相同部分的情形 这样 不仅增加了描述的工作量 而且给后期的分析与设计带来重复性的工作 为此 可以将多个用例中的相同部分抽取出来 形成一个独立的用例 这样 该用例与原来的几个用例之间便构成引用关系 例如 在 接收客户存货订单 接收客户提货订单 和 重新安排货物库存 用例中 都具有计划调度部分 将其从三个用例中抽取出来 形成一个抽象用例 计划调度 作为三个用例的共享部分 如图3 12所示 利用引用关系组织用例 不仅可以简化用例的结构 更重要的是增加系统中某些部件的重用性 减少系统分析与设计的工作量 4 界面描述 界面是系统的外部表现形式 也是用户与系统或系统与其它系统进行信息交换的具体形式 正因为如此 由于不同用户习惯与爱好的不同以及硬件与其它系统的可变性 使得系统界面成为引起系统需求变化的重要因素 因此 在识别与描述用例的过程中 从用户的角度出发 通过与用户进行充分的交流 对系统界面进行尽可能详细的描述 是建立系统需求模型的重要组成部分 界面描述包括用户与系统交互的人机界面以及系统与其它系统交换信息的协议 对于人机界面 在描述系统的各个用例过程中 应详细给出各个过程用户与系统进行交互的具体格式与内容 这样做 一方面可以更加生动地描述用例中的事务处理过程 另一方面可以将未来的系统呈现在用户的面前 使需求模型更贴近用户需求 避免以后不必要的返工和修改 例如图3 5就是界面描述的具体体现 对于系统与其它系统的界面 一般更多地体现在信息交换的内容与格式方面 在需求分析阶段 只将其它系统视为系统的用户类 与一般的用户类同等对待 5 建立需求模型的过程 前面详细介绍建立需求模型时涉及到的一些重要概念 方法 利用这些概念与方法 可以得到建立需求模型的过程建立需求模型是一个不断调整与细化的过程 直到完全满足用户需求为止 由图3 13可知建立需求模型的一般过程如下 3 3建立系统分析模型 系统需求模型全面地描述了系统的功能 行为 和外部界面 建立了系统的需求模型后 应建立系统的分析模型 建立分析模型是以系统中的对象为基本单元 采用对象及其相互关系的方法 描述系统的逻辑结构 该逻辑结构独立于具体的实现环境 以便使系统结构具有相对的稳定性 易于适应需求的变化和功能扩充 分析模型从信息 行为 表示三方面描述系统的结构与功能 在信息方面 主要描述系统所要处理的永久性或临时性信息 这些信息体现了系统的状态 在行为方面 主要描述系统的处理过程 即功能 体现了系统状态转换的时机与方式 在表示方面 主要描述系统的对外界面 为此 将分析模型中的对象分为实体对象 控制对象和界面对象三大类 如图3 14所示 实体对象侧重系统的信息描述 主要用来表达系统中的信息及其相应的处理 例如 人是一个实体对象 有关人的信息 如年龄 身高 体重及其相应的处理 如回答年龄 身高等 均由人这个实体来表达 界面对象侧重于系统的表示描述 例如 查询有关人的信息的用户界面是一个界面对象 有关人的信息及其表达形式由该界面对象来表达 控制对象侧重于描述不属于实体对象和界面对象的 处理过程涉及多个实体对象的 某些计算与协调功能的系统行为 例如 计算税收可以作为一个控制对象 因计算税收涉及许多因素 实体对象 三类对象的区别与作用如图3 15所示 采用实体对象 界面对象 控制对象及其相互关系的表达方法能够得到一个结构相对稳定 易于适应需求的变化 功能易于扩充的系统逻辑结构 所有系统的需求均是不断变化的 系统结构相对稳定是指使系统需求的变化局部化 也就是说 尽可能使变化只影响到系统中的个别对象 最好是一个对象 下面分析系统需求变化的可能性及其来源 由表3 1可知 引起系统需求变化的主要来源是系统的功能及其对外界面 引入界面对象后 系统界面的变化便可以局限在某个或某些界面对象中 系统功能的变化可能比较复杂 因为系统功能可能与三类对象均有关 那么 如何使系统功能的变化局部化呢 引入三类对象后 与信息处理有关的功能变化被局限在实体对象中 例如 如何计算人的年龄的处理功能的变化只影响人这个实体对象 与系统界面有关的功能变化被局限在界面对象中 例如 如何表达有关人的信息及其变化只影响表示人的界面对象中 与多个对象有关的功能及其变化 例如 如何计算税收 被局限在有关的控制对象中 由此可见 引入三类对象后 使引起系统需求变化的因素局部化 由这三类对象及其相互关系表达的系统逻辑结构具有相对的稳定性 并能够适应需求的变化 建立系统分析模型的主要内容是将需求模型中的每一个用例 分别用三类对象及其相互关系来表达 也就是说 将用例表达的系统功能及其对外界面转化为三类对象及其相互关系表达的系统结构与功能 这样 一个用例可能包含许多不同类型的对象 一个对象可能被运用到不同的用例中 体现了对象的重用性 如图3 16所示 建立系统分析模型的主要内容包括 从系统中的每个用例中识别实体对象 界面对象及控制对象 定义对象之间的关系 划分子系统 1 界面对象 1 界面对象的概念界面对象是用来描述系统界面及其相关的信息与处理的对象 在用例中直接取决于系统环境的信息与行为均可由界面对象来表达 界面对象的作用在于将用户的行为转化为系统内部的事务处理或事件 并将系统内部用户感兴趣的事务处理或事件提供给用户 也就是说 界面对象描述了用户与系统进行交互的双向信息交换过程 2 界面对象的识别根据需求模型的用户类及用例 识别界面对象通常有两个途径 一是根据用户类识别 二是根据用例的描述识别 根据用户类识别每个具体的用户类都需要有相应的界面与系统进行交互 在许多情况下 一个用户类需要多个界面对象 例如 在X MIS中 每一个具体的用户类 仓储管理员 仓库主管 库管员都需要有自己的界面对象与系统进行交互 如图3 17所示 每个用户类可能具有一个或多个用例 每个用例都具有与用户进行交互的界面 因此 根据用户类所拥有的用例可以识别出下一个层次的界面对象 例如 仓储管理员具有接收客户存货订单 按收客户取货订单 重新安排货物库存 查询存 取货订单执行情况 查询客户存货情况及客户信息管理等6个用例 相应地具有6个界面对象 这6个界面对象构成了 仓储管理员界面 对象的下一个层 如图3 18所示 根据用例的描述识别用例的描述体现了用户与系统的交互过程及其细节 这些交互过程有些与系统的界面有关 有些与系统内部的其它信息与处理有关 我们将一个用例中与界面有关的部分抽取出来 便形成更低层次的界面对象 例如 在接收客户存货订单用例描述中 仓储管理员用于填写客户名称 通信地址等的编辑框共有6个 用于填写货物名称 特性 数量的列表框一个 操作按钮有3个 这些界面对象共同组成了 接收客户存货订单 界面对象 如图3 19所示 3 界面对象之间的关系很显然 界面对象之间并不是相互独立的 系统中的某些功能是由多个界面对象相互协作完成的 标识对象之间的关系便于更清晰地描述系统的逻辑结构 如果两个对象之间具有某种关联 那就意味着两个对象的实例之间具有某种动态的信息交换 这是系统设计中对象之间接口设计的重要依据 我们用一个单向箭头表示对象之间的关系 如图3 20所示 箭头从我们所关心的对象指向与其相关的对象 在图3 20 a 中我们从对象汽车的角度来描述汽车与人之间的关系 箭头由汽车指向人 说明人是汽车的驾驶员 表明了人在汽车对象中所扮演的角色 在图3 20 b 中 则是从对象人的角度描述汽车与人之间的关系 说明汽车是人的交通工具 关系的命名采用名词 说明与某对象有关系的对象在该对象中所扮演的角色 放在箭头的旁边 在彼此有关的两个对象之间 一个对象可能与一个或多个对象的实例相关 为描述这种关联的数目 我们在关系的名称旁边用中括号中的数字表示 该数目的取值范围是0 N 通常将该数目称为关系的基数 在不同的面向对象方法中 关于对象之间关系的表示与命名方法各不相同 有些采用双向箭头表示关系 并用动词命名关系等等 界面对象一般分为两类 一类是用于描述用户与系统之间的人机界面 一类是用于描述系统与其它系统之间的接口界面 界面对象中应包含以下内容 用户提供给系统或系统提供给用户的信息 由于用户行为的变化而引起系统内部功能变化的那部分处理 依赖于特定界面对象的事务处理过程 2 实体对象 1 实体对象的概念实体对象用来描述系统中某些长期保存的信息及其相关处理 在用例中与信息存储和处理有关的那部分功能均可由实体对象来表达 实体对象所描述的信息与用例的生命周期无关 也就是说 在系统中支持用例运行的信息 在用例执行完毕后 仍被保存在实体对象中 实体对象的作用在于通过对象及其相互联系 刻画系统的内部状态 形成系统内部的信息视图 根据界面与控制对象的需求 利用自身的处理或操作 传递或改变某些信息 从而改变系统的内部状态 2 实体对象的识别实体对象作为一类对象 具有一般对象的特性 即每一个对象都具有若干属性及若干操作 对象之间都具有某种关联关系 因此 实体对象的识别就应包括系统中有哪些实体对象 每一个对象有哪些属性及操作 该对象与哪些对象有关联 包括关联的名称与基数等 在系统分析阶段 由于我们着眼点在于利用对象及其相互关系建立系统的独立于具体实现环境的相对稳定的逻辑结构 因此 识别实体对象的主要内容是确定系统中有哪些实体对象 对象之间的关系如何 将识别实体对象的过程分两步 第一 以用例为单位 识别每个用例中的实体对象及其相互关系 第二 将所有用例的实体对象及其关系集中起来 去掉其中的重复对象 细化对象及其关系的定义 得到整个系统的实体对象及其关系的描述 实体对象通常对应于用例描述中的某些概念 例如客户 卡车等 因此 仔细阅读用例的描述 从中确定候选的实体对象是不困难的 但通常会有许多的候选对象 真正要确定系统中必需的实体对象 却不是容易的 需要进行反复细致的工作 例如 在X MIS中 对于 重新安排货物库存 用例而言 通过阅读其用例描述不难发现 货物 仓库 卡车 及 库存货位 等是首选对象 重新安排货物库存订单 运输任务 及 运输计划 等也需要保存 同样是候选对象 在确定实体对象时可以发现 某些对象之间具有某种关联 例如 一个仓库包含许多库存货位 一个 重新安排货物库存 订单由一个运输任务来完成等 图3 21给出了初始的 重新安排货物库存 用例的实体对象及其相互关系 用例 接收客户存货订单 阅读其用例描述不难发现 客户 客户存货订单 货物 仓库 库存货位 运输任务 运输计划 卡车 等是其候选实体对象 如图3 23所示 从用例 重新安排库存项目 和 接收客户存货订单 的实体对象中不难发现 有许多实体是重复的 例如 仓库 库存货位 货物 等 这些对象是两个用例中的共享对象 没必要重复描述 另外 实体对象 重新安排货物库存订单 和 客户存货订单 均保存将指定的货物按照指定的日期和数量 从货物源点运输到货物目的地等信息 这些信息具有相同的内容与结构 不同的是 在 重新安排货物库存订单 中 货物的源点是某个仓库 而在 客户存货订单 中 货物的源点是客户的货物所有地 因此 可以将两个实体对象合并 为一个 称其为 仓储订单 如图3 24所示 依此类推 将所有用例中的实体对象及其关联关系一一确定下来 去掉重复实体 将某些实体对象进行细化与合并 便得到系统中的全部实体对象及其关联关系 3 控制对象 1 控制对象的概念控制对象用来描述系统内部与多个对象有关的协同处理过程 在用例中既不属于界面对象又不属于实体对象的事务处理过程可由控制对象来表达 控制对象类似于一种粘合剂 将有关对象联合起来形成特定的用例 2 控制对象的识别识别控制对象的依据依然是用例描述 一般的方法是 首先 在每一个用例中确定一个控制对象 通常情况下 每个用例中都包含有一个或数个界面对象和实体对象 确定了这两类对象之后 将剩余的事务处理过程确定为控制对象 然后 考查每一个控制对象 在一个用例中 确定了界面对象和实体对象之后 如果没有剩余的事务处理过程 则该用例不需要任何控制对象 如果剩余的事务处理过程非常复杂 则将其分解为多个控制对象 每个控制对象应完成有限的功能并易于理解与描述 通常情况下 要求每个控制对象只与某个用户类相关 因为系统的变化常常是由用户的行为变化引起的 如果每个控制对象只与唯一的用户类相关 则可以将变化局限在最小的范围之内 在分解后形成的控制对象中 如果存在某个控制对象与多个不同的用户类相关 应将其分解合并到其它控制对象中去 例如 在 重新安排货物库存 用例中 其初始化部分涉及到的信息及处理可以完全包含在界面对象中 因为系统界面与信息之间具有简单的对应关系 如图3 25所示 其计划调度部分相对复杂 是一个涉及 仓储订单 卡车 等多个实体对象的协调过程 因此 可以确定一个控制对象 称之为 计划调度 来完成计划协调的任务 如图3 26所示 4 划分子系统 1 子系统的概念根据需求模型的用例描述确定了系统的全部分析对象 界面 实体 控制对象 之后 系统中将包含许多对象及其相互关联 对于中等规模的系统 可能有30 100个对象 对于大型系统 则对象会更多 面对如此多的对象及其相互关联 要对每个对象及其与其它对象的关联有一个清晰的了解是十分困难的 因此 可以将分析对象分组 我们将许多相关对象的组合称为子系统 系统规模不同 系统所包含的子系统的数目也不等 有时 还可以形成层次结构 使子系统中包含子系统 在系统的最低层便是由分析对象构成的那些子系统 2 划分子系统划分子系统的目的在于将相关对象分组后降低系统的复杂性 同时 子系统也可以和企事业单位中的职能部门 例如 工程设计 销售 库存等建立对应关系 那么 如何划分子系统呢 一般说来 应遵循以下原则 将相互之间关联紧密的那些对象划分为一个子系统 子系统之间的耦合性最小 即关联最少 一个子系统最好只与唯一的一个用户类相关 例如 在X MIS中 可以根据上述原则和方法 将系统划分为订单管理 仓库管理 计划管理和运输管理 X MIS中各子系统之间的相互关系如图3 27所示 在规模较小的项目中 子系统的划分通常是在确定了分析对象之后进行的 但是 对规模比较大的项目 划分子系统的工作可能在系统分析之前 这是因为整个项目可能由具有不同专业背景的不同开发小组联合开发 不同的开发小组可能分布在不同的地方 在逻辑上相对独立 5 建立分析模型的过程 前面详细介绍了建立分析模型时涉及到的一些基本概念及方法 利用这些概念与方法 可以得到建立分析模型的过程 如图3 28所示 建立分析模型的过程是一个不断调整与细化的过程 各步骤之间存在着多次的反复 1 识别界面对象首先为系统中的每一个用户类确定一个界面对象 然后阅读该用户类的每个用例 从而确定其它界面对象 根据界面对象之间的关联 组织界面对象的结构 2 识别实体对象识别实体对象要从系统中的每个用例入手 首先确定每个用例中的候选实体对象及其相互关联 然后 考查所有用例 将其中的重复实体对象进行合并 对类似对象进行调整 并相应地调整各实体对象之间的关联关系 最后确定出系统所需的满足全部用例需求的实体对象 3 识别控制对象图首先为系统中的每个用例确定一个控制对象 然后考查每一个控制对象 如果某个控制对象没有实质性内容 则将其删掉 如果某个控制对象特别复杂 则将其分解为多个控制对象 4 划分子系统按照划分子系统的原则 首先将以某个控制对象为核心 关联紧密的若干对象划分为一个子系统 形成子系统的最低层 然后根据系统的大小 将某些关联密切的子系统合并为更高层次的子系统 从而形成具有层次结构的 最低层由各类分析对象及其相互关系构成的系统逻辑结构 4 系统设计 4 1概述完成系统分析以后 进人系统设计阶段 那么 为什么要进行系统设计 系统设计的目的和内容是什么呢 在系统分析阶段得到的系统需求模型和分析模型不能直接用来指导系统编程或不能直接作为系统编程的依据 原因在于 系统的需求模型和分析模型不够形式化 为了进行系统编程 必须将其中的对象具体化 例如 每个对象应该具有哪些属性和操作 对象之间是如何相互通信的 其通信接口是什么 等等 系统的需求模型和分析模型是建立在理想的实现环境之上的 而实际的实现环境是千变万化的 因此 必须确定具体的实现环境 考虑实现环境对系统结构 性能的影响 将系统的需求模型和分析模型从分析空间转化到设计空间 如图4 1所示 3 系统设计可以进 步完善和验证系统分析结果 因为系统开发过程是一种不断细化的渐进过程 系统分析的结果既是系统设计的基础与依据 又可能通过系统设计发现分析结果的不足 进而对其进行修正与完善 这并不意味着系统分析的结果本来就存在着某些不足 而是因为分析的目的在于理解系统 并建立系统的逻辑结构 进入系统设计阶段 面对具体的实现环境 我们希望尽可能减少由于具体实现环境的影响而对系统结构作出某种调整 从而实现分析与设计的无缝衔接 系统设计阶段的主要工作是建立系统的设计模型和实现模型 如图4 2所示 设计模型是在考虑具体实现环境的前提下对系统模型的细化和形式化 实现模型实际上是以源代码为主要内容的系统实现 建立系统设计模型的主要内容有 以分析模型为基础 将分析模型中的分析对象及其相互关联转化成设计模型中的设计对象及其相互关联 形成设计模型的初始结构 考虑具体实现环境对设计模型的影响 对设计模型的初始结构进行适应性设计 例如 如何适应具体的操作系统 数据库管理系统 开发环境等 对设计模型应做哪些调整等 以需求模型中的用例描述为基础 对设计对象的接口进行设计 例如 为了满足用例中事务处理的要求 相关对象之间要发送哪些消息 进行哪些操作等 建立系统实现模型的主要内容是采用某种具体的编程语言及环境实现设计模型中的每一个设计对象 4 2 建立系统的设计模型 1 设计对象与设计模型我们知道 研究系统 特别是大型系统的开发方法 关键在于采用各种抽象的概念与机制来控制系统开发过程的复杂性 对于面向对象的系统开发方法尤其如此 它引入对象的概念将现实世界中的一些直观的概念及处理过程通过对象这一抽象的概念及其机制 直接映射到计算机世界中由某种编程语言构成的软件模块 实现了开发过程各阶段的无缝衔接 在分析模型中 引入了界面对象 实体对象 控制对象 从不同的侧面描述与抽象系统的表现形式 处理的信息和复杂的处理过程 这些对象虽然名称不同 描述的侧重点各异 但是作为一种抽象机制 其内部的组织结构是一样的 可以统称为分析对象 由分析对象及其相互关系为主要内容构成了分析模型 体现了系统的逻辑结构 设计模型不同于分析模型 分析模型侧重于系统的逻辑结构 与具体的实现环境及系统的后期维护无关 而设计模型是对实际系统如何实现的一种抽象机制 它不仅反映系统的逻辑结构 同时反映具体的实现环境 建立设计模型的目标是在根据具体实现环境对系统进行适应性设计的过程中保持分析模型所反映的系统逻辑结构基本不变 在系统设计阶段 一方面 希望将分析模型中的分析对象直接映射成设计模型中的设计对象 使之具有一一对应关系 消除系统分析与设计之间的语义断层 实现无缝衔接 另一方面 又要考虑具体的实现环境 使由设计对象及其相互关系构成的设计模型真正反映系统是如何实现的 系统的实现最终是以源代码的形式体现的 因此 设计对象是一种对系统实现进行封装与抽象的机制 设计对象可能是由某种编程语言中的某个类实现的 也可能是由几个不同的类实现的 设计对象来源于两方面 一方面来源于分析模型中的分析对象 一方面来源于具体的实现环境 设计模型以设计对象及其相互作用为主要内容 用来反映系统的具体实现结构 它实际上是根据实际的实现环境对分析模型的调整与细化 2 建立设计模型的初始结构设计模型的初始结构可以从分析模型直接转化而来 转化的规则是将分析模型中的每一个对象及其相互关系直接转化成设计模型中的设计对象及其相互关系 这就意味着设计模型与分析模型具有清晰的可追溯性 为实际系统提供了一种适应性强的系统结构 如 在X MIS中 对于用例 重新安排货物库存 的初始化部分 其分析模型如图3 25所示 在此分析模型的基础上 将其中的每个分析对象转化为相应的设计对象 得到如图4 3所示的设计模型的初始结构 在设计模型中 为了将设计对象区别于分析对象 将设计对象用方框表示 3 实现环境对设计模型的影响及其适应性设计 1 考虑实现环境的原则在系统的整个生命周期中 实现环境的变化 例如系统软件 硬件的更新换代等 是引起系统变化的主要原因之一 因此 为了最大限度地降低实现环境的变化对系统造成的影响 应该使系统中尽可能少的部分与实现环境发生关联 一个比较好的办法是采用对象封装的办法 将实现环境与系统的交互作用封装在有限的对象中 并采用代理的机制使这些对象与系统进行交互 这样 可以最大限度地将实现环境的变化局部化 从而减小实现环境的变化对系统的影响 例如 如果系统中要处理与操作系统有关的文件 而操作系统又是可变的 那么 应该设计一个对象 使该对象作为系统与具体操作系统进行文件处理的代理 如图4 4所示 在图7 4 4中 对象 文件管理 作为应用对象与具体操作系统之间的代理 将具体操作系统对文件处理的细节与差别封装起来 以一致的界面与系统进行交互 减少了具体操作系统对系统的影响 至于 文件管理 对象如何实现 可有多种方法 第一种方法是在 文件管理 对象中只提供文件操作的接口界面 例如创建 修改 删除文件等 具体的文件操作实现过程由具体的操作系统提供 第二种方法是在 文件管理 对象中检测系统运行在哪一种操作系统之上 然后执行相应的文件操作过程 第三种方法是为不同的操作系统提供不同的版本 例如 如果用C或C 编程 则可以编写对应于不同操作系统的C文件 当交付系统时 将其编译成适合于具体系统的软件模块 究竟采用哪一种方法来实现 需具体问题具体分析 2 考虑实现环境的因素在进行系统设计的过程中 考虑具体实现环境并对系统进行适应性设计时 应考虑哪些因素呢 一般来讲 凡是与系统实现有关的所有方面均要考虑 例如系统的硬件配置 操作系统 数据库管理系统 编程工具及语言等 系统配置在进行系统设计时 系统配置即系统的硬件及系统软件配置是首先要考虑的问题 因为系统配置的具体内容构成了具体的实现环境 在进行系统配置时 一个原则便是先进行系统软件配置 再进行系统硬件配置 分布式处理在设计模型的初始结构中 有些
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 象棋延时服务课件
- 2025版高新技术产业聘用员工合同协议示范文本
- 2025版企业绿色转型项目咨询与服务合同
- 2025年度礼品定制采购合同-附加礼品定制及品牌合作计划
- 2025大蒜产业链金融支持服务合同
- 2025年度农业合作社三方租地合作合同范本
- 2025版网络安全防护软件源码授权与保密协议标准范本
- 2025年度电力照明设施安全检测合同
- 2025年股权代持转让及管理服务三方合同
- 诸子论与课件
- 小学科学新教科版二年级上册全册教案(2025秋版)
- 2025年海南省通信网络技术保障中心招聘考试笔试试题(含答案)
- 2025年国家卫生健康委医药卫生科技发展研究中心招聘考试笔试试题(含答案)
- 2025至2030中国PE微粉蜡市场需求量预测及前景动态研究报告
- 2025年辅警招聘公安基础知识题库附含参考答案
- 2025年理赔专业技术职务任职资格考试(理赔员·保险基础知识)历年参考题库含答案详解(5套)
- 2025年北京标准租房合同范本下载
- 中华人民共和国治安管理处罚法2025修订版测试题及答案
- 第一单元复习与提高(单元测试)-五年级上册数学沪教版
- 2025年湖北高考历史试题(含答案解析)
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
评论
0/150
提交评论