我正在处理一个大型项目(对我来说),它将有许多类,需要可扩展,但我不确定如何规划我的程序以及类需要如何交互。
几个学期前我上了一门OOD课程,从中学到了很多东西;比如编写UML,并将需求文档转换为对象和类。我们也学过序列图但不知怎么的我错过了这节课,我没能记住它们。
在之前的项目中,我尝试使用从课程中学到的方法,但通常在我说“是的,这看起来像我想要的东西”时,我就会以代码结束,我不想再挖掘出新的功能。
我有一本Steve McConnell的《Code Complete》,我经常在这里和其他地方听到它的神奇之处。我读了关于设计的章节,似乎没有得到我想要的信息。我知道他说这不是一个固定的过程,它主要是基于启发式,但我似乎不能把他所有的信息都应用到我的项目中。
那么,在高级设计阶段(在开始编程之前),你要做些什么来确定你需要什么类(特别是那些不基于任何“现实世界对象”的类)以及它们如何相互交互?
我特别感兴趣的是你使用的方法是什么?你遵循什么样的过程,通常会产生一个良好的,干净的设计,将接近最终产品?
我建议你使用BlueJ和ActiveWriter来学习和发展对对象的良好理解。推荐的书也是很好的资源。
从维基百科:
(来源:bluej.org)
BlueJ是一个综合开发项目
Java编程环境
语言,主要是为了
教育的目的,也是
适用于小规模软件
发展。
此外,它使用UML,对我来说,这是一个很好的资源来理解建模对象的一些事情。
可选文字 http://www.ryanknu.com/ryan/bluej.png
ActiveWriter是一个建模实体和关系的工具,它还可以生成代码,并且很容易进行更改。它将节省您的时间,并且对于敏捷开发非常适合。
(来源:altinoren.com)
我用于初始设计(得到类图)的步骤是:
Requirements gathering. Talk to the client and factor out the use cases to define what functionality the software should have.
Compose a narrative of the individual use cases.
Go through the narrative and highlight nouns (person, place, thing), as candidate classes and verbs (actions), as methods / behaviors.
Discard duplicate nouns and factor out common functionality.
Create a class diagram. If you're a Java developer, NetBeans 6.7 from Sun has a UML module that allows for diagramming as well as round-trip engineering and it's FREE. Eclipse (an open source Java IDE), also has a modeling framework, but I have no experience with it. You may also want to try out ArgoUML, an open source tool.
Apply OOD principles to organize your classes (factor out common functionality, build hierarchies, etc.)