第十章23面向对象设计与实现

上传人:公**** 文档编号:568480756 上传时间:2024-07-24 格式:PPT 页数:67 大小:459KB
返回 下载 相关 举报
第十章23面向对象设计与实现_第1页
第1页 / 共67页
第十章23面向对象设计与实现_第2页
第2页 / 共67页
第十章23面向对象设计与实现_第3页
第3页 / 共67页
第十章23面向对象设计与实现_第4页
第4页 / 共67页
第十章23面向对象设计与实现_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《第十章23面向对象设计与实现》由会员分享,可在线阅读,更多相关《第十章23面向对象设计与实现(67页珍藏版)》请在金锄头文库上搜索。

1、软件工程第十章第十章1 面向对象设计面向对象设计第十章第十章2 面向对象实现面向对象实现11.1 面向对象设计的准则面向对象设计的准则11.2 启发规则启发规则11.3 软件重用软件重用11.4 系统分解系统分解11. 5 设计问题域子系统设计问题域子系统11. 6 设计人机交互子系统设计人机交互子系统11. 7 设计任务管理子系统设计任务管理子系统11. 8 设计数据管理子系统设计数据管理子系统11. 9 设计类中的服务设计类中的服务2面向对象设计是把分析阶段得到的面向对象设计是把分析阶段得到的需求需求转变成转变成符合成本和质量要求的、抽象的符合成本和质量要求的、抽象的系统实现方案系统实现方

2、案的过的过程。程。从面向对象分析到面向对象设计,是一个逐渐从面向对象分析到面向对象设计,是一个逐渐扩充模型的过程扩充模型的过程 生命周期方法学生命周期方法学把设计进一步划分成把设计进一步划分成总体设计总体设计和和详细设计详细设计两个阶段,类似地,也可以把两个阶段,类似地,也可以把面向对象面向对象设计设计再细分为再细分为系统设计系统设计和和对象设计对象设计。系统设计系统设计确定实现系统的策略和目标系统的高确定实现系统的策略和目标系统的高层结构。层结构。对象设计对象设计确定解空间中的类、关联、接口形式确定解空间中的类、关联、接口形式及实现操作的算法。及实现操作的算法。3411. 1 面向对象设计的

3、准则1 、模块化模块化( Modularity ) :对象就是模:对象就是模块。把数据结构和操作这些数据的方法紧密块。把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块地结合在一起所构成的模块 2 、抽象抽象:不仅支持过程抽象,而且支持:不仅支持过程抽象,而且支持数据抽象。数据抽象。 3 、信息隐蔽信息隐蔽:通过对象的封装性来实现。:通过对象的封装性来实现。 4 、弱藕合弱藕合:对象是最基本的模块,因此,:对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程耦合主要指不同对象之间相互关联的紧密程度。分为度。分为交互藕合交互藕合和和继承藕合继承藕合 55 、强内聚强内聚:分为

4、服务内聚、类内聚和一:分为服务内聚、类内聚和一般特殊内聚。般特殊内聚。 6 、可重用可重用:11 . 3 节讨论节讨论611. 2 启发规则1 、设计结果应该清晰易懂、设计结果应该清晰易懂 2 、一般特殊结构的深度适当、一般特殊结构的深度适当 3 、设计简单的类、设计简单的类 4 、使用简单的协议、使用简单的协议 5 、使用简单的服务、使用简单的服务 6 、把设计变动减至最小、把设计变动减至最小711. 3 软件重用1 1 . 3 . 1 概述概述 1 、软件重用的概念、软件重用的概念软件复用是指软件复用是指重复使用已有的软件产品重复使用已有的软件产品用于开用于开发新的软件系统,以达到提高软件

5、系统的开发质量发新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。与效率,降低开发成本的目的。可复用的软件成分一可复用的软件成分一可复用构件可复用构件( Reusable Component )可从旧软件中提取,也可以专门为)可从旧软件中提取,也可以专门为复用而开发。复用而开发。在软件复用中重复使用的软件产品不仅仅局限在软件复用中重复使用的软件产品不仅仅局限于于程序代码程序代码,而是包含了在软件生产的,而是包含了在软件生产的各个阶段各个阶段所所得到的各种软件产品。得到的各种软件产品。8可以用于软件复用的软件产品,按照其可以用于软件复用的软件产品,按照其抽象程抽象程度的高低度

