没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
06 | 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时
了吗?
2019-11-15 王争
设计模式之美
进入课程
讲述:冯永吉
时长 17:54 大小 16.40M
在上两节课中,我们讲了面向对象这种现在非常流行的编程范式,或者说编程风格。实际
上,除了面向对象之外,被大家熟知的编程范式还有另外两种,面向过程编程和函数式编
程。面向过程这种编程范式随着面向对象的出现,已经慢慢退出了舞台,而函数式编程目前
还没有被广泛接受。
在专栏中,我不会对函数式编程做讲解,但我会花两节课的时间,讲一下面向过程这种编程
范式。你可能会问,既然面向对象已经成为主流的编程范式,而面向过程已经不那么推荐使
用,那为什么又要浪费时间讲它呢?
下载APP
那是因为在过往的工作中,我发现很多人搞不清楚面向对象和面向过程的区别,总以为使用
面向对象编程语言来做开发,就是在进行面向对象编程了。而实际上,他们只是在用面向对
象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于
手握一把屠龙刀,却只是把它当作一把普通的刀剑来用,相当可惜。
所以,我打算详细对比一下面向过程和面向对象这两种编程范式,带你一块搞清楚下面这几
个问题(前三个问题我今天讲解,后三个问题我放到下一节课中讲解):
话不多说,带着这几个问题,我们就正式开始今天的学习吧!
什么是面向过程编程与面向过程编程语言?
如果你是一名比较资深的程序员,最开始学习编程的时候,接触的是 Basic、Pascal、C 等
面向过程的编程语言,那你对这两个概念肯定不陌生。但如果你是新生代的程序员,一开始
学编程的时候,接触的就是面向对象编程语言,那你对这两个概念可能会比较不熟悉。所
以,在对比面向对象与面向过程优劣之前,我们先把面向过程编程和面向过程编程语言这两
个概念搞清楚。
实际上,我们可以对比着面向对象编程和面向对象编程语言这两个概念,来理解面向过程编
程和面向过程编程语言。还记得我们之前是如何定义面向对象编程和面向对象编程语言的
吗?让我们一块再来回顾一下。
什么是面向过程编程与面向过程编程语言?1.
面向对象编程相比面向过程编程有哪些优势?2.
为什么说面向对象编程语言比面向过程编程语言更高级?3.
有哪些看似是面向对象实际是面向过程风格的代码?4.
在面向对象编程中,为什么容易写出面向过程风格的代码?5.
面向过程编程和面向过程编程语言就真的无用武之地了吗?6.
面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并
将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。
面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面
向对象编程四大特性(封装、抽象、继承、多态)的编程语言。
类比面向对象编程与面向对象编程语言的定义,对于面向过程编程和面向过程编程语言这两
个概念,我给出下面这样的定义。
不过,这里我必须声明一下,就像我们在之前讲到的,面向对象编程和面向对象编程语言并
没有官方的定义一样,这里我给出的面向过程编程和面向过程编程语言的定义,也并不是严
格的官方定义。之所以要给出这样的定义,只是为了跟面向对象编程及面向对象编程语言做
个对比,以方便你理解它们的区别。
定义不是很严格,也比较抽象,所以,我再用一个例子进一步解释一下。假设我们有一个记
录了用户信息的文本文件 users.txt,每行文本的格式是 name&age&gender(比如,小
王 &28& 男)。我们希望写一个程序,从 users.txt 文件中逐行读取用户信息,然后格式
化成 name\tage\tgender(其中,\t 是分隔符)这种文本格式,并且按照 age 从小到达
排序之后,重新写入到另一个文本文件 formatted_users.txt 中。针对这样一个小程序的开
发,我们一块来看看,用面向过程和面向对象两种编程风格,编写出来的代码有什么不同。
首先,我们先来看,用面向过程这种编程风格写出来的代码是什么样子的。注意,下面的代
码是用 C 语言这种面向过程的编程语言来编写的。
面向过程编程也是一种编程范式或编程风格。它以过程(可以为理解方法、函数、操
作)作为组织代码的基本单元,以数据(可以理解为成员变量、属性)与方法相分离为
最主要的特点。面向过程风格是一种流程化的编程风格,通过拼接一组顺序执行的方法
来操作数据完成一项功能。
面向过程编程语言首先是一种编程语言。它最大的特点是不支持类和对象两个语法概
念,不支持丰富的面向对象编程特性(比如继承、多态、封装),仅支持面向过程编
程。
复制代码
1
2
3
4
5
6
7
8
9
10
11
struct User {
char name[64];
int age;
char gender[16];
};
struct User parse_to_user(char* text) {
// 将 text(“小王 &28& 男”) 解析成结构体 struct User
}
char* format_to_text(struct User user) {
剩余14页未读,继续阅读
蟹蛛
- 粉丝: 22
- 资源: 323
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0