面向对象分析与设计的区别

面向对象方法学讲的是迭代,不是传统的瀑布式,因此分析和设计之间的界限变得更加模糊,但并不是说没区别,搞清之间的区别还是很有益的,软件工程讲究的是在适当的时机做适当的事,而不要在分析时做设计,在设计时又去分析.

总的来说,分析是从现实问题的角度来考虑,而设计是从计算机实现的角度来考虑.一种分析的属性,关系很多时候是无法用OO语言直接实现的,这就需要应用设计的知识来进行转化.比如两个类之间的多对多关联,就不能用OO语言直接实现,需要转化.

下面拿类图来说,谈一下分析类图与设计类图的区别,从四个方面:

1.类本身:

分析阶段的类来源于问题领域的核心概念,通过这些概念以及之间的相互关系来反映业务逻辑.分析阶段的类图主要对应领域层,而不涉及UI和数据持久层.在分析阶段类主要有实体,值对象,服务等,这可以参考

分析模式与领域驱动设计.而设计阶段不仅要考虑领域层,还要考虑UI和数据持久层,以及这三者之间如何交互,如何解藕,在这个过程中可以使用GRASP模式与GOF的设计模式.

2.类的属性

在分析阶段,属性考虑的是对象本身的本质特征(从现实问题角度);而在设计阶段,会引入"伪属性",即对其它类的引用,从而实现类之间的关联.

3.类的操作

在分析阶段,主要是从职责分配的角度为类指定操作,这通常都是公用接口;而到了设计阶段,要考虑这些接口如何实现,可能会把一个公用操作又分解为几个小的操作,其中有些操作会是私有的,对用户不可见.

4.类之间的关系

在分析阶段,对于类之间的关系主要是两大类:泛化与关联(连接,聚合,组合),这两种关系都是来源于问题本身,而不是从计算机的角度来考虑继承,引用之类.另外还有一类关系是依赖,它与具体实现有关,通常在分析阶段不会突出它.

而到了设计阶段,连接,聚合,组合可能都被实现为一种东西:即对象的引用,但这并不代表这三种关系都是一样的,没有区分.从被关联的两个类自身来看,可能实现上没有区别,但从外部与这两个类的通信来说,就有区别,如果是聚合,有聚合根,消息是先发给聚合根,之后由根再发给内部其它对象;而如果是连接,就是对等的关系,二者都可以和外界通信.

从对象的创建角度来看,也有区别,如果是聚合,内部对象可能是由聚合根来创建,而如果是对等关系,则不一定.

 

总结:上述只是列举了分析与设计之间的一些区别,目的是让开发软件"真正实现面向对象",而不是不伦不类,当然分析与设计不是先后的关系,而是迭代,循环,因此既不能把二者完全融到一起,也不能完全划清界限.当然这就需要在实际中把握一个"度",需要在实际中慢慢总结.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值