6、的高低,可以划分为如下的复用级别:,可以划分为如下的复用级别:(1)代码复用代码复用l二进制形式的经过编译产生的目标代码。二进制形式的经过编译产生的目标代码。l文本形式的源代码文本形式的源代码(2)设计结果的复用设计结果的复用设计结果比源程序的抽象级别更高,因为它的设计结果比源程序的抽象级别更高,因为它的复用受实现环境的影响较小,从而使可复用构件被复用受实现环境的影响较小,从而使可复用构件被复用的机会更多,并且所需的修改更少。这种复用复用的机会更多,并且所需的修改更少。这种复用有三种途径:有三种途径:软件成分的重用级别软件成分的重用级别9l从现有系统的设计结果中提取一些可复用的设从现有系统的设

7、计结果中提取一些可复用的设计构件计构件l把一个现有系统的全部设计文档在新的软硬件把一个现有系统的全部设计文档在新的软硬件平台上重新实现。平台上重新实现。l独立于任何具体的应用,有计划地开发一些可独立于任何具体的应用,有计划地开发一些可复用的设计构件复用的设计构件( 3 )分析结果的复用)分析结果的复用这是比设计结果的复用抽象程度更高的复用,这是比设计结果的复用抽象程度更高的复用,可被复用的分析结果是针对问题域的某些事物或某可被复用的分析结果是针对问题域的某些事物或某些问题的抽象程度更高的解法,受设计技术及实现些问题的抽象程度更高的解法,受设计技术及实现条件的影响非常小,所以可复用的机会更大。条

8、件的影响非常小,所以可复用的机会更大。1011. 3 .2 类构件面向对象技术中的面向对象技术中的“类类”,是比较理想的,是比较理想的可重用软构件,称之为可重用软构件,称之为类构件类构件。1 、可重用软构件的特点、可重用软构件的特点一个一个软构件软构件能在构造各种各样的软件系统能在构造各种各样的软件系统时方便地重复使用,必须具备的条件:时方便地重复使用,必须具备的条件:1)独立性强:独立性强:2)高度可塑性:高度可塑性:3)接口清晰接口清晰112 、类构件重用的方式、类构件重用的方式 1 )实例重用)实例重用 2 )继承重用)继承重用 3 )多态重用)多态重用1211. 3 . 3 软件重用的

9、效益1 、提高软件质量、提高软件质量 2 、提高软件生产率、提高软件生产率 3 、降低软件成本、降低软件成本1311 . 4 系统分解系统的主要组成部分称为系统的主要组成部分称为子系统子系统。与面向对象分析模型一样,与面向对象分析模型一样,面向对象设计模型面向对象设计模型也由主题、类与对象、结构、属性、服务等也由主题、类与对象、结构、属性、服务等 5 个层个层次组成。次组成。大多数系统的面向对象设计模型在逻辑上都由大多数系统的面向对象设计模型在逻辑上都由 4 大部分组成,分别是:大部分组成,分别是:l问题域子系统问题域子系统(问题空间类问题空间类)l人机交互子系统人机交互子系统(用户界面类用户

10、界面类)l任务管理子系统任务管理子系统(任务管理类任务管理类)l数据管理子系统数据管理子系统(数据管理类数据管理类)141 、子系统之间的两种交互方式1 )客户一供应商关系)客户一供应商关系作为作为“客户客户”的子系统的子系统调用调用作为作为“供应商供应商”的子系统,后者完成某些服务工作并返回的子系统,后者完成某些服务工作并返回结果。结果。 2 )平等伙伴关系)平等伙伴关系每个子系统每个子系统都可能都可能调用其他子系统,因此,调用其他子系统,因此,每个子系统都必须了解其他子系统的接口。每个子系统都必须了解其他子系统的接口。152 、组织系统的两种方案把子系统组织成完整的系统时,有把子系统组织成

11、完整的系统时,有水平层次水平层次组组织和织和垂直块垂直块组织两种方案可供选择。组织两种方案可供选择。( 1 )层次组织)层次组织这种组织方案把软件系统组织成一个层次系统,这种组织方案把软件系统组织成一个层次系统,每层是一个子系统。每层是一个子系统。 ( 2 )块状组织)块状组织这种组织方案把软件系统垂直地分解成若干个这种组织方案把软件系统垂直地分解成若干个相对独立的、弱藕合的子系统,一个子系统相当于相对独立的、弱藕合的子系统,一个子系统相当于一块,每块提供一种类型的服务。一块,每块提供一种类型的服务。16采用了层次与块状的采用了层次与块状的混合结构混合结构17 概概括括地地说说,面面向向对对象

12、象软软件件开开发发方方法法采采用用面面向向对对象象设设计计 (OOD)(OOD)技技术术进进行行问问题题解解决决方方案案的的设设计计工工作作,它它将将问题的解决方案表述为:问题的解决方案表述为:类关联类关联的形式,其中,的形式,其中, 类类包括问题域子系统(包括问题域子系统(问题空间类问题空间类)、人机交)、人机交互子系统(互子系统(用户界面类用户界面类)、任务管理子系统()、任务管理子系统(任务任务管理类管理类)和数据管理子系统()和数据管理子系统(数据管理类数据管理类),是从),是从设计的角度出发对问题解决方案中的对象的抽象和设计的角度出发对问题解决方案中的对象的抽象和描述。描述。 关联关

