本文汇总:结构化开发方法、面向对象开发方法、基于架构开发方法。
软件开发有很多种方法。如 结构化方法、原型法、基于模型的VDM(维也纳开发)方法、面向对象方法,等。
结构化方法 Structured Methodology
结构化方法是结构化分析,结构化设计和结构化编程的总称。
面向过程的开发方法,强调自顶向下、逐步求精、模块化设计。总的来说,就是对系统的功能进行分解,形成不同的模块,然后根据具体的模块进行结构化设计和编程,这样就能把一个庞大且复杂的系统分割成较为简单的部分,实现起来更为容易。
主要思想有几大块:
- 自顶向下,这是一种分层的思想,从上到下将整个系统分成不同的层次
- 模块化思想,将整个系统按功能分成不同的模块,按模块进行软件开发,模块间由接口相连
- 语句结构化,不再使用GOTO语句,使程序语言形成一定的规范结构,比如循环结构、顺序结构等
主要思想另一版本:
自顶向下、逐步求精、模块化技术。
结构化方法包括3部分:
结构化分析(SA)
结构化设计(SD)
结构化程序设计(SP) (即编码,不太注重)
包含3部分(另一版本):
面向过程分析:定义系统需要做什么,需要存储和使用哪些数据,需要什么输入和输出,以及如何把这些功能结合在一起来完成任务。主要工具是DFD。
面向过程设计:为下列事务提供指导:程序集是什么,每个程序应该实现哪些功能,如何把这些程序组成一张层次图。主要工具是结构图。
面向过程编程:具有一个开始和结束的程序或程序块,并且程序执行的每一步都由三部分组成:顺序、选择或循环结构。典型语言是C。
针对分析(可能是需求分析),面向数据流进行需求分析。工具和模型对应关系:
工具 模型
数据流图(DFD)
实体联系图(ER图)
状态图
数据字典
针对设计
首先构造具体的系统设计方案,确定系统的模块结构。第二步即为详细设计,在总体结构的基础上确定每个模块的结构和算法。
具体的步骤:
结构化分析步骤如下:
①分析当前的情况,做出反映当前物理模型的DFD;
②推导出等价的逻辑模型的DFD;
③设计新的逻辑系统,生成数据字典和基元描述;
④建立人机接口,提出可供选择的目标系统物理模型的DFD;
⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;
⑥选择一种方案;
⑦建立完整的需求规约。
结构化设计步骤如下:
①评审和细化数据流图;
②确定数据流图的类型;
③把数据流图映射到软件模块结构,设计出模块结构的上层;
④基于数据流图逐步分解高层模块,设计中下层模块;
⑤对模块结构进行优化,得到更为合理的软件结构;
⑥描述模块接口。
面向对象方法
是指以面向对象思想为中心进行软件开发的方法总称。
面向对象方法强调使用现实世界的概念抽象地思考问题,从而自然地解决问题。强调模拟现实世界中的概念而不强调过程或算法,支持重用。
面向对象方法基于面向对象语言,如JAVA和C++语言(还有Simula语言、Smalltalk语言),
基本概念:
- 对象:指系统运行时要研究的事物,它具有一定的状态,实现了数据和操作的结合。
- 类:是指具有相同属性和操作的对象的抽象描述。
三大特性: - 封装 将客观事物封装成抽象的类
- 继承 继承性是子类自动共享父类之间数据和方法的机制。
- 多态 对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。
面向对象方法包括3部分:
面向对象分析(OOA)
面向对象设计(OOD)
面向对象程序设计(OOP)
3部分另一版本:
面向对象分析(OOA):定义在系统中工作的所有类型的对象,并显示这些对象如何通过相互作用来完成任务,主要工具 UML。
面向对象设计(OOD):定义在系统中人机进行通讯所必需的所有类型的对象,并对每种类型的对象进行细化,以便可以用一种具体的语言来实现这些对象。
面向对象程序设计(OOP):用某种具体语言(如C++、Java、C#)来实现各种对象的行为,包括对象间的消息传递。
一般使用 UML 图进行分析。UML 4+1 视图
涉及 UML 概念(基本构造块、规则和公共机制),常见关系,类图共6种,用例图有3种。
基本原则(有的是五大,有的是七大)
方法步骤:
(1) 分析确定在问题空间和解空间出现的全部对象及其属性;
(2) 确定应施加于每个对象的操作,即对象固有的处理能力;
(3) 分析对象间的联系,确定对象彼此间传递的消息;
(4) 设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;
(5) 分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;
(6) 确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;
(7) 设计每个类关于对象外部特性的描述;
(8) 设计每个类的内部实现(数据结构和方法);
(9) 创建所需的对象(类的实例),实现对象间应有的联系(发消息)。
2种方法对比:
思想、原则、软件开发中处理问题的方式来讨论一下这两种方法的区别和联系。
思想上:结构化方法的思想主要有三个方面,第一方面是自顶向下,这是一种分层的思想,从上到下将整个系统分成不同的层次;第二方面是模块化思想,将整个系统按功能分成不同的模块,按模块进行软件开发,模块间由接口相连;第三方面是语句结构化,不再使用GOTO语句,使程序语言形成一定的规范结构,比如循环结构、顺序结构等。而面向对象方法的主要思想显然是面向对象思想,将系统中要处理的问题看作对象,复杂对象由简单对象组成。具有相同属性和操作的对象属于一个类,类之间有类似于结构化的层次,可以有子类,且可以继承父类的全部属性并具有自己的属性和操作。类具有封装性,将内部属性和操作隐藏。面向对象的思想强调抽象、继承和封装。
原则上:结构化和面向对象方法都遵循抽象原则,但其具体内容不同。结构化方法的抽象原则指忽略与系统无关的内容,注重系统本质。而面向对象的抽象是指将面向对象中的对象进行抽象,使其与其他对象区别开来。结构化和面向对象都遵循模块化原则,即将一个复杂的系统按功能划分成较为简单的模块。结构化方法还遵循分解原则,自顶向下进行分层解决。面向对象方法还遵循封装原则和层次原则。封装是指将对象外部特征和内部操作分开,公共部分只能看到对象的外部特征。层次由抽象集形成,包括类型层次和结构性层次,它有助于发现抽象关系,理解问题本质。
处理问题的方式上:结构化方法在软件开发中是以过程为中心的,是面向过程的开发方法;面向对象强调对象与对象间的关系,更符合人们面对客观世界时处理问题的思维。结构化方法把客观世界的问题抽象成计算机可以处理的过程,用系统科学的方法来解决问题;面向对象方法则是用计算机模拟客观世界中的事物,更加直观。结构化方法通过程序处理数据,各模块间存在控制关系;面向对象的数据和代码是封装的,其它对象不能修改其数据,只能由自身的函数完成。这两种方法都用较为容易实现的模块组成较为复杂的系统整体。
从这三方面讨论了结构化方法和面向对象方法的区别和联系之后,我们来总结以下两者各自的优缺点。结构化方法的优点是考虑问题的方式较为合理,先确定主要系统功能,然后逐层深入,由简到难,逐渐将一个大致的总体结构具体化,最终全部实现其功能。结构化的模块化使得问题难度降低,开发软件时思路更清晰,,编写的程序也更加简明,可读性更高。面向对象方法的优点在于其开发软件的思维与人类思维方法一致,用户更容易理解。而由于面向对象的封装性,局部的改变不会影响整体系统的功能,使得管理人员调试维护起来也很方便,可靠性也更高。而面向对象方法也使用了模块化的思想,将复杂问题分解成独立的小问题,降低了难度和成本。
结构化由于要对一个整体问题不断分解,要处理的条件和信息也会越来越多,有时候会给开发人员编程时造成麻烦,这需要他们有能从整体从全局看待问题的能力,这也使得结构化方法能处理的复杂问题难度有一定的限制。而且由于软件要不断发展,用户的需求也在不断提高,系统的功能模块需要修改,结构化方法开发的系统会由于局部修改而发生较大的变化,即有修改时需要重新设计,开发周期太长,不利于维护。面向对象虽然对于用户使用起来很方便,但对于开发人员抽象对象的能力有很高的要求。对于对象的建立不但要准确,还要全面,并且符合模块的要求,若整体模块划分不合理,对功能会有很大的影响。面向对象的封装性也给错误定位带来了一定的困难,出错时需要查找每个模块是否有故障。此外,由于面向对象的模型很复杂,UML图需要一定的专业知识才能看懂,使得在与客户或者用户沟通时有一定的难度。
软件系统的开发需要选择适合的方法,面向对象是现如今软件开发的主流方法,而结构化方法的数据流需求分析的特点在信息管理领域还有一定的应用。软件开发中从来没有过时与否之说,我们所做的努力都是为了提高软件质量、降低开发成本,充分满足用户需求。所以我们不能盲目追求新思维、新方法,只要是符合我们实际开发要求,就可以使用,或者将多种方法混合使用,比如既需要处理实时信息又要数据库支持同时还有大量操作请求的系统,就可以在面向对象方法为主体的系统中嵌入部分结构化方法。我们在实际的软件开发过程中要根据具体情况选择要使用的开发方法,做出合适的选择,应用到开发中。
基于架构软件开发 ABSD
在另一文档中写了