您可能在互联网上的某个地方遇到过面向对象编程这一短语。或者您已经听说过它与Ruby,Python和Java等语言有关,但可能会提到子类和继承。
面向对象编程(简称OOP)远不如人们想象的那么复杂,实际存在使编程任务变得更容易。为了更好地理解它的全部内容,首先我们需要回到计算机编程的基础知识。
什么是OOP?
编程的核心是创造性地解决问题,并且与生活中的几乎所有事物一样,有许多不同的方法来实现这一目标。
面向对象编程就像程序,功能或逻辑编程只是众多方法中的一种,这些解决问题的方法称为范例。
OOP如何与其他范式不同?
在OOP到达现场之前,其中一些范例认为编程挑战的关键在于如何编写处理程序中数据的逻辑。例如,程序编程使用逐步说明列表告诉计算机该做什么。这种方法效果很好,因为它非常直观:如果您希望计算机执行某些操作,您只需提供有关如何执行此操作的逐步说明。
然而,程序编程等解决方案有其缺点:它们经常耗费时间,因为逻辑绑定代码无法有效地打包重复使用,这意味着软件通常变得复杂,难以理解且维护成本高昂。一些程序员开始寻找一个新的角度来解决这个问题,一个可以使DRYer编码更高效的问题。
OOP如何解决这个问题?
OOP通过推理我们真正关心的是定义我们想要操作的数据而不是操纵它所需的逻辑来解决问题。这并不像听起来那么复杂:它只是意味着在OOP中所有这些逐步指令都是使用对象而不是逻辑来执行的。
当你想到它时,以这种方式对数据进行排序是一个非常好的主意:良好的编程实践的一个重要部分是编写可读且易于更改的代码。如果您正在处理可以处理各种数据的通用,独立单元,那么您更有可能保持井井有条,最大限度地缩短开发时间并降低错误风险。
什么是对象?
对象是我们用于使此方法工作的工具。作为OOP的主要构建块,它们包含使我们程序中的数据有用所需的信息。
对象的一个非常基本的例子是一个人。人可能有姓名,年龄和住址:这些是我们的个人财产。人也可以做一些事情,比如跑步,听音乐或吃饭。这些是一个人的生活方法。它们允许我们的对象做事,并且(或许更重要的是)允许我们操纵它的属性。
稍微复杂一点(尽管可能更熟悉)的例子来自Javascript,其中每个组件(包括函数,字符串和数字)都被认为是一个对象。
什么是A级?
让我们回到“人”。假设您想要创建几个人,这三个人具有相同的属性(姓名,年龄,住址)和方法(吃饭)。我们需要能够以简洁有效的方式多次轻松地描述具有所有基本属性和方法的“人”。
这就是OOP的核心所在:不是每次都像使用逻辑那样写出“人”的概念,我们只创建一个名为“人” 的类,它作为所有人共有的属性和方法的蓝图。 。因此,我们的“人”课会给其中的任何人注入名字,年龄和住址,以及跑步,听音乐和吃饭的能力。
从我们的“人”类创建的每个人都被称为该类的一个实例,并被视为我们“人”类中的一个对象。因此,将一个类视为一个概念(“人”),将一个对象视为该概念的实施例(“Fred”)。
什么是继承?
在OOP中,每个类的设计和编程都是为了完成一个,而且只有一个。这非常重要,因为这样做可以定义共享部分或全部主类特征的对象的子类。
例如,如果我们创建了三个“人”实例 – 让我们称它们为“Barack”,“Arnie”和“Mr.T” – 它们都具有“人”的特征,但“Arnie”子类将会有自己的个人财产。例如,他可能比其他两个更具有一些古怪的属性(时尚感)和一些更不寻常的方法(吃鱼)。
这种传递选择属性和方法的能力被称为继承,并且切入了为什么OOP如此强大的核心:它不仅加速了程序开发,而且还意味着定义的子类对象始终有效。
结论
OOP只是少数几种编程范例中的一种,每种范式都有自己的优点和缺点。相当多的编程语言甚至使用这些范例的混合来表达自己并与数据交互。