- 结构化方法
结构化方法是一种传统的软件开发方法,这种方法强调的是自顶向下、逐步求精、模块化设计、结构化编码的思想与要点。结构化软件开发方法可以说是最早的软件开发方法,同时也是到现今开发应用中比较普遍、比较成熟的软件开发方法,由结构化方法所引入的工程与结构化的思想对于软件的设计、开发与编写都有很大的影响。
结构化方法中自顶向下的思想将程序的设计分层,将程序的功能分解,程序变成了一种逐步向下,从概况到详细的过程。而结构化方法中的模块化设计将程序所需要的各种功能分解,将一个系统划分为若干个模块,每一个模块实现自己特定的功能,模块彼此之间相互独立,通过自顶向下的层次关系来进行上下层里的调用操作。
下图即为结构化方法分层、分模块的示例图。
结构化方法按软件生命周期划分,有结构化分析(SA),结构化设计(SD),结构化实现(SP)。
结构化分析的步骤如下:
①分析当前的情况,做出反映当前物理模型的DFD;
②推导出等价的逻辑模型的DFD;
③设计新的逻辑系统,生成数据字典和基元描述;
④建立人机接口,提出可供选择的目标系统物理模型的DFD;
⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;
⑥选择一种方案;
⑦建立完整的需求规约。
结构化设计方法给出一组帮助设计人员在模块层次上区分设计质量的原理与技术。它通常与结构化分析方法衔接起来使用,以数据流图为基础得到软件的模块结构。SD方法尤其适用于变换型结构和事务型结构的目标系统。在设计过程中,它从整个程序的结构出发,利用模块结构图表述程序模块之间的关系。结构化设计的步骤如下:
①评审和细化数据流图;
②确定数据流图的类型;
③把数据流图映射到软件模块结构,设计出模块结构的上层;
④基于数据流图逐步分解高层模块,设计中下层模块;
⑤对模块结构进行优化,得到更为合理的软件结构;
⑥描述模块接口。
其中上述步骤中所述的DFD即指的是数据流图,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,上图就是一个图书馆管理系统的数据流图模型。
总而言之,结构化方法的基本原则就是分解原则和模块化原则,分解原则是结构化方法中最基本的原则,它是一种先总体后局部的思想原则,在构造信息系统模型时,它采用自顶向下、分层解决的方法,使得程序的思路由概括到具体,逐渐地变得明朗清晰。模块化原则将程序分为多个模块,并且使每个模块尽量只执行一个功能,每个模块之间用过程语句或函数方式等调用其他的模块。
2.面向对象方法
对比与结构化的方法,面向对象的方法则不是将程序按照功能的不同分解开来,而是按照不同的对象来进行分解。
在面向对象的思想里,客观世界中的事物都是对象,对象之间存在一定的关系,并且复杂对象由简单对象构成,而具有相同属性和操作的对象属于一个类,对象是类的一个实例。另外,类与类之间可以有层次结构,即类可以有子类,其中,子类继承父类的全部属性和操作,而且子类有自己的属性和操作。就比如说,动物是一个大类,鸟是动物的一种,把鸟分成一个类的话,那么鸟类就是动物类的子类,而在鸟类中有麻雀,有鹦鹉,这些都是鸟类这个笼统的类的一些实例,他们就是鸟类这个类中的对象。其实从上面的这些示例中就可以看出,在面向对象的思想中,强调充分运用人在日常逻辑思维中经常采用的思想方法与原则,因此,面向对象方法与人的日常思维方法十分的相似,这使得用户与编程者、测试人员都能很容易地理解整个程序的架构和运作方式。
面向对象的方法分为面向对象的分析方法(OOA)和面向对象设计(OOD)。
在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:
①确定问题域;
②区分类和对象;
③区分整体对象以及组成部分,确定类的关系以及结构;
④定义属性和服务;
⑤确定附加的系统服务。
面向对象分析方法是立足于应用,用于刻画问题,以此得出程序的总体设计结构。
OOD的方法用于细化分析结果并补充实现相关,其大致上遵循如下五个基本步骤:
①改进和完善系统分析的结果;
②设计交互过程和用户接口;
③设计任务管理,以及子系统以及任务之间的协调方式;
④设计全局资源,确定任务或子系统的资源分配;
⑤对象设计。
面向对象的原则中还存在封装性和多态性。封装是对抽象元素的划分过程抽象,由结构和行为组成,封装用来分离抽象的原始接口和它的执行。封装使数据和加工该数据的方法封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性,而对象的内特性对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。而多态性则指的是对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。
3.优缺点比较
结构化的方法由于其自顶向下的特性,决定了这种程序是由表及里、由大到小、由概括到具体的程序。这样一来,处理问题的过程变得由易到难,逐层解决问题,编程的思路更加清晰,从而降低了处理问题的难度。但是,在使用结构化的方法解决问题的时候,在得到问题本质性的描述之前,不断分解出的结论和需要处理的信息越来越多、越来越复杂。因为这种逐层解决的思想,它需要对问题有比较透彻的理解,要求设计者有大局观,能够透过问题的表象抓住问题的本质。因此,当软件项目较小、系统设计者能力足够高的时候,结构化方法能快速的找到最简洁、高效率的逻辑模型。但是对于复杂的问题,结构化方法的帮助有限,但它有助于使用面向分析方法的系统分析员确认系统最初的高阶模型。
面向对象方法与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在软件维护中可维护性也较高,并且易于测试和调试,面向对象方法直接由问题入手,来进行系统的建模。面向对象软件的稳定性好,对软件的局部进行修改时,不会引起整体的变化,而且对局部修改容易实现;另外,面向对象软件的可重用性好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度。但是由于面向对象方法总是试图抽象出更公用的类,因此对系统分析员抽象事物和把握最初分析方向的要求很高,常常难以控制抽象 的对象,其掌握难度高于结构化分析方法。对于需求变化频繁的系统,得到一个高度可复用的面向对象软件系统设计是很困难的事情。
结构化方法与面向对象方法并不是对立的,不论哪一种设计方法,都有自己的优势,当然也会有自己的劣势,对于每个问题,需要设计者透彻理解,才能正确地找到适合当前问题的方法。