XBOX

  PHP博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  13 随笔 :: 87 文章 :: 0 评论 :: 0 Trackbacks

一、结构化方法

结构化方法Structured Methodology是计算学科的一种典型的系统开发方法它采用了系统科学的思想方法从层次的角度自顶向下地分析和设计系统结构化方法包括结构化分析Structured Analysis简称SA结构化设计Structured Design简称SD和结构化程序设计Structured Program Design简称SP三部分内容其中SASD主要属于学科抽象形态的内容SP则主要属于学科设计形态方面的内容

在结构化方法中有两大类典型方法一类是以Yourdon的结构化设计Gane/Sersor结构化分析方法以及Demarco结构化分析方法为代表的面向过程面向数据流的方法另一类是以Jackson方法和Warnier-Orr方法为代表的面向数据结构的方法

1.1 结构化方法的产生和发展

1 结构化程序设计方法的形成

结构化方法起源于结构化程序设计语言在使用SP之前程序员都是按照各自的习惯和思路来编写程序没有统一的标准这样编写的程序可读性差更为严重的是程序的可维护性极差经过研究发现造成这一现象的根本原因是程序的结构问题

1966C.BÖhmG.Jacopini提出了关于程序结构的理论并给出了任何程序的逻辑结构都可以用顺序结构选择结构和循环结构来表示的证明在程序结构理论的基础上1968年戴克斯特拉提出了GOTO语句是有害的问题并引起普遍重视SP逐渐形成并成为计算机软件领域的重要方法对计算机软件的发展具有重要的意义伴随着SP的形成相继出现了Modula-2C以及Ada等结构化程序设计语言

2 结构化设计方法的形成

结构化程序设计需要事先设计好每一个具体的功能模块然后将这些设计好的模块组装成一个软件系统接下来的问题是如何设计模块

源于结构化程序设计思想的结构化设计方法就是要解决模块的构建问题1974W.StevensG.MyersL.Constantine等人在IBM系统IBM System杂志上发表了结构化设计Structured Design论文为结构化设计方法奠定了思想基础此后这一思想不断发展最终成为一种流行的系统开发方法

3 结构化分析方法的形成

结构化设计方法建立在系统需求明确的基础上如何明确系统的需求就是结构化分析所要解决的问题结构化分析方法产生于20世纪70年代中期最初的倡导者有Tom DemarcoEd Yourdon等人结构化分析在20世纪80年代又得到了进一步的发展并随着Ed Yourdon1989年所著的现代结构化分析Modern Structured Analysis的出版而流行开来现代结构化分析更强调建模的重要性

1.2 结构化方法遵循的基本原则

结构化方法的基本思想就是将待解决的问题看作一个系统从而用系统科学的思想方法来分析和解决问题结构化方法遵循以下基本原则

1抽象原则

抽象原则是一切系统科学方法都必须遵循的基本原则它注重把握系统的本质内容而忽略与系统当前目标无关的内容它是一种基本的认知过程和思维方式

2分解原则

分解原则是结构化方法中最基本的原则它是一种先总体后局部的思想原则在构造信息系统模型时它采用自顶向下分层解决的方法

3模块化原则

模块化是结构化方法最基本的分解原则的具体应用它主要出现在结构化设计阶段中其目标是将系统分解成具有特定功能的若干模块从而完成系统指定的各项功能

1.3 结构化方法的核心问题

模型问题是结构化方法的核心问题建立模型简称建模是为了更好地理解我们要模拟的现实世界建模通常是从系统的需求分析开始在结构化方法中就是使用SA方法构建系统的环境模型然后使用SD方法确定系统的行为和功能模型最后使用SP方法进行系统的设计并确定用户的现实模型

1环境模型

SA的主要任务就是要完成系统的需求分析并构建现实世界的环境模型在结构化方法中环境模型包括需求分析环境图和事件列表等内容

1需求分析

需求分析是系统分析的第一步它的主要任务是明确用户的各种需求并对系统要做什么作一个清晰简洁和无二义性的文档说明

需求分析阶段的用户一般是高级主管人事主管和执行官且基本上每个人都不直接参与新系统的开发

2环境图

环境图是数据流图的一种特殊形式环境图模拟系统的一个大致边界并展示系统和外部的接口数据的输入和输出以及数据的存储

3事件列表

事件列表是发生在外部世界但系统必须响应的叙述性列表事件列表是对环境图的一个补充

2 行为和功能模型

SD的主要任务就是要在系统环境模型的基础上建立系统的行为和功能模型完成系统内部行为的描述实现系统行为和功能模型的主要工具有数据字典数据流图状态变迁图和实体-联系模型等

1数据字典

数据字典是一个包含所有系统数据元素定义的仓库数据元素的定义必须是精确的严格的和明确的一个实体一般应包括以下几个部分的内容

名字

别名

用途

内容描述

备注信息

2数据流图

数据流图是SASD的核心技术它采用面向处理过程的思想来描述系统它是一种描述信息流和数据从输入到输出变换的应用图形技术

3状态变迁图

状态变迁图及时地描述了对象的状态它着重系统的时间依赖行为状态变迁图源于实时系统的建模并被广泛应用于商业信息处理领域中

状态变迁图看起来非常像数据流图然而它们之间却存在着本质的不同数据流图着重于数据流和数据转换的过程而状态变迁图着重于状态的描述如激励发生时的开始状态和系统执行响应后的结果状态状态变迁图的条件和一个过程的输入数据流相对应同时还与控制流的流出相对应

4实体联系模型

实体联系模型被用来模拟系统数据部件之间的相互关系实体联系模型独立于当前的系统状态并与具体的计算机程序设计语言无关

3 实现模型

SP的主要任务就是要在系统行为和功能模型的基础上建立系统的实现模型实现该模型的主要工具有处理器模型任务模型以及结构图等

1处理器模型

在多处理器系统和网络环境中还需要将处理器分成不同的组以便确定操作在哪个处理器上进行

2任务模型

任务模型建立在处理器模型的基础之上它将所有过程都划分成操作系统的任务

3结构图

结构图是使用图形符号来描述系统的过程和结构的工具结构图常由数据流图转换而来它展示了模块的划分层次和组织结构以及模块间的通信接口从而有助于设计者和程序开发人员进行系统的设计

在结构图中通常有一个主模块在高层并由该主模块启动程序并协调所有的模块低级模块则包含更详细的功能设计

4模块设计

在结构化方法中SP阶段的目标就是将系统分解成更容易实现和维护的模块SP方法要求每个模块执行单一的功能而且不同模块间的依赖性要尽可能低

5实现阶段

实现阶段包括系统的编码测试和安装这一阶段的产物主要是能够模拟现实世界的软件系统除此之外软件文档和帮助用户熟悉系统的客户培训计划也是这一阶段的产物

二、 面向对象方法

面向对象Object-Oriented简称OO方法是以面向对象思想为指导进行系统开发的一类方法的总称这类方法以对象为中心以类和继承为构造机制来抽象现实世界并构建相应的软件系统

2.1 面向对象方法的产生和发展

1面向对象程序设计语言的形成

与结构化方法一样面向对象方法也起源于面向对象程序语言Object-Oriented Program Language简称OOPL面向对象程序语言开始于20世纪60年代后期第一个OOPL是挪威计算中心的Kristen NygaardOle-Johan Dahl1967年研制的Simula语言该语言引入了许多面向对象的概念如类和继承性等

Simula语言的影响1972Alan KayXerox公司研制成功了Smalltalk语言

并对面向对象的一些概念作了更精确的定义1980Xerox公司推出的Smalltalk-80语言标志着OOPL进入实用化阶段

20世纪80年代OOPL得到了极大地发展相继出现了一大批实用的面向对象语言如Objective C1986C++1986Self1987Eiffel1987年和Flavors1986年等

2面向对象设计和面向对象分析的形成

20世纪80年代中期随着OOPL的推广使用面向对象技术很快被应用到系统分析和系统设计之中20世纪90年代面向对象分析Object-Oriented Analysis简称OOA和面向对象设计Object-Oriented Design简称OOD开始成熟一些实用的面向对象开发方法和技术相继出现如G.Booch提出的面向对象开发方法学P.CoadE.Yourdon提出的OOAOOD等等这些方法的提出标志着面向对象方法逐步发展成为一类完整的系统化的技术体系

2.2 面向对象方法的基本思想

大英百科全书描述了分类学理论中有关人类认识现实世界普遍采用的3个构造法则

1区分对象及其属性

2区分整体对象及其组成部分

3形成并区分不同对象的类

按照P.CoadE.Yourdon的论述面向对象思想正是根据以上3个常用的构造法而建立起来的在实际应用中它采用对象及其属性整体和部分类成员和它们之间的区别等3个法则来对系统进行分析和设计遵循了分类学理论的基本原理符合认识来源于实践又服务于实践的辩证唯物主义思想

OO方法中对象和类是其最基本的概念其中对象是系统运行时的基本单位是类的具体实例是一个动态的概念而类是对具有相同属性和操作或称方法服务的对象进行的抽象描述是对象的生成模板是一个静态的概念

类可以形式化地定义为

Class=<IDINHATTOPEITF>

其中

ID类名

INH类的继承性集

ATT属性集

OPE操作集

ITF接口消息集

类是数理哲学和逻辑哲学的根本问题类理论是逻辑方法学数学方法论和哲学方法论的本体论基础对类的进一步认知如对类的构成原则基本特征种类以及类的关系与类的运算等的认知有助于理解OO方法的实质感兴趣的读者可参阅赵总宽等人编著的现代逻辑方法论一书

1面向对象模型及其特性

面向对象模型是一个可见的可复审的和管理的层次模型集一般认

为面向对象模型应包括下面几个特性

1身份状态行为

