是否有可能超过OO?

时间:2008-09-10 15:01:48

标签: oop

我的问题很简单;是否有可能过度反对对象的代码?

多少钱?在什么时候你为了OO而放弃了可读性和可维护性?

我是一个庞大的OO人,但有时我想知道我的代码是否过于复杂......

思想?

17 个答案:

答案 0 :(得分:28)

  

是否可能过度使用代码定位代码

答案 1 :(得分:3)

如果你认为更多的对象更加面向对象,那么是的。

在进行面向对象设计时,您需要平衡一些力量。大多数OO设计都是关于减少和处理复杂性。因此,如果你得到非常复杂的解决方案,你就不会做太多OO,但你做错了。

答案 2 :(得分:2)

如果您发现在项目中完全实施OO所需的时间不必要地导致错过最后期限,那么是的。

必须在发布软件和完​​整的OO保真度之间进行权衡。如何决定取决于人员,团队,项目和运行项目的组织。

答案 3 :(得分:2)

我的建议是不要过分思考它。这通常导致超过或低于SOMETHING(如果不是OO)。我经常使用的经验法则是:如果它使问题更容易缠绕我的头,我使用一个对象。如果另一个范例让我更容易缠绕我的头部而不是使用一个对象,我会使用它。

这个策略还没有让我失望。

答案 4 :(得分:2)

是的,当然有:-)面向对象的技术是一种工具......如果你使用错误的工具来完成某项工作,你就会使事情变得复杂(当你需要的只是一把刀时,想想勺子)。

对我而言,我根据项目的规模和范围判断“多少”。如果它是一个小项目,有时它会增加太多的复杂性。如果项目很大,你仍然会承担这种复杂性,但它会在易于维护性,可扩展性等方面为自己付出代价。

答案 5 :(得分:1)

是的,这绝对是可能的 - 也是常见的。我曾经和一个创建数据结构的人一起工作以绑定到下拉列表 - 所以他可以允许用户选择性别。是的,如果可能的性别列表要改变,那将是有用的,但它们还没有(我们不住在加利福尼亚州)

答案 6 :(得分:1)

是的,就像人们可以过度规范化数据库设计一样。

这似乎是那些绝不会结束的纯粹与务实的辩论之一。 <:S

答案 7 :(得分:1)

许多人尝试设计他们的代码以获得最大的灵活性和重用性,而不考虑它的可能性。相反,根据您正在编写的程序打破您的课程。如果您只有一个特定对象的实例,则可以考虑将其合并到包含对象中。

答案 8 :(得分:1)

我认为您的问题应该是“您可以构建您的应用程序吗?”

当然答案还是。 OO只是一种设计方法。如果你花时间在系统中建立不必要的复杂性,因为“多态性晃动!”。那么是的,也许你已经结束了。

非常简单的回答是无论您喜欢什么样的方法(OO,程序等),设计应该只有在明显必要的情况下才能复杂

答案 9 :(得分:1)

是的,你可以。例如,如果您发现自己在创建两个子类型之前创建了接口或抽象类,那么您就是过度了。当开发人员(过度)设计时,我经常会看到这种想法。我使用测试驱动开发和重构技术来避免这种行为。

答案 10 :(得分:1)

  

是否有可能过度使用面向对象的代码?

没有。但是可能会使代码过于复杂。例如,您可以使用设计模式来使用设计模式。但是你不能过度反对对象的代码。您的代码是面向对象的,也可能不是。就像你的代码设计得很好或不是。

答案 11 :(得分:0)

我想这是可能的,但很难以抽象的方式回答你(没有双关语意)。举一个OO的例子。

答案 12 :(得分:0)

是。请参阅“golden hammer antipattern

的概念

答案 13 :(得分:0)

我认为有时候OO设计可以达到极致,甚至在非常大的项目中也会使代码的可读性和可维护性降低。例如,可以在鞋类基础类,运动鞋,礼服鞋等的儿童类中使用。但是我已经阅读/审查了人们的代码,看起来好像他们正在为NikeSneakers创建课程的极端和ReebokSneakers。当然两者之间存在差异,但是为了具有可读,可维护的代码,我认为有时候扩展一个类以适应差异而不是创建新的子类来处理差异很重要。

答案 14 :(得分:0)

是的,这很容易。代码并不是更好,仅仅因为它是面向对象的,仅仅因为它是模块化的或功能性的或通用的或生成的或基于数据流的或面向方面的或其他任何东西更好。

好的代码是很好的代码,因为它在编程范例中设计得很好。

好的设计需要小心。

小心需要时间。

您的案例的一个例子:我在名称中看到过可怕的Java片段 作为“面向对象”,每个类都实现了一些接口,即使没有其他类实现该接口。有时它是一个黑客,但在其他情况下,它实际上是无偿的。

无论你编写代码的任何范例或习惯用法,如果走得太远,参与太多好事,都会使代码比问题更复杂。有些人会说,当达到这一点时,代码甚至不再是,例如,面向对象。

面向对象的代码应该更好地组织,以便在合理独立的部分中更简单,更直接或更容易理解和消化。对这个目标使用面向对象编码的机制 not 导致面向对象的设计

答案 15 :(得分:0)

我认为明确的答案是肯定的,但根据您所指的域名,它可能是真的是,或者更少,所以是的。如果您正在构建高级.Net或Java应用程序,那么我认为这是后者,因为OO基本上是内置于该语言中。另一方面,如果您正在使用嵌入式应用程序,那么您的OO的风险和可能性很高。没有什么比看到一个真正高水平的人进入嵌入式项目并使他们认为丑陋的事情复杂化更糟糕的事情,但却是最简单快捷的做事方式。

答案 16 :(得分:0)

我认为任何事情都可能“过头”。几乎所有我能想到的最佳实践都是如此。我看到继承链如此复杂,代码几乎无法管理。