在上个世纪60年代中期爆发了众所周知的软件危机。为了克服这一危机,在1968、1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。与此同时,软件研究人员也在不断探索新的软件开发方法。这篇博客主要探讨两大开发方法,结构化方法与面向对象方法。

·1.结构化方法

·1.1基本概念

结构化方法(SD方法)是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。

·1.2分析步骤

结构化分析的步骤如下:
(1)分析当前的情况,做出反映当前物理模型的数据流图;
(2)推导出等价的逻辑模型的数据流图;
(3)设计新的逻辑系统,生成数据字典和基元描述;
(4)建立人机接口,提出可供选择的目标系统物理模型的数据流图;
(5)确定各种方案的成本和风险等级,据此对各种方案进行分析;
(6)选择一种方案;
(7)建立完整的需求规约。
结构化设计方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。它通常与结构化分析方法衔接起来使用,以数据流图为基础得到软件的模块结构。结构化方法尤其适用于变换型结构和事务型结构的目标系统。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。结构化设计的步骤如下:
(1)评审和细化数据流图;
(2)确定数据流图的类型;
(3)把数据流图映射到软件模块结构,设计出模块结构的上层;
(4)基于数据流图逐步分解高层模块,设计中下层模块;
(5)对模块结构进行优化,得到更为合理的软件结构;
(6)描述模块接口。

·1.3设计原则

结构化设计方法的设计原则:
(1)使每个模块尽量只执行一个功能(坚持功能性内聚);
(2)每个模块用过程语句(或函数方式等)调用其他模块;
(3)模块间传送的参数作数据用;
(4)模块间共用的信息(如参数等)尽量少。

·2.面向对象方法

·2.1基本概念

面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

2.2分析步骤

(1) 分析确定在问题空间和解空间出现的全部对象及其属性;
(2) 确定应施加于每个对象的操作,即对象固有的处理能力;
(3) 分析对象间的联系,确定对象彼此间传递的消息;
(4) 设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;
(5) 分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;
(6) 确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;
(7) 设计每个类关于对象外部特性的描述;
(8) 设计每个类的内部实现(数据结构和方法);
(9) 创建所需的对象(类的实例),实现对象间应有的联系(发消息)。

2.3设计原则

用OOA方法对所调查结果进行分析处理时,一般依据以下几项原则:
(1) 抽象(abstraction)是指为了某一分析目的而集中精力研究对象的某一性质,它可以忽略其它与此目的无关的部分。在使用这一概念时,我们承认客观世界的复杂性,也知道事物包括有多个细节,但此时并不打算去完整地考虑它。抽象是我们科学地研究和处理复杂问题的重要方法。抽象机制被用在数据分析方面,称之为数据抽象。数据抽象是OOA的核心。数据抽象把一组数据对象以及作用其上的操作组成一个程序实体。使得外部只知道它是如何做和如何表示的。在应用数据抽象原理时,系统分析人员必须确定对象的属性以及处理这些属性的方法,并借助于方法获得属性。在OOA中属性和方法被认为是不可分割的整体。抽象机制有时也被用在对过程的分解方面,被称之为过程抽象。恰当的过程抽象可以对复杂过程的分解和确定以及描述对象发挥积极的作用。
(2) 封装(encapsulation)即信息隐蔽。它是指在确定系统的某一部分内容时,应考虑到其它部分的信息及联系都在这一部分的内部进行,外部各部分之间的信息联系应尽可能的少。
(3) 继承(inheritance)是指能直接获得已有的性质和特征而不必重复定义它们。OOA可以一次性地指定对象的公共属性和方法,然后再特化和扩展这些属性及方法为特殊情况,这样可大大地减轻在系统实现过程中的重复劳动。在共有属性的基础之上,继承者也可以定义自己独有的特性。
(4)相关(association)是指把某一时刻或相同环境下发生的事物联系在一起。
(5)消息通信(communication with message)是指在对象之间互相传递信息的通信方式。
(6)组织方法。在分析和认识世界时,可综合采用如下三种组织方法(method Of organization):
  1.特定对象与其属性之间的区别。
  2.整体对象与相应组成部分对象之间的区别。
  3.不同对象类的构成及其区别等。
(7)比例(scale)是一种运用整体与部分原则,辅助处理复杂问题的方法。
(8) 行为范畴(categories Of behavior)是针对被分析对象而言的,它们主要包括:1。基于直接原因的行为。2。时变性行为。3。功能查询性行为。

3.结构化方法与面向对象方法的区别

相信读者在这里对两种软件开发方法有了一个比较清晰的认识,后续讨论也主要围绕方法的分析步骤和设计原则进行讨论。区别主要有以下几点:

1.解决问题的思想:结构化方法以过程为核心,处理客观世界问题。相对的,面向对象方法更好地把握事物的运行规律,贴近事物本身。用更形象的语言来描述,结构化方法通过分析过程思考解决问题的方案,而面向对象方法更像是通过创造事物本身来解决事物带来的问题。再精辟一点,结构化方法就是知事晓理,面向对象方法是格物致知。

2.分割问题的角度:结构化方法分割模块的方式,以模块的功能单一为界限。面向对象方法是以对象的独立性,完整性为界限。

3.程序的控制方式:结构化方法按照设计和需求调用,模块之间存在控制与被控制的关系。面向对象是自身形成管理的整体,原则上不能被对象外的方法修改数据。

4.结构化方法与面向对象方法的共同点

1.相同的预定目标:面向对象方法与结构化方法都是把客观世界中要解决的问题转向计算机上的实现作为预定目标。从抽象的意义上讲,面向对象方法与结构化方法从实现预定目标和组成上是完全一致的。

2.分解和抽象原则:分解和抽象是软件开发中控制问题复杂性的重要原则。分解即是化整为零,各个击破;而抽象则是通过分解体现,在逐层进行的分解中,上一层是下一层的抽象,而下一层是对上层的具体解释或体现,运用抽象可以不用一下考虑过多的细节,而是逐步有节奏地去了解更多的细节。因此,分解和抽象的原则是处理客观世界复杂问题的最有力的武器,面向对象方法和结构方法在运用分解和抽象原则上的要求则是完全一致的。

3.在局部化和重用性设计:局部化是软件开发中的一个重要原则,即不希望软件一部分过多地涉及或影响软件的其他部分。在结构化方法中,局部化主要体现在代码与数据的分隔化,即程序各部分除必要的信息交流外,彼此相互隔离而互不影响,而面向对象方法则采用数据、代码的封装,即将数据和代码封装成一个能动的整体对象。在运用局部化原则上,面向对象方法继承了结构化方法的宗旨,但它比结构化方法的运用更为深入、更为彻底。

5.总结

总的来说结构化方法面向过程,更接近于将需求在计算机物理层面客观实现,相对的面向对象方法更加符合人的认知。所以在实际的开发过程中,我们可以将二者结合,采用将两者综合的程序设计方法,比如在分析和设计的阶段使用结构化的分析和设计方法,进一步生成软件的结构图。然后通过一些转换的手法获得面向对象编码所需要的控件,最后使用面向对象的编码方式完成整个程序的设计。这样既结合了结构化方法在分析和设计中节省时间,减少错误,简化问题的特点,又保证了程序设计的高交互性与高重用性,并且使得软件的适应性也得到了很大的提升。

posted on 2016-12-23 02:27  钱老爷子  阅读(233)  评论(0)    收藏  举报