面向过程的设计方法
重点: 围绕着问题的解决过程分析问题。如何实现的细节和过程,
将数据与函数分开。
形式:
主模块+若干个子模块(main()+子函数)。
特点:
自顶向下,逐步求精——功能分解。
缺点:
效率低,程序的可重用性差。
什么是面向对象
面向对象(Object Oriented, OO)的程序设计的思路和人们日
常生活中处理问题的思路是相似的。在自然世界和社会生活
中,一个复杂的事物总是由许多部分组成的。
当人们生产汽车时,分别设计和制造发动机、底盘、车身和轮子,最
后把它们组装在一起。在组装时,各部分之间有一定的联系,以便协
调工作。
面向对象的程序设计的基本思路:使用现实世界的概念抽象
地思考问题从而自然地解决问题。
现实世界是有各种实体组成。如一个学校,有学生、教师、各种教学辅
助设施等等不同的实体组成
实体之间通过消息传递(教师学生布置作业即是发送了消息,)进行沟
通交流,相互协作完成某项任务
对象(Object)
对象是人们要进行研究的任何事物,是现实世界中的一个实体。
例如学生就是一个对象。任何对象都拥有一组数据和操作。对象所拥有的数据称为对象的属性。在现实世界中,对象都具有一定的行为,比如,学生要上课、下课、写作业等等。
对象实现了数据和操作的封装
类(Class)
类是对象的抽象。
相同特征的一组对象进行抽象形成了类。
比如,可以对不同的学生个体进行抽象,形成学生类。本质上讲,类也是一种数据类型,是由程序员根据处理问题的需要自己创建的一种数据类型,即用户自定义的数据类型,而一个具体的对象可以视为属于这一数据类型的一个变量。任何一个对象都是通过类的实例化之后得到的。
数据封装(Data Encapsulation)
把数据和对数据的操作相结合,将它们视为一个单独的单元(称
为类)的行为称为封装。在类中,被封装的数据不能被外界直接访问,只能被封装在同一
个类中的函数访问。这些函数提供了对象数据和程序之间的接口。避免数据被程序直接访问的概念被称为信息隐藏。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。数据封装是类的最典型特点。
继承(Inheritance)
继承是可以让某个类型的对象获得另一个类型的对象的属性的一种技术。继承的概念支持代码的重用性(reusability)派生是C++中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进行更具体的说明。实现:声明派生类
多态性(Polymorphism)
不同的对象,对同一消息的不同响应。如:加法操作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。目的:达到行为标识统一,减少程序中标识符的个数。实现:重载函数https://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html和虚函数(暂时不了解)
消息传递(Message passing)
一个面向对象的程序由许多对象组成,对象之间通过收发信息相互沟通,消息就是请求执行某个过程,消息的接收对象会调用一个函数(过程),以产生预期的结果。
面向对象程序设计
面向对象程序设计的核心任务是:
类的确定和对象的创建,而不是将各个具体的对象逐一进行描述。
忽略各具体对象的非本质特征,抽象出本质特征与共性,然后形成类的概念,对象是类的实例。
面向对象程序设计”的好处有以下几条
1.写程序不再是从计算机的角度考虑问题了,而是站在
人类思维的角度。
2.程序的可扩展性要比其他不是面向对象的程序设计语言好。
3.能最大限度保护已有程序代码
面向对象的方法
面向对象的方法
目的:
实现软件设计的产业化。
观点:
自然界是由实体(对象)所组成。
程序设计方法:
使用面向对象的观点来描述模仿并处理现实问题。
要求:
高度概括、分类、和抽象
抽象
抽象是对具体对象(问题)进行概括,抽出这一
类对象的公共性质并加以描述的过程。
先注意问题的本质及描述,其次是实现过程或细节。
数据抽象:描述某类对象的属性或状态(对象相互区
别的物理量)。
代码抽象:描述某类对象的共有的行为特征或具有的
功能。
抽象的实现:通过类的声明。
类和对象的定义与访问
1、类的定义
类型(type)是一个概念的具体表示。依照OO的理念:如果不
能用内置类型表达一个概念,则我们设计一个新类型去表达
一个概念。
任何一个数据类型都封装两方面的信息:
数据
操作
一个简单的类
Student 类
该类对象所共有的属性
姓名,学号,专业,年级,数学成绩,英语成绩…
该类对象的操作
转专业
跳级/留级
输出每个对象的信息
修改每个对象的信息
等等
利用学生类可以构造一个学生对象
C++类的声明形式
类是一种用户自定义类型,声明形式:
class 类名称
{
public:
公有成员(外部接口)
private:
私有成员
protected:
保护型成员
} ;
类定义必须以分号“;”结束
类的任何成员都必须指定访问属性。一般
将数据成员定义为私有成员或保护成员,
将成员函数定义为公有成员。
c++ 中为什么要定义public, protect, private 三种访问权限?
对于类的成员来说,
有些需要给外面看的,也就是对外接口,那么就是public,如果没有
,那么我们做的工作将是毫无意义的,(别人没法用)。
如果不想让别人知道内部的实现细节,那么就是private,如:
public:
count()
{ mycount();}
private:
mycount();
这样,count是对外的接口,而实现的时候,我们不想让外面知道怎么
实现的,就用private,防止它用mycount。 如果不想让别人知道,想让自己的孩子什么的知道(这里涉及到继
承),那么就可以作为protected
这样,private是自己私有的,protected是可以让孩子知道的,public是
公开的!
三种访问控制的特点
private:只能由
1.该类中的函数、
2.其友元函数访问。
不能被任何其他访问,该类的对象也不能访问。
protected:可以被
1.该类中的函数、
2.派生类的函数、以及
3.其友元函数访问。
但不能被该类的对象访问。
public:可以被
1.该类中的函数、
2.派生类的函数、
3.其友元函数访问,也可以由
4.该类的对象访问。
注:
友元函数包括3种:
设为友元的普通的非成员函数;
设为友元的其他类的成员函数;
设为友元类中的所有成员函数。
钟表类
class Clock
{
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
private:
int Hour, Minute, Second;
};
如果紧跟在类名称的后面声明私有成员,则关键字private可以省略:
class Clock
{
int Hour,Minute,Second;
public: