




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章 从过程抽象到数据抽象,1.3 面向对象分析和设计,主要内容,面向对象建模 对象模型 UML建模技术 面向对象分析 面向对象设计 面向对象实现,1.3.1 面向对象建模,在创建系统之前必须对问题有一个透彻的了解。为了更好的理解问题和描述问题,人们常常采用“建立问题模型”技术。如:建造一座大厦(图纸),拍电影(剧本) 模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。 模型是一种思考工具,利用这种工具可以把知识规范地无歧义地表示出来。,1. 建模的目的:,(1)模型帮助我们将系统可视化,可以更好地理解系统。 (2)模型可以让我们直观、详细描述系统的结构和
2、行为,并利用它和同事容易沟通。 (3)模型提供了指导我们创建系统的模板,我们可以用它为使用系统的人提供帮助。 (4)模型对我们所做的决策进行文档化。,系统越大越需要建立问题模型。为了开发复杂的软件系统,系统分析员应该抽象出目标系统的特性,使用精确的表示方法构造系统的模型,并在设计过程中逐渐把和实现有关的细节加进模型中,直至最终用程序实现模型。,2.建立问题模型方法,从算法的角度建立问题模型:所有的问题都用过程/函数作为主要构造块 面向对象的建模:所有的问题都用对象/类作为主要构造块 面向对象的建模的方法很多: Rumbaugh-OMT Booch Yourdon - OOA int main(
3、) coutThis is a simple C+ program.endl; return 0; ,2 C+数据类型,C+的基本数据类型有整型(int)、字符型(char)、浮点型(float、double)、布尔型(bool)、空类型(void)等类型。 void为无值型 : void show(); int show (void) C+的构造数据类型是由基本数据类型构造而成的。C+语言中的构造数据类型有:数组、指针、枚举、引用、结构体、联合、类。,2.1指针,变量的指针就是变量的地址。存放变量地址的变量是指针变量,用来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在程序中用
4、“*”符号表示“指向”。符号“*”称为指针运算符。 定义指针变量的一般形式为: 基类型 * 指针变量名 例如: int *i_pointer; float *f_pointer;,在使用指针之前,一定要先使指针有明确的指向。那么,怎样使一个指针变量指向另一个变量呢?可以使用如下的赋值语句。例如: int * i_pointer1,* i_pointer2; int i,j; i_pointer1= i6; i+);,2.5 C+的运算符,new 动态内存分配 delete 回收new分配的内存动态 :域作用符: 对数据成员和成员函数的限定,3. c+中的new/delete,取代 malloc
5、/free new/delete有什么好处? malloc/free只是对内存进行分配和释放; new/delete还负责完成了创建和销毁对象的任务。 另外,new的安全性要高一些,因为new返回的就是一个所创建的对象的指针,对于malloc来说返回的则是void*,还要进行强制类型转换,这是一个危险的漏洞。 最后,我们可以对new/delete重载,使内存分配按照我们的意愿进行,这样更具有灵活性,malloc则不行。,new的使用: type * p = new type type * p = new type(初值) type * p = new type数组大小 int *p=new i
6、nt; int *p=new int(50); int *p=new int10; std:string *stringPtr1 = new std:string; std:string *stringPtr2 = new std:string100; delete的使用: delete stringPtr1; / 删除一个对象 delete stringPtr2; / 删除一个对象数组 NOTE new创建的内存空间必须由delete回收 new创建内存空间不成功返回NULL指针(0) int *p=new int10; if (p=0) cout “Run out of memory”,c
7、+标准库与Namespace,C+标准库很大:在C+标准中,关于标准库的规格说明占了密密麻麻300多页,这还不包括标准C库,后者只是 作为参考包含在C+库中。C+库并非提供了一切(很明显的是,没有提供并发和图形用户接口的支持),但确实提供了很多。几乎任何事你都可以求助于它。 标准库组织 因为标准库中东西如此之多,你所选择的类名或函数名就很有可能和标准库中的某个名字相同。为了避免这种情况所造成的名字冲突,实际上标准库中的一切都被放在名字空间std中。,具体组织情况: 1-文件名称: 早期C+标准库放在,等头文件中 后来的C+标准库引入namespace: 为包装在std的那部分标准库创建新的头文
8、件名。生成新头文件的方法仅仅是将现有C+头文件名中的 .h 去掉。所以变成了,变成了,等等。 对于C头文件,采用同样的方法,但在每个名字前还要添加一个c。所以C的变成了,变成了,等等。 实际来说,下面是C+头文件的现状: 旧的C+头文件名如将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在名字空间std中。 新的C+头文件如包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std中。(在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。) 标准C头文件如继续被支持。头文件的内容不在std中。 具有C库功能的新C+头文件具有如这样的名字
9、。它们提供的内容和相应的旧C头文件相同,只是内容在std中。,2-库中的一切几乎都是模板。 这里有一个basic_string模板的完整声明,以及建立在它之上的string类型定义(typedef);可以在头文件中找到它: namespace std template, class Allocator = allocator class basic_string; typedef basic_string string; ,Namespace,例如,假设library1.h定义了一些常量,其中包括:const double lib_version = 1.204; 类似的,library2.h
10、也定义了:const int lib_version = 3; 很显然,如果某个程序想同时包含library1.h和library2.h就会有问题名字冲突 比较好的方法是使用C+ namespace。namespace本质上和使用前缀的方法一样,只不过避免了别人总是看到前缀而已。,namespace sdm const double book_version = 2.0; class handle . ; handle 用户于是可以通过三种方法来访问这一名字空间里的符号: 将名字空间中的所有符号全部引入到某一用户空间; 将部分符号引入到某一用户空间; 或通过修饰符显式地一次性使用某个符号:,1
11、-将名字空间中的所有符号全部引入到某一用户空间 void f1() using namespace sdm; / 使得sdm中的所有符号不用加修饰符就可以使用 cout book_version; / 解释为sdm:book_version . handle h = gethandle(); / handle解释为sdm:handle, / gethandle解释为sdm:gethandle . ,2-将部分符号引入到某一用户空间; void f2() using sdm:book_version; / 使得仅book_version不用加修饰符就可以使用 cout book_version;
12、 / 解释为sdm:book_version . handle h = gethandle(); / 错误! handle和gethandle都没有引入到本空间 . ,3-或通过修饰符显式地一次性使用某个符号: void f3() cout sdm:book_version; / 使得book_version在本语句有效 . double d = book_version; / 错误! book_version不在本空间 handle h = gethandle(); / 错误! handle和gethandle都没有引入到本空间 . ,本节小结,面向对象建模(目的、3种模型和OMT) UML建模技术(视图、图)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神经内科药物管理收费
- 社团现状工作总结
- 企业应收账款质押贷款合同
- 商业合同例文:乳胶漆购销条款
- 第一储气罐采购合同书
- 房屋租赁合同解除协议书范文
- 房产转租合同样本与标准租赁合同
- 财务会计人员劳动合同
- 维修门楼工程合同书
- 植物考试模拟题+答案
- 中小学学校落实中央八项规定自查报告
- 2025届上海市浦东新区高三二模英语试卷(含答案)
- 2025-2030羊毛制品行业市场调研分析及发展趋势与投资前景研究报告
- 房建资料员知识培训课件
- 新零售背景下的电子商务尝试试题及答案
- 2024-2025学年高一政治统编版下学期期中考试测试卷B卷(含解析)
- 《商务沟通与谈判》课件 第二章 商务沟通原理
- 内蒙古自治区呼和浩特市2025届高三第一次模拟考试物理答案
- 2024年四川内江中考满分作文《我也有自己的光芒》8
- 酒店前台培训知识
- 深信服aES产品技术白皮书-V1.5
评论
0/150
提交评论