我靠,昨天终于下定决心,要用C++编写一个CFD(计算流体力学)程序了。设计为先,不过还是心里没底,怯得很,毕竟是我一个人单枪匹马的瞎捉摸,连个讨论的人都没有。但愿这里会有人给点建议——不过这里都是IT精英,对计算力学没了解。其实科学计算软件的套路反而是比较单纯的,看在俺编过几个小玩意,看了点Overture和AMROC的份上,老天保佑我能干得下去。
心里一团浆糊,想了这个又忘了那个,还是得依靠UML来设计表达。昨天和今天在google上搜了点UML资料,下载了一个D版UMLStudio就摸索着开始画图了。画得图肯定不标准,管他呢?基本的结构其实我已经想得大概差不多了,只是细节部分还理不清,画图形式上的问题,以后再改吧。
一开始没搞太明白,用例图里面画了4、5个用例。回头看看书上说,10人/年得项目一般包含大约10~20个用例。靠,我这4、5个是不是太多了?我是打算几个星期能实现的。再想了一下,其实我的这个东西功能就一个:根据用户编写好的Case定义文件和网格文件进行计算,输出计算结果文件供用户分析和checkpoint文件供下次继续计算。Ok,那么用例就只有一个:计算。
然后是类图,画来画去,改来改去的。其中计算中的一些元素到底作为哪个类的成员,一些算法过程到底应该定义在哪个类中,这些反反复复改了几次。我没有按照书中建议那样先做概念设计,然后是说明层次,最后才是实现层次。因为这个东西实际上还是比较简单,而且我不打算做到那么抽象,那么具有可扩展性。我只是打算做某一种具体CFD算法的程序,可扩展的部分只是细节部分(如何插值、如何迭代),而不是可扩展到别的CFD算法(比如FVM算法、SPH算法等等)。所以类图一开始便是实现层次的了。