面向继承,组合或协议

我记得计算机科学课程的第一课Java继承。 🙂

在我们的学校里,我们的程序员受到了教授,面向对象改变了近几十年来开发软件的方式。 继承是最受灌输的概念之一。

基本上,对象的继承是从父对象继承特征的,因此他与兄弟姐妹共享这些特征。 参见示例:

问题是要知道使用哪个对象“孙子”来实现,但是这个主题很广泛,在这里可以得到最好的解释:

多重继承
多重继承是某些面向对象的计算机编程语言的功能,其中对象或类… en.wikipedia.org

协议是多重继承吗? 不,对不起。

对不起, 协议(或接口)实际上是多重继承的致命解决方案,因为它定义了对象的行为,但是实现仅在类中进行。

使用协议的简单事实不会创建一个合成环境。 但这使我们更加接近多重继承环境。

但是组成是解决方案吗?

当一个类具有另一个类的属性时,就是合成。 就是这么简单,我们每天都在使用这个概念。 因此,关于它的讨论是,我们始终具有明确的定义并限制了OOP概念的组成。此链接清楚地表明:

对象组成
在计算机科学中,对象组合(不要与功能组合相混淆)是一种将简单的组合… en.wikipedia.org

Swift中的面向协议(POP)?

移动世界对新概念感到疯狂,所有这些都将使我们通过Swift。 每天我看到人们发布用语言创建的东西。 这是不可思议的,我认为极限是我们的想象力。

但是想象一下,如果不使用属性就可以组成行为,那么行为就构成了对象。 这正是我们通过扩展协议所获得的,这是一种构建灵活的面向对象结构的方法。

关于协议+扩展❤的示例

扩展协议是一种创建合成的方法,在这些情况下无需使用继承。 这足以改变Swift中继承的整个概念,这样我们就可以在不更改可可对象树的情况下插入行为。

在此示例中,很明显,我们的ViewController我的孩子仍然是UIViewController对象。 但是通过协议,我们可以输入默认行为,并可以创建将协议作为继承来接收协议的函数。

通过一定的复杂性,我们可以具有组合的优点,而不会冒产生多重继承复杂性问题的风险。

结论

本文的目的是提醒我们所有人,我们应该始终研究和质疑新技术及其对我们的允许。

我们必须讨论OOP的基本概念,因为它们每天都是软件开发的基础。 功能语言和反应式编程概念正在采用我们的软件,这是我们赖以生存的时刻。 但是最基本的概念变得更加重要,建筑物的基础是最重要的部分。

一篇非常好的文章,讨论了方法和如何帮助选择:

组成与继承:如何选择?
从一开始…………没有继承,也没有组成,只有代码。 而且代码繁琐,重复… www.thoughtworks.com

谢谢,我们将讨论任何事情。 争论是学习。 🙂