gpt4 book ai didi

oop - 为新程序员定义 OOP

转载 作者:行者123 更新时间:2023-12-03 21:00:15 29 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

8年前关闭。




Improve this question




在向没有编程背景的人教授第一语言时,尽管我更喜欢 OOP,但我很难定义 OOP,我如何为几乎没有(或零)编程经验的人定义 OOP?

最佳答案

您可能会尝试类似以下方法,我在不久前发布的论坛上的帖子中对其进行了略微修改:

OOP 最基本的词汇集是类、方法和参数。

类是一组协同工作以完成任务的函数。类的实例被认为是一个对象。

方法只是指一个封装在类中的函数。

参数是传递给函数的变量,该函数指示函数如何操作或为其提供处理信息。

如果您进行一些挖掘,您会发现大量有关设计模式的信息。其中一些可能很有用,尽管一开始我会小心不要过多地了解它们,因为它们可能会让人不知所措。在尝试让自己进入 OOP 思维模式时,您可能会记住两个有用的(并且有点被过度使用)首字母缩略词:DRY 和 KISS。

DRY 代表不要重复自己,它的意思就是这样。如果您编写了一些代码,则不必再次重复该特定代码。实际上,这意味着从一开始就更抽象地思考和更好地计划。我将很快举一个例子。

KISS 代表 Keep It Simple, Stupid,意思是你应该尝试以最简单的方式编写能够实现其目标的代码。更简单意味着出错的可能性更少,维护更容易。在 OOP 的上下文中,这通常意味着确保每个方法或函数只有一个任务。如果你发现一个方法做的不止一件事情,这通常意味着它可以被重构为几个更小的方法,每个方法专用于一个特定的任务。

现在举一个简单的例子(有人可能会想出一个更好的例子,但现在就跟我来吧):

假设您需要编写两种不同的形式,一种处理有关汽车的信息,另一种处理卡车的信息。

对于汽车,我们需要记录以下信息:

  • 颜色
  • 发动机尺寸
  • 传动方式
  • 门数

  • 对于卡车,我们需要:
  • 颜色
  • 发动机尺寸
  • 传动方式
  • 驾驶室尺寸
  • 牵引能力

  • 在过程式编程中,您将首先编写处理汽车形式的代码,然后编写处理卡车形式的代码。

    使用面向对象的编程,您将编写一个名为 Vehicle 的基类,该类将记录我们需要的卡车和汽车的共同特征。在这种情况下,车辆类别将记录:
  • 颜色
  • 发动机尺寸
  • 传动方式

  • 我们将把这些特征中的每一个都变成一个单独的方法。例如,颜色方法可以将车辆的颜色作为参数并对其进行处理,例如将其存储在数据库中。

    接下来,我们将创建另外两个类:卡车和汽车,这两个类都将继承车辆类的所有方法,并使用它们独有的方法对其进行扩展。

    汽车类将有一个名为 numberOfDoors 的方法,而卡车类将有一个方法 cabSize 和 towingCapacity。

    好的,让我们假设我们有一个适用于过程和面向对象编程的工作示例。现在,让我们来看看几个场景。

    场景一 :假设我们突然需要添加一个总线表单,它记录以下信息:
  • 颜色
  • 发动机尺寸
  • 传动方式
  • 乘客人数

  • 程序:我们需要重新创建整个表单,重复颜色、引擎大小和传输类型的代码。

    OOP:我们只需使用总线类扩展车辆类并添加方法 numberOfPassengers。

    场景2 : 不像我们以前那样将颜色存储在数据库中,出于某种奇怪的原因,我们的客户希望将颜色通过电子邮件发送给他。

    程序:我们更改了三种不同的形式:汽车、卡车和公共(public)汽车,将颜色通过电子邮件发送给客户,而不是将其存储在数据库中。

    OOP:我们更改了车辆类中的颜色方法,因为汽车、卡车和公共(public)汽车类都扩展(或继承,换句话说)车辆类,它们会自动更新。

    场景3 :我们希望从通用汽车转向特定品牌,例如:日产和马自达。

    程序:我们为每个品牌创建一个新表单,重复通用汽车信息的所有代码并添加特定于每个品牌的代码。

    OOP:我们使用日产类和马自达类扩展汽车类,并为该汽车制造商的每组唯一信息添加方法。

    场景四 : 我们在表单的传输类型区域发现了一个错误,需要修复它。

    程序:我们打开并更新每个表单。

    OOP:我们修复了车辆类中的传输类型方法,并且更改在从它继承的每个类中永久存在。

    从上面的场景中可以看出,使用 OOP 风格比过程式编程具有显着的优势,尤其是随着规模的增加。考虑一下,如果我们还必须为船只、摩托车、飞机、卡丁车、ATV、雪地摩托等添加表单,我们将从 OOP 中获得的重复代码、灵活性和维护方面的节省。

    通过使用单元测试来测试结果,对象和方法也比过程编程更容易测试。

    这是否意味着您永远不应该使用过程式编程?不必要。如果你正在做一个模型或概念验证应用程序,你可能没有时间让一切都面向对象,所以我认为对原型(prototype)使用过程编程可能会更好,但最好以面向对象的方式制作生产产品。

    关于oop - 为新程序员定义 OOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597267/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com