面向对象与面向过程的本质的区别

https://blog.csdn.net/jerry11112/article/details/79027834

如果你很想搞明白面向对象是什么,面向过程是什么,或者说二者之间的区别是什么,那么就花费一点时间来研读一下这篇博客,你一定会有很大的收获的!

一、面向对象与面向过程的区别

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

可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。

如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

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

上述的内容是从网上查到的,觉得这个例子非常的生动形象,我就写了下来,现在就应该理解了他俩的区别了吧,其实就是两句话,面向对象就是高度实物抽象化、面向过程就是自顶向下的编程!

二、面向对象的特点

在了解其特点之前,咱们先谈谈对象,对象就是现实世界存在的任何事务都可以称之为对象,有着自己独特的个性

这里写图片描述
属性用来描述具体某个对象的特征。比如小志身高180M,体重70KG,这里身高、体重都是属性。
面向对象的思想就是把一切都看成对象,而对象一般都由属性+方法组成!

属性属于对象静态的一面,用来形容对象的一些特性,方法属于对象动态的一面,咱们举一个例子,小明会跑,会说话,跑、说话这些行为就是对象的方法!所以为动态的一面, 我们把属性和方法称为这个对象的成员!

:具有同种属性的对象称为类,是个抽象的概念。比如“人”就是一类,期中有一些人名,比如小明、小红、小玲等等这些都是对象,类就相当于一个模具,他定义了它所包含的全体对象的公共特征和功能,对象就是类的一个实例化,小明就是人的一个实例化!我们在做程序的时候,经常要将一个变量实例化,就是这个原理!我们一般在做程序的时候一般都不用类名的,比如我们在叫小明的时候,不会喊“人,你干嘛呢!”而是说的是“小明,你在干嘛呢!”

面向对象有三大特性,分别是封装性、继承性和多态性,这里小编不给予太多的解释,因为在后边的博客会专门总结的!

三、面向过程与面向对象的优缺点

很多资料上全都是一群很难理解的理论知识,整的小编头都大了,后来发现了一个比较好的文章,写的真是太棒了,通俗易懂,想要不明白都难!

用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。

蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。

盖浇饭的好处就是”菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是”可维护性“比较好,”饭” 和”菜”的耦合度比较低。蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。
  
看了这篇文章,简单的总结一下!

面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展

面向对象


优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低





https://blog.csdn.net/jerry11112/article/details/79027834

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 向上转型初步01

1.编译器通过指针来访问成员变量,指针指向哪个对象就使用哪个对象的数据;编译器通过指针的类型来访问成员函数,指针属于哪个类的类型就使用哪个类的函数。 但是父类 函数如果变成虚函数,子类重写了这个函数, 那么现象…

虚函数和纯虚函数详解

https://mp.weixin.qq.com/s?__bizMzAxNzYzMTU0Ng&mid2651289202&idx1&sn431ffd1fae4823366a50b68aed2838d4&chksm80114627b766cf31f72018ef5f1fe29591e9f6f4bd72018e7aea849342ca6f0a271fb38465ae#rd 打开链接看。转载文章&#xff0c;注明出处 <p>学…

C++ 继承中的同名成员的情况01

