您可以尝试以下方法,我在前一段时间在论坛上发布的帖子中对此进行了稍微修改:
OOP 最基本的词汇集是类、方法和参数。
类是一组协同工作以完成任务的函数。一个类的实例被认为是一个对象。
方法只是指封装在类中的函数。
参数是一个变量,它被传递给一个函数,指示它如何行动或提供信息以进行处理。
如果您进行一些挖掘,您会发现大量有关设计模式的信息。其中一些可能很有用,尽管我一开始会小心不要过多地进入它们,因为它们可能会让人不知所措。在尝试让自己进入 OOP 思维模式时,您可能会记住两个有用(并且有些过度使用)的首字母缩略词:DRY 和 KISS。
DRY 代表 Don't Repeat Yourself,意思就是这样。如果您编写了一些代码,则不必再重复该特定代码。实际上,这意味着从一开始就进行更抽象的思考和更好的计划。我马上举个例子。
KISS 代表 Keep It Simple, Stupid,意思是您应该尝试编写以尽可能简单的方式实现其目标的代码。更简单意味着更少的错误可能性和更容易的维护。在 OOP 的上下文中,这通常意味着确保每个方法或函数只有一个任务。如果你发现一个方法做不止一件事,这通常意味着它可以被重构为几个更小的方法,每个方法专门用于特定的任务。
现在举一个简单的例子(有人可能会想出一个更好的例子,但现在跟我一起去吧):
假设您需要对两种不同的表单进行编程,一种用于处理汽车信息,另一种用于处理卡车信息。
对于汽车,我们需要记录以下信息:
对于卡车,我们需要:
在过程式编程中,您会先编写代码来处理汽车表单,然后再编写代码来处理卡车表单。
使用面向对象的编程,您将编写一个名为vehicle 的基类,它会记录我们需要的卡车和汽车的共同特征。在这种情况下,车辆类将记录:
我们会将这些特征中的每一个都制成一个单独的方法。例如,color 方法可以将车辆的颜色作为参数并对其进行处理,例如将其存储在数据库中。
接下来,我们将创建另外两个类:卡车和汽车,这两个类都将继承车辆类的所有方法,并使用它们独有的方法对其进行扩展。
汽车类将有一个名为 numberOfDoors 的方法,而卡车类将有一个方法 cabSize 和 towingCapacity。
好的,让我们假设我们有一个适用于过程和 OO 编程的工作示例。现在,让我们来看看几个场景。
场景一:假设我们突然需要添加一个总线表单,它记录了以下信息:
程序:我们需要重新创建整个表单,重复颜色、引擎大小和传输类型的代码。
OOP:我们只是用一个公共汽车类扩展车辆类并添加方法 numberOfPassengers。
场景 2:我们的客户没有像以前那样将颜色存储在数据库中,出于某种奇怪的原因,我们的客户希望通过电子邮件将颜色发送给他。
程序:我们更改了三种不同的形式:汽车、卡车和公共汽车,以通过电子邮件将颜色发送给客户,而不是将其存储在数据库中。
OOP:我们更改了车辆类中的颜色方法,因为汽车、卡车和公共汽车类都扩展(或继承自,换句话说)车辆类,它们是自动更新。
场景 3:我们希望从普通汽车转向特定品牌,例如:Nissan 和 Mazda。
程序:我们为每个品牌创建一个新表单,重复通用汽车信息的所有代码并添加特定于每个品牌的代码。
OOP:我们使用 nissan 类和 mazda 类扩展汽车类,并为该汽车品牌的每组唯一信息添加方法。
场景4:我们在表单的传输类型区域发现了一个bug,需要修复它。
程序:我们打开并更新每个表单。
OOP:我们在车辆类中修复了 transmissionType 方法,并且该更改在继承自它的每个类中都持续存在。
从上述场景中可以看出,采用 OOP 风格比过程式编程具有显着优势,尤其是随着规模的扩大。考虑一下如果我们还必须为船、摩托车、飞机、卡丁车、ATV、雪地摩托等添加表单,我们将从 OOP 获得的重复代码、灵活性和维护方面的节省。
通过使用单元测试来测试结果,对象和方法也比过程式编程更容易测试。
这是否意味着您永远不应该使用过程式编程?不必要。如果你正在做一个模型或概念验证应用程序,你可能没有时间让所有东西都面向对象,所以我认为对原型使用过程编程可能会更好,但最好以OO方式制作生产产品。