使用组合而不是继承

Jac*_*nkr 2 inheritance objective-c composition

我来自ECMAScript背景(似乎是非常C/C++).因此,我学习了经典的C++样式继承,包括,对象多态等很酷的东西.

我最近喜欢Android和iOS开发.Java看起来是基于C的,所以我很好地使用了我的大多数基于C的规则,但是iOS足够不同以至于我对我的方法很谨慎 - 特别是对象继承这样的东西.

我问,因为似乎对作文有一些强烈的意见.从我迄今为止看到的构图,我不是最大的粉丝,除非该项目提供了一个很好的理由来使用它.

你是专业的Obj-C/iOS开发者,你会推荐构图而不是经典继承吗?还是情境化的东西?

Cth*_*utu 5

Objective-C的对象模型与C/C++/Java完全不同.它基于消息,因此更多的重点放在响应消息的对象上,而不是像在C/C++/Java中那样调用方法.

Cocoa库的方法倾向于更平坦的对象继承层次结构,并依赖于委托模式进行自定义并使这些对象层次结构保持平坦.为什么这样?很多库,特别是GUI,由于层次结构膨胀而导致复杂化,以至于不清楚您继承哪个类.例如,视频游戏中的大多数现代对象系统(作为我的专业行业)使用组合范例,其中通过混合行为来构造对象,因为它在实践中更灵活且更易于维护.

我不会说Cocoa库使用组合模型,而是使用模型 - 视图 - 控制器区域中明确划分的类之间的交互,并使用委托进行自定义.将定制与核心功能分开可以降低复杂性,使层次结构更加平坦.