520 likes | 628 Views
第 4 章 GIS 软件工程的分析方法. 基本内容 结构化的系统分析方法和面向对象的分析方法 。 教学要求: 重点掌握 面向对象的分析方法 。 重点: OMT 分析方法的三种模型。. 4.1 结构化分析方法. 4.1.1 概述. 结构化方法: 结构化方法是指根据某种原理,使用一定的工具,按照特定步骤工作的软件开发方法。它遵循的原理是 自顶向下 、 逐步求精 ,使用的工具有数据流图、数据字典、判定表、判定树和结构化语言等。 结构化方法的组成: 结构化分析( SA ) 结构化设计( SD ) 结构化程序设计( SP ).
E N D
第4章 GIS软件工程的分析方法 • 基本内容 结构化的系统分析方法和面向对象的分析方法。 • 教学要求: 重点掌握面向对象的分析方法。 • 重点: OMT分析方法的三种模型。
4.1 结构化分析方法 4.1.1 概述 结构化方法: 结构化方法是指根据某种原理,使用一定的工具,按照特定步骤工作的软件开发方法。它遵循的原理是自顶向下、逐步求精,使用的工具有数据流图、数据字典、判定表、判定树和结构化语言等。 结构化方法的组成: 结构化分析(SA) 结构化设计(SD) 结构化程序设计(SP)
发展历程: • (1)结构化程序设计 • 结构化程序设计是20世纪60年代末由Dijkstra提出的,旨在控制程序编制中的复杂性问题。 • (2)结构化设计 • 20世纪70年代中期L.L.Constantine和E.Yourdon提出了结构化设计。它的目标在于控制系统体系结构一级的复杂性,实施原则是基于功能分解,验证技术是人工复审测试。 • (3)结构化分析 • 20世纪70年代末由Demarco提出了SA方法。结构化分析实施的原则是面向数据流,基于功能分解,靠人工复审测试进行验证。
基本思想及其特点: • (1)结构化方法的思想 • 结构化方法的思想是自顶向下,逐步求精。 • (2)结构化方法的原则 • 结构化方法的原则是抽象与分解。 • (3)结构化方法的特点 • 1)它是使用最早的开发方法,使用时间也最长。 • 2)它应用最广,特别适合于数据处理。 • 3)相应的支持工具多,发展较为成熟。
优点和存在问题: • 结构化方法的优点: • 1)简单、适用。 • 2)适于瀑布模型,易于开发者掌握。 • 3)成功率较高。 • 4)特别适于数据处理领域中的应用。 • 结构化方法的优点: • 1)对于大规模项目,特别复杂的应用不太适应。 • 2)难于解决软件重用的问题。 • 3)难于适应需求的变化。 • 4)难于彻底解决维护问题。
4.1.2 结构化分析的方法 • 自顶向下逐层分解的分析策略 把一个复杂的问题划分成若干小问题,然后再分别解决,将问题的复杂性降低到人可以掌握的程度。 分解可分层进行,先考虑问题最本质的方面,忽略细节,形成问题的高层概念,然后逐层添加细节,最高层的问题最抽象,而底层的较为具体。
描述工具: • 1)数据流图 • 数据流图描述系统的分解,即描述系统由哪几部分组成,各部分之间有什么联系。 • 2)数据字典 • 数据字典定义了数据流图中的数据和加工。 • 3)描述加工逻辑的结构化语言、判定表及判定树 • 结构化语言、判定表及判定树详细描述数据流图中不能被再分解的每一个基本加工的处理逻辑。
SA分析步骤: • 1)建立当前系统的物理模型 • 用一个模型来反映自己对当前系统的理解(系统流程图)。 • 2)抽象出当前系统的逻辑模型 • 对物理模型进行分析,区分本质和非本质因素,去掉非本质因素,形成当前系统的逻辑模型。 • 3)建立目标系统的逻辑模型 • 分析、比较目标系统与当前系统逻辑上的差别,然后对“变化的部分”重新分解,逐步确定变化部分的内部结构,从而建立目标系统的逻辑模型。 • 4)作进一步补充和优化
4.2 面向对象基础 4.2.1 面向对象的概念 • 面向对象的基本思想 面向对象的基本出发点就是尽可能按照人类认识世界的方法和思维方法来分析和解决问题,客观世界是由许多具体的事物或事件、抽象的概念及规则等组成的。
面向对象的基本概念 (1)对象 在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象(Object),它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。 对象类型: 1)有形实体 2)作用 3)事件 4)性能说明
(2)对象的状态和行为 对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。 这个定义着重从信息模拟的角度看待“对象”。 对象具有状态,一个对象用数据值来描述它的状态。 对象具有操作,用于改变对象的状态,对象及其操作就是对象的行为。
(3)类 在面向对象的软件技术中,“类”就是对具有相同数据和相同操作的一组相似对象的定义,也就是说,类是对具有相同属性和行为的一个或多个对象的描述,通常在这种描述中也包括对怎样创建该类的新对象的说明。 实例就是由某个特定的类所描述的一个具体的对象。
(4)类的关系 类的结构关系分为一般具体结构关系和整体成员结构关系。 一般具体结构关系是“或” 关系,是” is a ”关系,用来描述现实世界中的一般化的抽象关系,其上层的类具有一般性和共性,下层的类具有具体性。 整体成员结构关系是“与”关系,是“has a”关系,用来描述现实世界中的类的组成的抽象关系,上层的类(父类)具有整体性,下层的类(子类)具有成员性。
(5)消息和方法 消息就是对象之间进行通信的一种构造,是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。消息包含接收对象去执行某种操作的信息,接收消息的对象经过解释,然后予以响应。通常,一个消息由下述三部分组成: 接收消息的对象; 消息选择符(也称为消息名); 零个或多个变元。
(5)消息和方法 方法是类中操作的实现过程,是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。
面向对象的特征 1)对象惟一性 每个对象都有自身惟一的标识,以此可找到相应的对象。 2)分类性 分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。
面向对象的特征 3)继承性 广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。 当一个类只允许有一个父类时,也就是说,当类等级为树形结构时,类的继承是单继承;当允许一个类有多个父类时,类的继承是多重继承。
面向对象的特征 4)多态性 多态性一词来源于希腊语,意思是“有许多形态”。 在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。也就是说,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。当对象接收到发送给它的消息时,根据该对象所属于的类动态选用在该类中定义的实现算法。
面向对象的要素 1)抽象 抽象是指强调实体的本质、内在的属性,而忽略一些无关紧要的属性。在系统开发中,抽象指的是在决定如何实现对象之前,对象的意义和行为。 合理应用抽象可以在分析、设计、程序结构、数据库结构及文档化等过程中使用统一的模型。
2)封装性(信息隐藏) 从字面上理解,所谓封装就是把某个事物包起来,使外界不知道该事物的具体内容。 综上所述,具有封装性的条件如下。 ·有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。 ·有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。 ·受保护的内部实现。实现对象功能的细节(私有数据和代码)不能在定义该对象的类的范围外进行访问。 通过封装把对象的实现细节对外界隐藏起来。
3)共享性 共享分类: (1)同一个类中对象的共享 同一个类中的对象有着相同数据结构和行为特征,这些对象之间是结构、行为特征的共享关系。 (2)在同一应用中的共享 在同一应用的类层次结构有继承关系的相似子类中,存在数据结构和行为的继承,使各相似子类共享共同的结构和行为。 (3)在不同应用中的共享 通过类库这种机制和结构来实现不同应用中的信息共享。
4)强调对象结构而不是程序结构 面向对象技术强调明确对象是什么(数据结构),而不强调对象是如何被使用,对象的使用依赖于应用的细节,并且在开发中不断变化。
4.2.2 面向对象的方法 • 面向对象方法的形成: • 首先把面向对象的思想用于设计阶段,于是有了面向对象的设计,然后用于分析阶段,产生了面向对象的分析,随着面向对象的系统开发方法过程等方面不断取得进展,产生了面向对象开发方法。
面向对象开发方法: • 1)Booch方法 • Booch方法通过分析正文描述,将其中的名词映射为对象,将其中的动词映射为方法,从而为对象和方法的认定提供了一种简单的策略。 • 2)Coad方法 • Coad方法是1989年Coad和Yourdon提出的,该方法比较完整而系统地介绍了面向对象的分析和面向对象的设计。 • 3)OMT方法 • OMT方法是1991年由James Rumbaugh等5人提出的,其开发工作是奠基在对真实世界的对象建模上,然后围绕这些对使用这个模型来构造独立于语言的设计。
4.4 OMT分析方法 4.4.1 OMT方法的发展 面向对象模型化技术(Object Modeling Technique)是美国通用电气公司提出的一套系统开发方法,它以面向对象思想为基础,通过构建一组相关模型(对象模型、动态模型和功能模型)来获得关于问题的全面认识(问题的领域模型)。 对象模型代表系统中的静态的、结构方面的特征; 动态模型代表系统对象之间的时间的、行为的、“控制”方面的特征; 功能模型描述了值与值之间的函数关系。
用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。 这三种模型都涉及到数据、控制和操作等共同的概念,只不过每种模型描述的侧重点不同。这三种模型从三个不同但又密切相关的角度模拟目标系统,它们各自从不同侧面反映了系统的实质性内容,综合起来则全面地反映了对目标系统的需求。 一个典型的软件系统组合了上述三方面内容:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。
4.4.2 三种模型的介绍 • 对象模型 • 对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。 • “类—&—对象”是一个专用术语,它的含义是“一个类及属于该类的对象”。图4.2(a)是表示类—&—对象的图形符号,图4.2(b)是表示类的图形符号。
类名是一类对象的名字。命名是否恰当对系统的可理解性影响相当大,因此,命名时应该遵守以下几条准则。类名是一类对象的名字。命名是否恰当对系统的可理解性影响相当大,因此,命名时应该遵守以下几条准则。 (1)使用标准术语 (2)使用具有确切含义的名词 (3)必要时用名词短语作名字 总之,名字应该是富于描述性的、简洁的而且无二义性的。
表示结构的图形符号 在面向对象分析和面向对象设计中,结构表示了问题域中的复杂关系,是对客观世界实体相互间关系的抽象。结构与目标系统的任务直接相关,也就是说,目标系统的任务决定了系统的结构。类—&—对象间的关系可以概括为归纳关系、组合关系及关联关系。
(1)关联关系(相关关系) 关联关系反映对象之间相互依赖、相互作用的关系。通常把两类对象之间的二元关系再细分为一对一(1∶1)、一对多(1∶M)和多对多(M∶N)等三种基本类型,类型的划分依据参与关联的对象的数目。 1)表示符号 2)阶 所谓阶就是参与关联的对象的个数。
3)链属性 链属性就是关联链的性质。 4)限定 一个受限的关联由两个对象及一个限定词组成。可以把限定词看作是一种特殊的链属性。利用限定词通常能有效地减少关联的阶数。 5)消息连接 消息连接的表示符号,是从消息发送者指向消息接收者的箭头线。
(2)组合关系(包容关系) 组合关系就是“整体—部分”关系,它反映了对象之间的构成关系。组合关系也称为聚集关系。 图4.7是表示组合关系的图形符号。 组合关系具有的最重要的性质是传递性。也就是说,如果A是B的一部分,B是C的一部分,则A也是C的一部分。 当组合关系有多个层次时,可以用一棵简单的聚集树来表示它。聚集树是多级组合关系的一种简化表示形式。
(3)归纳关系(继承关系) 归纳关系就是“一般—特珠”关系,它反映了一个类与若干个互不相容的子类之间的分类关系。高层类(即基类)说明一般性的属性,低层类(即派生类)说明特殊属性。低层类对象“即是(ISA)”某种特殊的高层类对象,它继承了在高层类中定义的属性和服务。 图4.9是表示归纳关系的图形符号。
对象模型之例 图4.10 一家公司的对象模型
动态模型 动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。 通常,用状态图来描绘对象的状态、触发状态转换的事件、以及对象的行为(对事件的响应)。 每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。也就是说,动态模型是基于事件共享而互相关联的一组状态图的集合。
1)事件 事件是某个特定时刻所发生的事情,它是对引起对象从一种状态转换到另一种状态的现实世界中的事件的抽象。事件没有持续时间,是瞬间完成的。 2)状态 状态就是对象在其生命周期中的某个特定阶段所具有的行为模式,它是对影响对象行为的属性值的一种抽象。 状态规定了对象对输入事件的响应方式。 3)行为 所谓行为,是指对象达到某种状态时所做的一系列处理操作。这些操作是需要耗费时间的。
状态图中使用的主要表示符号如下所述: 状态用圆形框或椭圆框表示,框内可标上状态名也可以不给状态起名字,行为在框内用关键字do(后接冒号)标明。 从一个状态到另一个状态的转换用箭头线表示,线上标以事件名。必要时可在事件名后面加一个方括号,括号内写上状态转换的条件。也就是说,仅当方括号内所列出的条件为真时,该事件的发生才引起箭头所示的状态转换。
功能模型 功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。 通常,功能模型由一组数据流图和限制组成。
三种模型之间的关系 在面向对象方法学中,对象模型是最基本最重要的,它为其他两种模型奠定了基础,我们依靠对象模型完成三种模型的集成。 下面扼要地叙述三种模型之间的关系。 1)针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。 2)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,它们同时与对象模型中的服务相对应。
3)功能模型中的处理,对应于对象模型中类—&—对象所提供的服务。 3)功能模型中的处理,对应于对象模型中类—&—对象所提供的服务。 通常,在顶层数据流图中的处理,对应于复杂对象提供的服务;在低层数据流图中的处理,对应于更基本的对象(基本对象是复杂对象的组成部分)的服务。有时一个处理对应多个服务,也有一个服务对应多个处理的时候。