class Base { public:Base(){this->m_A 100;}void func(){cout << "Base中的Func调用" << endl;}void func(int a){cout << "Base中的Func(int a)调用" << endl;}int m_A; }; class Son : public Base { public:Son(){this-&g…

进程前台运行后台运行的相关命令

command& 让进程在后台运行jobs 查看后台运行的进程fg %n 让后台运行的进程n到前台来bg %n 让进程n到后台去&#xff1b; ctrl z 可以将一个正在前台执行的命令放到后台&#xff0c;并且暂停

西安电子科技大学求职打点

这两天 一直在西安电子科技大学找工作&#xff0c;感觉自己渐渐失去了学习的状态&#xff0c;本来很 多会的知识点都已经不会了。   今天休息一天&#xff0c;没有去招聘会&#xff0c;看了看相关的知识&#xff0c;做了做题。也希望自己尽快恢复学习的感觉&#xff0c;温故…

C++ 泛型编程模板 之 函数模板初步01

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;void mySwapInt(int &a, int &b) {int temp a;a b;b temp; } void mySwapDouble(double &a, double &b) {double temp a;a b;b temp; } //利用模板实现通用交换函数 temp…

grep参数说明及常用用法

grep参数说明及常用用法 查看文件内容 [koulocalhost ~]$ more size.txt b124230 b034325 a081016 m7187998 m7282064 a022021 a061048 m9324822 b103303 a013386 b044525 m8987131 B081016 M45678 B103303 BADc2345 [] : 查看符合范围内的信息 [koulocalho…

C++ 普通函数与函数模板 区别以及调用规则01

//普通函数 和 函数模板 区别 int myPlus(int a, int b) {return a b; }template<class T> T myPlus2(T a, T b) {return a b; }void test01() {int a 10;int b 20;char c c;cout << myPlus(a, c) << endl; //隐式类型转换 将 char c转为 int类型//myP…

C++ 模板的局限性以及解决01

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include <string>class Person { public:Person(string name, int age){this->m_Name name;this->m_Age age;}string m_Name;int m_Age; };//通过模板进行两个数据比较 templat…

进程的状态与种类

● 运行&#xff1a;正占用处理器   ● 就绪&#xff1a;只要获得处理器即可运行。   ● 阻塞&#xff1a;正等待某个事件&#xff08;如I/O完成&#xff09;的发生。  在不少系统中&#xff0c;还增加了两种基本状态&#xff1a;   ● 新状态&#xff1a;一个进程刚刚…

C++ 类模板语法初步01

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include <string> //类模板 //template下面紧跟着的内容是类&#xff0c;那么这个类称为 类模板 // 类模板中的类型 也可以有默认参数 // 泛型编程 类型参数化template<class NAM…

int * p =NULL;和*p =NULL的区别a和a的区别

1.int * p NULL;和*p NULL的区别 1 .int * p NULL int *pNULL&#xff1b;定义一个指针变量p&#xff0c;其指向的内存里面保存的是int类型的数据&#xff1b;再定义变量p的同时把p的值设置为0x00000000&#xff0c; 而不是把*p的值设置为0x00000000 2.*p NULL int i 10&am…

当我们说TCP是可靠协议时,我们真正表达的是什么

转载出处&#xff1a;https://blog.csdn.net/dog250/article/details/82177299 很明确地说&#xff0c;从通信意义上推敲&#xff0c;TCP一点都不可靠。一个抽象的协议&#xff0c;怎么可能左右介质来保证可靠&#xff0c;不存在的。但凡是经由某种介质的通信行为均不可能是绝对…

IP地址=192.168.127.101,子网掩码255.255.255.192,计算网络地址,主机号,广播地址和主机最大数

纯手写&#xff0c;如果哪写错了&#xff0c;还希望指正 IP地址192.168.127.101&#xff0c;子网掩码255.255.255.192&#xff0c;计算网络地址&#xff0c;主机号&#xff0c;广播地址和主机最大数 255.255.255.192子网掩码转换成二进制为 11111111.11111111.11111111.11000…

C++ 类模板遇到继承的问题以及解决

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;template<class T> class Base {T m_A; //子类创建时候 必须要知道T的类型&#xff0c;才能给父类中的m_A分配内存 };template<class T1 , class T2> class Son :public Base<T2…

A B C类IP地址的判断

IP地址131.153.12.71是一个&#xff08;&#xff09;类IP地址。 IP地址分类A类网络的IP地址范围为1.0.0.1&#xff0d;127.255.255.254&#xff1b; B类网络的IP地址范围为&#xff1a;128.1.0.1&#xff0d;191.255.255.254&#xff1b; C类网络的IP地址范围为&#xff1a;1…

linux sshd启动失败 sshd re-exec requires execution with an absolute path

sshd 提示 sshd re-exec requires execution with an absolute path提示 需要绝对路径来执行 sshd&#xff0c; 刚开始学 不知道怎么用绝对路径来启动&#xff1f; 以后明白了&#xff0c; 这里再补充上 google 使用 service sshd restart 输入密码来启动

有一个小白程序员,写了一个只能对5个数字进行排序的函数,现在有25个不重复的数字,

题目&#xff1a;有一个小白程序员&#xff0c;写了一个只能对5个数字进行排序的函数&#xff0c;现在有25个不重复的数字&#xff0c;请问小白同学最少调用几次该函数&#xff0c;可以找出其中最大的三个数&#xff1f; A.5 B.6 C.7 D.8 答案&#xff1a;C 解析&#xf…

ubuntu修改ls显示目录的颜色

ls查看目录&#xff0c; 背景是黑色的&#xff0c;目录颜色是深蓝色&#xff0c;基本看不清楚。 解决办法 因为ubuntu下的/etc/目录里没有DIR_COLORS, 所以费了点劲儿。 2. 利用dircolors命令&#xff0c;查看我们的系统当前的文件名称显示颜色的值&#xff0c;然后利用管道重…

初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为

初始序列为1 8 6 2 5 4 7 3一组数采用堆排序&#xff0c;当建堆&#xff08;小根堆&#xff09;完毕时&#xff0c;堆所对应的二叉树中序遍历序列为&#xff1a;&#xff08;&#xff09; 8 3 2 5 1 6 4 7 3 2 8 5 1 4 6 7 3 8 2 5 1 6 7 4 8 2 3 5 1 4 7 6 A