【发布时间】:2011-11-08 00:19:07
【问题描述】:
我有一位同事告诉我,他曾经在一家公司工作,该公司的政策是在代码中永远不要有条件(“if”和“switch”语句),并且他们让代码中的所有决定使用多态性和(我猜)其他一些 OO 原则来完成。
我有点理解这背后的原因,即拥有更干燥且更容易更新的代码,但我正在寻找对这个概念的更深入的解释。或者,它可能是更通用的设计方法的一部分。
如果有人对此有任何资源,或者愿意解释,甚至有更多与此相关的术语,我可以用它来找到更多答案,我将非常感激。
我发现 one question on SO 有点相关,但我不熟悉 C++,所以我不太了解那里的答案。
(顺便说一句,我不是 OO 大师,但我可以做到)
我最精通 PHP,然后是 Python,所以我更喜欢使用这些语言的信息。
更新:我会向我的同事询问更多信息,了解他的确切含义。
2015 年更新:经过多年的编程经验,我现在看到,这项政策的目的可能是防止程序员通过在某些地方添加条件(if 语句)以随意的方式添加功能。扩展软件的更好方法是使用"Open/Closed principle",其中通过使用继承和多态来扩展软件。我强烈怀疑该政策是否对所有条件都非常严格,因为没有它们很难完全做到。
【问题讨论】:
-
你同事所说的这家公司是什么?我问这样我可以避开他们。流控制语句是编程的基础。如果我什至不能使用最基本的工具在适当的时候完成工作,还有什么我不能使用的?是的,您确实可以滥用
if语句,但对于其他一切都是如此。 -
@In silico - 流控制语句是过程编程的基础。多态性是面向对象编程的基础。也就是说,我们大多数人都使用这两种范式。
-
@TrueWill:流控制是命令式编程的基础,OOP 与过程式编程一样基于命令式编程。即使你去“纯”OOP,你仍然有同样的东西包裹在稍微更 OOP-y 的衣服中(
condition ifTrue,正如 Smalltalk 所做的那样,与if condition具有基本相同的效果和含义)。而且您必须对多态性使用一些流控制,除非您想将所有内容(例如整数的偶数)包装到专用对象中。 -
多态性在很大程度上依赖于重载,所以对于像 js 和 php 这样的语言你注定要使用这种方法。
标签: oop polymorphism conditional