身份是某一对象区别于其他对象的属性所有的对象都有一个可以相互区别的身份对象与对象之间相互区别是通过它们固有的独立的个体存在而不是通过它们的属性来区分的相同的属性不等于相同的身份例如两个苹果尽管有相同的形状颜色或质地但仍是两个独立的苹果

状态是指对象所有属性被附上值所具有的一种情形

行为是指对象在其状态变化和消息传递过程中的作用及反应状态可以定义为行为的累积结果而行为则可改变对象的状态

2分类

分类意味着有相同的数据结构属性和状态和行为的对象组成一个类每个类描述一个类的集合每个对象都是它的类的一个实例实例的每个属性都有它自己的值但是和类的其他实例共享相同的属性名和操作

3继承

继承是指在类中基于层次的关系共享属性和操作一个类可以被细化为子类每个子类继承父类的所有属性并可以增加它独有的属性

4多态

多态是指相同的操作在不同的类上可以有不同行为的特性

2面向对象模型遵循的基本原则

面向对象模型遵循的基本原则有抽象封装模块化以及层次原则等

1抽象

抽象是处理现实世界复杂性的最基本方式在OO方法中它强调一个对象和其他对象相区别的本质特性对于一个给定的域确定合理的抽象集是面向对象建模的关键问题之一

2封装

封装是对抽象元素的划分过程抽象由结构和行为组成封装用来分离抽象的原始接口和它的执行

封装也称为信息隐藏Information Hiding它将一个对象的外部特征和内部的执行细节分割开来并将后者对其他对象隐藏起来

3模块化

模块化是已经被分为一系列聚集的和耦合的模块的系统特性对于一个给定的问题确定正确的模块集几乎与确定正确的抽象集一样困难通常每个模块应该足够简单以便能够被完整地理解

4层次

抽象集通常形成一个层次层次是对抽象的归类和排序在复杂的现实世界中有两种非常重要的层次一个是类型层次另一个是结构性层次

确定抽象的层次是基于对象的继承它有助于在对象的继承中发现抽象间的关系搞清问题的所在理解问题的本质

2.3 面向对象方法的核心问题

面向对象方法与结构化方法一样其核心问题也是模型问题面向对象模型主要由OOA模型OOD模型组成其中OOA主要属于学科抽象形态方面的内容OOD主要属于学科设计形态方面的内容

1 OOA模型

OOA关心的是构建现实世界的模型问题如何解决现实世界的建模问题呢根据系统科学的思想首先需要对复杂的系统进行分解最常用的分解方法就是分层

关于OOA模型的分层方法有不少本书采用P.CoadE.Yourdon的分层方法该方法将OOA模型划分为5个层次即主题层对象层结构层属性层和服务层OOA的主要任务就是要在问题域上构建具有这5个层次内容的OOA模型

1主题层

主题给出OOA模型中各图的概况为分析员和用户提供了一个相互交流的机制有助于人们理解复杂系统的模型构成

2对象层

对象是属性及其专用服务的一个封装体是对问题域中的人事和物等客观实体进行的抽象描述对象由类创建类是对一个或多个对象的一种描述这些对象能用一组同样的属性和服务来刻画

3结构层

OO方法中组装结构和分类结构是两种重要的结构类型它们分别刻画整体与部分组织以及一般与特殊组织

组装结构即整体与部分遵循了人类思维普遍采用的第2个基本法则即区分整体对象及其组成部分

分类结构即一般与特殊遵循了人类思维普遍采用的第3个法则在OO方法中就是类成员和它们之间的区别

4属性层

属性是描述对象或分类结构实例的数据单元类中的每个对象都具有它的属性值属性值就是一些状态的信息数据

5服务层

一个服务就是收到一条信息后所执行的处理操作服务是对模型化的现实世界的进一步抽象

2 OOD模型

OOAOOD不存在转换的问题OOD根据设计的需要仅对OOA在问题域方面建立的5个抽象层次进行必要的增补和调整同时OOD还必须对人机交互任务管理和数据管理3个部分的内容进行抽象最后建立完整的OOD模型该模型的主要内容可以用表1所示的形式来概括

 

1  OOD模型

 

 

OOA模型中对象强调问题域用问题域中的意义来表示事物或概念在OOD中当对象含有问题域中的意义时对象被称为语义对象除了分析以外OOD不仅强调系统的静态结构而且还强调系统行为的动态结构

3支持OOAOOD模型的实现问题

使用OOPL来实现OOAOOD模型相对来说比较容易因为OOPL的构造与OOAOOD模型的构造是相似的OOPL支持对象运行多态性和继承等概念使用非OO语言则需要特别注意和规定保留程序的OO结构OO概念可以映射到非OO语言结构中这只是一个表达方式的问题不是语言能力的问题因为编程语言最终要转换为机器语言对OO模型而言使用OOPL效果更好一些

posted on 2009-02-20 23:40 XBOX 阅读(494) 评论(0)  编辑 收藏 引用 网摘 所属分类: 数据结构与算法

只有注册用户登录后才能发表评论。
网站导航: