为什么结构化方法在分析和设计中存在鸿沟而面向对象能否有效解决?
发布网友
发布时间:2022-05-01 10:20
我来回答
共1个回答
热心网友
时间:2023-10-08 22:39
万鸡哥真想抽死你,咱别丢人丢到外边来行不行!!
在结构化方法中,在分析和设计模块和模块之间的关系时,被紧紧局限于信息流,这*了对模块之间众多关系的表达,也无法体现模块和模块之间其他的众多关系,包含各种各样的结构、行为、依赖、包含(在结构化设计中这种关系隐含在分层中)、继承、关联关系等等。它仅仅解决了模块在封装和信息隐藏方面的问题, 出现了需求和设计之间的鸿沟.
再看面向对象设计方法,充分挖掘了“关系”的表达方式,可以尽可能的将事物之间复杂的关系予以体现,而这些关系是实现设计的关键。可以这样比喻目前为什么面向对象方法如此流行,记得小时候经常在各种杂志上看到许多这样的图画“一个钢球,从高处落下,击中某个翘起的装置,装置受到钢球的冲击,另一端抬起后,原来被截断的水流开始流通,并引发另一个设备开始工作……,最终在另一端的某个蜡烛被点燃”。这就是在工业时代,众多人被机械设计的灵巧和创意所深深吸引的其中一份图画。姑且不论这样的装置是否有实用价值,但它肯定带给构思者无限的快乐和想象力,以至于当时经常可以看到各种各样这样的图画。而面向对象的方法正是因使用对象的概念让设计更接近于上面的各种设备,而让机械设计时代的疯狂和无尽的创造力进入了软件工程师的视野。由于能够充分表达事物之间各种各样的关系(更接近于结构和行为方面),面对对象设计方法在今天创造了一个奇迹,各式各样巧妙的设计实现、设计模式的流行,几乎在永无止境的激发着爱好设计的人们的想象力和创造力,实现了分析和设计同需求的有效结合,跨越了这个鸿沟.
回到结构设计化方法上来,虽然很多人都说结构化设计和面向对象设计没有本质上的区别,那是因为某些关系依然可以通过转换映射到信息流上,但这毕竟绕了一个大弯,而且由于缺乏足够的表达各种关系的能力,极大的*了软件设计者的想象力和创造力。结构化设计方法使用自顶向下的手段,通过Process的逐层分解来理解和构建系统,然后把Process分配给模块,这里的“分配”这几乎让每一个初次接触结构化设计方法的*惑不解,似乎模块是Process分解的结果,甚至在如果已知了某些模块时又直接将模块映射成一个黑盒的Process,Process和模块究竟是什么关系?沿着这个思路,很容易陷进“鸡生蛋,蛋生鸡”的困境。而事实是,模块和Process的诞生,两者之间根本没有任何关联,都是独自根据经验所产生的。为什么会产生这样的问题?究其原因,结构化设计方法和我们自出生以来认识事物的方式有着很大的不同。因为打我们一出生,眼里落入的就是各式各样的实体,而我们区分它们主要依靠就是事物各式各样的特征,包括事物不同的结构和特定的行为,而结构化设计方法试图通过信息流及其转换来认识系统,这天生造成了某种障碍。相比之下,面向对象方法则和我们所熟悉的认识世界的方式相吻合,更加的自然。