首页 理论教育软件需求工程:面向对象分析成果

软件需求工程:面向对象分析成果

【摘要】:面向对象方法应用在软件开发领域即是强调面向客观世界或问题域中的事物,主要解决基本的适应和演化问题,因此,方法论的建模过程也更多从面向对象的视角进行。最后,我们用一个案例来判定一下,你是否已经将面向对象方法带入了日常工作中,或者说你的分析习惯是否已经面向对象了?那么,恭喜你,你已经学会面向对象方法了!

面向对象(Object Oriented,简称OO)方法将世界看成一个个相互独立的对象,相互之间并无因果关系。对象之间的交互必须有某种条件的约束或触发才会按照一定的规律进行信息的传递。用面向对象的观点来看,一个多细胞生物,由无数个细胞构成,看上去就是一个能够正常工作的系统,但是单个细胞之间的联系并非那么紧密,它们之间通过一定的连接,独立的细胞就能够依据某个规律结合在一起,具备一定的性质和功能,然后再进行组合又可以构成更为复杂的对象,这就是面向对象的基本原理。

面向对象方法应用在软件开发领域即是强调面向客观世界或问题域中的事物,主要解决基本的适应和演化问题,因此,方法论的建模过程也更多从面向对象的视角进行。那么,我们就从面向对象的基本概念,使用过程中遇到的问题等方面具体进行讨论。

一个对象是现实世界中物理或概念的实体,它提供了我们对现实世界的理解,例如一辆汽车、一扇门、一个账户、一次交易等。再进一步说,一辆汽车,有着漂亮的外壳,而它的内部就像一个黑盒子,这就是封装;再例如机动车可以向下再次划分为轿车、卡车、面包车等,而这些划分的子类都具有父辈全部的特性,这就是继承;同样是轿车,从品牌方面又可以分为大众、别克、现代、吉利等,虽然同属轿车,但背后却有不同的对象,可以有着不同的发动机、不同的变速箱、不同的机动特点,这就是多态。

如图2-2所示,我们从微观角度出发,汽车的每个零件都是一个对象,于是我们可以发现内部的每个零件其实是个“近视”,它不知道也不清楚它所处的大环境,也不清楚它的工作会对整体产生多大的影响,每个零件唯一能确定的就是与它直接联系的其他零件,它们之间相互“依赖”,并通过一定的渠道保持沟通交流,即“耦合”。同时,每个零件又都有自己专属的特性,而且这些特性不允许其他对象访问,这就是属性。而其他对象只能通过它提供的一些固定接口访问,这就是“方法”。当然从图2-2也可以看出,某些零件,例如螺丝、螺帽等是可以通用的,这也体现了面向对象的另外一个重要特性:复用。

图2-2 图说对象(www.chuimin.cn)

还是汽车的示例,从另外一个角度来看,零件可以按照一定的规则组装成发动机,也可以按照另外的规则组装成变速箱。然后,还可以把这些部件再次组装成更大的东西,例如整部小汽车,当然,也可以是一辆挖掘机。这个例子说明了面向对象的另外一个非常重要的特性:抽象及其层次。抽象划分层次的优势就是无论在哪一个层次上,我们在做分析的时候只需要面对有限的复杂度和有限的对象结构,这样就可以专心于当前层次结构的对象及其运行过程;抽象划分层次还可以实现底层零部件的更换不会影响上层结构及其功能,正如发动机驱动皮带的更换并不会影响整车的驾驶。

总之,面向对象把世界看成相互独立的零散的小零件,这些对象本质上是独立的,既独立于过程,也独立于规则。当需要把世界联系起来的时候,对象才会依据某种规则组织起来,完成特定的功能。我们的方法论主要以面向对象为主,但是现实世界如何与对象世界关联起来呢?使用统一建模语言UML,准确地讲UML在一定程度上就是代表着面向对象分析设计的方法,所以,我们将在2.2节将方法论中应用到的UML元素给大家一一介绍。最后,我们用一个案例来判定一下,你是否已经将面向对象方法带入了日常工作中,或者说你的分析习惯是否已经面向对象了?

案例&知识:

如果你的分析习惯是在调研需求时最先弄清楚有多少个业务流程,先画出业务流程图,然后顺藤摸瓜,找出业务流程中每一步骤的参与部门或岗位,弄清楚在这一步参与者所做的事情和填写的表单数据,并关心他们是如何把这份表单传给到下一个环节的。那么很不幸,你还在做面向过程的事情。

如果你的分析习惯是在调研需求时最先弄清楚有多少部门,有多少岗位,然后找到每一个岗位的业务代表,问他们类似这样的问题:你平时都做什么?这件事是谁交办的?做完了你需要通知或传达给谁吗?做这件事情你都需要填写什么表格吗?……那么,恭喜你,你已经学会面向对象方法了!