面向对象设计及实现讲课稿_第1页
面向对象设计及实现讲课稿_第2页
面向对象设计及实现讲课稿_第3页
面向对象设计及实现讲课稿_第4页
面向对象设计及实现讲课稿_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、CH7 面向对象技术 面向对象设计及实现CH7 面向对象技术 (4 4) 弱耦合弱耦合 所谓耦合,是指一个软件结构内不同模块之间互连的依赖关系。所谓耦合,是指一个软件结构内不同模块之间互连的依赖关系。依赖关系越多耦合度越强,依赖关系越少耦合度越弱。在面向对象方法中,依赖关系越多耦合度越强,依赖关系越少耦合度越弱。在面向对象方法中,对象是最基本的模块,不同对象之间相互关联的依赖关系表示了耦合度。对象是最基本的模块,不同对象之间相互关联的依赖关系表示了耦合度。衡量设计优良的一个重要标准就是弱耦合衡量设计优良的一个重要标准就是弱耦合,弱耦合的设计中某个对象的改,弱耦合的设计中某个对象的改变不会或很少

2、影响到其他对象。变不会或很少影响到其他对象。 不同对象之间耦合是不可避免的。两个对象必须相互联系相互依赖不同对象之间耦合是不可避免的。两个对象必须相互联系相互依赖时,应该通过类的协议时,应该通过类的协议( (即公共接口即公共接口) )实现两个对象相互依赖实现两个对象相互依赖( (耦合耦合) ),而不,而不是通过类的具体实现细节来描述。是通过类的具体实现细节来描述。(5 5) 强内聚强内聚 所谓内聚,是一个模块内各个元素彼此结合的紧密程度。结合得越所谓内聚,是一个模块内各个元素彼此结合的紧密程度。结合得越紧密内聚越强,结合得越不紧密内聚越弱。强内聚也是衡量设计优良的一紧密内聚越强,结合得越不紧密

3、内聚越弱。强内聚也是衡量设计优良的一个重要标准。个重要标准。在面向对象设计中,内聚可分为下述三类:在面向对象设计中,内聚可分为下述三类:CH7 面向对象技术 1) 1) 服务服务( (操作操作) )内聚。一个服务应该是单一的,即只完成一个任务。内聚。一个服务应该是单一的,即只完成一个任务。2) 2) 类内聚。类内聚。类内聚要求类的属性和服务应该是高内聚的,而且它们应该类内聚要求类的属性和服务应该是高内聚的,而且它们应该是系统任务所必需的是系统任务所必需的。一个类应该只有一个功能,如果某个类有多个功能,。一个类应该只有一个功能,如果某个类有多个功能,通常应该把它分解成多个专用的类。通常应该把它分

4、解成多个专用的类。3) 3) 一般一般- -特殊内聚。一般特殊内聚。一般- -特殊内聚表示:一般特殊内聚表示:一般- -特殊结构符合领域知识的特殊结构符合领域知识的表示形式,也就是说,表示形式,也就是说,特殊类应该尽量地继承一般类的属性和服务。这样特殊类应该尽量地继承一般类的属性和服务。这样的一般的一般- -特殊结构是高内聚的。特殊结构是高内聚的。(6 6)可重用)可重用 在面向对象设计中,在面向对象设计中,一个类的设计应该具有通用性,为开发相似的系一个类的设计应该具有通用性,为开发相似的系统提供软件重用可能。统提供软件重用可能。因此,在软件开发过程中,为了实现重用,既要尽因此,在软件开发过程

5、中,为了实现重用,既要尽量重用已有的类,又要创建可重用的新类。量重用已有的类,又要创建可重用的新类。CH7 面向对象技术 2设计策略设计策略 在使用面向对象方法学开发软件的实践中,得出了下面在使用面向对象方法学开发软件的实践中,得出了下面一些基于经验的一些基于经验的启发规则启发规则,这些规则往往能帮助软件开发人,这些规则往往能帮助软件开发人员设计出好的方案来,以保证软件的质量。员设计出好的方案来,以保证软件的质量。 (1 1)设计结果应该清晰易懂)设计结果应该清晰易懂(2 2)一般)一般- -特殊结构的深度应适当特殊结构的深度应适当(3 3)设计简单的类)设计简单的类(4 4)设计简单的协议)

