面向对象与面向过程有什么本质区别?_面相对象与面相过程

以前不敢面对她,后来听说她闪婚了,他说是有对象了,还说给我一次机会,后来她说不是你朋友替你说好话?
他的意思可能是想和你和解了所以才绕了这么大的一个圈子说是你朋友的问题,这种事情自己要做决定了!


面向对象和面向过程的区别
面向过程分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为 。
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果 。把上面每个步骤用分别的函数来实现,问题就解决了 。
而面向对象的设计则是从另外的思路来解决问题 。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等 。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定 。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤 。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化 。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一 。
功能上的统一保证了面向对象设计的可扩展性 。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整 。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的 。
再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写 。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了 。)而下棋的大致步骤从面向对象的角度来看没有任何变化 。
当然,要达到改动只是局部的需要设计的人有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性 。
面向对象与面向过程有什么本质区别?
【面向对象与面向过程有什么本质区别?_面相对象与面相过程】蛋炒饭制作的细节,我清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀 。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝 。
蛋炒饭的好处就是入味均匀,吃起来香 。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了 。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了 。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香 。
到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长 。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费 。
盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性 。饭不满意就换饭,菜不满意换菜 。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低 。蛋炒饭将“蛋”“饭”搅和在一起,想换“蛋”“饭”中任何一种都很困难,耦合度很高,以至于“可维护性”比较差 。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性 。面向对象的好处之一就是显著的改善了软件系统的可维护性 。
面向过程(OP)和面向对象(OO)是不是就是指编码的两种方式呢?不是!你拿到了一个用户需求,比如有人要找你编个软件,你是不是需要经过需求分析,然后进行总体/详细设计,最后编码,才能最终写出软件,交付给用户 。这个过程是符合人类基本行为方式的:先想做什么,再想如何去做,最后才是做事情 。有的同学说:“我没按照你说的步骤做啊,我是直接编码的” 。其实,你一定会经历了这三个阶段,只不过你潜意识里没有分得那么清楚 。对于拿到需求就编码的人,可能编着编着,又得倒回去重新琢磨,还是免不了这些过程,
以OO为例,对应于软件开发的过程,OO衍生出3个概念:OOA、OOD和OOP 。采用面向对象进行分析的方式称为OOA,采用面向对象进行设计的方式称为OOD,采用面向对象进行编码的方式称为OOP 。面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不同,最终导致了编码方式的不同 。

python为什么是面向对象的
Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,Python来说一切皆为对象 。正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写法也是可以的,Python并不做硬性的限制 。
Python的面向对象特征如下:
封装
面向对象程序设计中的术语对象(Object)基本上可以看做数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合 。传统意义上的“程序=数据结构 算法”被封装”掩盖“并简化为“程序=对象 消息” 。对象是类的实例,类的抽象则需要经过封装 。封装可以让调用者不用关心对象是如何构建的而直接进行使用 。
继承
类继承:
继承给人的直接感觉是这是一种复用代码的行为 。继承可以理解为它是以普通的类为基础建立专门的类对象,子类和它继承的父类是IS-A的关系 。
多重继承:
不同于C#,Python是支持多重类继承的(C#可继承自多个Interface,但最多继承自一个类) 。多重继承机制有时很好用,但是它容易让事情变得复杂 。
多态
多态意味着可以对不同的对象使用同样的操作,但它们可能会以多种形态呈现出结果 。在Python中,任何不知道对象到底是什么类型,但又需要对象做点什么的时候,都会用到多态 。方法是多态的,运算符也是多态的 。
相关推荐:《Python教程》以上就是小编分享的关于python为什么是面向对象的的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
面向过程和面相对象解题思路的区别是什么
面向过程好比说我要先画长方型的边 宽 定义长方型的特性 对边向等之类的 面向对象就是说 我通过调用你就可以得到一个长方形 至于它是怎么画的 我不用了解
面相对象的特征
面向对象的特征,正常情况下的话,肯定是要根据你的面相判断出来的