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

下载本文档

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

文档简介

1、CH7 面向对象技术 1 面向对象设计可分为面向对象设计可分为系统设计系统设计和和类类(对象对象)设计设计。系。系 统设计是高层设计,主要确定实现系统的策略和统设计是高层设计,主要确定实现系统的策略和 目标系统的高层结构。类目标系统的高层结构。类- int day; int year; date; / Month - 月;月;day - 日;日; year - 年年 enum sexdef M, F; /M - 男;男;F - 女女 enum appdef R, S; /R - 注册;注册;S - 选课选课 class Student protected: / 导出类可以访问的数据变量导出类可

2、以访问的数据变量 CH7 面向对象技术 37 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: / 构造函数,必须与类名称相同 Student (char *InitID); /

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

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

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

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

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

8、 CH7 面向对象技术 41 如果该语句是出现在一个操作或函数中,则说明如果该语句是出现在一个操作或函数中,则说明studentobj被定义为被定义为 局部变量,当操作或局部变量,当操作或 函数执行完毕退出时,该对象将被自动消除,所占函数执行完毕退出时,该对象将被自动消除,所占 用的内存被释放,释放内存时将执行一次析构函数。如果该语句是将用的内存被释放,释放内存时将执行一次析构函数。如果该语句是将 studentobj定义为一个全局变量,则只有系统退出后对象定义为一个全局变量,则只有系统退出后对象studentobj才会被才会被 消除。消除。 采用动态内存分配方式创建对象时需要借用采用动态内存

9、分配方式创建对象时需要借用C+的的new操作符进行。操作符进行。 new操作符为新对象分配内存并且返回它的一个指针,指针存放在指针变操作符为新对象分配内存并且返回它的一个指针,指针存放在指针变 量中。量中。new操作符可以包括构造函数中操作符可以包括构造函数中 的参数,如例的参数,如例6.6所示。所示。 例例6.6 对象创建的动态内存分配方式对象创建的动态内存分配方式 Student *studentobj = new Student(98109002) 动态对象所占的内存必须使用动态对象所占的内存必须使用C+的的delete操作符来释放。操作符来释放。delete操作符首操作符首 先唤醒该类

10、的先唤醒该类的 析构函数,然后释放该对象的内存,如例析构函数,然后释放该对象的内存,如例6.7所示。所示。 例例6.7 动态对象内存释放动态对象内存释放 delete studentobj; 注意,构造函数和析构函数仅仅是用来初始化及删除对象的,内存分配及注意,构造函数和析构函数仅仅是用来初始化及删除对象的,内存分配及 释放应该明确由释放应该明确由new和和delete操作符来实现或由局部变量的作用消失来实操作符来实现或由局部变量的作用消失来实 现。现。 CH7 面向对象技术 42 3、 实现环境实现环境 (1) MFC类库类库 (2) 开发工具:开发工具: Microsoft Visual

11、C+的四个基本开发工具。如文本的四个基本开发工具。如文本 编辑器、项目管理器、浏览器、调试器,等等。编辑器、项目管理器、浏览器、调试器,等等。 4 、编码调试、编码调试 5 、测试、测试 6 、维护、维护 CH7 面向对象技术 43 子系统层:包含每个子系统的表示。子系统层:包含每个子系统的表示。 类和对象层:包含类层次和每个对象的设类和对象层:包含类层次和每个对象的设 计表示。计表示。 消息层:包含使每个对象能够和其协作者消息层:包含使每个对象能够和其协作者 通信的细节,建立系统的外部和内部接口。通信的细节,建立系统的外部和内部接口。 责任层:包含针对每个对象的所有属性和责任层:包含针对每个

12、对象的所有属性和 操作的数据结构和算法的设计。操作的数据结构和算法的设计。 CH7 面向对象技术 44 CH7 面向对象技术 45 Coad 与与 Yourdon 的设计模型的设计模型 l设计模型被划分成了设计模型被划分成了 4 个组成部分,这些组成个组成部分,这些组成 部分把实现技术隐藏起来,使之与系统的基本部分把实现技术隐藏起来,使之与系统的基本 问题领域行为分离开来。问题领域行为分离开来。 l从分析转到设计需要在分析模型的基础上加入从分析转到设计需要在分析模型的基础上加入 实现方面的限制。实现方面的限制。 l设计模型类似于构造蓝图,设计模型全面地定设计模型类似于构造蓝图,设计模型全面地定 义了如何用特定的实现技术建立起一个目标系义了如何用特定的实现技术建立起一个目标系 统。统。 CH7 面向对象技术 46 类与类与 对对 象层象层 服务层服务层 结构层结构层 主题层主题层 问题问题 领域领域 部分部分 人机人机 交互交互 部分部分 任务任务 管理管理 部分部分 数据数据 管理管理 部分部分 主题主题 服务服务 消息消息 属性属

温馨提示

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

评论

0/150

提交评论