面向对象技术幻灯片_第1页
面向对象技术幻灯片_第2页
面向对象技术幻灯片_第3页
面向对象技术幻灯片_第4页
面向对象技术幻灯片_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

3 3经典分析和设计方法介绍 3 3 1OMT3 3 2OOD3 3 3RDD3 3 4OOAD3 3 5OOSE 采用面向对象技术进行分析和设计的软件开发方法很多 各种方法都有各自的特点 1OMT分析综述 3 3 1OMT 在关系数据库设计的实体关系模型的基础上扩展了类 继承和行为等概念得到 需求的描述 而不是问题的解决 哪些特性可选 哪些必需从模糊的设计和实现需求中分离出正确的需求 3 3 1OMT 2问题描述 目的 描述需求 解决做什么 而不是怎样做的问题 任务 描述问题范围 需求 将实现的功能 特性 设计一个支持银行网络系统的软件 这个网络 包括出纳员和ATM自动取款机 由联营银行共享 每个银行提供各自的计算机来维护它的帐务和处理面临的事物 出纳工作站属于各银行 且直接与银行的计算机通信 人工出纳员输入帐务和处理数据 自动取款机与中央计算机通信 中央计算机分理事物到相应的银行 自动取款机接受现金卡 与用户交互 与中央系统通信并完成事物处理 分配现金和打印收据 系统需要恰当的记录和安全保证 系统必须正确控制并发访问同一账号 银行将提供自己的计算机软件 请为ATM和网络设计软件 共享系统的费用根据现金卡客户的数量由各银行分担 3类的识别 3 3 1OMT 与类对应的经常是问题描述中的名词 保留正确类 3 3 1OMT 冗余类 对描述同一信息的多个类只保留一个 如 客户与用户无关类 删除与所述问题无关的类 如费用的分担不在ATM事物处理范围内模糊类 边界不明显或范围过宽 如系统 属性 用于描述对象性质的名词为属性 应具体分析 如 房间操作 带有动词性质的名词有时为动作 应描述为操作 如 传呼角色 类名应反映事物固有性质 而不是关联中的角色 如 拥有者 驾驶员实现结构 脱离实际的结构在分析模型中删除 如 子程序 数据库结构 数组等 制定数据字典 银行计算机 中央计算机 账户 现金卡 ATM 出纳员 业务 客户 出纳工作站 联营 银行 3 3 1OMT 账户 银行中的一个户头 与交易中使用的账户类似 账户可能有许多不同的类型 至少有支票账户和储蓄账户两类 一位客户可以拥有不止一个账户ATM 允许客户用现金卡做为身分证明进入自己的账户的一种机器 ATM与客户交互 通过收集业务处理信息 并把该信息送至中心计算机和方式证明客户的合法性后进行处理 把现金分配给客户 银行 一个金融机构 它代管客户帐目 发行现金卡给客户并授权客户可以通过ATM网络进入自己的账户 存取现金等出纳员 应行雇员 被授权把业务信息输入出纳工作站 业务 客户对账目的一个单一而完整的操作要求 4关联的识别 3 3 1OMT 关联常对应于静态动词或动词短语常见的有 实际位置 下接 其中一部分 包含在 在 之上引导动作 驱动 驾驶通信 与 交谈拥有 有 其中一部分满足的条件 为 工作 与 结婚通信 拥有 与类的识别过程类似 识别关联时首先将问题描述中的所有可能的关联 动词短语 列表 然后逐条删去不正确的关联 保留正确的 银行网络包括出纳员和ATM联营共享ATM银行提供银行计算机ATM与中央计算机通信银行有出纳工作站出纳工作站与银行计算机通信银行雇佣出纳员 3 3 1OMT 建立关联 3 3 1OMT 5识别属性 属性通常对应于所有格短语修饰的名字 汽车的颜色是蓝色的 光标的位置是 xxx的出生年月 xxx的身高是 属性众多 只需考虑与特殊应用直接相关的属性 其他待以后添加 3 3 1OMT 添加属性 3 3 1OMT 用继承性改进 3 4可视化建模技术 VMT OMT OOSE RDD 事件踪迹图 关于CRC卡 关于用例 参与者 透过系统边界 与系统进行交互的事物系统边界 一个系统所包含的所有系统组成部分与系统以外各种事物的分界线用例 获得某项服务时 参与者与系统之间进行的交互序列用例的描述没有统一的规范 应在开发组内形成一个统一的风格 被开发的计算机软硬件 而不是泛指问题空间的全部事物所构成的现实系统 在OOA和OOD中定义 并在编程时加以实现的系统元素 收款员 收款for顾客选购的每个商品do输入商品编号endfor 3 4可视化建模技术 VMT 分析的主要步骤 根据初始需求文档 在用户参与下 定义参与者和用例 使用可示化工具建立GUI原型从问题陈述和用例模型 建立初始对象模型 该模型概要给出了描述问题域应用语义的类以及这些类间关系和原始属性初识对象模型 用例以及GUI原型一起表达了问题的需求模型 定义了系统的边界 建立CRC卡 确定了各个类的责任 明确了对象模型中各对象的服务和属性 根据CRC卡中类之间的合作方式 可以重新定义和精化类之间的关系参照对象模型 从用例和服务建立事件踪迹图和状态图描述系统的动态特性 第三章习题 对于常见的各类数学函数 如三角函数 复变函数 各类图形相关函数等应用面向对象方法学观点进行分类和抽象一个图形系统由平面上的4个正方形 2个矩形 3个圆形以及1个三角形组成 它们位于平面上的不同点 该系统能够给出每个图形的面积及周长 按照面向对象分析的原理 给出这个系统中的对象以及类给出一家祖孙三代 你 祖父 祖母 父母 姑 叔 姨 舅 表兄 堂兄等各一人组成 各成员之间的对象实例关系图一个栈的状态有三种 空 半满 满 操作有 压入 弹出 创建 等 请给出栈的状态转换图说明图所示数据流图的意义 第4章面向对象的程序设计 4 1面向对象程序设计原则4 2面向对象程序设计语言4 3面向对象程序设计实例4 4面向对象程序设计中的高级技术 面向对象的程序设计思想出现于60年代末期 以Simula语言为标志 发展到80年代出现了Smalltalk等 直至出现C Java等 面向对象程序设计的思想逐渐被人们所广泛接受 目前已经成为程序设计领域的主流 4 1面向对象程序设计的原则 4 1 1复用性4 1 2可扩充性4 1 3健壮性4 1 4协作性 面向对象程序设计 使用程序设计语言将设计方案加以表达 4 1 1复用性 加强软件可复用性的原则 保证操作的内聚性功能相对单一减少单一功能模块代码规模函数代码的适当规模保证操作对外接口的一致性相似操作具有一致性接口分解设计中的操作以相对单一和基本的操作联合实现设计中的操作操作均匀覆盖数据考虑操作的普适性加强封装操作只针对内部数据 实现与接口分离减少操作耦合减少操作之间的相关 尽量上下文无关 4 1 1复用性 复用方式 继承聚集 提取公共代码分离部分成员区分子类与继承封装外部代码 4 1 2可扩充性 通过继承 多态等方式突出封装 模块化 4 1 3健壮性 误操作及错误输入数据情况下对象保持状态行为正确的能力 定义一个类 包括年 月 日 计算该日是本年中第几天 注意闰年问题 运行结果示例 请输入日期 年 月 日 1990 9 209月20日是1990年的第263天 4 1 4协作性 intMyFunction char pName intMark Function Demonstratehowtowritecomment Parameter pName thenameofastudent Mark thescoreofstudentpName Global xxxx Algorithm yyyyyyy Writer Wangming Date 2002 8 9 note xxxx 4 2面向对象程序设计语言 4 2 1Smalltalk语言4 2 2Eiffel语言4 2 3C 语言4 2 4Java语言 4 2 1Smalltalk语言 4 2 2Eiffel语言 4 2 3C 语言 4 2 4Java语言 4 3面向对象程序设计实例 4 3 0C 基本语法4 3 1类的定义4 3 2对象的创建及初始化4 3 3消息传递与操作调用4 3 4继承4 3 5关联的实现4 3 6 聚集关系的实现 本节以C 语言为例展示如何将OOA和OOD中的类 对象 类间三种关系以具体语言方式加以实现 4 3 0C 基本语法 1VisualC 环境 环境定制 项目创建 程序编辑 编译与调试 1VisualC 环境 创建项目 项目 Project 亦称工程 的创建是使用集成开发环境编写程序的第一步 一个项目由一组相关联的文件组成 包括用户将来自己编写的源程序文件和系统自动创建的一系列文件 用于调试程序 浏览程序中各种信息 目标文件等 它们被放置在某个目录下 由开发环境进行管理 如果项目已经存在 可以通过开发环境中File菜单下的菜单项OpenWorkspace打开 否则必须新创建 具体创建步骤如下 单击File 单击New 图4 3 a在Projectname编辑框中键入所要编写的项目名 将来生成可执行文件的主文件名与此相同 选择该工程所在位置 在Location编辑框中键入放置该项目的磁盘目录 应该键入全路径名 选择项目的类型 选择Win32ConsoleApplication则创建控制台应用程序 相当于创建dos应用程序 只不过所创建程序的输入输出限制在一个控制台窗口 类似Windows下的命令提示符窗口 中 而不是整个屏幕 单击OK按钮后 屏幕上将弹出对话框如图4 3 b最方便的选择是创建一个 Asimpleapplication 当选择最后一个选项时 在所创建的程序中将可以使用MFC类库中定义的一些数据结构 如动态字符串CString和哈希表等 这将给编程带来方便 图4 3 a 图4 3 b 1VisualC 环境 程序编辑 键入 剪切 拷贝 粘贴 查找 全程查找 书签的使用 创建一个项目后该项目被打开 这个项目中可能是空的 一个文件都没有 用户需要在项目中添加自己的文件 方法如下 选择开发环境中Project菜单下的菜单项AddToProject后 会出现一个popup菜单 如果所要添加的是一个尚未编辑的新文件则选择菜单项New 否则选择Files 在所弹出的对话框中选择将要添加的文件的类型为C C HeaderFile或C SourceFile 然后键入文件名 确认后相应文件的编辑窗口被打开 编程者就可以在其中编辑程序 编辑操作如同在使用MicrosoftWord或Wordpad等一样方便 1VisualC 环境 编译与调试 编译 运行 断点 单步 观察变量值 程序全部或部分编写完成后需进行编译后才能运行 编译后程序一般都会出现多个语法错误 需要根据Output窗口中的提示信息对程序进行重新修改 直到编译后不再出现错误为止 程序的编译可以选择开发环境的Build菜单下的Compile 菜单项或Build 菜单项 两者的区别在于Compile只编译当前获得焦点的文件 而Build则编译所有受到当前激活文件内容改动影响的文件 而且一旦编译通过 将所调用的系统函数与程序的目标代码进行联接 最终形成可执行的exe文件 include iostream h voidPrintString char szStr cout pName PrintString pName 1VisualC 环境 4 3 0C 基本语法 2C 程序基本结构 include iostream h voidPrintString char szStr cout pName PrintString pName 文件包含指令 函数 主函数 语句 标准输入 标准输出 4 3 0C 基本语法 3C 的基本数据类型 intfloatdoublecharTYPE TYPE intn 9542 2Bytesintm 120 2Bytescharc 97 1BytesboolmBool true 1Bytes 变量 变量是程序运行过程中可以改变其值的数据对象 变量在程序中作为数据信息载体 可以用来保存非持久数据 存储运算结果 也可以为程序块之间传递数据信息 一个变量具有名字 类型和值三要素 变量的值可在程序运行过程中通过赋值语句加以改变 n n 1234 m ox 2345c a mBoo false 4 3 0C 基本语法 3C 的基本数据类型 231 0 x3A 07351 23 3 141e 8 a n 065 0 xFA MynameisJohn constintnTopIndex 10 constcharcVisible y constchar MyName Frank intnA intnB intnC cout nA cout nB nC nA nB 输入两个整数 求它们的和 求解一元二次方程 ax2 bx c 0 4 3 0C 基本语法 3C 的基本数据类型 4 3 0C 基本语法 4C 的基本操作 注意 sqrt doublex 开方power x y 乘方 求任意一个自然数n的反序数 例如 1234的反序数为4321 4 3 0C 基本语法 5C 语句间顺序控制 if a 0 x 1 elsex 2 条件语句 if a 8 b 9 else if a 9 b 20 else if a 10 b 21 elseb 30 switch x case1 a 0 break case2 x 2break 4 3 0C 基本语法 5C 语句间顺序控制 开关语句 例 编程统计输入流中字符A的数目 字符A与a的数目 输入字符总数 见BranchStatement for inti n i 0 i n i 4 3 0C 基本语法 5C 语句间顺序控制 inti n do n i i while i 0 inti n while i 0 n i i 求一个不很大的自然数n的阶乘 调试 4 3 0C 基本语法 6数据控制 函数 doubleGetProduct doublex doubley doubletemp x y returntemp voidmain inta 1 2 b 2 1 cout GetProduct a b endl 4 3 0C 基本语法 6C 中的数据控制 传值调用 include iostream h voidSwap intp intq inttemp p p q q temp cout p p q q endl voidmain intx 2 y 3 Swap x y cout x x y y endl include iostream h voidSwap int p int q inttemp p p q q temp cout p p q q endl voidmain intx 2 y 3 Swap 对于传值调用 在函数调用进行形实结合时 形式参数被赋予实在参数的 右 值 而在函数体中形式参数等价于函数内定义的变量 由于形参仅被赋予了实参的右值 因此形参的任何变化不会引起实参的改变 4 3 0C 基本语法 6C 中的数据控制 引用调用传址调用 include iostream h voidSwap int include iostream h intfunc inta a 2 8 return0 voidmain intargc char argv intb 1 2 3 4 5 func b cout b 2 endl 形式参数和实在参数代表内存中同一个数据对象 因此在函数调用进行形实结合时 形式参数被赋予实在参数的 左 值 因此形式参数的任何变化都会引起实在参数的改变 引用调用方式将作为实参的表达式的左值传递给被调函数 在实现时相当于以实在参初始化相应的引用类型参数 为实在参数建立一个别名 使形式参数和实在参数代表内存中的同一个数据对象 7递归与迭代 4 3 0C 基本语法 longFactorial intn for inti 1 i n i result i returnresult longFactorial intn intVi 1 1 Vi 0 for inti 1 i n i Vi i Vi 1 Vi 1 Vi returnVi longFact intn if n 0 return1 elsereturnn Fact n 1 F n n F n 1 F 0 1 4 3 0C 基本语法 例 求常系数m次多项式的值 a0 a1x a2x2 a3x3 am 1xm 1 amxma0 x a1 x a2 x a3 x am 1 amx include iostream h doublePolynomial doublea intn intm doublex if n m return a m return a n x Polynomial a n 1 m x voidmain doublea 5 6 7 8 cout Polynomial a 0 3 2 endl doublePolynomial doublea intm doublex doublev 0 for inti m i 0 i v a i x v returnv voidmain doublea 5 6 7 8 cout Polynomial a 3 2 endl 4 3 0C 基本语法 练习 自然数序列排序 将数列分成两个部分 左侧为已经排序部分 右侧为尚未排序部分 将未经排序数据中的最小一个挑出来 然后与未排序部分最左侧的第一个未排序元素位置互换 于是已排序部分增加了一个数据 而未排序部分减少了一个数据 反复执行这个过程直到所有数据都进行了排序 练习 编写算法及程序求 4 3 1类的定义 1 类说明 class private 私有数据和函数public 公有数据和函数protected 受保护数据和函数 classCBook public char m pczName intnTotalPage intnEdition char GetBookName intGetTotalPage intGetEdition 私有成员只能被其自身成员所访问公有成员可以被任何函数所引用保护成员只能在该类的派生类类体中使用 4 3 1类的定义 2 成员函数定义 char CBook GetBookName char pStr strcpy pStr m pczName returnpStr classCBook public char m pczName intnTotalPage intnEdition char GetBookName intGetTotalPage intGetEdition 成员函数的定义除必须指明函数所属类外 与一般的函数定义类似 classCBook public char m pczName intnTotalPage intnEdition char GetBookName strcpy pStr m pczName returnpStr intGetTotalPage intGetEdition 内联函数 4 3 2对象的创建及初始化 1 由类创建对象实例 classCPoint private intm x intm y public voidSetXY intx inty m x x m y y intGetX returnm x intGetY returnm y 从类产生解空间对象的过程是一个从一般到特殊的演绎过程 这个过程在C 中有相对应的语法 对象定义 定义对象象定义一个普通变量一样 只不过这里将类看做是类型 一个抽象类型 具有该类类型的变量称为对象 voidmain CPointMyPoint1 MyPoint2 创建对象 调用缺省构造函数初始化MyPoint1 SetXY 2 3 设置MyPoint1的属性值分别为2和3MyPoint2 SetXY 4 5 设置MyPoint2的属性值分别为2和3intx MyPoint1 GetX 调用成员函数得到数据成员m x的值inty MyPoint1 GetY 调用成员函数得到数据成员m y的值coutGetX 通过指针调用成员函数CPoint pPoint1 newCPoint pPoint1 SetXY 6 7 设置pPoint1所指对象的属性值CPoint 三种调用方式对象的内存映像 4 3 2对象的创建及初始化 2 成员函数中对象成员的引用 CBook CBook GetBookPtr returnthis CBook this指针并不常用 通常用于定义返回指向隐式对象指针或引用的成员函数 例如 在CBook类中添加需要返回指当前函数所属对象的引用或指向该对象的指针 可以按如下方式定义 voidCPoint SetXY intx inty this m x x this m y y 成员函数所引用的数据成员或函数成员并未指明是哪个对象的成员 隐式调用 显式调用 3 对象创建与构造函数 4 3 2对象的创建及初始化 构造函数的名字与类的名字相同 而且构造函数没有返回值 即使是void类型也是非法的 只要满足了这两个条件 原则上可以定义任何形式的构造函数 因此构造函数是可以重载的 例如 为CPoint类添加构造函数 CPoint CPoint m x 0 m y 0 CPoint CPoint intx inty m x x m y y CPoint CPoint constCPoint CPointmPt1 调用CPoint CPoint CPointmPt2 2 3 调用CPoint CPoint intx inty CPoint pPt1 newCPoint 4 5 调用CPoint CPoint intx inty CPoint pPt newCPoint mPt2 调用CPoint CPoint CPoint pt 在创建对象时 构造函数被自动调用 究竟调用多个构造函数中的哪一个要根据创建对象时所提供的初始化参数 采用重载函数的判断机制判断 例如下面的对象声明语句 4 对象的消亡与析构函数 4 3 2对象的创建及初始化 当一个对象消亡时会自动调用相应的析构函数进行一系列的 善后 工作 如 释放曾经申请的内存空间等 ClassName enumSEX male female unknow classCStudent private char m pczName intm nAge SEXm sSex public CStudent char pName intnAge SEXs CStudent char pName CStudent CStudent CStudent char pName cout OBJECTCREATE pName endl m pczName newchar strlen pName 1 if m pczName 0 strcpy m pczName pName m nAge 1 1表示尚未初始化该属性m sSex unknow CStudent CStudent char pName intnAge SEXs cout OBJECTCREATE pName endl m pczName newchar strlen pName 1 if m pczName 0 strcpy m pczName pName m nAge nAge m sSex s CStudent CStudent cout OBJECTDELETE m pczName endl delete m pczName voidmain CStudents1 John 10 male CStudent ps newCStudent Jane 10 female deleteps 5 关于拷贝构造函数 4 3 2对象的创建及初始化 ClassName ClassName 缺省拷贝构造函数 其功能是将形参对象的属性值直接赋值给新创建对象的相应属性 使得两个对象的对应属性的值相同 当类中具有指针类属性时 将出现运行错误 如将上例中主函数改为 运行 原因 voidmain CStudents1 John 10 male CStudents2 s1 classCStudent private char m pczName intm nAge SEXm sSex public CStudent char pName intnAge SEXs CStudent char pName CStudent constCStudent 6 对象属性值的变化 对象间的赋值 4 3 2对象的创建及初始化 在对象间可以使用赋值符CPointPt1 Pt2 Pt1 SetXY 2 3 Pt2 Pt1 由于系统会给出赋值符的缺省定义 所以Pt2和Pt1对应的属性相等 class operator TYPEarg 返回值类型与原型相同 4 3 3消息传递与操作调用 操作调用方式与消息传递 classLine private CPointm cpStartPoint CPointm cpEndPoint public voidSetLine CPoint classCPoint private intm x intm y public voidSetXY intx inty m x x m y y intGetX returnm x intGetY returnm y 4 3 4继承 1 单一继承 C 提供下述常见语法格式 class ClassName ClassName ArgList0 BaseClassName ArgList1 classCRectangle 矩形类 public CPointm cpLocation 图形所在位置intm nWidth 图形的宽度intm nHeight 图形的高度CRectangle intnX intnY intnWidth intnHeight intGetArea 求面积intGetPerimeter 求周长CPoint intCRectangle GetPerimeter returnm nWidth m nWidth m nHeight m nHeight CPoint 4 3 4继承 2 基类成员访问控制 有两个因素同时控制着派生类对基类成员的访问权限 这两个因素就是基类类体中类成员的访问说明符 及派生类的派生方式 下表总结了这两个因素对基类成员访问权限的影响规律 从表可以看到 在任何派生方式下 基类的私有成员都是派生类不可访问成员 在保护派生情况下 除私有成员外均被派生类以保护成员方式所继承 公有派生时不改变基类公有和保护成员的访问权限 4 3 4继承 3 多重继承 C 还提供了另一种复杂的继承方式 允许从多个基类派生一个子类 即多重继承 一般形式为 class ArgList0 ArgList1 ArgListn 4 3 4继承 3 多重继承 include iostream h include stdlib h include string h classCWnd 引用性说明 defineMAXTEXTBUFFER0 xffffclassCPoint private intm x intm y public CPoint intx 0 inty 0 m x x m y y intGetX returnm x intGetY returnm y classWNDSTRUCT 本对象中含有窗口公共数据protected char m pczWndName 窗口名字 下述四个量表示窗口左上角和右下角的坐标CPointm cpTopLeft CPointm cpBottomRight 下述三个量用于建立窗口系统的树结构CWnd m pParentWindow 指向本窗口的父窗口CWnd m pChildFirst CWnd的指针数组 放着本窗口的子窗口CWnd m pSiblingFirst 指向本窗口的兄弟窗口char m pEditTextBuffer 指向窗口编辑区文本缓冲区WNDSTRUCT constWNDSTRUCT 4 3 4继承 3 多重继承 二义性 classCBase1 public voidMyFunc cout ThisisCBase1 sMyFunc endl classCBase2 public voidMyFunc cout ThisisCBase2 sMyFunc endl classCDerived publicCBase1 publicCBase2 public voidfunc MyFunc 错误 两义性 voidmain CDerivedobj obj func classCDerived publicCBase1 publicCBase2 public voidfunc CBase1 MyFunc 调用CBase1类的成员函数MyFunc CBase2 MyFunc 调用CBase2类的成员函数MyFunc 4 3 4继承 4 派生类对象内存映像 classCBase public intb0 CBase b0 0 x01 classCBase1 publicCBase public intb1 CBase1 b1 0 x11 classCBase2 publicCBase public intb2 CBase2 b2 0 x12 classCDerived publicCBase1 publicCBase2 public intb CDerived b 0 x21 voidmain CDerivedobj classCBase public intb classCBase1 publicCBase classCBase2 publicCBase classCDerived publicCBase1 publicCBase2 public intfunc CDerivedobj obj b 错 二义性obj CBase b 错 二义性obj CBase1 b 使用从CBase1来的bobj CBase2 b 使用从CBase2来的b classCBase public intb0 CBase b0 0 x01 classCBase1 publicvirtualCBase public intb1 CBase1 b1 0 x11 classCBase2 publicvirtualCBase public intb2 CBase2 b2 0 x12 classCDerived publicCBase1 publicCBase2 public intb CDerived b 0 x21 voidmain CDerivedobj 4 3 4继承 3 多重继承 虚基类 4 3 5关联的实现 classCCompany private char m pName 按图中要求CPerson box 因为图中标出老板可有可无 所以用指针表示CPersonm Employee 20 公司员工最多20 classCPerson private char m pName intm nAge CCompany comp comp为一个CCompany的数组 因为可为多个公司工作CSalary salary salary为一个CSalary数组 与每个comp相对应CPeron consort 按图中的关系添加了这一个属性标明配偶intsex 为标明配偶为男女 所以引入本人的性别 classCSalary 只要单向关系即可 所以没有引入标明工资所有者的属性private intnBasic intnSubsidy 4 3 6 聚集关系的实现 classCButton CButton classCIcon CIcon classCMessageWindow private CButtonm ButtonOK CButtonm ButtonCANCEL CIconm Icon public CMessageWindow m ButtonOK m ButtonCANCEL m Icon 1 复合聚合的实现 4 3 6 聚集关系的实现 2 共享聚合的实现 classCStudent CStudent constchar pStudentName classCGroup private CStudent m pStudents intm nGroupID public voidSetStudent CStudent pStudents m pStudent pStudent CGroup intnID m nGroupID nID m pStudents newCStudnet 5 小组由5名学生组成 classCClass private CStudent m pStudents intm nClassID public CClass intnID m nClassID nID m pStudents newCStudnet 35 班级由35名学生组成 CStudent GetStudent returnm pStudents voidSetStudent CStudent pStudents m pStudent pStudent voidmain CStudenttheWhole 25 CStudent Marry CStudent Tom CClassMyClass3 3 成立班级 但具体由哪些学生组成尚未确定MyClass3 SetStudent theWhole 70 本班学生由学校学生名册中第71位开始的35人组成CGroupGroup6 6 Group6 SetStudent MyClass3 GetStudent 25 第6学习小组由班级学生名册中第26名开始的5个人组成 4 3 7多态性与虚函数 include iostream h constfloatPI float 3 14 classCPoint private intm x intm y public CPoint intx 0 inty 0 voidArea coutArea classCPoint virtualvoidArea classCCircle publicCPoint virtualvoidArea voidmain CPoint p CCirclec 0 0 2 p 4 3 8运算符重载 3 2operator 3 2 include iostream h classCComplex public doublem dReal doublem dImag public CComplex doubler 0 doublei 0 m dReal r m dImag i CComplexoperator CComplex operator 函数具体定义 1友元运算符 4 3 8运算符重载 include iostream h classCComplex private doublem dReal doublem dImag public CComplex doubler 0 doublei 0 m dReal r m dImag i doubleGetRealPart returnm dReal doubleGetImagPart returnm dImag CComplexoperator CComplex include iostream h classCComplex private doublem dReal doublem dImag public CComplex doubler 0 doublei 0 m dReal r m dImag i doubleGetRealPart returnm dReal doubleGetImagPart returnm dImag friendCComplexoperator CComplex 1友元运算符 4 3 8运算符重载 operator 函数具体定义 friendoperator 2类运算符 4 3 8运算符重载 include iostream h classCComplex private doublem dReal doublem dImag public CComplex doubler 0 doublei 0 m dReal r m dImag i CComplexoperator CComplex c1 c2c1 operator c2 operator ClassName obj 4 4面向对象程序设计中的高级技术 4 4 1效率的考虑好的算法与数据结构各种隐式调用 构造函数 参数传递 动态绑定4 4 2内存管理动态分配 new错 与内存泄漏 leak VisualC 中内存泄漏的自动侦测4 4 3封装性尽量保持封装性4 4 4类型类型检查有助于发现错误 尤其是参数 赋值方面 const 4 4 5参数化类4 4 6持久对象4 4 7约束4 4 6可示化开发环境 4 4面向对象程序设计中的高级技术 4 4 5参数化类 include iostream h templateTYPEGetMax TYPEx TYPEy returnx y x y voidmain intn1 4 n2 8 doubled1 2 1 d2 2 3 cout d1 d2 endl 1函数模板 2类模板 template 类型 变量classMyTemplateClass public MyTemplateClass void MyTemplateClass void intMemberSet TYPEa intb private TYPETarray i intarraysize templateintMyTemplateClass MemberSet TYPEa intb 对于第b个元素赋予具有类型TYPE的数据if b 0 4 4面向对象程序设计中的高级技术 4 4 6持久对象其生命周期独立于程序运行的生命周期 尤其在分布环境中 4 4 7约束4 4 6可示化开发环境 第5章面向对象的数据库 第6章高级对象技术和分布对象计算 6 1概述 分布式应用带来新问题 平台异构 多种硬件平台 指令集不同等 多种系统软件平台 操作系统 数据库 编译器等 多种网络体系结构与协议 两种解决平台异构的方法 标准化应用程序编程接口建立支持互操作的标准化协议 6 1 1Client Server计算6 1 2分布对象6 1 3中间件6 1 4框架 6 1 1Client Server计算 过程与库模型 Intheearlydaysofcomputing eachprogramwaswrittenasalargemonolithicchunk filledwithgotostatements Eachprogramhadtomanageitsowninputandoutputtodifferenthardwaredevices Asprogrammingmaturedasadiscipline thismonolithiccodewasorganizedintoprocedures andcommonlyusedprocedureswerepackedinlibrariesforsharingandreuseRelatedproceduresareoftengroupedinlibraries Forexample aprocedurelibrarycanincludeasetofproceduresthatperformtaskscommontoasingledomain suchasfloating pointmathoperations formattedinputandoutput andnetworkfunctions Theprocedurelibraryisanotherlevelofpackagingthatmakesiteasytodevelopapplications Procedurelibrariescanbesharedamongmanyapplications LibrariesdevelopedinCareusuallyaccompaniedbyheaderfiles Eachprogramthatusesthelibraryiscompiledwiththeheaderfilesthatformallydefinetheinterfacetothelibrary sprocedures 6 1 1Client Server计算 2 计算服务器模型 Networkingsoftwareforpersonalcomputershasbeenbuiltonthemodelofapowerfulcomputer theserver thatprovidesspecializedservicestoworkstations orclientcomputers Inthismodel serversaredesignatedasfileservers printservers orcommunications modem servers dependingonwhethertheyareassignedtofilesharingorareconnectedtoprintersormodems 6 1 1Client Server计算 3 Client Server模型 一个应用程序被分为两个部分 前端客户端提供给用户信息 后端服务器存储 检索和操作数据 以及控制大量的供给客户的计算任务的 在这种模型中 服务器比客户机的功能更强大 它通常作为许多客户机的中央数据存储 从而使得系统更加易于管理 Client Server模型的典型应用实例如分布数据库 远程文件服务器及远程打印服务等 右图说明了该模型的结构 网络系统通过IPC Interprocesscommunication 支持Client Server应用程序的开发 IPC允许客户和服务器通讯及调整它们的运做 NetBIOSNCBs networkcontrolblocks 邮件槽 mailslots 具名管道 namedpipes 在计算机之间传递信息 例如 客户可以利用IPC机制发送一个操作码和数据到服务器以申请调用某个特定的过程 服务器接收到申请并译码后调用适当的过程 服务器要完成所需的所有运算以满足客户的申请 然后将结果返回给客户 6 1 1Client Server计算 3 Client Server模型 实现Client Server的特点 应用NetBIOS 邮件槽或具名管道实现进程间通讯意味着了解与网络通讯有关的特殊细节 每个应用程序必须管理网络环境 编写这种网络专用级别的代码需要做出下述努力 了解与网络通讯相关的细节及如何处理出错情况 网络包括不同类型计算机时 必须将数据转换成不同的内部格式 必须支持利用多传输接口通讯 上述技术的应用实际表现为一系列函数的调用 但是与单机的情况有所不同 除发生所有可能发生在单个计算机上的错误外 网络有其自身的错误条件码 比如 一个连接可能失去 一个服务器可能从网络上消失 网络安全服务可能拒绝存取系统资源 用户可能争夺或占用系统资源 因为网络的状态总是在变 所以应用程序可能以新的或有趣的的方式运行失败 而且难于重新恢复程序运行 由于这些原因 每个应用程序必须严格地处理所有可能的错误条件码 6 1 1Clien

温馨提示

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

评论

0/150

提交评论