第八章类与对象修改
- 格式:ppt
- 大小:1.22 MB
- 文档页数:91
第八章面向对象的设计方法本章采用基于UML的面向对象设计方法的将分析模型转换为设计模型。
如第五章所述,面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。
为完成这一转换过程,设计人员必须处理以下任务:(1)针对分析模型中的用例,设计实现方案。
实现方案用UML交互图表示。
(2)设计技术支撑设施。
在大型软件项目中,往往需要一些技术支撑设施来帮助业务需求层面的类或子系统完成其功能。
这些设施本身并非业务需求的一部分,但却为多种业务需求的实现提供公共服务。
例如,数据的持久存储服务、安全控制服务和远程访问服务等。
在面向对象设计中,需要研究这些技术支撑设施的实现方式以及它们与业务需求层面的类及子系统之间的关系。
(3)设计用户界面。
(4)针对分析模型中的领域概念模型以及第(2)、(3)两个步骤引进的新类,完整、精确地确定每个类的属性和操作,并完整地标示类之间的关系。
此外,为了实现软件重用和强内聚、松耦合等软件设计原则,还可以对前面形成的类图进行各种微调,最终形成足以构成面向对象程序设计的基础和依据的详尽类图。
面向对象的软件设计过程如图8-1-1所示。
图8-1-1 面向对象的软件设计过程第一节设计用例实现方案UML 的交互图(顺序图、协作图)适于用例实现方案的表示。
因此,本节首先介绍交互图的语言机制,然后探讨用例实现方案的设计方法。
该设计方法包含如下3个步骤:(1)提取边界类、实体类和控制类;(2)构造交互图;(3)根据交互图精华类图。
一、顺序图顺序图用来描述对象之间动态的交互关系,着重表现对象间消息传递的时间顺序。
在顺序图中,参与交互的对象位于顶端的水平轴上,垂直轴表示时间,时间推移的方向是自上而下的。
顺序图中的对象一般以“对象名:类名”的方式标识,但也可以仅采用缩写形式“对象名”或者“:类名”。
课程内容第一章C++语言概述第二章基本数据类型和表达式第三章C++程序的流程控制第四章数组第五章C++函数第六章指针、引用和动态空间管理第七章结构和联合第八章类与对象第九章C++流第一章C++语言概述1.1C++语言的简史1.1.1 C语言1972年贝尔实验室C语言特点➢优点:高效、灵活、功能丰富、表达力强、一致性好➢局限性:●类型检查机制相对较弱,程序中的错误不能再编译时发现;●不支持代码重用。
1.1.2 C++语言20世纪80年代贝尔实验室C++是C语言的扩充,主要的扩充功能:●支持数据抽象●支持面向对象的设计及编程●改进了C语言中的若干不足之处1.2简单C++程序例1#include<iostream.h> //预处理命令,头文件void main() //主函数{int a,b; //定义变量cout<<”Enter two integer.”; //在标准输出设备上输出cin>>a>>b; //从标准输入设备上输入int result;result<<”\n The sum of”<<a<<”+”<<b<<”=”<<result<<endl;}字母区分大小写1.2.1注释:/*传统的C语言注释方法,注释内容可以再多行。
*///C++新增的注释方法,注释内容从//开始,到行末结束。
1.2.2 包含文件及头文件将其他文件中的源程序插入当前文件的#include语句位置中。
被包含文件一般称为头文件。
头文件扩展名一般为.h。
#include<文件名>头文件在编译系统的INCLUDE目录中查找。
#include”文件名”头文件现在当先目录查找,而后再在编译系统的INCLUDE目录中查找。
1.2.3 标准输入与输出在iostream.h中定义有两个对象:标准输入对象cin,用于从标准输入设备读入数据(一般指键盘)。
第八章继承与多态习题一.基本概念与基础知识自测题8.1填空题8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。
(3)类的对象可作为(4)类的对象处理,反过来不行,因为(5)。
如果强制转换则要注意(6)。
答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,protected成员成为派生类的(2)成员,对private成员是(3)。
公有派生可以使其类的(4),所以公有派生是主流。
答案:(1)public成员(2)protected成员(3)不可访问(4)接口不变8.1.3 利用继承能够实现(1)。
这种实现缩短了程序开发的时间,VC++中的(2)很好地体现了这一点。
答案:(1)代码的复用(2)MFC编程8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为(2)。
继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。
答案:(1)单继承(2)多重继承(3)层次(4)单继承8.1.5 C++中多态性包括两种多态性:(1)和(2)。
前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。
答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和(3)完全一样就认为是虚函数,而不必再加关键字(4)。
如有任何不同,则认为是(5)而不是虚函数。
除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。
答案:(1)同虚函数名(2)同参数表(3)同返回类型。
如基类中返回基类指针,而派生类中返回派生类指针是允许的(4)virtual(5)重载(6)静态成员函数(7)内联函数(8)构造函数8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质是将指向函数体的指针定为(3)。
第八章类和对象复习题第八章类和对象复习题1.系统为每个类提供一个this指针,在类的成员函数内,通过this指针可以间接访问这个类的( )所有成员C.友元类的public成员D.所有派生类中的public成员2.如果在class类的定义中既不指定private,也不指定public,则系统就默认为( )A. privateB. publicC. protectedD. 不确定3. 对静态数据成员的描述, 正确的是( )A. 静态数据成员可以在类体内进行初始化B. 静态数据成员不可以被类的对象调用C. 静态数据成员不能受private控制符的作用D. 静态数据成员可以直接用类名调用4. 下面叙述错误的是( )A. 基类的protected成员在派生类中仍然是protected的B. 基类的protected成员在public派生类中仍然是protected的C. 基类的protected成员在private派生类中是private的D. 基类的protected成员不能被派生类的对象访问5.对于友元函数的描述,正确的是( )A. 友元函数的实现必须在类的内部定义B. 友元函数是类的成员函数C. 友元函数破坏了类的封装性和隐藏性D. 友元函数不能访问类的私有成员6.关于内联函数的描述,正确的是( )A.使用内联函数可以缩短程序代码,减少占用的内存空间B.使用内联函数可以减少函数调用时入栈和出栈的时间和空间开销,但是会使程序的代码量增加C.内联函数只能在类的内部进行声明和定义,不能作为全局函数D.内联函数可以做虚函数7. 类是对象的( )A. 具体B. 抽象C. 封装D. 多态8. struct声明类时,若不作private或public声明,系统默认为( )A. privateB. publicC. protectedD. 不能确定9.引入内联函数的主要目的是( )A.缩短程序代码,少占用内存空间B.既可以保证程序的可读性,又能提高程序的运行效率C.占用内存空间少,执行速度快D.使程序的结构比较清晰10. 类的具体表现是通过定义来操作的。
第八章Servlet技术一、选择题1.下面对Servlet、Applet的那一项描述错误?()A)Servelt与Applet相对应B)Applet运行在客户端浏览器C)Servlet运行在Web服务器端D)Servlet和Applet不可以动态从网络加载2.下面哪一项不在Servlet的工作过程中?()A)服务器将请求信息发送至ServletB)客户端运行AppletC)Servlet生成响应内容并将其传给服务器D)服务器将动态内容发送至客户端3.下列哪一项不是Servlet中使用的方法?()A)doGet() B)doPost() C)service() D)close()4.关于MVC架构的缺点,下列的叙述哪一项是不正确的?()A)提高了对开发人员的要求B)代码复用率低C)增加了文件管理的难度D)产生较多的文件5.下面哪一项对Servlet、JSP的描述错误?()A)HTML、Java和脚本语言混合在一起的程序可读性较差,维护起来较困难。
B)JSP技术是在Servlet之后产生的,它以Servlet为核心技术,是Servlet技术的一个成功应用。
C)当JSP页面被请求时,JSP页面会被JSP引擎翻译成Servelt字节码执行D)一般用JSP来处理业务逻辑,用Servlet来实现页面显示。
6.下面哪一项对Servlet、JSP的描述错误?()A)Servlet可以同其他资源交互,例如文件、数据库B)Servlet可以调用另一个或一系列ServletE)服务器将动态内容发送至客户端E)Servlet在表示层的实现上存在优势7.下面哪一项对Servlet描述错误?()A)Servlet是一个特殊的Java类,它必须直接或间接实现Servlet接口B)Servlet接口定义了Servelt的生命周期方法C)当多个客户请求一个Servlet时,服务器为每一个客户启动一个进程D)Servlet客户线程调用service方法响应客户的请求8.下面哪一项对Servlet描述错误?()A)Servlet是一个特殊的Java类,它必须直接或间接实现Servlet接口B)Servlet接口定义了Servelt的生命周期方法C)当多个客户请求一个Servlet时,服务器为每一个客户启动一个进程D)Servlet客户线程调用service方法响应客户的请求9.下面Servlet的哪个方法载入时执行,且只执行一次,负责对Servlet进行初始化。
第八章类和对象一、选择题1. 下列特性中,C与C++共有的是()A. 继承B. 封装C. 多态性D. 函数定义不能嵌套2. 一般情况下,将()函数说明为内联函数。
A. 函数的代码量小,调用次数少B. 函数的代码量小,调用次数多C. 函数的代码量大,调用次数少D. 函数的代码量大,调用次数多3. 不能作为函数重载判断依据的是()A. 返回类型B. constC. 参数个数D. 参数类型4. 下列说法中正确的是()A. 在函数参数定义中可以使用const说明符,其值在函数体内不可改变B. 在函数参数定义中可以使用const说明符,但必须指定缺省值C. 在函数参数定义中可以使用const说明符,但只能有一个参数使用constD. 在函数参数定义中不可以使用const说明符5. 已知函数float fun(float)是类A的成员函数,fp是指向该函数类型的指针,但fp不是类A的成员,则下列操作正确的是()A. fp=fun;B. fp=fp(3.5);C. fp=A::fun;D. p=A::fun(3.5);6. f()函数是类的一个常成员函数,它有一个int型参数,并且返回类型为int。
下列对该常成员函数进行声明的选项中,正确的是()A. int f(int)const;B. const int f(int);C. int f(const int);D. const int f(const int);7. C++提供的可有效分配对象空间的运算符是()A. deleteB. newC. posD. auto8. 下面关于new运算符的描述中错误的是()A. 使用new创建对象时必须定义初始值B. 使用new创建对象时会调用类的构造函数C. new可以用来动态创建对象和对象数组D. 使用new创建的对象可以使用delete删除9. 关于new的描述中,正确的是()A. new是分配内存空间的函数B. new可以分配对象空间C. new分配的内存空间可用free撤销D. new分配数组的同时可对数组初始化10. 在C++中用类将数据和对数据操作的代码连接在一起称为()A. 软件重用B. 封装C. 集合D. 多态11不属于类的成员函数的是()A. 构造函数B. 析构函数C. 友元函数D. 复制构造函数12. 在面向对象的程序设计中,首先需要在问题域中识别出若干个()A. 函数B. 类C. 文件D. 过程13. 假设MyClass是一个类,则该类的拷贝初始化构造函数的声明语句为()A. MyClass&(MyClass x);B. MyClass(MyClass x);C. MyClass(MyClass &x);D. MyClass(MyClass *x);14. 对于C++结构中定义的成员,其隐含的访问权限为()A. publicB. protectedC. privateD. static15. 为类提供对外接口的是()A. 公有成员函数B. 私有成员函数C. 保护成员函数D. 友元函数16. 对于任意一个类,析构函数的个数最多为()A. 0B. 1C. 2D. 317. 若类A的构造函数定义为A(int aa=1, int bb=0) { a = aa; b = bb; }则执行:A x(4);后,x.a和x.b的值分别是()A. 1,0B. 1,4C. 4,0D. 4,118. 若类A被说明成类B的友元,则()A. 类A的成员即类B的成员B. 类B的成员即类A的成员C. 类A的成员函数不能访问类B的成员D. 类B不一定是类A的友元19. 已知类A中的一个成员函数说明为void fun(A &a);,则A &a的含义是()A. 将a的地址值赋给变量funB. 指向类A的指针为aC. a是类A的对象引用,用来做函数fun()的形参D. 变量A与a按位相与运算后作为函数fun()的参数20. 友元的作用是()A. 提高成员的运行效率B. 加强类的封装性C. 实现数据的隐藏性D. 增加成员函数的种类21. 析构函数的特征是()A. 类只能定义一个析构函数B. 析构函数名与类名不同C. 析构函数的定义只能在类体内D. 析构函数可以有一个或多个参数22. 不能作为类成员的是()A. 自身类对象的指针B. 自身类的对象C. 自身类对象的引用D. 另一个类的对象23. 通常的拷贝初始化构造函数的参数是()A. 对象名B. 对象的成员名C. 对象的引用名D. 对象的指针名24. 不是构造函数特征的是()A. 构造函数的函数名与类名相同B. 构造函数可以重载C. 构造函数可以设置默认参数D. 构造函数必须指定类型说明25. 属于类的内部实现的是()A. 公有成员B. 私有成员C. 保护成员D. 友元26. 关于成员函数特征的下述描述中错误的是()A. 成员函数一定是内联函数B. 成员函数可以重载C. 成员函数可以设置参数的缺省值D. 成员函数可以是静态的27. 下列关于静态数据成员的特性描述中错误的是()A. 说明静态数据成员时前边要加staticB. 静态数据成员要在类体外进行初始化C. 引用静态数据成员时,要在静态数据成员名前加“类名”和作用域运算符D. 静态数据成员不是所有对象所共用的28. 关于具有转换函数功能的构造函数说法中正确的是()A. 不带参数的构造函数B. 带有一个参数的构造函数C. 至少带有二个参数的构造函数D. 缺省构造函数29. 对重载函数的描述中,错误的是()A. 重载函数中不允许使用缺省参数B. 重载函数中编译系统根据参数表进行选择C. 不要使用重载函数来描述毫无相干的函数D. 构造函数重载将会给初始化带来多种方式30. 在面向对象的程序中,不属于对象特点的是()A. 多态性B. 抽象性C. 封装性D. 继承性31. 在C++中,类是一种()A. 自定义函数B. 头文件C. 自定义数据类型D. 控制结构32. C++类成员的缺省访问属性是()A. protectedB. privateC. publicD. friend33. 面向对象程序设计将数据和()放在一起,作为一个相互依存、不可分割的整体来处理。