6、设计简单的协议(5 5)设计简单的服务)设计简单的服务(6 6)减少设计变动)减少设计变动CH7 面向对象技术 3系统分解与组织系统分解与组织 面向对象设计同过程设计一样,自顶向下进行功能分解。面向对象设计同过程设计一样,自顶向下进行功能分解。在设计比较复杂的应用系统时,将系统分解成若干个比较小在设计比较复杂的应用系统时,将系统分解成若干个比较小的部分,再分别设计每个部分。这样既简化了应用系统,又的部分,再分别设计每个部分。这样既简化了应用系统,又降低了设计的难度,并有利于实现和维护。降低了设计的难度,并有利于实现和维护。 系统是根据功能来分解的,我们将系统分解的各个部分系统是根据功能来分解的

7、,我们将系统分解的各个部分( (即系统的主要组成部分即系统的主要组成部分) )称为称为子系统子系统。 子系统间交互的形式和交互的信息由接口确定,因此,接子系统间交互的形式和交互的信息由接口确定,因此,接口应该简单、明确。口应该简单、明确。CH7 面向对象技术 (1)面向对象设计的)面向对象设计的五个层次、四个部分五个层次、四个部分 面向对象设计模型同样由主题、类面向对象设计模型同样由主题、类- - -对象、结构、对象、结构、属性和服务等五个层次组成,并且又扩充了问题域属性和服务等五个层次组成,并且又扩充了问题域(PDC)(PDC)、人机交互、人机交互(HIC)(HIC)、任务管理、任务管理(T

8、MC)(TMC)和数据管理和数据管理(DMC)(DMC)四个部分。四个部分。典型的面向对象设计模型如图典型的面向对象设计模型如图3.3.233.3.23示。示。CH7 面向对象技术 人机界面HICPDCTMCDMC问题论域任务管理数据管理主题层类-&-对象层结构层属性层服务层图3.3.23 典型的面向对象设计模型CH7 面向对象技术 (2)子系统间的交互方式)子系统间的交互方式 在应用系统中,在应用系统中,子系统之间的关系可分为客户子系统之间的关系可分为客户/ /服务器关系和同等伙伴服务器关系和同等伙伴关系两种。关系两种。这两种关系对应两种交互的方式,即客户这两种关系对应两种交互的方式

9、,即客户/ /服务器交互方式和同服务器交互方式和同等伙伴交互方式。等伙伴交互方式。 通常,系统使用客户通常,系统使用客户/ /服务器关系,因为单向交互更容易理解,也更容服务器关系,因为单向交互更容易理解,也更容易设计和修改,而双向交互相对困难些。易设计和修改,而双向交互相对困难些。(3) 系统组织系统组织 将子系统组织成完整的系统有两种方式,即水平层次组织和垂直块组织。将子系统组织成完整的系统有两种方式,即水平层次组织和垂直块组织。1) 1) 层次组织层次组织 层次组织是将子系统按层组织成为一个层次软件系统,每层是一个子系层次组织是将子系统按层组织成为一个层次软件系统,每层是一个子系统。统。上

10、层建立在下层的基础上,下层为上层提供必要的服务。低层子系统提上层建立在下层的基础上,下层为上层提供必要的服务。低层子系统提供服务,相当于服务器,上层子系统使用下层提供的服务,相当于客户。供服务,相当于服务器,上层子系统使用下层提供的服务,相当于客户。 CH7 面向对象技术 2) 块组织块组织 块组织将系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务。例如,图3.3.24示一个典型应用系统的组织结构。计算机硬件操作系统人机交互控制像素图形屏幕图形窗口图形仿真软件包应用包(4)设计系统的拓扑结构)设计系统的拓扑结构:构成完整系统的拓扑结构有:管道型、树

