python基础四_01_面向对象

python基础四_01_面向对象编程

导读:
本文主要从what?why?how?三个方向理解面向对象编程的思想;仅供自己梳理。

一、什么是面向对象编程?

面向对象编程与面向过程编程是两种常见的编程思想。先通过引子来看下:

引子1:

    话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片。
眼看就要灭了东吴,统一天下,曹操大悦,于是大宴众文武。在酒席间,曹操诗性大发,
不觉吟道:"喝酒唱歌,人生真爽..."。众文武齐呼:”丞相好诗!“于是命印刷工匠刻版印刷
,以便流传天下。
    版样给曹操一看,曹操感觉不妥,说道”喝与唱,此话过俗,应改为‘对酒当歌’较好!
于是命工匠重新雕刻。那时候,还没发明活字印刷术,如果样板要改,只能重头雕刻。
工匠眼看连夜刻版之工,彻底白费,心中叫苦不迭。只得照办。
    版样再次出来请曹操过目,曹操细细一品,觉得还是不好,说“人生真爽太过直接,
应该改问语才够意境,因此应改为‘对酒当歌,人生几何?’”,于是....
    在活字印刷术还没出现之前,如果版样有改动,只能重新雕刻(这个就相当于面向过程)。
而且在印刷完成后,这个样板就失去了它的价值,如果需要其他样板只能重新雕刻。而活字印刷
术的出现就大大改善了印刷技术。如上例”喝酒唱歌,人生真爽“,如果用活字印刷,只需要改四
个字就可,其余工作都未白做。岂不快哉!!

    活字印刷也反应了面向对象(OOP)。当要改动时,只需要改要改的地方,此为可维护;
当这些字用完后,并非就完全没有价值了,它完全可以在后来的印刷中重复使用,此乃可复用;
下次诗若要加字,只需另刻字加入即可,这就是可扩展;字的排列可以横排,也可以竖排,
此是灵活性好。

引子2:

假如我们要做一个五子棋游戏,从两种设计思路来分析一下。

面向过程的设计思路:
面向过程的设计思路就是首先分析问题的步骤:
1、开始游戏,
2、黑子先走,
3、绘制画面,
4、判断输赢,
5、轮到白子,
6、绘制画面,
7、判断输赢,
8、返回步骤2,
9、输出最后结果。
把上面9个步骤用不同的方法来实现。
面向对象的设计思想
面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为三个部分。
1、黑白双方,这两方的行为是一模一样的,
2、棋盘系统,负责绘制画面,
3、规则系统,负责判定诸如犯规、输赢等。
第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

通过以上两个引子,我们已经对面向过程和面向对象有了初步的了解。

二、为什么要面向对象编程?

1.面向过程与面向对象的编程思维对比:

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
面向对象是模型化的,结构化的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

2.面向过程与面向对象的优缺点对比:

(1).面向过程:

优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.

(2).面向对象:

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

三、怎样面向对象编程?

1.面向对象的哲学

万物皆对象

类是对象的模板,对象是类的实例化。

2.相关概念和词汇

面向对象有些概念不搞明白含义,我们就无法进行编程。比如:类,对象,属性,方法,实例和实例化,父类,子类等等。这些都是啥意思?

(1).类是具有相同或相似性质的对象的抽象。如:人类,狗类,车类,枪类,鱼类,水果类,美食类,艺术类等等。它们都有相似的性质,但是它们是抽象的,并不是客观存在的,比如:你能拿出来一水果叫‘水果’吗?当然不能,因为‘水果’是一个抽象的概念,并不是某个具体的水果。同样,人类也是一样的道理。所以说类是对象的模板。
(2).‘人类’是‘黄种人类’的父类,‘黄种人类’是‘人类’的子类。
(3).对象是类的具体化。比如:‘张三’这个实例就是从‘人类’这个类中实例化出来的一个对象。
(4).属性描述了对象的状态。如:年龄。
(5).方法描述了对象的行为。如:吃饭。

我们通过下面的例子来看下:

# 类
人类---------------------------------------父类
黄种人类-----------------------------------子类
# 对象
张三---------------------------------------对象(实例)
# 属性
性别,年龄,身高----------------------------公有属性(所有人类都有的属性)
备胎---------------------------------------私有属性(备胎属性是张三的私有属性)
# 方法
走路,吃饭,说话,睡觉----------------------公有方法(人类都有的方法)
舔狗---------------------------------------私有方法(舔狗技能是张三的私有技能)

3.python面向对象编程简单实战

# 创建一个猫类:Cat
class Cat:
    # 定义一个猫叫的方法:call
    def call(self):
        print('喵喵喵~~~')

# 通过Cat类,实例化一个tom对象
tom = Cat()
# 猫叫:tom猫调用call方法
tom.call()

四、总结

1.通过以上对oop简单了解。

2.oop面向对象编程是一种思想,思维的转变很重要。

你可能感兴趣的:(python基础,python,面向对象,面向过程,类,对象)