浅解 面向对象(OOP)

python是一门基于面向过程基础之上的面向对象(OOP)的编程语言。
面向对象具有最基本的3个特征:封装、继承、多态

封装:我们家里都有电视机,从开机,浏览节目,换台到关机,我们不需要知道电视机里面的具体细节,只需要在用的时候按下遥控器就可以完成操作,这就是功能的封装。在用支付宝进行付款的时候,只需要在用的时候把二唯码给收款方或是扫一下收款方提供的二唯码就可以完成支付,不需要知道支付宝的支付接口,以及后台的处理数据的能力,这就是方法的封装。这是生活意义层面的封装,但是深究的话,也是用过编码的封装实现的属性和方法的封装,留下简单的接口,使得使用者不用明白其中原理,只要根据接口的调用,就可以实现自己需要的功能。

第一层面的封装

创建类和对象时,分别创建两者的名称空间。只能通过类名加“.”或者obj.的方式访问里面的名字。

第二层面的封装

类中把某些属性和方法隐藏起来,或者定义为私有,只在类的内部使用,在类的外部无法访问,或者留下少量的接口(函数)供外部访问。

继承:从人类遗传来说,父母亲拥有的基本属性(比如高矮情况、肤质、体型、头发的稀疏程度等)都会从本质上对子女的属性有遗传上的决定性作用。生长在家庭中的孩子,基本上也会学习父母亲具有的技能和行为,比如学习父亲的下象棋,学习母亲的弹钢琴技艺。尤其是在古代,子承父业是最常见的,这就像是面向对象中的继承,由父类的的属性和方法,一旦子类继承之后,就会拥有相同的属性和方法。它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

多态:其实继承和多态是相辅相成,应该拿来一同讲的。还是从人类繁衍入手,孩子继承了父母亲的基本属性和行为,但是孩子自身会根据需要和环境,产生变化,有了不一样的发展。比如孩子学会了母亲的烹饪技术,母亲最擅长的是一道香甜口味的可乐鸡翅,但是大儿子在钻研的基础之上,进行了变革,研究出了自己的一道柠檬蜜汁鸡翅,虽然最开始的技术是来源于父母,但是最终展现的结果是不一样的。二儿子最开始也学会了母亲的做饭手艺,但是后来自己研究,发现自己却喜欢做香辣口味的川菜,后来也就是一心研究感兴趣的川菜口味。在面向对象编程中,父类具有的方法,子类可以全部继承,但是在继承的基础上,子类可以通过重写或者是增添自己的特色,从而改变原有的情况。比如作为父类的汽车具有行驶的方法,其子类suv汽车也具有,但是在此基础之上,suv新增了更强的山地、坡地行驶的性能,并且suv自身的属性也有了改变和丰富。所以即使是同样的行驶方法,各个类来调用的结果是不一样的。
通过的多态使用, 不同的 子类对象调用 相同的 父类方法,产生 不同的 执行结果,可以增加代码的外部 调用灵活度。同时,多态以 继承 和 重写 父类方法 为前提。多态是调用方法的技巧,不会影响到类的内部设计。

总结来讲,面向对象可以提高代码的重用性,降低内部的耦合度,提高开发的效率。

附加:
面向过程与面向对象编程的区别 –引自 TerryChou 的博客
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值