11、型、星型等。 CH7 面向对象技术 补充: 概括地说,面向对象软件开发方法采用面向对象设计概括地说,面向对象软件开发方法采用面向对象设计 (OOD)(OOD)技术进行问题解决方案的设计工作,它将问题的解决方案表述技术进行问题解决方案的设计工作,它将问题的解决方案表述为:为:类关联类关联的形式,其中,的形式,其中,类类包括问题空间类、用户界面类、任务管理类包括问题空间类、用户界面类、任务管理类和数据管理类,是从设计的角度出发对问题解决方案中的对象和数据管理类,是从设计的角度出发对问题解决方案中的对象的抽象和描述,的抽象和描述,关联关联则用于描述这些类和类之间的关系。则用于描述这些类和类之间的关系

12、。 因此,面向对象设计工作主要包括问题空间类、用户界面因此,面向对象设计工作主要包括问题空间类、用户界面类、任务管理类和数据管理类的设计类、任务管理类和数据管理类的设计,具体工作内容和步骤如,具体工作内容和步骤如图图3.3.253.3.25所示。所示。CH7 面向对象技术 图3.3.25 面向对象设计工作内容和步骤 CH7 面向对象技术 一、问题空间类一、问题空间类 是指那些直接从面向对象分析模型设计得到的类,它是是指那些直接从面向对象分析模型设计得到的类,它是使软件系统能够实现对问题的求解的最基本的类,也是面向使软件系统能够实现对问题的求解的最基本的类,也是面向对象软件系统的核心类。对象软件

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

14、表18所示的是大学教务管理问题中的所示的是大学教务管理问题中的问题空间类。问题空间类。 图示:图示:大学教务管理问题中的问题空间类大学教务管理问题中的问题空间类 CH7 面向对象技术 表表5.1 Class : Student(学生)(学生) 数据变量数据变量序号 名称 定义 类型 中文名称 备注1 ID char(8) 描述型 学号 2 Name char(24) 描述型 姓名 3 Sex 男,女 描述型 性别 枚举类型4 Birthday date 描述型 出生日期 5 EnrollmentDay date描述型 入学日期 6 Department char(24) 描述型 系别 7 Sp

15、eciality char(24) 描述型 专业 8 Password char(6) 描述型 密码 9 Application 注册,选课 描述型 申请 枚举类型CH7 面向对象技术 操作操作序号 名称 接口参数 返回值 中文名称 备注1 GetID () ID 读入学号 GetPassword () Password 读入密码 2 VerifyPassword () True/Fasle 检验 3 GetApplication () Application 询问 4 PutApplication () NULL 回答 5 Note (message ) NULL 通知 6 ChangePa

16、ssword (NewPassword, OldPassword) NULL 修改 CH7 面向对象技术 表表5.2 Class : Graduate(研究生)(研究生) 表表5.3 Class : UnderGraduate(本科生)(本科生) 表表5.4 Class : RegisterRec(注册记录)(注册记录) 表表5.5 Class : Course(课程)(课程) 表表5.6 Class : GraduateCourse(研究生课程)(研究生课程) 表表5.7 Class : UnderGraduate(本科生课程)(本科生课程) 表表5.8 Class : SelectCour

17、se(选课单)(选课单) CH7 面向对象技术 二、用户界面类二、用户界面类 是指那些为实现人机交互接口而设计的类,它是使软件是指那些为实现人机交互接口而设计的类,它是使软件系统能够接收用户的命令和能够为用户提供信息所需要的类。系统能够接收用户的命令和能够为用户提供信息所需要的类。 用户界面类是为了使系统能够与用户进行交互而必须增用户界面类是为了使系统能够与用户进行交互而必须增添设计的类。在实际中,一个软件系统常常会因为其用户界添设计的类。在实际中,一个软件系统常常会因为其用户界面使得用户不满意而遭到否定或弃之不用。因此用户界面类面使得用户不满意而遭到否定或弃之不用。因此用户界面类的设计是一项

