物件导向程式设计

Great-Fortune 讨论专区 程式语言 Python 园地 物件导向程式设计

标签: 

该主题包含 0 则回复,有 1 个参与人,并且由  Teddy6 年, 11 月 前 最后更新。

正在检视 1 篇文章 - 1 至 1 (共计 1 篇)
  • 作者
    文章
  • #1312

    Teddy
    参与者

    转载自廖雪峰的官方网站

    物件导向程式设计——Object Oriented Programming,简称OOP,是一种程式设计思想。OOP把物件作为程式的基本单元,一个物件包含了资料和运算元据的函数。

    面向过程的程式设计把电脑程式视为一系列的命令集合,即一组函数的循序执行。为了简化程式设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

    而物件导向的程式设计把电脑程式视为一组物件的集合,而每个物件都可以接收其他物件发过来的消息,并处理这些消息,电脑程式的执行就是一系列消息在各个物件之间传递。
    在Python中,所有资料类型都可以视为物件,当然也可以自订物件。自订的物件资料类型就是物件导向中的类(Class)的概念。

    我们以一个例子来说明面向过程和物件导向在程式流程上的不同之处。

    假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程式可以用一个dict表示:

    std1 = { 'name': 'Michael', 'score': 98 }
    std2 = { 'name': 'Bob', 'score': 81 }

    而处理学生成绩可以通过函数实现,比如列印学生的成绩:

    def print_score(std):
        print('%s: %s' % (std['name'], std['score']))

    如果采用物件导向的程式设计思想,我们首选思考的不是程式的执行流程,而是Student这种资料类型应该被视为一个物件,这个物件拥有name和score这两个属性(Property)。如果要列印一个学生的成绩,首先必须创建出这个学生对应的物件,然后,给物件发一个print_score消息,让物件自己把自己的资料列印出来。

    class Student(object):
    
        def __init__(self, name, score):
            self.name = name
            self.score = score
    
        def print_score(self):
            print('%s: %s' % (self.name, self.score))

    给物件发消息实际上就是调用物件对应的关联函数,我们称之为物件的方法(Method)。物件导向的程式写出来就像这样:

    bart = Student('Bart Simpson', 59)
    lisa = Student('Lisa Simpson', 87)
    bart.print_score()
    lisa.print_score()

    物件导向的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念,比如我们定义的Class——Student,是指学生这个概念,而实例(Instance)则是一个个具体的Student,比如,Bart Simpson和Lisa Simpson是两个具体的Student。

    所以,物件导向的设计思想是抽象出Class,根据Class创建Instance。
    物件导向的抽象程度又比函数要高,因为一个Class既包含资料,又包含运算元据的方法。

    小结

    资料封装、继承和多态是物件导向的三大特点,我们后面会详细讲解。

正在检视 1 篇文章 - 1 至 1 (共计 1 篇)

抱歉,回复主题必需先登入。