当我们拿到一个项目的时候,也许我们没有资深程序员那样去考虑项目的拓展性,后续的性能,从整体,未来去把握整个项目,但是作为一个软件开发者,我们应该了解并且知道如何去设计一个软件的基本流程,包括流程图,用例图,数据结构图,类与类之间的关系图,ER图等等!让别的同事和自己能直观的从图中知道你所想要表达的问题和你的设计方案!
下面就以一个最简单的项目:图书馆管理系统来说明下基本的一个软件设计流程
1:功能图
当我们拿到一个项目的时候,我们需要了解客户希望实现哪些功能,希望达到什么样的效果,当设计人员给你一个几百页的设计文档的时候 ,你该如何下手,我们首先要做的肯定是首先要有一个清晰的流程下来,这个系统到底需要实现哪些功能!所以首先我们应该要有系统的功能图出来,让我们从长长的设计文档中抽离出来,从图中直观的看出这个系统是为了什么,达到什么样的效果!
以图书管管理系统为例的流程图如下(Excel 2007画的)
这样我们就能一目了然的看出系统中需要实现的功能,避免了每次都要到长长的文档中去寻找,也帮助团队中的同事去了解系统的功能,
2:功能的流程图
现在我们知道系统有哪些功能了,那么对于每一个功能的流程是怎么样的?你清楚么?对于复杂的逻辑来说,流程图是必不可少的,那样你可以直观的看出功能实现的每一个步骤
以下是图书馆管理系统的整体流程图,当然你也可以针对某一个复杂的功能去实现流程图(采用word画的,由于篇幅所限,只有部分)
3:用例图
有了以上功能图和流程图,基本上可以了解系统想要做的事情,如果你还想细分系统中每一个角色参与了哪些上述的哪些功能的话,你还可以实现用例图,用例图是被称作外部用户所能看到系统功能的模型图,可以让开发者更好的了解用户所用到的功能和和功能的交互!(staruml画的)
4:上面都是一些功能方面的设计,面向对象的编程思想让我们 应该了解每个类与类之间的关系,这在以后的编码过程中会给我们的编码带来极大的灵活性和可行性,类与类之间的关系可以分为关联,泛化,依赖,聚合,下面只是来从定义上解释下概念,具体的还要每个人去来理解
4.1:关联:
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
4.2:泛化:
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
4.3:依赖:
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
4.4:聚合
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
当我们设计类图的时候,我们首先要抽取出有多少个类,有的人会问我们在项目中如何去抽取系统中的类,一般一个实体就可以抽象成一个类,如书本是一个实体,人也是一个实体等等,下面是图书馆管理系统的一些类图,类图的画法是很简单,我们主要分析的是类与类之间的关系,这个是重点(Staruml画的)
5:数据库表的设计,通常是使用ER图来建立数据模型,下面是图书馆管理系统的ER图(简略版),主要是图要之间描绘出实体与实体之间的关系
6:各个子模块之间的依赖关系,这也是我们需要注意的,要减少不必要的依赖,如尽量减少远程调用,循环依赖这种情况的发生,最好把各个模块之间依赖的关系列出来,
总结:上面讲的只是一些简单却不可缺少的步骤,因为它能够让你很直观的,最简单的去看清这个系统究竟要做的是什么,我们需要做的是什么!当然如果一些大的复杂的项目也可以更加具体的去分析,如我们可以画时序图,状态图,部署图等等,但是我觉得,只要能让自己更加清楚的描述出整个项目,选择适合自己的图,那才是最重要的!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiahancslg/archive/2010/12/29/6104978.aspx |
|