18、既影响软件系统前途,又需要做耐心细致调查的设计是一项既影响软件系统前途,又需要做耐心细致调查分析的重要工作。尽管在分析过程中已经对用户在用户界面分析的重要工作。尽管在分析过程中已经对用户在用户界面方面进行了分析,但是在设计过程中仍然必须继续做这项分方面进行了分析,但是在设计过程中仍然必须继续做这项分析工作,必须具体设计确定交互作用的时间、交互方式和交析工作,必须具体设计确定交互作用的时间、交互方式和交互技术等。互技术等。 用户界面类的设计通常可以采用系统用户界面类的设计通常可以采用系统原型原型(模型)法进行。(模型)法进行。 CH7 面向对象技术 1 1、分析考察用户、分析考察用户2 2、设计

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

20、发命令层时,必须仔细选择不同的操作名称,并把这些名称按一定要求排序,将最有用的放在前面,或者按习惯的工作步骤排序。称按一定要求排序,将最有用的放在前面,或者按习惯的工作步骤排序。(2)(2)组装。在操作中寻找组装结构模式,这有助于在层次中组织和分离操组装。在操作中寻找组装结构模式,这有助于在层次中组织和分离操作。作。CH7 面向对象技术 (3)(3)宽度和广度。由于人的短暂记忆局限,命令层次不宜太广太深。以宽度和广度。由于人的短暂记忆局限,命令层次不宜太广太深。以3 3最为最为合适。合适。(4)(4)极小化。尽量少用组合键,极小化用户的击键次数。极小化。尽量少用组合键,极小化用户的击键次数。3

21、 3、完成设计、完成设计 当前由于软件开发工具,特别是可视化开发工具的日益丰富,完成用户当前由于软件开发工具,特别是可视化开发工具的日益丰富,完成用户界面的具体设计已经是一件十分容易的事情了,但是在具体设计时不能忽略界面的具体设计已经是一件十分容易的事情了,但是在具体设计时不能忽略以下原则:以下原则:1)1)一致性一致性使用一致的术语,一致的步骤和一致的动作行为。使用一致的术语,一致的步骤和一致的动作行为。2)2)减少步骤减少步骤极小化击键次数、使用鼠标的次数和下拉菜单的次数,极小化响应时间。极小化击键次数、使用鼠标的次数和下拉菜单的次数,极小化响应时间。3)3)尽量显示提示信息尽量显示提示信

22、息尽量为用户提供有意义的、及时反馈信息。尽量为用户提供有意义的、及时反馈信息。4)4)设置取消操作设置取消操作用户难免出错,应尽量能使用户取消其错误动作。用户难免出错,应尽量能使用户取消其错误动作。CH7 面向对象技术 5)5)尽量减少要用户记忆的内容尽量减少要用户记忆的内容不应该要求用户记下某窗口的信息而用于另一窗口中。不应该要求用户记下某窗口的信息而用于另一窗口中。6)6)易学易用易学易用为用户提供联机学习手册。为用户提供联机学习手册。7)7)屏幕生动活泼屏幕生动活泼屏幕画面看起来能够吸引用户,唤起用户的注意和兴趣。屏幕画面看起来能够吸引用户,唤起用户的注意和兴趣。例如,对于大学教务管理问

23、题,可以先根据对用户的分析设例如,对于大学教务管理问题,可以先根据对用户的分析设计如下页图所示的用户进入系统的屏幕。计如下页图所示的用户进入系统的屏幕。CH7 面向对象技术 图示: 用户进入系统屏幕界面 然后,根据针对该用户界面和大多数面向对象软件开发环境所提供的可重用类设计相应的用户界面类,设计结果如下页图所示。CH7 面向对象技术 图示:大学教务管理问题的部分用户界面类和问题空间类 CH7 面向对象技术 其中,其中,WindowWindow、EditFieldEditField、StaticFieldStaticField和和ButtonButton等类等类 一般可从开发环境提供的类库中通

