新闻动态
面向对象设计的原则
https://www.sytm.net 发布日期:2014/1/8 12:03:10

1.抽象与逐步求精

随着问题域的规模和复杂性不断增大,软件设计的困难也随之增加。如何控制、管理复杂性成为面向对象设计要解决的首要问题。

经验表明,抽象原则是管理、控制复杂性的基本策略。抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄和桃子等,它们共同的特性就是水果。得 出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较,没有比较就无法找到本质上共同的部分。

在面向对象设计过程中使用抽象技术便于人们用“问题域”本来的概念和术语描述问题,而无需过早地转换为那些不熟悉的结构。软件设计过程应当是在不同抽象级别考虑、处理问题的过程。最初,应在最高抽象级别上,用面向问题域的语言叙述"问题“,概括”问题解“的形式;而后不断地具体化,不断地用更接近计算机域的语言描述问题;最后,在最低的抽象级别上给出可直接实现的”问题解“,即程序。

“逐步求精”是与“抽象”密切相关的一个概念。其主要思想是,针对某个事务的宏观描述用逐步求精的方法不断地分解,逐步确立过程细节。直至得到能用程序语言描述的算法实现为止。求精的每一步都是用更为详细的描述代替上一层次的抽象描述,所以在整个面向对象设计过程中产生的具有不同详细程度的各种描述组成了系统的层次结构。层次结构的上一层是下一层的抽象,下一层是上一层的求精。由于对象、类是组织程序的基本单元,因此在过程求精的同时自然伴随着对象和类的求精。无论是过程还是对象,每个求精步骤都蕴含着某些设计决策,因此设计人员必须掌握一些基本的准则和各种可能的候选方法。

在软件设计过程总,抽象与逐步求精一般都是结合起来进行应用。在建立了较高层次的抽象模型收,对其进行求精得到更加具体的抽象模型,然后再进行求精,由此一直到达最终的软件实现。该过程在面向对象软件开发过程中更加直观,因为面向对象的概念曾抽象与最终由类组成的系统实现具有自然的映射关系,其开发过程可以从概念建模逐步精化为最终的软件实现。

2.模块化与信息隐藏

在计算机软件领域,模块化的概念已被推崇了多年,软件体系结构就体现了模块化思想,即把软件划分为可独立命名和访问的构件,每个构件称为一个模块。当把所有模块组装到一起时则获得了满足问题需要的一个解。有人认为模块化是软件中能使程序获得理性管理的一个属性,完全由一个模块构成的程序由于其控制路径错综复杂、引用的跨度过大、变量的数量众多等因素,使人们对软件的理解非常困难。

对人类求解问题的实验研究表明,把两个问题组合起来进行求解的复杂性,往往要比分别对两个问题进行求解的复杂度之和更大,这也意味着所需的成本或资源也相应更多。这个结论导致所谓“分治法”。即将一个复杂问题分割成若干个可管理的小问题后,更易于求解,模块化正是以此为依据。但这是否意味着可把软件无限制地细分下去,从而使所需工作量越来越少呢?

事实上,如果分割过度,其他因素将开始发挥作用,反而导致开发效率的降低。对于一个给定的问题,当模块总数增加时,每个模块的成本确实减少了,但模块接口所需代价随之增加,致使软件总成本的发展趋势按照模块数日增长呈指数级增长。如果模块数为M时将获得最小开发成本,那么模块数在M附近选择.就能避免模块分割过度或不足。

3.内聚与耦合

为了提高模块化设计的有效性。很显然每个模块应该相对独立,其功能应该相对单一.而模块之间的接口应该尽dJ能简单。这可以用内聚和耦合这两个概念来刻画。内聚是一个模块内部各成分之间关联程度的度量,耦合时模块之间依赖程度的度量。软件的模块化设计应追求高内聚、低耦合。关于高内聚、低耦合的要求与结构化设计要求基本一致,在此就不做赘述。


更多阅读
返回列表
© 2010 TianMei Technology All rights reserved. ICP:辽B2-20150138辽公网安备 21010202000010号  目录概览