《C++ 开发从入门到精通》——2.6 技术解惑

简介:

2.6 技术解惑

2.6.1 C++是面向对象,C是面向过程,那么这个对象和过程是什么意思呢

面向对象指的是把属性和方法封装成类,实例化对象后,要完成某个操作时,直接调用类里面相应的方法。面向过程则不进行封装,要完成什么功能需要详细地把算法写出来。举个例子来说,我要完成买东西这个任务,面向对象的实现方法就是,先对手下的人进行指导,教他们怎么去买(相当于定义类的属性和方法),以后要让他们买东西,只要喊“张三(或者李四,相当于实例化对象),你用上次我教你的方法去买个东西”,这样就可以了。而面向过程的方法则不进行指导,每次要去买东西,都找张三过来,再教他怎么去买,但是下次再喊他去买,又要重新教一次。

2.6.2 面向对象和面向过程的区别

C语言是一门面向过程的语言,C++是一门面向对象的语言。究竟面向对象和面向过程有什么区别呢?面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

例如开发一个五子棋游戏,使用面向过程的设计思路的步骤如下。

① 开始游戏。

② 黑子先走。

③ 绘制画面。

④ 判断输赢。

⑤ 轮到白子。

⑥ 绘制画面。

⑦ 判断输赢。

⑧ 返回步骤②。

⑨ 输出最后结果。

把上面每个步骤用各自的函数来实现,问题就解决了。而面向对象的设计则是从另外的思路来解决问题的,开发整个五子棋游戏的基本过程如下。

① 设计黑白双方,这两方的行为是一模一样的。

② 设计棋盘系统,负责绘制画面。

③ 开发规则系统,负责判定诸如犯规、输赢等。

上述3个过程分别代表3个对象,其中第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

由此可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了诸多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

功能上的统一保证了面向对象设计的可扩展性,比如要加入“悔棋”这一功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的顺序都要进行大规模调整。如果是面向对象的话,只改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

再比如,要把这个五子棋游戏改为围棋游戏,如果使用的是面向过程设计,那么五子棋的规则就分布在了程序的每一个角落,要改动还不如重写。但是如果一开始就使用了面向对象的设计,那么只改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?而下棋的大致步骤从面向对象的角度来看没有任何变化。

当然,要达到“改动只是局部的”,需要设计者有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性。

2.6.3 学好C++的建议

(1)学得要深入,基础要扎实

基础的作用不必多说,在大学课堂上老师曾经讲过很多次了,在此重点说明“深入”。职场不是学校,企业要求你能高效完成项目功能,但是现实中的项目种类繁多,我们需要掌握C++技术的精髓。走马观花式的学习已经被社会所淘汰,入门水平不会被开发公司所接受,他们需要的是高手。

(2)恒心,演练,举一反三

学习编程的过程是枯燥的过程,我们需要将学习C++当成是自己的乐趣,只有做到持之以恒才能有机会学好。另外,编程最注重实践,最害怕闭门造车。每一个语法,每一个知识点,都要反复用实例来演练,这样才能加深对知识的理解。并且要做到举一反三,只有这样才能对知识深入理解。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接

相关文章
|
15天前
|
NoSQL API Redis
最佳实践|如何使用c++开发redis module
本文将试着总结Tair用c++开发redis module中遇到的一些问题并沉淀为最佳实践,希望对redis module的使用者和开发者带来一些帮助(部分最佳实践也适用于c和其他语言)。
76261 0
|
14天前
|
消息中间件 算法 Java
C++实时通信优化技术探究
C++实时通信优化技术探究
25 3
|
15天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
31 1
|
15天前
|
开发框架 Linux C++
Qt:强大的跨平台C++应用程序开发框架
Qt:强大的跨平台C++应用程序开发框架
44 3
|
15天前
|
C++ Python
C++教学——从入门到精通 10.循环
学习编程建议先Python后C++,以避免C++思维影响。课程涵盖for、while和do while循环。for循环示例:`for(int i=0;i<n;i++)`,用于计算114514天后的金币总数(1145140个)。死循环通过`for(int i=0;;i++)`实现,用`break`退出。while循环格式`while(条件)`,同样可解决金币问题。do while循环特点是先执行后判断,结构为`do{...}while(条件)`。
22 2
|
20天前
|
设计模式 存储 算法
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
|
20天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
20天前
|
存储 程序员 编译器
C++从入门到精通:3.4深入理解内存管理机制
C++从入门到精通:3.4深入理解内存管理机制
|
20天前
|
安全 Java 调度
C++从入门到精通:3.3多线程编程
C++从入门到精通:3.3多线程编程
|
20天前
|
安全 编译器 C++
C++从入门到精通:3.2异常处理——掌握C++的异常处理机制,提高程序健壮性
C++从入门到精通:3.2异常处理——掌握C++的异常处理机制,提高程序健壮性