24、过继承重用获得,需要进一般可从开发环境提供的类库中通过继承重用获得,需要进一步做的设计工作主要是设计有关与问题空间类和任务管理一步做的设计工作主要是设计有关与问题空间类和任务管理类进行通讯的操作。例如需要为类进行通讯的操作。例如需要为OKButtonOKButton类设计一个向问题类设计一个向问题空间类中的空间类中的StudentStudent类发送检验消息的操作。类发送检验消息的操作。CH7 面向对象技术 三、任务管理类三、任务管理类 是指那些为实现对多操作并发执行的管理而设计的类,是指那些为实现对多操作并发执行的管理而设计的类,它是使软件系统能够同时处理多个并发行为所需要的类。它是使软件系

25、统能够同时处理多个并发行为所需要的类。 所谓任务,就是一个处理过程,它可能包含不同类的多所谓任务,就是一个处理过程,它可能包含不同类的多个操作的执行。任务管理类的用途之一就是用于管理系统的个操作的执行。任务管理类的用途之一就是用于管理系统的这种任务,它的另一个主要用途是在操作系统级(运行平台)这种任务,它的另一个主要用途是在操作系统级(运行平台)上上 负责处理并发、中断、调度等问题,从而使得所设计的负责处理并发、中断、调度等问题,从而使得所设计的系统能够相对独立于运行平台,当需要移植到其它运行平台系统能够相对独立于运行平台,当需要移植到其它运行平台上,只需要替换有关任务管理类就可以了。上,只需

26、要替换有关任务管理类就可以了。 因此,为了设计任务管理类,首先必须从所设计的系统因此,为了设计任务管理类,首先必须从所设计的系统有关类中找出需要并发进行的操作和那些与特定运行平台有有关类中找出需要并发进行的操作和那些与特定运行平台有关的操作,然后再对它们进行分析设计关的操作,然后再对它们进行分析设计1 1、确定任务类型、确定任务类型1)确定事件驱动型任务CH7 面向对象技术 某些任务是由事件驱动而执行的。这种任务可能负责与设备的通讯,某些任务是由事件驱动而执行的。这种任务可能负责与设备的通讯,与一个窗口或多个窗口、其它任务、子系统、其它处理器或其它系统的通与一个窗口或多个窗口、其它任务、子系统

27、、其它处理器或其它系统的通讯。讯。 2)2)确定时钟驱动型任务确定时钟驱动型任务 这种任务在特定的时间被触发执行某些处理。例如,某些设备要求周这种任务在特定的时间被触发执行某些处理。例如,某些设备要求周期性地获得数据或控制,某些用户界面、子系统、任务、处理器或其它系期性地获得数据或控制,某些用户界面、子系统、任务、处理器或其它系统也可能需要周期性地通讯。此时就常用到时钟驱动型的任务。统也可能需要周期性地通讯。此时就常用到时钟驱动型的任务。 3)3)确定优先任务及临界任务确定优先任务及临界任务 优先任务分高优先级和低优先级二种,用来适应处理的需要。临界任优先任务分高优先级和低优先级二种,用来适应

28、处理的需要。临界任务是有关系统成功或失败的临界处理,它尤其涉及严格的可靠性约束。务是有关系统成功或失败的临界处理,它尤其涉及严格的可靠性约束。4)4)确定协调任务确定协调任务 当存在三个以上的任务时,就应该考虑增加一个任务,用它来协调任当存在三个以上的任务时,就应该考虑增加一个任务,用它来协调任务。协调任务的引入当然会增加系统的开销,但是引入协调任务有利于封务。协调任务的引入当然会增加系统的开销,但是引入协调任务有利于封装任务之间的协调控制。使用状态转换矩阵可以描述该任务的行为。装任务之间的协调控制。使用状态转换矩阵可以描述该任务的行为。CH7 面向对象技术 2 2、分析任务、分析任务 设计多

