3.3.1 过度使用对象
在设计一个创造性的面向对象系统以及惹恼团队中所有其他人(将所有细小的事情都转换为对象)之间存在一条细线。正如弗洛伊德过去常说的那样,有时候变量就只是变量。好的,下面解释这句话的含义。
或许您正在设计一个预计会畅销的井字游戏。您竭尽所能地采用OOP方法,因此您坐了下来,喝一杯咖啡,用一台笔记本大概地描述了所需要的类和对象。在这类游戏中,通常会有一个对象监视游戏的进度,并判断胜方。为了表示游戏棋盘,您可能想用Grid对象跟踪标记以及它们的位置。实际上,表示X或者O的Piece对象是Grid的一个组件。
等下,退回去!这个设计打算用一个类代表X或者O。这就是过度使用对象的一个例子。用char不能代表X或者O么?另外,用一个枚举类型的二维数组表示Gird不是更好么?看看表3-2建议的棋子类。
表 3-2
|
类< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
相 关 组 件 |
属 性 |
行 为 |
|
Piece |
无 |
X或者O |
无 |
这个表格有点稀疏,这有力地表明此处的内容很少,并不需要一个对象。
另一方面,深谋远虑的程序员可能这样认为,尽管当前Piece类很小,但是使用对象可以在将来扩展时不受影响。或许发展下去这会成为一个图形程序,用Piece类支持绘图行为可能是有用的。其他属性可能是Piece的颜色或者Piece是否是最近移动的那个。
另一种方案是考虑方格的状态而不是使用棋子。方格的状态可能是空、X或者O。为了在将来支持图形应用程序,可以设计一个抽象超类State,其具体子类StateEmpty、StateX以及StateO知道如何表示自身。
显然在此不存在正确答案,关键是在设计应用程序时应该考虑这些问题。记住对象是用来帮助程序员管理代码的,如果只是为了使得代码"更加面向对象"而使用对象,那么就错了。