1、结构化方法
结构化方法起源于1960~1980年代。随着当时软件工程业的发展,软件规模逐步扩大。而传统的以功能和数据为中心的开发方法已经无法适用于大型系统的开发,由此结构化方法运用而生。
结构化方法是结构化分析(SA)、结构化设计(SD)和结构化编程技术(SP)的组合。
1.1 结构化分析
结构化分析(Structed)的精髓在于抽象、求精和信息隐藏。通过对系统行为的自顶向下的分析,用状态转移图(SDT)、数据字典(DD)和数据流图(DFD)等图表的方式精确描述系统从顶层到向下细化的各层的行为和数据,将复杂系统流程表述成一个个子流程的集合,简化了系统开发复杂度。下面结合实例简要叙述结构化分析流程。
假设我们要开发一个校园二手交易平台,在明确系统功能需求之后,首先根据系统功能需求建立系统数据模型——实体—关系图。
1.实体关系图明确了系统内的实体数据以及他们之间的关系,每个实体以及他们之间的关系都对应相应的系统功能。比如交易系统中实体有用户、管理员、商品等实体,用户可以购买商品或者卖出商品,用户与商品间是一对多关系。管理员可以管理用户,与用户是一对多的关系,这样就建立了系统内实体--关系图。
2.实体—关系图描述了系统中静态的数据关系,只能对应功能点,而对于系统的功能流程无法描述。数据流图通过分析数据在系统内的流动,从对顶层的宏观描述逐步细化,确定了系统内的数据流动过程。
一个基本的数据流图元素包括外部实体(数据产生者/消费者)、处理(数据处理者)、数据流(流经系统的数据/输入/输出)和数据存储(非即时使用的数据),将许多元素根据他们之间的功能要求组合起来,就形成了对系统内数据流动的描述。
3上述方法都是对系统内数据行为的描述,而对于系统外部而言,系统展现在人眼前的不是数据,而是系统的一系列行为,数据是隐藏在系统内部的。所以有必要以数据描述为基础,展示系统的状态变化过程,也就是建立状态转移表。
转台转移表包括状态(state)、状态转移(state transition)、事件(event)和活动(action)。状态描述了系统的不同工作阶段,不同的状态对应不同的行为。状态转移表示系统从一个状态转移到另一个状态的过程。在系统使用过程中,在不同状态下,不同事件的出现都会导致系统进入不同的活动,产生不同的状态转移,系统也由此正常工作。
如交易平台中,注册用户在登陆状态下将商品加入购物车,商品将会加入该用户的购物车,而在未登录状态下点击加入购物车,系统会进入登陆提示页面。
1.2结构化设计
在结构化分析阶段,我们得到了实体关系图、数据流图和状态转移图等图表,结构化设计可以将这些图表转化成系统的组成结构设计图,并由此编码实现系统。
根据数据流图的分层结构构造系统的顶级模块,并将模块功能细分,根据下层数据流构造相应的子模块,并保证数据模块之间的功能独立性,从而完成数据流图到软件结构图之间的转化。
图1:数据流图到结构设计图
1.3结构化编程
在上面我们已经得到软件结构图,可以知道软件结构图是分层细化的。所以在系统的编码过程中,程序员不需要关注系统所有的流程细节,只需要关注当前设计模块的行为,从而自顶向下地完成系统编码,大大降低了系统实现难度。
图2:结构化程序
1.4结构化方法的优缺点
结构化方法的优点在于整体开发过程和各分层设计的完整性。在自顶向下的分析过程中,开发者可以对系统进行详细梳理分析,得到完整的系统设计,保证系统实现的正确性和稳定性。而在实际开发过程中,结构化开发方法对系统开发早期准备要求较高,而往往系统开发早期,开发者对系统的认识并不完整,这就容易导致后期开发过程的阻塞甚至项目重新开发,削弱了结构化方法的可用性。
2、面向对象方法
面向对象方法(Object-Oriented Method)起源于面向对象的编程语言,是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
面向对象方法同样包括面向对象分析、面向对象设计和面向对象变成三个部分。
2.1面向对象分析(OOA)
面向对象的分析方法(OOA),是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:
1.确定对象和类。根据要开发的系统总结出系统中的类和对象。
2.确定结构(structure)。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。
3.确定主题(subject)。主题是指事物的总体概貌和总体分析模型。
4.确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的实例。
5.确定方法(method)。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。
2.2 面向对象设计(OOD)
面向对象的设计方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。在OOD的设计过程中,要展开的主要有如下几项工作。
1. OOD要根据面向对象的概念模型整理分析阶段所确定的对象结构、属性、方法等内容,改正错误的内容,删去不必要和重复的内容等。
2. OOD要对各模块进行分类整理,以便于下一步数据库设计和程序处理模块设计的需要。整理的方法主要是进行归类,对类一&一对象、属性、方法和结构、主题进行归类。
2.3面向对象编程(OOP)
OOP是在结构化程序设计的基础上,于80年代初涌现的一种程序设计方法。封装、继承和多态是整个OOP方法的基础,主要用于在数据段外围构造保护层,以限制外界变化的影响,所有的数据访问都由保护层内的过程间接处理。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。OOP 主要有以下主要的概念:
组件:数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。
1. 抽象性:程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。
2. 封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。
3. 多态性:组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。
4. 继承性:允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性。
2.4面向对象方法的优缺点
优点:(1)是一种全新的系统分析设计方法(对象、类、结构属性、方法)
(2)适用于各类信息系统的开发。
(3)实现了对客观世界描述到软件结构的直接转换 ,大大减少后续软件开发量。
(4)开发工作的重用性、继承性高,降低重复工作量。
缺点:
(1)需要一定的软件支持环境。
(2)不太适宜大型的MIS开发,若缺乏整体系统设计划分,易造成系统结构不合理、各部分关系失调等问题。
(3)只能在现有业务基础上进行分类整理,不能从科学管理角度进行理顺和优化。
3.总结
结构化开发方法和面向对象开发方法都是当前比较流行的软件开发方法。相比面向对象方法,结构化方法更具整体统一性,得到的系统设计结果在行为一致、功能完善方面都有完整的分析做保证。相比结构化开发方法,面向对象方法更加直观,能够对应现实对象,并能实现模块的组合和重用,提升开发效率。在实际开发过程中,开发者可以根据项目的规模、复杂程度等因素选择不同的开发方法,提升开发效率。