【网络课件】宜宾学院-第十一章 第十二章 面向对象设计与实现_第1页
【网络课件】宜宾学院-第十一章 第十二章 面向对象设计与实现_第2页
【网络课件】宜宾学院-第十一章 第十二章 面向对象设计与实现_第3页
【网络课件】宜宾学院-第十一章 第十二章 面向对象设计与实现_第4页
【网络课件】宜宾学院-第十一章 第十二章 面向对象设计与实现_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

软件工程 第十一章面向对象设计第十二章面向对象实现 2 11 1面向对象设计的准则11 2启发规则11 3软件重用11 4系统分解11 5设计问题域子系统11 6设计人机交互子系统11 7设计任务管理子系统11 8设计数据管理子系统11 9设计类中的服务 3 面向对象设计是把分析阶段得到的需求转变成符合成本和质量要求的 抽象的系统实现方案的过程 从面向对象分析到面向对象设计 是一个逐渐扩充模型的过程生命周期方法学把设计进一步划分成总体设计和详细设计两个阶段 类似地 也可以把面向对象设计再细分为系统设计和对象设计 系统设计确定实现系统的策略和目标系统的高层结构 对象设计确定解空间中的类 关联 接口形式及实现操作的算法 4 5 11 1面向对象设计的准则 1 模块化 Modularity 对象就是模块 把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块2 抽象 不仅支持过程抽象 而且支持数据抽象 3 信息隐蔽 通过对象的封装性来实现 4 弱藕合 对象是最基本的模块 因此 耦合主要指不同对象之间相互关联的紧密程度 分为交互藕合和继承藕合 6 5 强内聚 分为服务内聚 类内聚和一般特殊内聚 6 可重用 11 3节讨论 7 11 2启发规则 1 设计结果应该清晰易懂2 一般特殊结构的深度适当3 设计简单的类4 使用简单的协议5 使用简单的服务6 把设计变动减至最小 8 11 3软件重用 11 3 1概述1 软件重用的概念软件复用是指重复使用已有的软件产品用于开发新的软件系统 以达到提高软件系统的开发质量与效率 降低开发成本的目的 可复用的软件成分一可复用构件 ReusableComponent 可从旧软件中提取 也可以专门为复用而开发 在软件复用中重复使用的软件产品不仅仅局限于程序代码 而是包含了在软件生产的各个阶段所得到的各种软件产品 9 可以用于软件复用的软件产品 按照其抽象程度的高低 可以划分为如下的复用级别 1 代码复用二进制形式的经过编译产生的目标代码 文本形式的源代码 2 设计结果的复用设计结果比源程序的抽象级别更高 因为它的复用受实现环境的影响较小 从而使可复用构件被复用的机会更多 并且所需的修改更少 这种复用有三种途径 软件成分的重用级别 10 从现有系统的设计结果中提取一些可复用的设计构件把一个现有系统的全部设计文档在新的软硬件平台上重新实现 独立于任何具体的应用 有计划地开发一些可复用的设计构件 3 分析结果的复用这是比设计结果的复用抽象程度更高的复用 可被复用的分析结果是针对问题域的某些事物或某些问题的抽象程度更高的解法 受设计技术及实现条件的影响非常小 所以可复用的机会更大 11 11 3 2类构件 面向对象技术中的 类 是比较理想的可重用软构件 称之为类构件 1 可重用软构件的特点一个软构件能在构造各种各样的软件系统时方便地重复使用 必须具备的条件 1 独立性强 2 高度可塑性 3 接口清晰 12 2 类构件重用的方式1 实例重用2 继承重用3 多态重用 13 11 3 3软件重用的效益 1 提高软件质量2 提高软件生产率3 降低软件成本 14 11 4系统分解 系统的主要组成部分称为子系统 与面向对象分析模型一样 面向对象设计模型也由主题 类与对象 结构 属性 服务等5个层次组成 大多数系统的面向对象设计模型在逻辑上都由4大部分组成 分别是 问题域子系统 问题空间类 人机交互子系统 用户界面类 任务管理子系统 任务管理类 数据管理子系统 数据管理类 15 1 子系统之间的两种交互方式 1 客户一供应商关系作为 客户 的子系统调用作为 供应商 的子系统 后者完成某些服务工作并返回结果 2 平等伙伴关系每个子系统都可能调用其他子系统 因此 每个子系统都必须了解其他子系统的接口 16 2 组织系统的两种方案 把子系统组织成完整的系统时 有水平层次组织和垂直块组织两种方案可供选择 1 层次组织这种组织方案把软件系统组织成一个层次系统 每层是一个子系统 2 块状组织这种组织方案把软件系统垂直地分解成若干个相对独立的 弱藕合的子系统 一个子系统相当于一块 每块提供一种类型的服务 17 采用了层次与块状的混合结构 18 概括地说 面向对象软件开发方法采用面向对象设计 OOD 技术进行问题解决方案的设计工作 它将问题的解决方案表述为 类 关联的形式 其中 类包括问题域子系统 问题空间类 人机交互子系统 用户界面类 任务管理子系统 任务管理类 和数据管理子系统 数据管理类 是从设计的角度出发对问题解决方案中的对象的抽象和描述 关联则用于描述这些类和类之间的关系 19 面向对象设计工作内容和步骤 因此 面向对象设计工作主要包括问题空间类 用户界面类 任务管理类和数据管理类的设计 具体工作内容和步骤如图所示 20 一 问题空间类 11 5设计问题域子系统 是指那些直接从面向对象分析模型设计得到的类 它是使软件系统能够实现对问题的求解的最基本的类 也是面向对象软件系统的核心类 利用面向对象分析技术对问题进行了分析描述之后 就可以直接将其结果用于问题空间类的设计 即直接将分析所得到的对象 对象与对象之间的关联确定为类以及类与类之间的关联 这些直接从分析结果得到的类就是问题空间类 以一个字处理系统为例 如下图所示 21 图示 结构化方法设计结果 22 又例 下图示以及表1 8所示的是大学教务管理问题中的问题空间类 图示 大学教务管理问题中的问题空间类 23 表5 1Class Student 学生 数据变量序号名称定义类型中文名称备注1IDchar 8 描述型学号2Namechar 24 描述型姓名3Sex 男 女 描述型性别枚举类型4Birthdaydate描述型出生日期5EnrollmentDaydate描述型入学日期6Departmentchar 24 描述型系别7Specialitychar 24 描述型专业8Passwordchar 6 描述型密码9Application 注册 选课 描述型申请枚举类型 24 操作序号名称接口参数返回值中文名称备注1GetID ID读入学号GetPassword Password读入密码2VerifyPassword True Fasle检验3GetApplication Application询问4PutApplication NULL回答5Note message NULL通知6ChangePassword NewPassword OldPassword NULL修改 25 表2Class Graduate 研究生 表3Class UnderGraduate 本科生 表4Class RegisterRec 注册记录 表5Class Course 课程 表6Class GraduateCourse 研究生课程 表7Class UnderGraduate 本科生课程 表8Class SelectCourse 选课单 26 二 用户界面类 11 6设计人机交互子系统 是指那些为实现人机交互接口而设计的类 它是使软件系统能够接收用户的命令和能够为用户提供信息所需要的类 用户界面类是为了使系统能够与用户进行交互而必须增添设计的类 在实际中 一个软件系统常常会因为其用户界面使得用户不满意而遭到否定或弃之不用 因此用户界面类的设计是一项既影响软件系统前途 又需要做耐心细致调查分析的重要工作 27 尽管在分析过程中已经对用户在用户界面方面进行了分析 但是在设计过程中仍然必须继续做这项分析工作 必须具体设计确定交互作用的时间 交互方式和交互技术等 用户界面类的设计通常可以采用系统原型 模型 法进行 28 1 分析考察用户2 设计命令层次1 研究用户交互的意义及准则如果已建立的交互系统中已有命令层次 则先研究这个已有的交互界面的意义和准则 2 建立初始命令层可以以多种方式提供给用户 如窗口 按钮 下拉菜单 菜单条 可动的图标 等等 29 3 细化命令层为了细化命令层 应考虑如下几个问题 1 排序 在开发命令层时 必须仔细选择不同的操作名称 并把这些名称按一定要求排序 将最有用的放在前面 或者按习惯的工作步骤排序 2 组装 在操作中寻找组装结构模式 这有助于在层次中组织和分离操作 3 宽度和广度 由于人的短暂记忆局限 命令层次不宜太广太深 以3最为合适 4 极小化 尽量少用组合键 极小化用户的击键次数 30 3 完成设计当前由于软件开发工具 特别是可视化开发工具的日益丰富 完成用户界面的具体设计已经是一件十分容易的事情了 但是在具体设计时不能忽略以下原则 1 一致性使用一致的术语 一致的步骤和一致的动作行为 31 2 减少步骤极小化击键次数 使用鼠标的次数和下拉菜单的次数 极小化响应时间 3 尽量显示提示信息尽量为用户提供有意义的 及时反馈信息 4 设置取消操作用户难免出错 应尽量能使用户取消其错误动作 32 5 尽量减少要用户记忆的内容不应该要求用户记下某窗口的信息而用于另一窗口中 6 易学易用为用户提供联机学习手册 7 屏幕生动活泼屏幕画面看起来能够吸引用户 唤起用户的注意和兴趣 33 例如 对于大学教务管理问题 可以先根据对用户的分析设计如下页图所示的用户进入系统的屏幕 34 然后 根据针对该用户界面和大多数面向对象软件开发环境所提供的可重用类设计相应的用户界面类 设计结果如下页图所示 35 图示 大学教务管理问题的部分用户界面类和问题空间类 36 其中 Window EditField StaticField和Button等类一般可从开发环境提供的类库中通过继承重用获得 需要进一步做的设计工作主要是设计有关与问题空间类和任务管理类进行通讯的操作 例如需要为OKButton类设计一个向问题空间类中的Student类发送检验消息的操作 37 三 任务管理类 11 7设计任务管理子系统 是指那些为实现对多操作并发执行的管理而设计的类 它是使软件系统能够同时处理多个并发行为所需要的类 所谓任务 就是一个处理过程 它可能包含不同类的多个操作的执行 任务管理类的用途之一就是用于管理系统的这种任务 它的另一个主要用途是在操作系统级 运行平台 上负责处理并发 中断 调度等问题 从而使得所设计的系统能够相对独立于运行平台 当需要移植到其它运行平台上 只需要替换有关任务管理类就可以了 38 因此 为了设计任务管理类 首先必须从所设计的系统有关类中找出需要并发进行的操作和那些与特定运行平台有关的操作 然后再对它们进行分析设计1 确定任务类型1 确定事件驱动型任务某些任务是由事件驱动而执行的 这种任务可能负责与设备的通讯 与一个窗口或多个窗口 其它任务 子系统 其它处理器或其它系统的通讯 39 2 确定时钟驱动型任务这种任务在特定的时间被触发执行某些处理 例如 某些设备要求周期性地获得数据或控制 某些用户界面 子系统 任务 处理器或其它系统也可能需要周期性地通讯 此时就常用到时钟驱动型的任务 3 确定优先任务及关键任务优先任务分高优先级和低优先级二种 用来适应处理的需要 关键任务是有关系统成功或失败的关键处理 它通常都有严格的可靠性要求 40 4 确定协调任务当存在三个以上的任务时 就应该考虑增加一个任务 用它来协调任务 协调任务的引入当然会增加系统的开销 但是引入协调任务有利于封装任务之间的协调控制 使用状态转换矩阵可以描述该任务的行为 41 2 分析任务设计多任务系统的主要问题是设计人员常常定义太多的任务 原因是为了自己处理时的方便 但是这样做就增大了整个设计的技术复杂度 并且不容易理解 因此 在进行任务管理类的具体设计前 必须仔细分析和选择各个任务 尽量使得任务的数目降低到最少 42 3 完成设计设计任务包括定义任务的内容以及它怎样协调和通讯 1 任务的内容2 怎样协调3 怎样通讯 43 任务管理类设计模板如右图所示 44 问题空间类 用户界面类和任务管理类之间的基本关系如下图所示 任务管理类对象从运行平台 操作系统 接收消息并通过发送消息创建有关用户界面类对象 用户界面类对象根据从用户处获得的信息创建有关问题空间类对象并发送有关消息给它 如果没有为系统设计任务管理类 则上述任务管理类负责的有关工作由用户界面类负责完成 图示 任务管理类 用户界面类和问题空间类及其消息传送关系 45 四 数据管理类 11 8设计数据管理子系统 是指那些为实现对数据进行管理而设计的类 它是使软件系统能够对对象的属性值进行存贮和检索所需要的类 数据管理类用于存贮和检索对象的属性值 可以采用文件模式或关系数据库模式实现 设计数据管理类的目的是为了使得对对象属性值的管理独立于各种不同的数据管理模式 46 1 数据格式设计1 文件数据格式当采用文件存贮管理方式时 数据格式的设计就是对文件记录结构进行设计 2 关系数据库格式当采用关系数据库管理方式时 数据格式的设计就是对关系表结构进行设计 47 2 操作设计数据管理类的操作包括增添数据记录 删除数据记录 检索数据记录和更新数据记录等几种形式 问题空间类可通过这些操作发送消息给相应的数据管理类实现对数据的存贮 删除 检索和更新 数据管理类设计模板如下图所示 图示 数据管理类设计模板 48 为大学教务管理问题中的SelectCourse 选课单 类设计的一个数据管理类 在SelectCourse类中需要保存的是StudentID CourseID以及分解为两个原子变量Year和Semester 学期 的SelectForCourse等描述性变量 该类通过Write 登记 等操作向相应的数据管理类SelectCourseManager发送Add 增添 Update 更新 等消息 49 图示 大学教务管理问题中相应于SelectCourse类的数据管理 50 第12章面向对象实现与结构化实现技术中先以模块为单位进行过程设计和编码调试相似 面向对象实现技术是先以类为单位进行操作设计 编码调试 然后实现类与类之间的关联定义 并进行系统测试 最后交予用户使用并根据使用情况进行维护 在每一个阶段都必须按照有关规范编写相应的说明书或报告 因此 本章主要讨论面向对象实现技术的一些特点和不同于结构化实现技术 51 1 实现语言毫无疑问 面向对象设计的实现最自然的实现方式是利用面向对象语言 目前最常用的面向对象语言是C 其它比较著名的面向对象语言则还有Smalltalk 面向对象PASCAL JAVA Objective C CommonLispObjectSystem CLOS 等等 52 2 基本实现手段为了实现面向对象的设计 所选用的编码语言一般应包括实现类定义 对象创建 结构定义 实例关联定义 操作调用和消息发送 内存管理 封装等基本功能的编码手段 这里以目前最为流行的C 语言分别对这些基本功能的实现手段加以说明 53 1 类定义使用C 对大学教务管理问题中的类Student 学生 定义如例6 1所示 例12 1类的定义 typedefstruct intmonth intday intyear date Month 月 day 日 year 年enumsexdef M F M 男 F 女enumappdef R S R 注册 S 选课classStudent protected 导出类可以访问的数据变量 54 charID 8 charName 24 sexdefSex dateBirthday dateEnrollmentDay charDepartment 24 charSpeciality 24 charPassword 6 apptdefApplication 导出类可以访问的操作appdefGetApplication voidPutApplication voidNote char Msg 55 public 构造函数 必须与类名称相同Student char InitID 析构函数 必须与类名称相同 Student 所有类都可以访问的操作char GetID char GetPassword booleanVerifyPassword voidChangePassword char NewPassword char OldPassword 56 在C 中 数据变量和操作都被说明为成员 数据变量和操作的名称不能相同 类的成员必须被说明为公有的 public 保护的 protectd 或私有的 private 中的一种 其中私有的为缺省值 公有成员可以被任何类的操作访问 保护成员只允许类自身及其导出类的操作访问 私有成员只允许类自身的操作访问 57 在上述例子中 类Student的所有数据变量和几个操作被定义为保护成员 因为其导出类Undergraduate 本科生 和Graduate 研究生 将要访问这些成员 类中操作的定义类似于一个过程或函数的定义 只是需要把类名作为操作名的前缀 例11 2给出了用C 编码设计的类Student的操作ChangePassword 58 例11 2类操作的定义 voidStudent Changepassword char NewPassword char OldPassword if OldPassword Password Password NewPassword 59 Student Student char InitID ID InitID 与类名称相同的两个操作Student和 Student分别称为构造函数和析构函数 它们分别用于对象创建和对象消除操作 例如类Student的构造函数和析构函数的定义分别如例12 3和12 4所示 例12 3类构造函数的定义 60 例12 4类析构函数的定义析构函数是不带参数的 其名称是在类名称前面加一个波浪号 Student Student 61 12 2 2对象创建C 有两种对象创建方式 静态内存分配方式和动态内存分配方式 每当创建一个新对象 就执行一次构造函数 例12 5用静态内存分配方式创建了类Student的学号为98109002的对象studentobj 对象创建的静态内存分配方式Studentstudentobj 98109002 62 如果该语句是出现在一个操作或函数中 则说明studentobj被定

温馨提示

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

评论

0/150

提交评论