面向对象程序设计.docx
- 文档编号:27222465
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:39
- 大小:67.15KB
面向对象程序设计.docx
《面向对象程序设计.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计.docx(39页珍藏版)》请在冰豆网上搜索。
面向对象程序设计
面向对象程序设计
⏹结构化程序设计的根本内容:
1.结构的类型:
顺序、分支、循环
2.结构化程序设计思想:
利用过程或函数来抽象和模拟客观现实。
3.结构化程序设计方法:
1)重点放在如何实现细节过程方面,将数据与函数分开。
2)形式:
主模块+假设干个子模块〔如C:
main()+子函数〕。
4.特点:
自顶向下,逐步求精——功能分解。
5.缺点:
效率低,是手工作坊式的编程。
6.结构化程序的问题——数据与算法别离,程序数据和操作数据的函数是别离的。
⏹面向对象程序设计观点:
1.自然界是由各种各样的实体〔对象〕所组成,每种对象都有自己的内部状态和运动规律,不同对象之间的相互联系和相互作用就构成了各种不同的系统,进而构成整个客观世界。
2.程序设计方法:
使用面向对象的观点来描述模仿并处理现实问题。
3.要求:
高度概括、分类和抽象。
4.目的:
实现软件设计的产业化。
5.根本概念:
1)对象:
用来描述客观事物的一个实体,它是构成系统的一个根本单元。
一个对象具有一组属性和行为。
实体对象*一台计算机
抽象对象*一项方案
2)对象构成要素:
对象标识符:
是对象的名称,用来区别于其他对象。
属性:
是用来描述对象静态特征的一个数据项。
行为:
是用来描述对象动态特征和行为的操作。
3)消息〔Message〕用于描述事件发生的信息。
消息是对象之间发出的行为请求。
多个消息构成一个事件(Event)。
对象之间通过传递消息相互影响。
对象例如:
一个“学生〞对象的例子
对象名:
学生
属性:
学号:
123456
姓名:
令狐冲
年龄:
18
专业:
信管
行为:
修改学号、姓名、专业、年龄等等
对象例如:
一个“课程〞对象的例子:
对象名:
课程
属性:
课程号:
123456
课程名:
程序设计
任课教师:
莫名
选课要求:
学时:
48
行为:
获取并修改课程名、课程号、学时数、选课要求、任课教师等
4)类:
是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供统一的抽象描述,是对象集合的再抽象。
5)类和对象的关系:
类〔抽象定义〕<->对象〔实例〕
6)类<->对象举例
学生<->学生王强
课程<->C++程序设计
类型<->变量,如C语言中的int和intx;
7)类的实例——用类定义的类变量,即对象。
类是对多个特性相同的对象实例的抽象,所以同一类的不同实例之间必有:
●相同的操作集合
●相同的属性集合
●不同的对象名,分配有不同的存储空间。
8)类确实定与划分:
类确实定——对所遇到的对象进行分析、归纳,根据共同的特征来确定一个类。
类确实定的方法:
●判断是否有一个以上的实例
●判断类的实例中是否有绝对的不同点
9)类的划分不是绝对的,可以根据不同的实际需要确定不同的类。
⏹面向对象程序设计的特点:
1.抽象性:
抽象〔abstract〕是指有意忽略问题的某些细节和与当前目标无关的方面,以便把问题的本质表达得更清楚。
2.封装性:
1)封装encapsulation——将数据和与这个数据有关的操作集合在一起,形成一个实体——对象,且尽可能隐藏对象的内部细节。
2)特点:
●具有一个清楚的边界,对象的所有私有数据、内部程序〔成员函数〕细节都被固定在这个边界内。
●具有一个接口,描述了对象之间的相互作用、请求和响应——消息。
●对象内部的实现代码受到封装壳的保护,其它对象不能直接修改本对象所拥有的数据和代码。
●封装的单位是对象。
3)封装性:
●从外面看只能看到对象的外部特性,即能够受理哪些信息,具有哪些处理能力;对象的内部,即处理能力的实行和内部状态,对外是不可见的。
●从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变。
4)封装的优点:
●降低部件间的耦合度,提高部件的独立性
●具有隐藏性和平安性(如银行的账户)
●易于维护(由于数据独立,易于发现问题)
●封装将对象的使用者与设计者分开,使用者只需要通过接口访问对象,不必了解对象的内部细节,提高了软件复用。
5)封装的缺点:
●需要更多的输入输出函数。
6)抽象与封装形成了程序接口与实现的别离。
3.继承性:
继承性是指特殊类的对象拥有其一般类的属性和行为的特性。
1)继承:
继承是一种联结类与类的层次模型。
对象类之间的相交关系,使得某类对象可以继承另外一类对象的特征和功能。
2)类间具有继承关系的特性:
●类间具有共享特征(包括数据和程序代码的共享):
遗传
●类间具有细微差异或新增局部(包括非共享的程序代码和数据):
变异
●类间具有层次结构〔如同人类通过继承构成了家族关系一样〕
3)继承分类:
●从继承源上划分:
单继承〔一个派生类只有一个基类〕、多继承〔一个派生类有多个基类〕
●从继承内容上划分:
取代继承、包含继承、受限继承、特化继承。
4)继承的作用:
●实现软件的可重用性
●实现软件的独立性
●增加软件的可维护性
2)继承与封装的关系:
●封装是指对象的封装,在对象中数据和操作总是包裹在一起的,继承不会影响对象的这种封装性,但无限制的派生继承会在一定程度上损害对象中数据的隐蔽性。
●封装使类定义中实现的代码可以用于该类的各个实例〔对象〕中,实现了动态共享代码;继承使得派生类能与基类共享基类中实现的代码,实现了静态共享代码。
3)类的层次:
由一个类可以派生出任意多个派生类,这样就形成了类的层次关系,这是现实世界中事物的分类问题在计算机中的解形式。
4)继承的优势:
●能清晰表达相关类间的层次结构关系。
●有效地址提高了程序的可重用性,减小了程序代码的冗余度。
●增强了程序的一致性,减少了程序模块间的接口和界面,使程序更易维护。
●继承是自动传播程序代码的有力工具。
●继承是新类构造、建立和扩充的有效手段。
●继承具有传递性。
如果类C继承类B,类B继承类A,那么类C继承类A。
●“站在巨人的肩头上〞。
用户在开发新系统时不必从零开始,可以继承原有相似功能或者从类库中选取需要的类,再派生新类。
5)例:
人类按职业划分的一种继承关系
4.多态性:
1)多态polymorphism:
多态是指类中同一函数名对应多个具有相似功能的不同函数。
对象根据所接受的消息而做出动作,同样的消息为不同的对象接受时可导致完全不同的行动,该现象称为多态性。
简单地说:
单接口,多实现。
举例:
sqrt_i(inti),sqrt_f(floatf)
sqrt(inti),sqrt(floatf)
2)多态性:
指可以使用相同的调用方式来调用这些具有不同功能的同名函数的特性。
3)作用:
●减轻程序员负担
●降低程序员出错机率
4)多态性的实现:
●运行时多态性:
虚函数
●编译时多态性:
重载
●重载
函数重载:
是指在同一作用域内的假设干个参数特征不同的函数可以使用相同的函数名字。
运算符重载:
是指同一个运算符可以施加于不同类型的操作数上面。
优点:
重载进一步提高了面向对象系统的灵活性和可读性。
5)例:
下列图中同名函数person()作用在Student、Teacher等不同类上时,将执行不同的操作,这就是多态。
⏹面向对象与面向过程程序设计比拟:
1.面向过程程序设计的根本特点:
1)按层次组织模块。
2)每一模块只有一个入口,一个出口。
3)代码和数据别离,即程序=数据结构+算法。
4)方法:
自顶向下,逐步求精,模块化
2.面向对象程序设计:
1)它将数据和操作数据的过程〔函数〕绑在一起,形成一个相互依存、不可别离的整体〔即对象〕,从同类对象中抽象出共性,形成类。
2)同类对象中的数据原那么上只能用本类提供的方法〔成员函数〕进行处理。
类通过封装将接口与实现别离开来,通过接口与外界联系。
对象之间通过消息进行通信。
3.两种程序方法的比照:
面向对象程序设计将数据和操作数据的程序代码绑在一起构成对象,具有更好的可维护性,因某类对象数据的改变只会引起该类对象操作代码的改变,而与其他类型的对象无关,这就把程序代码的修改维护局限在一个很小的范围内。
4.面向对象程序设计的优点:
1)符合人们习惯的思维方法,便于分解大型的复杂多变的问题。
由于对象对应于现实世界中的实体,因而可以很自然地按照现实世界中处理实体的方法来处理对象,软件开发者可以很方便地与问题提出者进行沟通和交流。
2)易于软件的维护和功能的增减。
对象的封装性及对象之间的松散组合,都给软件的修改和维护带来了方便。
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低本钱的。
3)可重用性好。
重复使用一个类〔类是对象的定义,对象是类的实例化〕,可以比拟方便地构造出软件系统,加上继承的方式,极大地提高了软件开发的效率。
4)与可视化技术相结合,改善了工作界面。
随着基于图形界面操作系统的流行,面向对象的程序设计方法也将深入人心。
它与可视化技术相结合,使人机界面进入GUI时代。
5)质量高。
在设计时,可重用现有的,在以前的工程的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
6)扩展方便。
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且本钱较低。
⏹三种常用面向对象程序设计语言简介:
1.混合型面向对象程序设计语言C++
2.纯面向对象程序设计语言Java
3.可视化程序设计语言VisualBasic
//四人中有一人中了奖,小李问这四人时,答复如下:
//A:
不是我
//B:
是C
//C:
是D
//D:
C胡说
//其中三人说的是真话,一人说假话,试根据这些信息找出中奖者
#include
voidmain()
{
intk=0,count=0,sum=0;
charthisman;
for(k=0;k<=3;k++)
{
thisman='A'+k;
sum=(thisman!
='A')+(thisman=='C')+(thisman=='D')+(thisman!
='D');
if(sum==3)
{
printf("中奖者为:
%c\n",thisman);
count++;
}
}
if(count==0)
printf("无解!
\n");
else
printf("共有:
%d种符合条件的情况!
\n",count);
}
//四人中有一人中了奖,小李问这四人时,答复如下:
//A:
不是我
//B:
是C
//C:
是D
//D:
C胡说
//其中三人说的是真话,一人说假话,试根据这些信息找出中奖者
#include
classFind
{
public:
voidanswer()
{
intk=0,count=0,sum=0;
charthisman;
for(k=0;k<=3;k++)
{
thisman='A'+k;
sum=(thisman!
='A')+(thisman=='C')+(thisman=='D')+(thisman!
='D');
if(sum==3)
{
printf("中奖者为:
%c\n",thisman);
count++;
}
}
if(count==0)
printf("无解!
\n");
else
printf("共有:
%d种符合条件的情况!
\n",count);
}
};
voidmain()
{
Findit;
it.answer();
}
//四人中有一人中了奖,小李问这四人时,答复如下:
//A:
不是我
//B:
是C
//C:
是D
//D:
C胡说
//其中三人说的是真话,一人说假话,试根据这些信息找出中奖者
#include
classFind
{
public:
voidanswer()
{
intk=0,count=0,sum=0;
charthisman;
for(k=0;k<=3;k++)
{
thisman='A'+k;
sum=(thisman!
='A')+(thisman=='C')+(thisman=='D')+(thisman!
='D');
if(sum==3)
{
printf("中奖者为:
%c\n",thisman);
count++;
}
}
if(count==0)
printf("无解!
\n");
else
printf("共有:
%d种符合条件的情况!
\n",count);
}
Find()
{
printf("--------------欢送使用--------------\n");
}
};
voidmain()
{
Findit;
it.answer();
}
1.//C++程序的根本结构
#include
voidmain()
{
doubler,area;
cout<<"输入圆半径:
";
cin>>r;
area=PI*r*r;
cout<<"圆面积为:
"<
}
2.//结构体例如
#include
structstu_score
{
charname[12];
charNO[9];
floatscore[3];
}stuone={"李明","21020501",{80,85,85}};
voidmain()
{
doubleaver;
aver=(stuone.score[0]+stuone.score[1]+stuone.score[2])/3;
cout<<"平均成绩为:
"< } 3.算术运算符: 加〔+〕、减〔-〕、乘〔*〕、除〔/〕、模运算符〔%〕 4.赋值运算符: ◆简单赋值: = ◆复合算术赋值: +=、-=、*=、/=、%= 5.关系运算符: >、<、=、>=、<=、! = 6.自增〔++〕自减〔--〕运算符 7.逻辑运算符: 与〔&&〕、或〔||〕、非〔! 〕 ◆按位与〔&〕 ◆按位或〔|〕 ◆按位异或〔^〕 ◆取反〔~〕 ◆左移〔<<〕 ◆右移〔>>〕 8.符合位运算符赋值: &=、|=、^=、>>=、<<= 9.sizeof运算符 10.逗号运算符 11.内存管理运算符: ◆new: double*p; p=newdouble; int*p; p=newint(40);//开辟60个int型内存单元 ◆delete: deletep; 12.//带默认参数值的函数 #include voiddisplay(inta,intb=2,intc=3) { cout<<"a="< } voidmain() { display (1); display(1,5); display(1,5,7); } 13.//函数重载 #include intsum(inta,intb) { returna+b; } intsum(inta,intb,intc) { returna+b+c; } doublesum(doublea,doubleb) { returna+b; } doublesum(doublea,doubleb,doublec) { returna+b+c; } voidmain() { cout< cout< cout< cout< } 14.//函数参数的指针传递 #include voidswap(int*x,int*y) { inttemp; temp=*x; *x=*y; *y=temp; } voidmain() { inta(10),b(100); cout<<"交换前: "< swap(&a,&b); cout<<"交换后: "< } 15.//函数参数的引用传递〔引用实质是已定义变量的别名〕 #include voidswap(int&x,int&y) { inttemp; temp=x; x=y; y=temp; } voidmain() { inta(10),b(100); cout<<"交换前:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计