我还是OOP的新手,我最初认为它的方式是在对象中抛出大量程序化的代码,并认为我已经完成了我的工作。但是,由于我在过去的几周里一直在思考,阅读和编码(以及查看好的代码,这是一个被严重低估的资源),我相信我已经开始掌握不同的前景。一旦你了解它,这只是一个清晰,简单和组织的问题。
但是现在我开始将事物看作不是黑白的物体作为物体的灌篮案例。例如,我有一个解析器,通常解析器返回一些我必须处理的字符串。但它有一个特殊的情况,它必须返回一个数组,该数组中的内容以及它的格式如何具有专门的规则。这只相当于两行加上一种代码方法,但是这段代码对我来说并不完全适合Parser类,我想把它变成自己的“ActionArray”对象。
但它会走远吗? OOP成了一把锤子让我看到像指甲一样的东西吗?将东西变成物体是否有可能走得太远?
答案 0 :(得分:2)
这是你的电话,但你应该把对象想象成现实生活中的对象。
以汽车为例。你可以描述一辆有不同物体的汽车:
或者你可以描述只有一个物体的汽车:
您可以keep it simple and stupid或者您可以将依赖关系分散到不同的对象。
答案 1 :(得分:2)
作为一般准则,我认为芝麻街说得最好:当“其中一件事与其他事件不同”时,你需要一个新的对象。
收听你的代码。如果它告诉您对象受到非必要状态和行为的污染(从而违反了“单一责任原则”),或者对象的某一部分的变化率与其他部分不同,并且所以,它告诉你你错过了一个物体。
做最简单的事情。当它不再有效时,做下一个最简单的事情。等等。一般来说,这意味着系统倾向于从更少,更大的对象移动到更多更小的对象;但并非总是如此。
OO设计有很多很好的资源。除了已经提到的那些,我强烈推荐Kent Beck的 Smalltalk最佳实践模式和实现模式。他们分别使用Smalltalk和Java示例,但我发现这些原则很好地转换为其他OO语言。
答案 2 :(得分:1)
设计模式是你的朋友。一个类很少存在于真空中。它与其他类交互,并且您的类耦合在一起的机制将直接影响您将来修改代码的能力。由于类设计较差,您在一个类中进行的更改可能会降低并强制其他类中的更改,这会导致您必须更改其他类等。
设计模式迫使您思考类如何相互关联。例如,您的Parser类可能会选择实现策略设计模式来抽象出解析机制。您可能决定将Parser创建为模板设计模式,然后让Parser的每个实际实例完成模板。
关于设计专家的原着书(Design Patterns: Elements of Reusable Object-Oriented Software非常好,但如果你是OOP的新手,可能是密集和令人生畏的阅读。一本更易学的书(特别是Ruby)可能是Design Patterns in Ruby,它对设计模式有很好的介绍,并讨论了实现这些模式的Ruby方法。
答案 3 :(得分:0)
面向对象编程是一个非常棘手的工具。今天许多人因为忘记了OOP的基本目的而陷入了同样的冲突,这正在提高代码的可维护性。
您可以随时集体讨论您未来的OO代码可重用性和可维护性,并确定自己是否是最佳方式。看看这个有趣的研究:
Potok, Thomas; Mladen Vouk, Andy Rindos (1999). "Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment"