1面向对象编程技术课程代码:2020430050时间:周一,1~2节周四,1~2节地点:研302周次:3~14周,遇节假日调课则顺延授课教师:郝应光邮件地址:h_lionstar@126.com23课程考核及成绩构成本课程的成绩由期末考试和平时作业2部分构成平时成绩由:期末大作业+平时随堂作业构成具体比例待定4主要内容面向对象技术C++语法概要(6)MFC框架基础详解(15)MFC文档/视图结构详解(9)几个应用程序开发实例(6)VisualC++应用程序设计(12)–多线程程序设计(3)–TCP/IP网络程序设计(3)–动态连接库程序设计(3)–数据库程序设计(3)5第一部分面向对象技术面向对象概念UML6第二部分C++语法概要类和对象静态数据成员及成员函数对象与指针操作符重载和友员继承多态性7第三部分MFC框架基础VisualC++集成开发环境简介Windows操作系统下的应用程序(SDK、MFC)用Appwizard开发一个MFC程序事件处理、映射模式及滚动视图GDI、颜色及字体对话框及控件ActiveX及IE公用控件位图第四部分MFC文档视图结构菜单、键盘及命令处理工具栏及状态栏文档和视图分离SDI及MDI文档的读写打印及打印予览拆分窗口及多视图89第五部分MFC程序设计的其他方面多线程程序设计数据库程序设计动态连接库程序设计TCP/IP网络程序设计10主要参考书面向对象建模与设计,Rumbaugh,电力出版社面向对象分析与设计,GradyBooch,机械工业出版社ThinkinginC++,BruceEckelC++Primer,StanleyBLippman,中国电力出版社C++语言及其程序设计教程,张国峰,电子工业出版社深入浅出MFC,2Ed,侯俊杰(侯杰),松岗。VisualC++技术内幕,Microsoft,北京希望电子出版社11主要网络资源(microsoft)(世界最大开源代码库)软件开发软件开发的过程就是程序员对客观世界问题域形式化的过程计算机开发语言机器语言、汇编语言、高级语言,高级语言可能有几千种计算机语言都是某种程度的形式语言计算机高级语言的历史–由美国科学家巴科斯设计,1956年在IBM计算机上实现的FORTRAN。–70年代以来的PASCAL–80年代,C语言–80年代后期,C++–90年代以来,语言要OO而且Visual,更要Web,Java快速推广。PO方法:–现实世界→流程图(变量,函数)→PO语言→执行求解OO方法:–现实世界→类图(对象,方法)→OO语言→执行求解–OO作为一种思想及编程语言,为软件开发的整个过程:分析、设计到coding,提供了一个完整解决方案。从PO到OO17面向过程思想问题域(Domain)以问题域的系统流程为中心分析Sub1Sub2Subn….各子流程实现----函数化Func1Func2Funcn….根据系统的流程组建软件,通过函数的调用实现18面向对象思想问题域(Domain)以问题域中的事物为中心思考问题Object1Object2Objectn….对象归类----抽象化Class1Class2Classn….类实例化:定义对象,构建系统,形成解决方案19面向对象的基本概念Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统是面向对象的。20对象对象是面向对象开发模式的基本成份。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。21消息(Message)消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。一个对象接收到消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。22类类是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。23同一个类的每个对象都是类的实例(Instance),它们都可使用类中提供的函数。对象的状态则包含在它的实例变量,即实例的属性中。24继承(Inheritance)继承是使用已存在的定义做为基础建立新定义的技术。新类的定义是基础类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改既存类。既存类可当做基类来引用,则新类相应地可当做派生类来引用。25面向对象方法学面向对象分析OOA面向对象设计OOD面向对象实现OOP26面向对象技术回顾面向对象技术是许多人历经多年研究积累的产物。–类的概念,是面向对象的重要组成部分。–Smalltalk,提出许多面向对象技术的核心概念,如:消息和继承。–Dijkstra的软件正确性理念,提出了用抽象层构造软件的观点。–Ada语言,提出了一般性和包两个概念。–C++语言,最广泛使用的面向对象的语言。–Java语言,健壮的、可移植的、流行的面向对象语言。27UML的产生1988年到1992年是面向对象方法学蓬勃发展的时期,人们从各自的经历和软件开发的经验提出了各种面向对象的开发方法,代表的有:–SallyShlaer和SteveMellor以信息模型化方法作为基础,并为目标系统增设了状态模型和过程模型;–PeterCoad和EdYourdon则在信息模型化、面向对象的程序设计语言和基于知识的系统的基础上,建立了他们的OOA和OOD,主要工具是类与对象图、对象状态图和服务图;–HP公司的Fusion开发方法。28JimRumbaughGradyBoochIvarJacobson29OOA和OOD是面向对象方法学中重要的部分,UML是具体的方法OOP涉及到具体的编程语言,C++开发要使用合适的工具IDE:VisualC++面向对象的特点30封装(Encapsulation)通过定义类实现继承(Inheritance)通过派生新类实现多态性(Morphism)虚拟函数实现XO(X?-Oriented)SO(Service-Oriented)OO(对象、类)PO(过程、函数、变量)OO之后是什么?32第二部分C++语法概要第一章C++基础331.1C++的起源和特点C语言1972年,由DennisRitchie设计,可以认为是最优影响力的发明之一。为改进C语言,“带类的C”,1983命名为C++–对C的类型系统改进和扩充(更安全)–支持面向对象C++保持与C兼容(快速普及)C++不是纯粹的面向对象的语言341.2程序的编译过程351.3C++的词法记号关键字各种常量操作符标识符分隔符361.4C++程序的结构#includeiostream.hintmain(){cout”thisisthestartofsomethingwonderful!”;coutendl;cout”Andnowwecansayevenmore!”;return0;}37注释输入和输出函数变量(对象)符号常量表达式语句381.5C++的基本数据类型类型名位数值域boolfalse,truechar8-128.128signedchar8unsignedchar8shortint16signedshortint16unsignedshortint16int32signedint32unsignedint32longint32signedlongint32unsignedlongint32float32double64longdouble80391.7对象声明基本语法如下:–数据类型标识符1,标识符2,。。。标识符n;初始化–数据类型标识符1(初始值1),标识符2(初始值2),。。。标识符n(初始值n);–数据类型标识符1=初始值1,标识符2=初始值2,。。。标识符n=初始值n;赋值–I=10;401.6常量整数常量浮点常量字符常量字符串常量布尔常量411.8枚举类型定义:–通过枚举一个类型的值域来定义一个数据类型,值域是通过在枚举声明时所指定的一组文字量(又称枚举常量)指定的。语法形式:–enum标识符{标识符1,标识符2,标识符3,。。。标识符n};421.9表达式表达式由操作数和操作符组成,操作符分:–算术操作符:+、-、*、/、%、++、--–关系操作符:、、==、=、=、!=–逻辑操作符:&&、||、!–逗号表达式:?:–sizeof操作符:sizeof–位操作符:&、|、~–赋值操作符:=431.10表达式中的类型强制隐含地从一种类型向另一种类型的值的映射。赋值类型强制–右边的表达式类型映射成左值的类型。强制类型转换–static_castT(E)–T(E)–(T)E44第二章C++程序的基本控制结构顺序结构–表达式语句–空语句–块语句选择结构循环结构452.1选择结构ifif-----else及其嵌套switch~case462.2循环结构whiledo~whilefor47嵌套循环循环是可以嵌套的482.3辅助控制语句gotobreakcontinue49第三章函数503.1函数的基本概念完成特定功能的一段代码–具有合法的名称–具有一定返回类型–可以多次调用基本形式:返回类型函数名(形式参数1,形式参数2,。。。,形式参数n){函数体;}513.2参数的传递值调用地址调用引用调用参数的求值顺序#includeiostream.hdoubleVolume(doubleradius,doubleheight);intmain(){doublev;v=Volume(3.0,3.0);coutVolume=vendl;return0;}doubleVolume(doubleradius,doubleheight){doubleresult=3.14*radius*radius*height;returnresult;}523.3重载具有相同函数名,但其参数个数不同或参数类型不同的一组函数称为重载。intabs(inta){returna0?-a:a;}doubleabs(doublef){returnf0?-f:f;}533.4带缺省参数值的函数函数声明中可以为一个或多个参数指定缺省参数值。–具有缺省值的参数右边不能出现没有缺省值的参数。–重载函数的参数具有缺省值时要注意。–例:voidfun(intx,inty=0)voidfun(intx)54第四章类和对象4.1类的结构C++的类是对象的抽象–数据成员。–成员函数。C++类的说明Class标识符{public:数据成员;成员函数;private:数据成员;成员函数;};第二部分C++语法概要55举例:ClassRectangle{public:Rectangle(intx,inty,intw,inth);voidMove(intx,inty);voidSize(intw,inth);voidWhere(int&x,int&y);intArea();voidDraw();private:intX,Y,W,H;};4.1类的结构(外部说明)56访问控制描述符–public后声明的是公有数据成员和成员函数,可被任何程序单元引用。–private后声明的是私有数据成员和成员函数,仅可被类内部引用。–public和private出现的顺序和次数是任意的。4.1类的结构(外部说明)57类成员函数的实现返回类型类名::成员函数名(参数声明){语句序列;}4