Chap1 绪论1.docx
- 文档编号:30409897
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:12
- 大小:217.67KB
Chap1 绪论1.docx
《Chap1 绪论1.docx》由会员分享,可在线阅读,更多相关《Chap1 绪论1.docx(12页珍藏版)》请在冰豆网上搜索。
Chap1绪论1
面向对象程序设计(C++)
Object-OrientedProgramminginC++Language
教材:
●马光志.C++程序设计实践教程.华中科技大学出版
参考书:
①王燕.面向对象的理论与C++实践.清华版
②C++Thinking.机械工业出版社
Chap1绪论
一、面向对象思想的由来
1.产生原因:
●人们希望能更直接与计算机进行交互
寻求一种更能反映人类解决问题的自然办法
●软件系统越来越庞大、复杂,传统的结构化方法无法满足易维护、易扩充、可重用性好等要求
模拟客观世界的构成法则来构造软件系统(将系统分解成一系列的使能实体)
2.实质:
从现实世界中客观存在的事物(即对象)出发来构造软件系统,追求软件系统对现实世界的直接模拟,尽量将现实世界中的事物直接映射到软件系统的解空间。
二、面向对象方法构造软件系统的步骤
1.系统分析——建立对象模型
●发现对象;定义对象属性和服务;分析对象之间的联系;建立系统的对象模型、动态模型和功能模型
2.系统设计——确立对象模型的实现方法
●系统分解;设计问题域子系统,确定应用系统的边界;设计人-机交互子系统;设计任务管理子系统(分析系统的并发性、分配处理器的任务);设计数据管理子系统(选择数据存储管理模式);处理全局资源的访问;等等
3.对象设计——三种模型转换成类
●对象模型类的属性:
主要考虑对象关联的实现方法
●动态模型类的方法:
选用事件驱动的运行环境
●功能模型主控模块或子控模块:
顺序执行or事件驱动方式实现流程控制
4.对象实现——编码
●选用合适的面向对象程序设计语言(OOPL)和开发环境(DE),定义类的属性及其方法,编写主控模块及子控模块
三、面向对象的程序设计
1.结构化的程序设计(StructureProgramming)
●特点:
采用模块分解与功能抽象,自顶向下、分而治之的手段,从而将一个较复杂的程序系统的设计任务分成许多易于控制和处理的子任务,这些子任务都是可独立编程的子程序模块。
●存在的问题:
面向数据/过程的设计方法,数据和过程分离,导致
1)程序的可重用性差(不同的数据格式即使做相同的处理或对相同的数据格式要做不同的处理都需要编写不同的程序)
2)数据与程序有时不相容(存在错误的数据调用正确的程序模块或正确的数据调用错误的程序模块的可能性)
2.面向对象的程序设计(Object-OrientedProgramming-OOP)
●特点:
1)将数据及对数据的操作放在一起,作为一个相互依存、不可分割的整体来处理,采用数据抽象和信息隐藏技术。
(封装性)
2)将对象及对对象的操作抽象成一种新的数据类型——类,并且考虑不同对象之间的联系和对象类的重用性。
(类、对象、消息、继承)
OOP吸收了结构化程序设计的优点,又考虑了现实世界与面向对象解空间的映射关系(追求目标:
问题求解空间尽可能简单化)
●例:
●优点:
1)有希望解决软件工程的两个主要问题——软件复杂性控制和软件生产率的提高;
2)符合人类的思维习惯,能够自然地表现现实世界的实体和问题。
四、面向对象的程序设计语言
1.发展历程:
⏹封装机制:
Ada,Modula-2
⏹对象抽象:
Simula——OO锥形
⏹面向对象的语言:
Smalltalk-80,C++,ObjectedPascal(Delphi),Java,C#,VB.NET
⏹C++:
以C为基础的多继承的OOPL
⏹Java:
以C++为基础的单继承的OOPL——网络化的OOPL
⏹C#:
以C++为基础的单继承的可重载运算符的OOPL
2.SmallTalk——第一个真正的OOPL
●1976年,SmallTalk-72:
有列表和控制结构,但没有类的概念
●1978年,SmallTalk-74:
引入多窗口界面,有类的概念
●1981年,SmallTalk-80:
引入和完善了类、方法、实例等概念,应用了继承机制和动态连接,第一个最纯粹的面向对象程序设计语言
3.C++——混合型的OOPL
●1986年,美国AT&T的贝尔实验室开发
●吸收了C、OBJECTIVE-C、SIMULA等语言特点而发展:
1)C的超集,完全兼容C
2)是一种强类型语言:
编译阶段就能发现C++程序的潜在错误
3)表达能力强:
多继承性、构造函数、虚函数、友元函数提高了其表达能力
4)提供了自动回收和显式回收两种内存管理方式
5)提供了运算符重载机制:
对象的运算更易表达且表达更加自然,如<<和>>
6)不是纯面向对象的语言:
未提供供所有类继承的祖先类;继承C的函数和模块结构,程序由对象和模块混合构成,而非完全由类和对象构成
7)提供了异常处理机制:
程序更易于理解和维护
五、面向对象程序设计范型
1.程序设计范型
●概念:
程序设计的体裁,即用程序设计语言表达各种概念和各种结构的一套设施。
2.面向对象程序设计范型
●从程序角度:
是一个类的集合和各类之间以继承关系联系起来的结构,再加上一个主程序,在主程序中定义各种对象并规定它们之间传递消息的规律。
●从程序执行角度:
各对象和它们之间以消息传递的方式进行着的通讯
最主要特征:
对象之间的消息传递、各类之间的继承
六、面向对象的基本概念
1.对象——核心概念
●范畴:
有形实体;无形实体;简单对象;复杂对象
●例:
1)一个人(首先是一个客观实体,具有一个名字来标识;其次有性别、年龄、身高、体重等这些体现他自身状态的特征;再其次他还具有一些技能,如会说英语、会修电器等)
2)一粒米(首先是一个客观存在,称为“米”;其次具有颜色、体积、重量,再其次它还可以被食用、可以用作原料等)
●定义:
对象是现实世界中的一个实体,它具有如下特性:
1)有一个名字以区别于其他对象;
2)有一个状态用来描述它的某些特征;
3)有一组操作,每一个操作决定对象的一种功能或行为;
4)对象的操作可分为两类:
①自身所承受的操作②施加于其它对象的操作
对象是其自身所具有的状态特征及可以对这些状态施加的操作组合在一起所构成的独立实体。
如,有一个人名叫王东,性别男,身高1.80m,体重68kg,可以修电器,可以教计算机课。
描述这个对象:
对象名:
王东
对象的状态:
性别:
男
身高:
1.80m
体重:
68kg
对象的功能(可做的操作):
回答身高
属于自身所承受的操作
回答体重
回答性别
属于施加于其它对象的操作
修理电器
教计算机课
●对象的选择——依赖于模拟现实系统的目的
如,学生信息系统,若模拟的目的是
①收集学生的学习情况,则可设置学生、教师、教材、课程、成绩、教室等对象;
②收集学生在校的所有学习和生活情况,则需要设置①+学生宿舍、学生食堂、医院、文体设施、课外活动等考察对象
●对象的状态——是对象为外界服务的基础
C++中用成员变量表示
2.类
●定义:
具有相同特征的对象的集合
●类与实例的关系:
组成类的对象均为此类的实例
1)抽象与具体的关系(如,王东和学生类)
类是多个实例的综合抽象,而实例又是类的个体实物
2)同一类的不同实例之间,必须具有如下特点:
Ø相同的操作集合;
Ø相同的属性集合;
Ø不同的对象名。
●类的确定和描述
Ø类的确定采用归纳的方法(归纳出对象的共同特征来确定一个类)
Ø类的描述:
(如马类的C++描述)
classHorse{
结构特性
intcolor;
char*sort;
public:
行为特性
voidmove();
voidshift();
};
3.消息
●什么是消息?
消息是对象之间相互请求或相互协作的途径,是要求某个对象执行其中某个功能操作的规格的说明。
对象只有在收到消息时,才被激活,被激活后的对象代码将“知道”如何去操作它的私有数据,去完成所发送的消息要求的功能
●三要素:
①接收消息的对象;
②消息选择符(消息名);
③零个或多个变元(参数)。
如,Person对象类的C++定义:
classPerson{
private:
charname[20];
intage;
charsex;
voidPrintName(){...}//C++新的行注释风格/**/
voidPrintAge(intage){...}
voidPrintSex(){...}
public:
voidPrint()
{
PrintName();
PrintAge();
PrintSex();
}
voidSetAge(intage1){age=age1;}
};
定义对象Wang:
PersonWang;
消息:
Wang.Print();
Wang.SetAge(25);
●三性质:
①同一对象可接收不同形式的多个消息,产生不同的响应;
②相同形式的消息可以送给不同对象,所做出的响应可以是截然不同的;
③消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以对消息不予理会。
七、面向对象系统的特性
1.封装性(Encapsulation)
●什么是封装?
在程序设计中,封装是指将一个数据和与这个数据有关的操作集合放在一起,形成一个能动的实体——对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象即可。
封装应具备的条件:
①有一个清晰的边界。
②有确定的接口(即协议)。
描述对象之间的相互作用、请求和响应(即,消息)
③受保护的内部实现。
2.继承性
●引入目的:
表达客观世界中的分类关系(存在共性,又有差别)
●分类:
●特点:
①派生类对象继承基类对象的“属性”和“操作”(共性特征)
②派生类对象可以改变、增加新的“属性”和“操作”(个性特征)
●取代继承、包含继承、受限继承、异化继承
●优点:
①能清晰地体现相关类间的层次结构关系
②减少代码/数据冗余,大大增加程序的可重用性
③通过增强一致性来减少模块间的接口和界面,大大增加易维护性
④易于程序的扩充(加新类)
●描述
3.多态性
描述的是同一个消息,可以根据发送消息对象的不同,采用多种不同的行为方式,即不同的对象收到相同的消息时产生不同的动作。
●重载:
函数/运算符名字相同、但含义(或实现细节)不同
相同名字的函数或运算符在不同的场合可以表现出不同的行为。
①函数重载
要求:
同一作用域内,函数名相同,但函数所带的参量个数或类型必须有所区别,否则就会出现二义性
②运算符重载
同一个运算符可以施加于不同类型的操作数,运算结果不同。
例1:
5/3和5.0/3.0
3+5和+3
......
例2:
移位运算符>>和<<
③两种重载方式都属于静态连接方式,即在编译阶段,根据参数类型/个数就确定所调用的重载函数或运算符。
因此,重载又称为编译时多态。
●虚函数——运行时多态
虚函数使用户在一个类等级中可以使用相同函数的多个版本,每一个版本均属于类等级中的不同的类,究竟使用的是哪一个特定的版本需要在运行中决定。
①虚函数的各个版本,返回值、函数参数的个数和类型必须是一致的,即函数原型完全一样。
②使用、定义方法
③实现机制——动态联编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Chap1 绪论1 绪论