13、联则用于描述这些类和类之间的关系。则用于描述这些类和类之间的关系。18面向对象设计工作内容和步骤 因此,面向对象设计工作主要包括问题空间类、用因此,面向对象设计工作主要包括问题空间类、用户界面类、任务管理类和数据管理类的设计户界面类、任务管理类和数据管理类的设计,具体,具体工作内容和步骤如图所示。工作内容和步骤如图所示。19一、问题空间类一、问题空间类 (11.5 (11.5 设计问题域子系统设计问题域子系统) ) 是指那些是指那些直接直接从面向对象分析模型设计得到的从面向对象分析模型设计得到的类,它是使软件系统能够实现类,它是使软件系统能够实现对问题的求解对问题的求解的最基的最基本的类,也是

14、面向对象软件系统的本的类,也是面向对象软件系统的核心类核心类。 利用面向对象分析技术对问题进行了分析描述利用面向对象分析技术对问题进行了分析描述之后,就可以直接将其结果用于问题空间类的设计,之后,就可以直接将其结果用于问题空间类的设计,即即直接将分析所得到的直接将分析所得到的对象、对象与对象之间的关对象、对象与对象之间的关联联确定为确定为类以及类与类之间的关联类以及类与类之间的关联,这些直接从分,这些直接从分析结果得到的类就是析结果得到的类就是问题空间类问题空间类。 以一个字处理系统为例,如下图所示以一个字处理系统为例,如下图所示: 20图示: 结构化方法设计结果 21又例:下图示以及表又例:

15、下图示以及表1818所示的是大学教务管理问所示的是大学教务管理问题中的问题空间类。题中的问题空间类。 图示:图示:大学教务管理问题中的问题空间类大学教务管理问题中的问题空间类22表表5.1Class:Student(学生)学生)数据变量数据变量序号序号名称名称 定义定义类型类型 中文名称中文名称备注备注1IDchar(8)描述型描述型学号学号2Namechar(24)描述型描述型姓名姓名3Sex男男,女女描述型描述型性别性别枚举类型枚举类型4Birthdaydate描述型描述型出生日期出生日期5EnrollmentDaydate 描述型描述型入学日期入学日期6Departmentchar(24

16、)描述型描述型系别系别7Specialitychar(24) 描述型描述型专业专业8Passwordchar(6) 描述型描述型密码密码9Application注册注册,选课选课描述型描述型申请申请枚举类型枚举类型23操作操作序号序号 名称名称接口参数接口参数返回值返回值 中文名称中文名称备注备注1GetID()ID读入学号读入学号GetPassword()Password读入密码读入密码2VerifyPassword()True/Fasle检验检验3GetApplication()Application询问询问4PutApplication()NULL回答回答5Note(message)NU

17、LL通知通知6ChangePassword(NewPassword,OldPassword)NULL修改修改24表表2Class:Graduate(研究生)研究生)表表3Class:UnderGraduate(本科生)本科生)表表4Class:RegisterRec(注册记录)注册记录)表表5Class:Course(课程)课程)表表6Class:GraduateCourse(研究生课程)研究生课程)表表7Class:UnderGraduate(本科生课程)本科生课程)表表8Class:SelectCourse(选课单)选课单)25二、用户界面类二、用户界面类(11.6 (11.6 设计人机交

18、互子系统设计人机交互子系统) )是指那些为实现是指那些为实现人机交互接口人机交互接口而设计的类,而设计的类,它是使软件系统能够接收用户的命令和能够它是使软件系统能够接收用户的命令和能够为用户提供信息所需要的类。为用户提供信息所需要的类。 用户界面类用户界面类是为了使系统能够与是为了使系统能够与用户进用户进行交互行交互而必须增添设计的类。在实际中,一而必须增添设计的类。在实际中,一个软件系统常常会因为其用户界面使得用户个软件系统常常会因为其用户界面使得用户不满意而遭到否定或弃之不用。因此用户界不满意而遭到否定或弃之不用。因此用户界面类的设计是一项既影响软件系统前途,又面类的设计是一项既影响软件系