29、任务系统的主要问题是设计人员常常定义太多的设计多任务系统的主要问题是设计人员常常定义太多的任务。原因是为了自己处理时的方便,但是这样做就增大了任务。原因是为了自己处理时的方便,但是这样做就增大了整个设计的技术复杂度,并且不容易理解。因此,在进行任整个设计的技术复杂度,并且不容易理解。因此,在进行任务管理类的具体设计前,必须仔细分析和选择各个任务,尽务管理类的具体设计前,必须仔细分析和选择各个任务,尽量使得任务的数目降低到最少。量使得任务的数目降低到最少。3 3、完成设计、完成设计 设计任务包括定义任务的内容以及它怎样协调和通讯。设计任务包括定义任务的内容以及它怎样协调和通讯。1)1)任务的内容

30、任务的内容2)2)怎样协调怎样协调 3)怎样通讯 CH7 面向对象技术 任务管理类设计模板如任务管理类设计模板如右图所示:右图所示: CH7 面向对象技术 问题空间类、用户界面类和任务管理类之间的基本关系问题空间类、用户界面类和任务管理类之间的基本关系如下图所示,任务管理类对象如下图所示,任务管理类对象 从运行平台(操作系统)接从运行平台(操作系统)接收消息并通过发送消息创建有关用户界面类对象,用户界面收消息并通过发送消息创建有关用户界面类对象,用户界面类对象根据从用户处获得的信息创建有关问题空间类对象并类对象根据从用户处获得的信息创建有关问题空间类对象并发送有关消息给它。发送有关消息给它。如

31、果没有为系统设计任务管理类,则上述任务管理类负责的如果没有为系统设计任务管理类,则上述任务管理类负责的有关工作由用户界面类负责完成。有关工作由用户界面类负责完成。 图 示: 任务管理类、用户界面类和问题空间类及其消息传送关系 CH7 面向对象技术 四、数据管理类四、数据管理类 是指那些为实现对数据进行管理而设计的类,它是使软件是指那些为实现对数据进行管理而设计的类,它是使软件系统能够对对象的属性值进行存贮和检索所需要的类。系统能够对对象的属性值进行存贮和检索所需要的类。 数据管理类用于存贮和检索对象的属性值,可以采用文件数据管理类用于存贮和检索对象的属性值,可以采用文件模式或关系数据库模式实现

32、。设计数据管理类的目的是为了使模式或关系数据库模式实现。设计数据管理类的目的是为了使得对对象属性值的管理独立于各种不同的数据管理模式。得对对象属性值的管理独立于各种不同的数据管理模式。 1 1、数据格式设计、数据格式设计 1)1)文件数据格式文件数据格式当采用文件存贮管理方式时,数据格式的设计就是对文件记录当采用文件存贮管理方式时,数据格式的设计就是对文件记录结构进行设计。结构进行设计。2)2)关系数据库格式关系数据库格式当采用关系数据库管理方式时,数据格式的设计就是对关系表当采用关系数据库管理方式时,数据格式的设计就是对关系表结构进行设计。结构进行设计。CH7 面向对象技术 2 、操作设计

