自学Python-12 面向对象编程(一、概念篇)

自学Python-12 面向对象编程(一、概念篇)_第1张图片

如何理解面向对象编程

以下是来自百度百科的介绍:

面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。

我们尝试着来理解下这段晦涩难懂文字。这段文字核心就是“其本质…”这句话,后面的内容都是在介绍模板这个东东。我们把这句话拿出来:
其本质是以建立模型、体现出来的、抽象思维过程、和、面向对象的方法。
还是很难懂,先多读两遍。这句话其实就是说:面向对象编程通过建立一个模板,体现出了两样东西:抽象思维过程和面向对象的方法。
“建立模型…抽象思维…面向对象”,这是我对面向对象编程的一个概念上概括性的理解。


举个例子来通俗的理解一下
案例1:小明晚上想吃排骨米饭,于是他来到超市,先去卖肉那买了排骨,又去卖米那买了大米,最后回家路过菜市场还买了点白菜,晚上回到家又炖了排骨蒸了米饭,最后美美的吃了一顿。

案例2:小明后来找了一个会做饭的女朋友,这一天他又想吃排骨米饭了,这时候他喊女朋友做给他吃,女朋友看了一下冰箱后告诉小明家里的大米没了,小明正在打游戏,直接甩了一句"我不管,你自己看着弄,今晚我必须要吃",于是女朋友只好去买米然后回来做饭。后来小明想吃面、想吃水饺都只需要吩咐给女朋友做,自己只管吃。

其中案例1是面向过程的,案例2就是面向对象的。我们下面用代码分别实现下两个案例,但在那之前,有几个概念需要介绍一下:

1.类
用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
2.对象
通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
3.实例化
创建一个类的实例,类的具体对象。

类就是我们上面说的模型,简单来说就是把具有相同特征的事物归为一类,例如老虎狮子大象都是动物,香蕉苹果梨都是水果,你我他都是人类。类就是一组具有相同属性和行为的对象的抽象。类不是一个实例,例如我说有个人偷东西,你知道我说的是谁吗?我要说小明偷东西,你才知道,小明就是人类的实例,因此我们说对象是类的实例,而创建一个类实例的过程,就叫实例化

案例1实现:

# 以下方法命名很不规范,各位不要这样写
def paigu():
    print('买排骨')


def dami():
    print('买大米')


def dunpaigu():
    print('炖排骨')


def zhengmifan():
    print('蒸米饭')


def main():
    paigu()
    dami()
    dunpaigu()
    zhengmifan()


if __name__ == '__main__':
    main()

案例1我们定义了几个函数,对应着每一个步骤,合起来就是整个做饭的过程。因此案例1中我们面向的是整个过程。

案例2实现:

# 定义类 class关键字 + 大驼峰类名
class GirlFriend:
    # 类的构造方法,类实例化时被调用
    def __init__(self):
        pass

    def paigu(self):
        print('买排骨')

    def dami(self):
        print('买大米')

    def dunpaigu(self):
        print('炖排骨')

    def zhengmifan(self):
        print('蒸米饭')

    def zuofan(self):
        self.paigu()
        self.dami()
        self.dunpaigu()
        self.zhengmifan()


def main():
    # 实例化一个女朋友
    girl = GirlFriend()
    # 让女朋友直接做排骨米饭
    girl.zuofan()


if __name__ == '__main__':
    main()

案例2我们抽象了一个女朋友类,会做饭,然后实例化了一个女朋友对象,直接调用女朋友的做饭方法,就能得到我们想要的,期间的步骤全部交给女朋友去完成,我们只看结果。因此这里我们面向的是女朋友这个对象,所以这是面向对象的。

看起来案例2使这件事情更加简洁,但其内部依然是基于面向过程的实现。这并不矛盾,关键在于你站在哪个角度去理解这件事情,面向对象更像是一个解决问题的方案,看重的是最终结果,而过程式则是解决不同层次的不同问题。总之,慢慢体会。
回顾下文章开头概括的“建立模型…抽象思维…面向对象”,看我们在案例2中是否都运用到了。

我们介绍完了对象以及实例化的概念,面向对象还有很重要的三大特性:封装、继承、多态,篇幅原因,本篇文章不写了。

你可能感兴趣的:(Python,python,python面向对象)