19、统前途,又需要做耐心细致调查分析的重要工作。需要做耐心细致调查分析的重要工作。26尽管在分析过程中已经对用户在用户界面尽管在分析过程中已经对用户在用户界面方面进行了分析,但是在设计过程中仍然必方面进行了分析,但是在设计过程中仍然必须继续做这项分析工作,必须具体设计须继续做这项分析工作,必须具体设计确定确定交互作用的时间、交互方式和交互技术交互作用的时间、交互方式和交互技术等。等。 用户界面类的设计通常可以采用用户界面类的设计通常可以采用系统系统原原型型(模型)法(模型)法进行。进行。 271 1、分析考察用户分析考察用户2 2、设计命令层次设计命令层次1)1)研究用户交互的意义及准则研究用户交

20、互的意义及准则如果已建立的交互系统中已有命令层次,则先研究这如果已建立的交互系统中已有命令层次,则先研究这个已有的交互界面的意义和准则。个已有的交互界面的意义和准则。2)2)建立初始命令层建立初始命令层可以以多种方式提供给用户,如窗口、按钮、下拉菜可以以多种方式提供给用户,如窗口、按钮、下拉菜单、菜单条、可动的图标,等等。单、菜单条、可动的图标,等等。283)细化命令层细化命令层为了细化命令层,应考虑如下几个问题:为了细化命令层,应考虑如下几个问题:(1)排序。在开发命令层时,必须仔细选择不同排序。在开发命令层时,必须仔细选择不同的操作名称,并把这些名称按一定要求排序,将最的操作名称,并把这些

21、名称按一定要求排序,将最有用的放在前面,或者按习惯的工作步骤排序。有用的放在前面,或者按习惯的工作步骤排序。(2)组装。在操作中寻找组装结构模式,这有助组装。在操作中寻找组装结构模式,这有助于在层次中组织和分离操作。于在层次中组织和分离操作。(3)宽度和广度。由于人的短暂记忆局限,命令宽度和广度。由于人的短暂记忆局限,命令层次不宜太广太深。以层次不宜太广太深。以3最为合适。最为合适。(4)极小化。尽量少用组合键,极小化用户的击极小化。尽量少用组合键,极小化用户的击键次数。键次数。293、完成设计、完成设计 当前由于软件开发工具,特别是可视化当前由于软件开发工具,特别是可视化开发工具的日益丰富,

22、完成用户界面的具体开发工具的日益丰富,完成用户界面的具体设计已经是一件十分容易的事情了,但是在设计已经是一件十分容易的事情了,但是在具体设计时不能忽略以下原则:具体设计时不能忽略以下原则:1)一致性一致性使用一致的术语,一致的步骤和一致的动使用一致的术语,一致的步骤和一致的动作行为。作行为。302)减少步骤减少步骤极小化击键次数、使用鼠标的次数和下拉极小化击键次数、使用鼠标的次数和下拉菜单的次数,极小化响应时间。菜单的次数,极小化响应时间。3)尽量显示提示信息尽量显示提示信息尽量为用户提供有意义的、及时反馈信息。尽量为用户提供有意义的、及时反馈信息。4)设置取消操作设置取消操作用户难免出错,应

23、尽量能使用户取消其错用户难免出错,应尽量能使用户取消其错误动作。误动作。315)尽量减少要用户记忆的内容尽量减少要用户记忆的内容不应该要求用户记下某窗口的信息而用于不应该要求用户记下某窗口的信息而用于另一窗口中。另一窗口中。6)易学易用易学易用为用户提供联机学习手册。为用户提供联机学习手册。7)屏幕生动活泼屏幕生动活泼屏幕画面看起来能够吸引用户,唤起用户屏幕画面看起来能够吸引用户,唤起用户的注意和兴趣。的注意和兴趣。32例如,对于大学教务管理问题,可以先根例如,对于大学教务管理问题,可以先根据对用户的分析设计如下页图所示的用户进据对用户的分析设计如下页图所示的用户进入系统的屏幕。入系统的屏幕。

24、33然后,根据针对该用户界面和大多数面向对象然后,根据针对该用户界面和大多数面向对象软件开发环境所提供的软件开发环境所提供的可重用类可重用类设计相应的用户界设计相应的用户界面类,设计结果如下页图所示。面类,设计结果如下页图所示。34图示:大学教务管理问题的部分用户界面类和问题空间类图示:大学教务管理问题的部分用户界面类和问题空间类WindowEditFieldStaticFieldOKButtonWelcomeWindowscancelButtonPasswordFieldStudent用户界面类用户界面类问题空间类问题空间类35 其中,其中,WindowWindow、EditFieldEdi

