面向对象和面向过程思想

面向对象面向过程都是一种编程思想,就是解决问题的思路

  • 面向过程:POP(Process Oriented Programming)面向过程语言代表是c语言
  • 面向对象:OOP(Object Oriented Programming)常见的面向对象语言包括:java c++ go python koltin

通过面向对象的方式,我们不再关注具体的步骤,而是将问题抽象为对象和它们之间的交互。我们可以直接调用对象的方法来实现功能,而无需显式指定每个步骤。
面向过程强调按照步骤执行操作,而面向对象强调通过定义和操作对象来解决问题。
在面向对象的编程中,我们将问题抽象为对象的集合,这些对象具有属性和行为,并通过对象之间的交互来实现功能。这种抽象和交互的方式使得面向对象编程更加灵活、可维护和可扩展。
接下来我们看同一个问题,面向过程和面向对象是怎么解决的?
image.png

面向过程编程的贪吃蛇游戏

在面向过程编程中,贪吃蛇游戏可能会以以下方式实现:

  1. 定义蛇的初始位置、长度、方向等变量。
  2. 创建一个表示游戏区域的二维数组。
  3. 在游戏循环中,根据用户输入改变蛇的方向。
  4. 更新蛇的位置,根据当前方向向前移动一格。
  5. 检查蛇是否吃到食物,如果是,则增加蛇的长度。
  6. 检查蛇是否撞到边界或自己的身体,如果是,则游戏结束。
  7. 在游戏区域中绘制蛇和食物。
  8. 循环回到第3步,直到游戏结束。

在面向过程的编程中,游戏的各个方面被划分为一系列的步骤和变量,通过按照特定顺序执行这些步骤来控制游戏的逻辑和状态。

面向对象编程的贪吃蛇游戏

现在,让我们看看如何使用面向对象编程来实现贪吃蛇游戏。

  1. 创建一个Snake类,具有属性(例如位置、颜色、长度、方向)和方法(例如移动、吃食物)。
  2. 创建一个Food类,具有属性(例如位置、颜色)。
  3. 创建一个Game类,它包含一个或多个蛇对象和一个或多个食物对象,以及游戏区域等属性。Game类还具有控制游戏逻辑的方法,例如更新游戏状态和绘制游戏界面。
  4. 在游戏循环中,通过调用Game类的方法来控制游戏的进行,例如根据用户输入改变蛇的方向,更新蛇的位置,检查碰撞等。
  5. 在游戏界面中,通过调用绘图方法来绘制蛇和食物。

在面向对象编程中,贪吃蛇游戏被视为一组对象的交互。各个对象封装了游戏的状态和行为,并通过对象之间的消息传递来实现功能。这种对【对象Object】的抽象和交互使得游戏逻辑更清晰、可维护性更高,并且可以轻松地扩展和修改游戏的功能。 :::warning 一切皆对象! :::

面向对象的总结

  • 面向对象,强调的是对象(实体)
  • 面向对象是一种思想,更加符合人的思维习惯
  • 面向对象使复杂的问题简单化了
  • 面向对象的出现,让曾经在过程的执行者,变成了对象的指挥者

类和对象

类和对象是面向对象非常重要的概念

  • 类是描述了一种类型(相当于图纸)
  • 对象是这个类型的具体实现(相当于图纸具体实现)

思考: :::info 旺财和狗,哪个是类,哪个是对象? ::: 答案:狗是一个类型,属于类
旺财是狗的实现,属于对象

类和对象的关系
类就是制造图纸,只有一个。对象是类的实体,会产生多个
制造图纸class
对象实体object (斜眼看你的那个叫桑尼)

定义类和创建对象
类的定义格式:

  1. class 类名:
  2. pass

创建对象

  1. 对象名 = 类名()

代码演示:

  1. # 定义类
  2. class Person:
  3. pass
  4. # 创建对象
  5. p1 = Person()

类的组成

类可以描述世间万物,类都需要有类名,也应该具备一些属性行为

  • 类的关键字:class
  • 类的名称:类名
  • 类的属性:一组数据
  • 类的方法:允许进行操作的方法(行为) 人(Person)类应该具备什么属性和行为呢?
  • 属性:姓名(name) 、年纪(age)
  • 方法:吃(eat)、跑(run)、说话(say)

    成员属性

    成员属性的定义需要在初始化方法__init__方法下定义
    格式:
    1. def __init__(self):
    2. self.属性 = 属性值
    举例: ```python class Person: def init(self, name, age):
    1. # 成员属性
    2. self.name = name
    3. self.age = age

创建对象

p = Person(‘张三’, 30)

访问成员属性

print(p.name) print(p.age)

  1. 在创建对象时,属性值可以由外部传进来,也可以在初始化方法里设置为任意值
  2. <a name="hGvex"></a>
  3. ### 成员方法
  4. 成员方法的定义格式为 `def 函数名(self):`
  5. ```python
  6. class Person:
  7. # 定义成员方法 say_hello
  8. def say_hello(self):
  9. print('hello')
  10. # 定义成员方法run
  11. def run(self):
  12. print('跑')
  13. # 创建对象
  14. p = Person()
  15. # 调用成员方法
  16. p.say_hello()

注意: :::warning 成员方法都会默认有参数self,调用的时候不需要传递self :::