面向对象

面向过程

1. 知识点介绍

C语言编程是典型的面向过程编程,它遵循”从上往下”的程序设计思路:

  • 提出问题,分析问题的处理流程
  • 将大问题分解成小问题,复杂问题继续分解为更小的问题
  • 解决一个个小问题来最终解决大问题
  • 这种从问题出发,一步一步解决问题的开发思路称为面向过程的设计思想

面向过程编程专注于解决问题中的各个过程,符合人们习惯的解决问题方法(做好这一步,再做下一步,直到完成所有步骤)。

2. 用面向过程的方式解决问题的思路

程序结构简单,仅由三种基本结构组成:

  • 顺序结构:按照语句顺序依次执行
  • 选择结构:根据条件判断执行不同分支
  • 循环结构:重复执行某段代码直到条件满足

这三种基本结构可以解决任何问题,因此面向过程编程更注重逻辑学习,而非记忆大量语法。

3. 优缺点

优点

  • 把大问题分解为小问题解决,使问题简单化
  • 自上往下,一步一步完善,先从整体角度看待问题
  • 对整个程序的逻辑结构清晰明了
  • 适合解决小型项目和简单逻辑

缺点

  • 数据和操作往往分离,数据结构改变时需重写操作函数
  • 数据封装性差,变量容易被篡改
  • 多人协作开发时易出现标识符重名等问题
  • 大型项目和复杂系统开发中难以维护和扩展

面向对象

1. 知识点介绍

面向对象的程序设计是面向过程的继承和发展,是对现实世界的抽象和描述。

核心思想:现实世界是由对象组成的,无论大小。万物皆对象。

对象在程序中抽象为两个部分:

  1. 描述对象的状态或者属性的数据(变量)
  2. 描述对象的行为或者功能的方法(函数)

2. 用面向对象的方式解决问题的思路

选择实体

根据问题的需要,选择问题所对应现实世界中的实体

提取属性和功能

从实体中找到解决问题的相关属性和功能,形成概念中的类

定义类

用计算机语言描述概念中的类,实现该类的定义

创建对象解决问题

通过该类创建对象来解决实际问题

3. 面向对象的特点

面向对象编程具有三大核心特性:

  • 封装:将属性(数据)私有化,提供公有的方法(行为)访问私有属性,提高程序的维护性。
  • 继承:在原有对象基础上快速产生新对象,新对象保留原有对象特性,实现代码复用。
  • 多态:同一个接口,使用不同的实例执行不同的操作,是面向对象思想的核心。

面向对象编程的优势:

  • 将数据和行为结合在一起,共同表达一个实体
  • 问题被分解为一个个对象,修改或扩展某对象不会影响其他对象
  • 代码维护方便、可扩展性好、支持代码重用

4. 高内聚低耦合

利用面向对象思想的封装、继承和多态,可以设计出”高内聚、低耦合”的程序结构,使程序更加灵活、更容易扩展。

高内聚:一个软件模块由相关性很强的代码组成,只负责某单一任务,即”单一责任原则”。

低耦合:模块与模块之间尽可能保持相互独立,接口尽可能少而简单,减少相互依赖。

注意:面向对象并非完全取代面向过程,在面向对象中设计类和组织逻辑时仍然会用到面向过程的方式。

类和对象

1. 知识点介绍

类是什么?
类是一种用户自定义数据类型,可以看作是C语言中结构体的升级版。类由数据和功能构成,即将变量和函数绑定在一起。

对象是什么?
通过类这种类型定义出来的变量称之为对象。

程序员从面向过程的执行者转换成了面向对象的指挥者。

2. 类的定义

类的基本定义格式如下:

class CStudent
{
private:
int id;
char name[20];
public:
void fun()
{
cout<<"这个是类中的函数"<

3. 对象的定义

通过类创建对象的方式:

// 类名 对象名;
CStudent stu;

4. 对象成员的访问

访问对象成员有两种方式:

1. 通过 “.” 访问

stu.fun();

2. 通过 “->” 访问(指针方式)

CStudent* pStu = new CStudent;
pStu->fun();

不论是类中的变量或者函数都可以用以上两种方式访问。

5. 类成员的访问属性

访问属性修饰关键字

  • public 公有属性:类外和类中都可以被直接访问,类外通过对象访问
  • protected 保护属性:类中及派生类中可以被直接访问,类外需要通过接口
  • private 私有属性:只有在类中才能被访问,类外需要通过接口访问

属性说明

  • 类中如果有成员没有被访问属性修饰,默认是私有属性
  • 访问属性的修饰范围:从当前关键字开始到下一个关键字或类结束
  • 访问属性关键字可以在类中任意位置出现任意次数(不能写在函数里面)
  • 类外访问私有或保护成员,需要通过类中提供的公有接口

访问示例

CStudent stu;
stu.id; // 报错,不可以访问类中私有成员
stu.fun(); // 正确,访问公有成员函数

6. 结构体和类的区别

  • 在C++中,结构体是默认公有属性的类,类是默认私有属性的结构体
  • 在C中,结构体里面只能定义变量,不能写函数;在C++中,结构体除了默认属性不同外,其他与类一样,可以定义函数和使用访问属性

上一篇
下一篇