25、tField、StaticFieldStaticField和和ButtonButton等类等类 一般可从开发环境提供的类库中通过继一般可从开发环境提供的类库中通过继承重用获得,需要进一步做的设计工作主要是承重用获得,需要进一步做的设计工作主要是设计有设计有关与问题空间类和任务管理类进行通讯的操作关与问题空间类和任务管理类进行通讯的操作。 例如需要为例如需要为OKButtonOKButton类设计一个向问题空间类中类设计一个向问题空间类中的的StudentStudent类发送检验消息的操作。类发送检验消息的操作。36三、任务管理类三、任务管理类(11.7 (11.7 设计任务管理子系统设计任务管

26、理子系统) )是指那些为实现对是指那些为实现对多操作并发执行多操作并发执行的管理而设的管理而设计的类,它是使软件系统能够同时处理多个并发行计的类,它是使软件系统能够同时处理多个并发行为所需要的类。为所需要的类。 所谓所谓任务任务,就是一个处理过程,它可能包含,就是一个处理过程,它可能包含不同类的多个操作的执行不同类的多个操作的执行。 任务管理类的用途之一就是用于任务管理类的用途之一就是用于管理系统的管理系统的这种任务这种任务,它的另一个主要用途是,它的另一个主要用途是在操作系统级在操作系统级(运行平台)上负责处理并发、中断、调度等问题(运行平台)上负责处理并发、中断、调度等问题,从而使得所设计

27、的系统能够相对独立于运行平台,从而使得所设计的系统能够相对独立于运行平台,当需要移植到其它运行平台上,只需要替换有关任当需要移植到其它运行平台上,只需要替换有关任务管理类就可以了。务管理类就可以了。37因此,为了设计任务管理类,首先必须从所设因此,为了设计任务管理类,首先必须从所设计的系统有关类中找出计的系统有关类中找出需要并发进行的操作和那些需要并发进行的操作和那些与特定运行平台有关的操作与特定运行平台有关的操作,然后再对它们进行分,然后再对它们进行分析设计析设计1、确定任务类型、确定任务类型1)确定事件驱动型任务确定事件驱动型任务某些任务是由事件驱动而执行的。这种任务可某些任务是由事件驱动

28、而执行的。这种任务可能负责与设备的通讯,与一个窗口或多个窗口、其能负责与设备的通讯,与一个窗口或多个窗口、其它任务、子系统、其它处理器或其它系统的通讯。它任务、子系统、其它处理器或其它系统的通讯。382)2)确定时钟驱动型任务确定时钟驱动型任务 这种任务在这种任务在特定的时间被触发执行某些处理特定的时间被触发执行某些处理。例。例如,某些设备要求周期性地获得数据或控制,某些用如,某些设备要求周期性地获得数据或控制,某些用户界面、子系统、任务、处理器或其它系统也可能需户界面、子系统、任务、处理器或其它系统也可能需要周期性地通讯。此时就常用到时钟驱动型的任务。要周期性地通讯。此时就常用到时钟驱动型的

29、任务。 3)3)确定优先任务及关键任务确定优先任务及关键任务 优先任务分优先任务分高优先级和低优先级高优先级和低优先级二种,用来适应二种,用来适应处理的需要。处理的需要。关键任务关键任务是有关系统成功或失败的是有关系统成功或失败的关键关键处理,它通常都有严格的可靠性要求处理,它通常都有严格的可靠性要求。394)确定协调任务确定协调任务 当存在三个以上的任务时,就应该考当存在三个以上的任务时,就应该考虑增加一个任务,用它来协调任务。虑增加一个任务,用它来协调任务。协调任务的引入当然会增加系统的开销,协调任务的引入当然会增加系统的开销,但是引入协调任务有利于封装任务之间的协但是引入协调任务有利于封

30、装任务之间的协调控制。使用状态转换矩阵可以描述该任务调控制。使用状态转换矩阵可以描述该任务的行为。的行为。402 2、分析任务、分析任务 设计多任务系统的主要问题是设计人员常常定设计多任务系统的主要问题是设计人员常常定义太多的任务。原因是为了自己处理时的方便,但义太多的任务。原因是为了自己处理时的方便,但是这样做就增大了整个设计的技术复杂度,并且不是这样做就增大了整个设计的技术复杂度,并且不容易理解。因此,在进行任务管理类的具体设计前,容易理解。因此,在进行任务管理类的具体设计前,必须仔细分析和选择各个任务,尽量使得任务的数必须仔细分析和选择各个任务,尽量使得任务的数目降低到最少。目降低到最少

31、。413、完成设计、完成设计 设计任务包括定义任务的内容以及它怎样设计任务包括定义任务的内容以及它怎样协调和通讯。协调和通讯。1)任务的内容任务的内容2)怎样协调怎样协调 3)怎样通讯怎样通讯 42任务管理类设计模板任务管理类设计模板如右图所示:如右图所示: 43 问题空间类、用户界面类和任务管理类之间的基问题空间类、用户界面类和任务管理类之间的基本关系如下图所示,任务管理类对象从运行平台(操本关系如下图所示,任务管理类对象从运行平台(操作系统)接收消息并通过发送消息创建有关用户界面作系统)接收消息并通过发送消息创建有关用户界面类对象,用户界面类对象根据从用户处获得的信息创类对象,用户界面类对

