SOLID 原则如何应用于 Objective-C 中的方法覆盖?
How does the SOLID principle apply to method overrides in Objective-C?
我看了“SOLID”原则的解释。以下是 'L' 部分的解释:
objects in a program should be replaceable with instances of their
subtypes without altering the correctness of that program
例如我有 MYViewController : UIViewController
当我覆盖 viewDidLoad
时,这意味着我更改了基本视图控制器的逻辑。正确的?这是否意味着我正在 改变该程序的正确性?
还是我误解了这一点?
您覆盖 viewDidLoad
的事实并不构成违反 Liskov 替换原则 (LSP)。 (subclass 的功能通常是扩展 superclass 的行为。)实际上是相反的,如果你在 sub[=20] 中实现行为,你就违反了这个 LSP =] 这样它就不能再用于引用基数 class 的情况。
但 LSP 并不是我们正在考虑完全不同的 class(例如冰淇淋对象;大声笑)的情况。我们通常担心我们正在处理一个实际的 subclass,但是一个不能再替换对其基 class.
的引用的地方
重写方法时,如果代码适当调用super
实现,一般满足LSP。对于你关于 viewDidLoad
的问题,你总是想在这种情况下调用 super
。
我看了“SOLID”原则的解释。以下是 'L' 部分的解释:
objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program
例如我有 MYViewController : UIViewController
当我覆盖 viewDidLoad
时,这意味着我更改了基本视图控制器的逻辑。正确的?这是否意味着我正在 改变该程序的正确性?
还是我误解了这一点?
您覆盖 viewDidLoad
的事实并不构成违反 Liskov 替换原则 (LSP)。 (subclass 的功能通常是扩展 superclass 的行为。)实际上是相反的,如果你在 sub[=20] 中实现行为,你就违反了这个 LSP =] 这样它就不能再用于引用基数 class 的情况。
但 LSP 并不是我们正在考虑完全不同的 class(例如冰淇淋对象;大声笑)的情况。我们通常担心我们正在处理一个实际的 subclass,但是一个不能再替换对其基 class.
的引用的地方重写方法时,如果代码适当调用super
实现,一般满足LSP。对于你关于 viewDidLoad
的问题,你总是想在这种情况下调用 super
。