Objective C 类别 vs 开放/封闭原则

Posted

技术标签:

【中文标题】Objective C 类别 vs 开放/封闭原则【英文标题】:Objective C Category vs open/closed principle 【发布时间】:2011-04-21 15:21:33 【问题描述】:

根据Open/Closed原则

。 . .软件实体(类、模块、函数等)应该对扩展开放,对修改关闭

那么我可以说类别严重违反了这一原则吗?

【问题讨论】:

你也可以说Objective-C的所有动态运行时都违反了这个原则,但这并不意味着两者都不能有效使用。 【参考方案1】:

我不明白怎么做。类别允许您添加依赖于现有界面的功能。它们不允许您对原始类进行任何真正的更改,它们只是提供一些语法糖,让您产生新方法已添加到类中的错觉。

换句话说,类别可以帮助您扩展一个类。他们不修改它。似乎它们强化了开放/封闭原则。

【讨论】:

类别也可以让你覆盖一个方法(一次)。 是的,但覆盖仅适用于该类别的用户。原始类的用户不受影响。【参考方案2】:

我认为“对修改关闭”的标准解释是指“添加新功能不需要修改现有代码”。使用这种解释,类别不会违反开放/封闭原则,因为编写新的类别方法并不构成修改现有代码。

至于类别方法可以替换类上现有方法的特殊情况,它可能不违反开放/封闭原则,但因为它很危险,所以不赞成。这是语言的那些“可以这样做,但不能” 特性之一。

【讨论】:

以上是关于Objective C 类别 vs 开放/封闭原则的主要内容,如果未能解决你的问题,请参考以下文章

C#重新抽象是不是违反了开放/封闭原则?

开放封闭原则

面向对象原则之一 开放封闭原则(开闭原则)

Charpter04 开放-封闭原则

设计原则之开放封闭原则

敏捷开发-开放封闭原则