33、数据管理类的操作包括增添数据记录、删除数据记录、数据管理类的操作包括增添数据记录、删除数据记录、检索数据记录和更新数据记录等几种形式,问题空间类可通检索数据记录和更新数据记录等几种形式,问题空间类可通过这些操作发送消息给相应的数据管理类实现对数据的存贮、过这些操作发送消息给相应的数据管理类实现对数据的存贮、删除、检索和更新。数据管理类设计模板如下图所示。删除、检索和更新。数据管理类设计模板如下图所示。图 示: 数据管理类设计模板 CH7 面向对象技术 下页图示是为大学教务管理问题中的下页图示是为大学教务管理问题中的SelectCourseSelectCourse(选课(选课单)类设计的一个数据

34、管理类。单)类设计的一个数据管理类。 在在SelectCourseSelectCourse类中需要保存的是类中需要保存的是StudentIDStudentID、CourseIDCourseID以及分解为两个原子变量以及分解为两个原子变量YearYear和和Semester Semester 的的SelectForCourseSelectForCourse等描述性变量,该类通过等描述性变量,该类通过WriteWrite(登记)(登记)等操作向相应的数据管理类等操作向相应的数据管理类SelectCourseManagerSelectCourseManager发送发送AddAdd(增添)、(增添)、

35、UpdateUpdate(更新)(更新) 等消息。等消息。CH7 面向对象技术 图示:大学教务管理问题中相应于SelectCourse类的数据管理CH7 面向对象技术 面向对象实现技术面向对象实现技术 与结构化实现技术中先以模块为单位进行过程设计和编与结构化实现技术中先以模块为单位进行过程设计和编码调试相似,面向对象实现技术是先以类为单位进行操作设码调试相似,面向对象实现技术是先以类为单位进行操作设计、编码调试;然后实现类与类之间的关联定义,并进行系计、编码调试;然后实现类与类之间的关联定义,并进行系统测试;最后交予用户使用并根据使用情况进行维护。在每统测试;最后交予用户使用并根据使用情况进行

36、维护。在每一个阶段都必须按照有关规范编写相应的说明书或报告。因一个阶段都必须按照有关规范编写相应的说明书或报告。因此,本章主要讨论面向对象实现技术的一些特点和不同于结此,本章主要讨论面向对象实现技术的一些特点和不同于结构化实现技术。构化实现技术。1 1、实现语言、实现语言 毫无疑问,面向对象设计的实现最自然的实现方式是利用毫无疑问,面向对象设计的实现最自然的实现方式是利用面向对象语言。目前最常用的面向对象语言是面向对象语言。目前最常用的面向对象语言是C+C+,其它比较,其它比较著名的面向对象语言则还有著名的面向对象语言则还有SmalltalkSmalltalk、面向对象、面向对象PASCALP

37、ASCAL,JAVAJAVA、Objective-CObjective-C,Common Lisp Object System (CLOS)Common Lisp Object System (CLOS),等等。等等。 CH7 面向对象技术 2 2、基本实现手段、基本实现手段 为了实现面向对象的设计,所选用的编码语言一般应包括为了实现面向对象的设计,所选用的编码语言一般应包括实现类定义、对象创建、结构定义、实例关联定义、操作调用实现类定义、对象创建、结构定义、实例关联定义、操作调用和消息发送、内存管理、封装等基本功能的编码手段。这里以和消息发送、内存管理、封装等基本功能的编码手段。这里以目前最

38、为流行的目前最为流行的C+C+语言分别对这些基本功能的实现手段加以说语言分别对这些基本功能的实现手段加以说明。明。1 类定义类定义 使用使用C+对大学教务管理问题中的类对大学教务管理问题中的类Student(学生)定义如例(学生)定义如例6.1所示:所示:例例6.1 类的定义类的定义 typedef struct int month; int day; int year; date; / Month - 月;月;day - 日;日;year - 年年 enum sexdef M, F; /M - 男;男;F - 女女 enum appdef R, S; /R - 注册;注册;S - 选课选课

39、class Student protected: / 导出类可以访问的数据变量导出类可以访问的数据变量 CH7 面向对象技术 char ID8; char Name24; sexdef Sex; date Birthday; date EnrollmentDay; char Department24; char Speciality24; char Password6; apptdef Application; / 导出类可以访问的操作 appdef GetApplication(); void PutApplication(); void Note(char *Msg); public: /