32、象根据从用户处获得的信息创建有关问题空间类对象并发送有关消息给它。建有关问题空间类对象并发送有关消息给它。 如果没有为系统设计任务管理类,则上述任务管如果没有为系统设计任务管理类,则上述任务管理类负责的有关工作由用户界面类负责完成。理类负责的有关工作由用户界面类负责完成。 图图示:示:任务管理类、用户界面类和问题空间类及其消息传送关系任务管理类、用户界面类和问题空间类及其消息传送关系44四、数据管理类四、数据管理类(11.8 (11.8 设计数据管理子系统设计数据管理子系统) )是指那些为实现对数据进行管理而设计的是指那些为实现对数据进行管理而设计的类,它是使软件系统能够对对象的类,它是使软件

33、系统能够对对象的属性值进属性值进行存贮和检索行存贮和检索所需要的类。所需要的类。数据管理类数据管理类用于存贮和检索对象的属性值,用于存贮和检索对象的属性值,可以采用可以采用文件模式文件模式或或关系数据库模式关系数据库模式实现。实现。设计数据管理类的目的是为了使得对对象设计数据管理类的目的是为了使得对对象属性值的管理独立于各种不同的数据管理模属性值的管理独立于各种不同的数据管理模式。式。 451、数据格式设计、数据格式设计 1)文件数据格式文件数据格式当采用文件存贮管理方式时,数据格式的当采用文件存贮管理方式时,数据格式的设计就是对设计就是对文件记录结构文件记录结构进行设计。进行设计。2)关系数

34、据库格式关系数据库格式当采用关系数据库管理方式时,数据格式当采用关系数据库管理方式时,数据格式的设计就是对的设计就是对关系表结构关系表结构进行设计。进行设计。462 2 、操作设计、操作设计 数据管理类的操作包括增添数据记录、删除数据数据管理类的操作包括增添数据记录、删除数据记录、检索数据记录和更新数据记录等几种形式,记录、检索数据记录和更新数据记录等几种形式,问问题空间类题空间类可通过这些可通过这些操作操作发送消息给相应的发送消息给相应的数据管理数据管理类类实现对数据的存贮、删除、检索和更新。数据管理实现对数据的存贮、删除、检索和更新。数据管理类设计模板如下图所示。类设计模板如下图所示。图图

35、示:示:数据管理类设计模板数据管理类设计模板47 为大学教务管理问题中的为大学教务管理问题中的SelectCourseSelectCourse(选课单)选课单)类设计的一个类设计的一个数据管理类数据管理类。 在在SelectCourseSelectCourse类中需要保存的是类中需要保存的是StudentIDStudentID、CourseIDCourseID以及分解为两个原子变量以及分解为两个原子变量YearYear和和Semester Semester ( (学期学期) )的的SelectForCourseSelectForCourse等描述性变量,该类通过等描述性变量,该类通过Write

36、Write(登记)等登记)等操作操作向相应的向相应的数据管理类数据管理类SelectCourseManagerSelectCourseManager发送发送AddAdd(增添)、增添)、UpdateUpdate(更新)更新) 等消息。等消息。48图示:大学教务管理问题中相应于图示:大学教务管理问题中相应于SelectCourseSelectCourse类的数据类的数据管理管理49第第1212章章 面向对象实现面向对象实现 与结构化实现技术中先以模块为单位进行过程设与结构化实现技术中先以模块为单位进行过程设计和编码调试相似,面向对象实现技术是先计和编码调试相似,面向对象实现技术是先以类为单以类为

37、单位位进行操作设计、编码调试;然后实现类与类之间的进行操作设计、编码调试;然后实现类与类之间的关联定义,并进行系统测试;最后交予用户使用并根关联定义,并进行系统测试;最后交予用户使用并根据使用情况进行维护。据使用情况进行维护。 在每一个阶段都必须按照有关规范编写相应的说在每一个阶段都必须按照有关规范编写相应的说明书或报告。因此,本章主要讨论面向对象实现技术明书或报告。因此,本章主要讨论面向对象实现技术的一些特点和不同于结构化实现技术。的一些特点和不同于结构化实现技术。501、实现语言、实现语言 毫无疑问,面向对象设计的实现最自然毫无疑问,面向对象设计的实现最自然的实现方式是利用面向对象语言。目

