面向对象编程中的多态

你想知道什么是多态吗? 在下面的文章中,我们将为您详细介绍什么叫 面向对象编程中的多态.

面向对象编程中的多态性-1

面向对象编程中的多态

虽然它看起来像是一个描述有些复杂的词,但实际上这种与计算机相关的主题与它的基本方面有关。 当你学习 面向对象编程,我们可以遇到这种描述,它的意思只是对单个属性的多种可能状态的描述。

对于计算,它是面向对象编程的基本属性之一,也是计算机病毒或蠕虫用来修改其代码的一部分使其难以检测的技术。 这个可以 方便 当我们不想那么具体并且需要更多功能以适应更广泛的工作方式,减少工作并帮助我们能够处理更动态和灵活的事情时,在编程时会发生很多事情。

在直接进入正题之前,我们将解释一些概念并分解定义,它们将作为 张开嘴,不仅要更好地理解它,还要了解它的操作、它的重要性,以及它在计算领域的用处,帮助我们放松工作。 在直接跳到 OOP 中的多态之前,我们可能不会发现任何新东西,但重要的是要记住以下所有内容以便正确理解。

面向对象编程中的多态概念起源于 Simula 67,这是一种用于执行模拟的编程语言。 这是由奥斯陆挪威数据中心的 Ole Joha Dahl 和 Kristen Nygaard 创建的。

该中心致力于船舶的模拟,由于一艘船和另一艘船之间的差异,当这些船按照各自的分类进行分组以在进行研究时产生更多控制时,由于爆炸引起了很多混乱,就在那时,这个想法实现了。浮动。

这种编程风格在 80 年代几乎在所有计算领域都占主导地位,因为它与另一种 C 编程语言 C ++ 密切相关。由于图形用户界面,这种方法的主导地位非常有效。

面向对象编程中的多态性有几个特点,在当时使用的不同语言中都有应用,例如:Ada、BASIC、LISP、Pascal等,尽管它们开发了各种兼容性问题。

要更详细地解释什么是面向对象编程中的多态性,我们邀请您观看以下视频:

多态和继承

前缀 poly 起源于希腊语,所以它的确切描述意味着丰富、许多或多样性,态射是一个希腊语后缀,它进入具有身体形状、组成或结构含义的词的形成中。 考虑到这一点,我们可以进入这个片段中我们想要解释的内容,我们的主词根据定义基本上是由身体结构形成的变体; 在数学的各个领域,映射被称为保留内部结构的数学结构之间的应用。

为了完全清楚这一点,我们可以比较一下多态和继承。 换句话说,这允许我们在分类层次结构中执行多态性。 同样重要的是,这些都是通过继承给出的,只要继承,我们可以理解为对象的派生类,总是属于同一个类; 举一个已经解释过的例子,我们可以说从车辆这个词中出现了几个类,例如汽车、摩托车和公共汽车,这样看来,多态和继承是两个不可否认的联系概念。

类型系统在多态中的重要性

将此分类命名为类型系统,因为该词的派生词仍然是其中的一部分,但是为什么这在面向对象编程多态性中很重要?

阅读本文的许多人可能熟悉使用弱类型语言编程是什么,就像在 Javascript 和 PHP 的情况下一样,但重要的是我们很好地理解它是什么样的。

在这种类型的语言中,当定义一个变量时,我们总是必须指明我们希望该变量包含的类型,例如:int myNumber。

这样我们就有可能表明建立为“myNumber”的变量将始终包含一个整数; 否则,编译器会向我们抛出一条错误消息,阻止我们编译我们制作的程序。

事实上,这也可能发生在对象上,如果在Java中我们定义了“故事片”类,知道这个词是一部持续时间超过一个小时的电影,当我们创建“故事片”类的对象时,我们必须指明指示要制作的对象类型的变量。 我们可以这样表达:

故事片 miLargo = 新故事片

我们的变量将是“myLong”并公开它,我们将引用“电影”的类或类型的对象,并且当它持续时,它应该始终具有相同类或类型的任何对象,已经说过知道这一点很重要,这样您就不能在变量或其他类型或类的其他对象中存储整数,这不是继承并且没有关系。

如果我们再次提及车辆及其类型的示例,重要的是要澄清,如果我们决定定义一个指向 «moto» 类对象的变量,当这个变量持续时,它必须始终指向一个相关的或继承对象类«moto»,而不是类«car»,也不是«bus»; 然而,在我们之前提到的那些弱内脏语言中,这种不灵活是不存在的,尽管它是像 Java 这样的重内脏语言的一个共同特征。 这是一个更广泛的例子:

  • 汽车 myCar = 新车(马自达 2″): Mazda 2 将是我们对属于该类或类型的对象的继承,变量指向它,如果我们愿意,明天它可以指向另一个对象 我的车.

MyCar = 新车(福特福克斯 2.0 ″)

我们永远不能做的是在 Car 类的变量集中存储其他与 Car 类型无关的东西,因为那样我们就会有一个编译时错误,万一它发生了,它一定已经保存了 New Car Ford Focus 2.0 我们会选择 New Moto Yamaha YBR。

应该澄清的是,在这一点上,我们还没有讨论多态,但我们正在用类型系统测试一般的编程; 关键是我们必须对强三重语言的限制可能给我们带来的复杂性敞开心扉,以便以后理解为什么多态很重要,并且是面向对象编程中多态的关键部分。

在完全类型化的计算机语言中,当一个函数被表现出来时,我们必须始终保持一个重要的点,当通知它将要接收的规则类型时。 对于我们已经建立的函数,除了变量或以整数值作为范数的文字之外,我们不能传递任何东西,如果我们碰巧传递了其他类型的其他数据,编译器就会改变,它不会让我们编译程序,因为在这种情况下,它无法在函数参数中找到预期的类型。

moto-car-1

对象中的多态性

最后,我们已经到了真正指定这个感兴趣的话题的部分,这就是为什么在这个系统下会制作自己的元素来体现它的类和目标,作为强类型语言的工作,变量必须始终指向一个对象我们在建立它时指出的那种。

这是必须记住的,现在,一个函数的参数已经声明为一个类,只会接受我们接收那个类的对象; 声明为由某种类型的元素组成的数组将只允许我们用我们建立的那种类型的对象填充它的框; 我们将展示另一个例子:

车辆 [] myVehculos = 新车辆 [3]

我们给出的这个例子是一个变量,它是一个数组,在其中我们声明盒子的内容将是 Vehicle 类的对象,在强三重语言中,它只能包含 Vehicle 类的对象,正如我们所言已经解释过了,但是现在我们找到了多态性,通过它我们可以为类型系统提供更多的灵活性,让我们有机会让变量也接受类“子级”或派生类的对象。

通过使类型系统更灵活,我们不是在谈论它作为一个整体,而是它与我们在类或类型系统中的继承分类有什么关系。 如果我们设法使用已建立类的单元格定义一个数组,编译器将接受我们插入我们已经在这些框中建立的该对象的“子项”字样。如果我们确定一个函数接收某个类的对象作为参数,编译器将允许我们发送从我们已经声明的类派生的类的对象的调用。

更具体地说,我们的车辆数组不仅允许我们将通用车辆插入到其变量中,还允许我们将所有子类或该类的派生类的对象插入,然后我们将拥有公共汽车、汽车和摩托车的对象我们定义的类或任何孩子,这一切都归功于多态性。

应用多态性

尽管我们对故事片做出了解释,但我们想澄清的是,除了作为电影之外,我们还可以制作纪录片等; 也许两者都有不同的特征,不同的观众时间,不同的价格,因此我们可以决定我们的 Feature Film 类有子类或继承,如“电影”或“纪录片”。

如果我们创建一个建立为 Cinema 的类和一个我们称之为“reproduce”的方法,它将作为我们想要在电影院中再现的内容的参数,电影类和纪录片类的对象都可以到达,如果我们很好地理解类型系统(甚至没有进入多态),我们的方法将建立我们接收的参数的类型。 它看起来像这样:

  • 播放(要播放的电影)

但是如果我们想复制一部纪录片,我们就必须改变我们的公式。

  • 播放(要播放的纪录片纪录片)

真的有必要创建两个不同的公式吗? 两种再现两种事物的方法完全相同,何必呢? 我们只需要将故事片放入播放器,点击播放(或播放)并创建一个记录,记录成功售出的门票数量。 虽然同时使用这两种方法并不麻烦,但我们必须意识到,我们可能会遇到必须创建另一个公式的情况,我们可以举一个例子,我们有电影,但这次是 3D 格式。

在这一点上,我们可以求助于多态性,在它的帮助下,我们可以创建一种再现方法,该方法将识别我们需要在未来。 语言将允许我们建立再现方法,表明我们将要接收的类的参数是电影类型的对象,但语言和编译器将接受从电影或电影派生的任何对象纪录片,我们会留下这样的东西: 播放(故事片 itemToPlay)。

无论我们是想制作电影还是纪录片来复制它们,所有这一切都可以通过一种方法来实现,即复制,由于面向对象编程中的多态性,我们使系统更加灵活,它不会有必要。 例如,如果您要复制电影而不是纪录片,我们就不必选择 Cinema 类,但是我们要复制的内容是故事片对象继承的一部分就足够了。

如果我们回到车辆的例子,即使记住多态性的用处以及它为我们提供的可能性,以减少如果我们没有这个概念的帮助,我们将不得不做的所有计算机程序维护。

假设我们有停车类(在西班牙语中是学习停车的类),我们在其中具有停车功能。 在停车场中,除了只能停放汽车之外,我们还可以停放公共汽车和摩托车,如果没有多态性,我们将不得不创建一个允许我们停放“汽车”类型对象的方法和另一个允许我们停放对象的方法“公共汽车”型和另一种允许我们停放“摩托车”型物体的物体,尽管这三种车辆外观差异显着,但执行这些动作的程序基本相同,只是一种占用的空间比另一个。

最准确的方法是有一个单一的方法来简化事情并允许我们接收所有类型的车辆,不仅是汽车和汽车品牌,还包括车辆对象的所有被接受和珍贵的衍生品。 首先我们将重用代码,因为正如我们已经说过的,停放这些类型的车辆是相似的,唯一的区别是每个车辆占用的空间不同,但除此之外,如果明天还有其他类型的车辆为了在市场上销售,我们的软件有可能接受它,而无需修改我们已经建立的停车类。

我们可以使用一种方法来接受车辆可能具有的所有精确继承,从而使工作更加灵活,并节省了我们为每种类型的车辆创建一个所花费的时间。 面向对象编程中的多态性为可以被单一方法接受的一系列对象打开了大门。

我们试图以最容易理解的方式解释多态性,并对其背后的一切进行广泛的回顾,如果不提供背景来帮助我们理解它并理解其突出的重要性,那么立即跳到这样的概念是不合适的和重要性。使用我们可以给它。

有可能在单个方法中包含多个方法,而派生同意作为对象的继承,这是非常有用的,因为它使我们无需创建几个迫使我们非常具体的需要,而不会给我们这样做的可能性更灵活的工作事实上,我们可以创建一种更动态的方式来处理我们编写的程序,就像知道一个单词的正确派生方式一样简单,即它所包含的一切,帮助我们做一个更有效的工作.

我们希望您会喜欢这篇文章并了解什么是面向对象编程中的多态性。 如果您想阅读我们关于编程的另一篇文章,我们建议您访问以下文章,它为我们提供了计算机世界中一种非常知名的编程形式: C++编程。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:Actualidad Blog
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。