40、 构造函数,必须与类名称相同 Student (char *InitID); / 析构函数,必须与类名称相同 Student(); CH7 面向对象技术 / 所有类都可以访问的操作所有类都可以访问的操作 char *GetID(); char *GetPassword(); boolean VerifyPassword(); void ChangePassword(char *NewPassword, char *OldPassword); ; 在在C+中,数据变量和操作都被说明为成员,数据变量和操作的名称中,数据变量和操作都被说明为成员,数据变量和操作的名称不能相同。类的成不能相同。类的成

41、员必须被说明为公有的(员必须被说明为公有的(public)、保护的()、保护的(protectd)或私有的(或私有的(private)中的一种,其中)中的一种,其中 私有的为缺省值。公有成员可以被私有的为缺省值。公有成员可以被任何类的操作访问;保护成员只允许类自身及其导出类的操作访问;私有任何类的操作访问;保护成员只允许类自身及其导出类的操作访问;私有成员只允许类自身的操作访问。在上述例子中,类成员只允许类自身的操作访问。在上述例子中,类Student的所有数据变的所有数据变量和几个操作被定义为保护成员,因为其导出类量和几个操作被定义为保护成员,因为其导出类Undergraduate(本科生)

42、(本科生)和和Graduate(研究生)(研究生) 将要访问这些成员。将要访问这些成员。 类中操作的定义类似于一个过程或函数的定义,只是需要把类名作为类中操作的定义类似于一个过程或函数的定义,只是需要把类名作为操作名的前缀。例操作名的前缀。例6.2给出了用给出了用C+编码设计的类编码设计的类Student的操作的操作ChangePassword。CH7 面向对象技术 例例6.2 类操作的定义类操作的定义 void Student:Changepassword(char *NewPassword, char *OldPassword); if (OldPassword = Password )

43、Password = NewPassword; 与类名称相同的两个操作与类名称相同的两个操作Student和和Student分别称为构造函数和析构函数,分别称为构造函数和析构函数,它们分别用它们分别用 于对象创建和对象消除操作。例如类于对象创建和对象消除操作。例如类Student的构造函数和析的构造函数和析构函数的定义分别如例构函数的定义分别如例6.3和和6.4 所示。所示。例例6.3 类构造函数的定义类构造函数的定义 Student:Student (char *InitID) ID = InitID; CH7 面向对象技术 例例6.4 类析构函数的定义类析构函数的定义 Student:St

44、udent() / 析构函数是不带参数的,其名称是在类名称前面加一个波浪号析构函数是不带参数的,其名称是在类名称前面加一个波浪号“”。 6.2.2 对象创建对象创建 C+有两种对象创建方式,静态内存分配方式和动态内存分配方式,每有两种对象创建方式,静态内存分配方式和动态内存分配方式,每当创建一个新对当创建一个新对 象,就执行一次构造函数。象,就执行一次构造函数。例例6.5用静态内存分配方式创建了类用静态内存分配方式创建了类Student的学号为的学号为98109002的对象的对象studentobj。例例6.5 对象创建的静态内存分配方式对象创建的静态内存分配方式 Student studen

45、tobj(98109002); CH7 面向对象技术 如果该语句是出现在一个操作或函数中,则说明如果该语句是出现在一个操作或函数中,则说明studentobj被定义为被定义为局部变量,当操作或局部变量,当操作或 函数执行完毕退出时,该对象将被自动消除,所占函数执行完毕退出时,该对象将被自动消除,所占用的内存被释放,释放内存时将执行一次析构函数。如果该语句是将用的内存被释放,释放内存时将执行一次析构函数。如果该语句是将studentobj定义为一个全局变量,则只有系统退出后对象定义为一个全局变量,则只有系统退出后对象studentobj才会被才会被消除。消除。 采用动态内存分配方式创建对象时需要借用采用动态内存分配方式创建对象时需要借用C+的的new操作符进行。操作符进行。new操作符为新对象分配内存并且返回它的一个指针,指针存放在指针变操作符为新

温馨提示

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

评论

0/150

提交评论