38、前最常的实现方式是利用面向对象语言。目前最常用的面向对象语言是用的面向对象语言是C+,其它比较著名的,其它比较著名的面向对象语言则还有面向对象语言则还有Smalltalk、面向对象、面向对象PASCAL,JAVA、Objective-C,Common Lisp Object System (CLOS),等等。,等等。 512 2、基本实现手段、基本实现手段 为了实现面向对象的设计,所选用的编码语为了实现面向对象的设计,所选用的编码语言一般应包括实现类定义、对象创建、结构定义、言一般应包括实现类定义、对象创建、结构定义、实例关联定义、操作调用和消息发送、内存管理、实例关联定义、操作调用和消息发送

39、、内存管理、封装等基本功能的编码手段。封装等基本功能的编码手段。 这里以目前最为流行的这里以目前最为流行的C+C+语言分别对这些基语言分别对这些基本功能的实现手段加以说明。本功能的实现手段加以说明。521 .类定义类定义 使用使用C+对大学教务管理问题中的类对大学教务管理问题中的类Student(学生)定义如例(学生)定义如例6.1所示:所示:例例12.1 类的定义类的定义 typedeftypedef structstruct intint month; month; intint day; day; intint year; year; date; / Month - date; / Mo

40、nth - 月;月;day - day - 日;日;year - year - 年年 enumenum sexdefsexdef M, F; /M - M, F; /M - 男;男;F - F - 女女 enumenum appdefappdef R, S; /R - R, S; /R - 注册;注册;S - S - 选课选课 class Student class Student protected: protected: / / 导出类可以访问的数据变量导出类可以访问的数据变量53char ID8; char Name24; sexdef Sex; date Birthday; date

41、EnrollmentDay; char Department24; char Speciality24; char Password6; apptdef Application; / 导出类可以访问的操作 appdef GetApplication(); void PutApplication(); void Note(char *Msg); 54public: public: / / 构造函数,必须与类名称相同构造函数,必须与类名称相同 Student (char *Student (char *InitIDInitID); ); / / 析构函数,必须与类名称相同析构函数,必须与类名称相同

42、 Student(); Student(); / / 所有类都可以访问的操作所有类都可以访问的操作 char *char *GetIDGetID(); (); char *char *GetPasswordGetPassword(); (); booleanboolean VerifyPasswordVerifyPassword(); (); void void ChangePassword(charChangePassword(char * *NewPasswordNewPassword, , char *char *OldPasswordOldPassword); ); ; ; 55在在C

43、+中,数据变量和操作都被说明为成中,数据变量和操作都被说明为成员,数据变量和操作的名称不能相同。类的员,数据变量和操作的名称不能相同。类的成员必须被说明为公有的(成员必须被说明为公有的(public)、保护)、保护的(的(protectd)或私有的()或私有的(private)中的一)中的一种,其中私有的为缺省值。公有成员可以被种,其中私有的为缺省值。公有成员可以被任何类的操作访问;保护成员只允许类自身任何类的操作访问;保护成员只允许类自身及其导出类的操作访问;私有成员只允许类及其导出类的操作访问;私有成员只允许类自身的操作访问。自身的操作访问。 56在上述例子中,类在上述例子中,类Stude

44、nt的所有数据变的所有数据变量和几个操作被定义为保护成员,因为其导量和几个操作被定义为保护成员,因为其导出类出类Undergraduate(本科生)和(本科生)和Graduate(研究生)(研究生) 将要访问这些成员。将要访问这些成员。 类中操作的定义类似于一个过程或函数类中操作的定义类似于一个过程或函数的定义,只是需要把类名作为操作名的前缀。的定义,只是需要把类名作为操作名的前缀。例例11.2给出了用给出了用C+编码设计的类编码设计的类Student的操作的操作ChangePassword。57例例11.2类操作的定义类操作的定义void Student:Changepassword(cha

45、r *NewPassword, char *OldPassword); if (OldPassword = Password ) Password = NewPassword; 58Student:Student (char *InitID) ID = InitID; 与类名称相同的两个操作与类名称相同的两个操作StudentStudent和和StudentStudent分别分别称为构造函数和析构函数,它们分别用于对象创建称为构造函数和析构函数,它们分别用于对象创建和对象消除操作。例如类和对象消除操作。例如类StudentStudent的构造函数和析的构造函数和析构函数的定义分别如例构函数的定

46、义分别如例12.312.3和和12.4 12.4 所示。所示。 例例12.3 12.3 类构造函数的定义类构造函数的定义59例例12.4 12.4 类析构函数的定义类析构函数的定义 析构函数是不带参数的,其名称是在类名称前面析构函数是不带参数的,其名称是在类名称前面加一个波浪号加一个波浪号“ ”。 Student:Student() / 6012.2.2 对象创建对象创建 C+有两种对象创建方式,有两种对象创建方式,静态内存分配静态内存分配方式方式和和动态内存分配方式动态内存分配方式,每当创建一个新,每当创建一个新对对 象,就执行一次构造函数。象,就执行一次构造函数。例例12.5 用静态内存分

