面向协议的编程:一种快速的OOP头痛解决方案

为什么OOP如此受欢迎?

面向对象编程(OOP)是数十年来编写模块化代码的经典策略,并且有充分的理由。

  1. 可重用性:编写良好的对象是可以插入其他程序的独立实体。 如果实现了优化的树,则可以在现有项目的任何部分或全新的树中使用它,而无需编写更多代码。
  2. 跳过细节 :另一个程序员不需要知道您对象的实现。 如果看到“排序”功能,则可以使用而不必担心代码是什么样。
  3. 防错 :我们可以隐藏对类中函数或变量的访问,以防止其他不熟悉我们代码的开发人员创建错误。 其他人只会看到他们需要看的东西。
  4. 使大型项目易于管理:大型 项目变得复杂。 OOP使我们可以将一个大问题分解为一些子问题-每个子问题都由不同的对象处理。 如果Nabil,Julia和Alex正在制作太空侵略者游戏。 纳比尔(Nabil)可以建立一个代表外星人的对象,朱莉娅(Julia)可以建立一个GameBoard对象,该对象可以跟踪我的得分,生命数以及游戏开始/结束的时间,而亚历克斯(Alex)可以创建代表我的坦克及其导弹的对象。 最后,我们将这些对象组合在一起,以构建功能强大的游戏。
  5. 更新代码:使用模块化代码,随着时间的推移,我们可以轻松编写添加,更新或删除特定组件的代码。 例如,在用砖建造的建筑物中,您可以用新砖替换掉破裂的砖,而不必替换建筑物的整个部分。

与旧同在

虽然非常方便,但是OOP附带了很多问题:

  1. Massive View Controller,“ GOD”对象 :为了保持模块化,程序员使用一种类别,一种目的的主体。 但是,view肿的viewController和模型是流行的快速设计模式(MVC,MVVM)的常见副产品。 传递大块的对象会减慢您的代码的速度,并在构建时使模块化变得困难。 如果一个对象拥有您所需的太多功能,那么您编写的新代码也将最终取决于该对象。
  2. 多重所有权:假设您和一位工程师(Nick)正在使用引用同一BankAccount对象的单独ViewController。 如果您在firstViewController中添加功劳,而Nick在secondViewController中删除功劳,则两个人最终都会得到意外的结果。 类是通过引用传递的,因此,在项目的一个区域中更改值将导致该对象的值在所有其他位置均发生更改。 这使得很难测试功能对给定对象的隔离效果。
  3. 子类问题:如此之大的问题应有其自己的部分