47、配方式创建了类用静态内存分配方式创建了类Student的学号为的学号为98109002的对象的对象studentobj。对象创建的静态内存分配方式对象创建的静态内存分配方式 Student studentobj(98109002); 61如果该语句是出现在一个操作或函数中,则说如果该语句是出现在一个操作或函数中,则说明明studentobj被定义为被定义为局部变量局部变量,当,当操作或操作或 函数执函数执行完毕退出行完毕退出时,该对象将被自动消除,所占用的内时,该对象将被自动消除,所占用的内存被释放,释放内存时将执行一次析构函数。如果存被释放,释放内存时将执行一次析构函数。如果该语句是将该语句

48、是将studentobj定义为一个定义为一个全局变全局变量,则只量,则只有有系统退出系统退出后对象后对象studentobj才会被消除。才会被消除。采用动态内存分配方式创建对象时需要借用采用动态内存分配方式创建对象时需要借用C+的的new操作符操作符进行。进行。new操作符为新对象分配操作符为新对象分配内存并且返回它的一个指针,指针存放在指针变量内存并且返回它的一个指针,指针存放在指针变量中。中。new操作符可以包括构造函数中操作符可以包括构造函数中 的参数,如例的参数,如例12.6所示。所示。62例例12.6 对象创建的动态内存分配方式对象创建的动态内存分配方式 Student *stude

49、ntobj = new Student(98109002) 动态对象所占的内存必须使用动态对象所占的内存必须使用C+的的delete操操作符作符来释放。来释放。delete操作符首先唤醒该类的操作符首先唤醒该类的 析构函析构函数,然后释放该对象的内存,如例数,然后释放该对象的内存,如例12.7所示。所示。例例12.7 动态对象内存释放动态对象内存释放 delete studentobj; 注意,构造函数和析构函数仅仅是用来初始化注意,构造函数和析构函数仅仅是用来初始化及删除对象的,内存分配及释放应该明确由及删除对象的,内存分配及释放应该明确由new和和delete操作符来实现或由局部变量的作用

50、消失来实操作符来实现或由局部变量的作用消失来实现。现。633 3、 实现环境实现环境 (1 1) MFCMFC类库类库 (2 2) 开发工具:开发工具: Microsoft Visual C+Microsoft Visual C+的四个基本开发工具。的四个基本开发工具。如文本编辑器、项目管理器、浏览器、调试如文本编辑器、项目管理器、浏览器、调试器,等等。器,等等。 4 4 、编码调试、编码调试 5 5 、测试、测试 6 6 、维护、维护64面向对象设计( OOD )(补充)面向对象设计建立软件系统的结构。面向对象设计建立软件系统的结构。设计层次为:设计层次为: 子系统层:包含每个子系统的表示。

51、子系统层:包含每个子系统的表示。 类和对象层:包含类层次和每个对象的设计类和对象层:包含类层次和每个对象的设计表示。表示。 消息层:包含使每个对象能够和其协作者通消息层:包含使每个对象能够和其协作者通信的细节,建立系统的外部和内部接口。信的细节,建立系统的外部和内部接口。 责任层:包含针对每个对象的所有属性和操责任层:包含针对每个对象的所有属性和操作的数据结构和算法的设计。作的数据结构和算法的设计。65面向对象设计的主要工作分为两个阶段:面向对象设计的主要工作分为两个阶段:高层设计高层设计和和类设计类设计。高层设计构造应用软件的总体模型。高层设计构造应用软件的总体模型。高层设计构造应用软件的总

52、体模型。高层设计构造应用软件的总体模型。类设计建立类的规格说明,包括类的实例可类设计建立类的规格说明,包括类的实例可类设计建立类的规格说明,包括类的实例可类设计建立类的规格说明,包括类的实例可执行的操作和它们的数据表示。执行的操作和它们的数据表示。执行的操作和它们的数据表示。执行的操作和它们的数据表示。三个可能的利用现有类的方向:三个可能的利用现有类的方向: 现有类的复用现有类的复用现有类的复用现有类的复用 从现有类进行演化从现有类进行演化从现有类进行演化从现有类进行演化 从废弃型进行开发从废弃型进行开发从废弃型进行开发从废弃型进行开发66小小 结结1 1、面向对象的设计、面向对象的设计: :五个层次、四个部分五个层次、四个部分 2 2、面向对象的实现、面向对象的实现: :以类为单位进行操作以类为单位进行操作设计、编码调试等设计、编码调试等. .67

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号