软件工程学课件.ppt

上传人:本田雅阁 文档编号:2604081 上传时间:2019-04-16 格式:PPT 页数:249 大小:518.01KB
返回 下载 相关 举报
软件工程学课件.ppt_第1页
第1页 / 共249页
软件工程学课件.ppt_第2页
第2页 / 共249页
软件工程学课件.ppt_第3页
第3页 / 共249页
亲,该文档总共249页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《软件工程学课件.ppt》由会员分享,可在线阅读,更多相关《软件工程学课件.ppt(249页珍藏版)》请在三一文库上搜索。

1、软件工程学,中国科学技术大学网络学院,9.1 面向对象的概念 9.2 面向对象的开发过程 9.3 面向对象分析与模型化 9.4 面向对象设计 9.5 面向对象程序的实现与测试,第9章 面向对象技术,9.1面向对象的概念,开发模式 什么是面向对象 对象 类 继承,开发模式(Paradigm),开发模式又称为范型、范例、风范或模式(Pattern)。开发模式定义了 特定问题和应用的开发过程中将遵循的步骤; 确定将用于表示问题和解的那些成分的类型; 利用这些成分表示与问题解决有关的抽象; 直接得到问题的结构。,开发模式的选择影响到整个软件开发生存期。就是说,它支配了 设计方法 编码语言 测试和检验技

2、术 的选择,面向过程开发模式,面向过程开发模式产生过程的抽象。 这些抽象的基础是把软件视为处理流,并定义成由一系列步骤构成的算法。 每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构。,面向过程开发模式的特点,过程性开发模式侧重建立构成问题解决的处理流。 数据抽象、数据结构根据算法步骤的要求开发,它贯穿于过程,提供过程所要求操作的信息。 系统的状态是一组全局变量,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。, Initialize system; Create and draw i

3、nterface; while QUIT not selected do case,Mouse event: create shape structure; read mouse movements for data; store newly created shape on list of shape records; KeyPress event: if key = q then exit loop; else ignore; Ecpose event: refresh display by drawing each shape structure; Shut down system;,面

4、向对象开发模式,在面向过程开发模式中优先考虑的是过程抽象,在面向对象开发模式中优先考虑的是实体(问题论域的对象)。 在面向对象开发模式中,把标识和模型化问题论域中的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。,面向对象开发模式的特点,面向对象系统中的对象是数据抽象与过程抽象的综合。 系统的状态保存在各个数据抽象的所定义的数据存储中。 控制流包含在各个数据抽象中的操作内。 在面向对象体系结构。消息从一个对象传送到另一个对象。算法被分布到各种实体中。,其它流行的开发模式,目前流行多种开发模式,它们提供了许多方法,可进行系统分解。 面向过程的; 逻辑的; 面向存取的;

5、面向进程的; 面向对象的; 函数型的; 说明性的。,每个开发模式都有它的支持者和用户; 每个开发模式都特别适合于某种类型的问题或子问题; 每一个开发模式都用不同的方式考虑问题; 每一个开发模式都使用不同的方法来分解问题; 每一个开发模式都导致不同种类的块、过程、产生规则。,混合开发模式,在大型系统的开发中,很难说哪种开发模式对整个问题的解决最好。 系统开发时,通常把大型问题分解成一组子问题。对于每个子问题可以采用适当的软件开发模式。 这种设计需要有某种实现语言或一组协同语言的支持。许多流行的功能不断增强的语言可支持不只一种设计开发模式。,一个智能数据分析系统的设计,可把它看做是 4 个子系统。

6、系统有 一个数据库界面,可以使用面向存取的方法进行设计; 智能数据分析用逻辑性的开发模式设计; 一组分析算法是过程性的; 用户界面是用面向对象开发模式设计出来的。,什么是面向对象,Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。 如果一个软件系统是使用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。 一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。,对象(object),对象是面向对象开发模式的基本成份。 每个对象可用它本身的一组属性和它可以执行的一组操作来定义。 属性一般只能通过执行对象的操作来改变。 操作

7、又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。,消息(Message),消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。 一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。,类(class),类是一组具有相同数据结构和相同操作的对象的集合。 类的定义包括一组数据属性和在数据上的一组合法操作。 类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。,在一个类中,每个对象都是类的实例 (Instan

8、ce),它们都可使用类中提供的函数。 对象的状态则包含在它的实例变量,即实例的属性中。,类 两个四边形对象,Quadrilateral类的每个对象有同样的一组实例变量和方法。 就这个意义来讲,类Quadrilateral给我们提供了一个模板,表示了所有四边形对象。 类常常可看做是一个抽象数据类型(ADT)的实现。但更合适的是把类看做是某种概念的模型。,类的实现常常使用其它类的实例,它们提供了该类所需要的服务。 这些实例应当受到保护不被其它对象存取,包括同一个类的其它实例。 在四边形的例子中,定义4个point类的实例作为Quadrilateral类的实例的4个顶点。这些point对象不能被其它

9、对象存取。,继承 (Inheritance),继承是使用已存在的定义做为基础建立新定义的技术。 新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改既存类。 既存类可当做基类来引用,则新类相应地可当做派生类来引用。,使用继承设计一个新类,可以视为描述一个新的对象集,它是既存类所描述对象集的子集合。 这个新的子集合可以认为是既存类的一个特殊化。Quadrilateral类是Polygon类的特殊化。Quadrilateral是限制为四条边的多边形。我们还可以进一步地把类Quadrilateral特殊化为Rectangle 。,类Quadrilateral的

10、界面可以等同于类Polygon的界面,而Rectangle类的界面又与Quadrilateral类的界面相同。 新类的界面还可以被看做是既存类界面的一个扩充界面。例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。,类的继承层次,在类的继承层次中,Quadrilateral的实际参数可以替换Polygon的形式参数。 类Quadrilateral的界面与类Polygon的界面是相容的 Quadrilateral的界面可响应Polygon界面的所有消息。,9.2面向对象方法的开发过程,面向对象方法改进了在生存期各个阶段之间的接口,因

11、为在生存期各个阶段所开发出来的“部件”都是类。 在面向对象生存期的各个阶段对各个类的信息进行细化,类成为分析、设计和实现的基本单元。,应 用 生 存 期,类生存期,复用 (Reusable),在软件开发中,复用扮演了重要角色。软件部件应当独立于当初开发它们的应用而存在。 部件的开发瞄准某些局部的设计和实现,它们能够帮助当前问题的解决,但为了在以后的项目中使用,它们还应当足够通用。,类就是一个希望能够复用的单元,因此,提出了一个“类生存期”。 类生存期是与应用生存期是交叉的。即就是说,类的标识是应用生存期的一个阶段,但类生存期的步骤独立于任一特殊应用的开发。 类的开发应能完整地描述一个基本实体。

12、而不仅仅考虑当前正在开发的系统。,类的定义,一旦标识了一个类,就给出了它的规格说明,其中包括类的实例可执行的操作和它们的数据表示。 对每一个,无论是在哪一个阶段标识的类都是如此。 对于那些使应用与数据库交互的类来说,其规格说明应当包括查找数据库和向数据库加入数据的行为。,类的规格说明定义了施加于对象的数据存储上的一组操作。 这组操作应工作在封装在对象内部的数据存储上,或返回关于对象状态的信息。 操作的名字应能反映这个操作本身的含义。,类的设计与实现,类的规格说明可指导对存放既存类的软件库进行查找,这些既存类可用来提供为当前应用所需要的功能。 三个可能的利用既存类的方向。开发过程可能依赖于这种查

13、找的结果。 既存类的复用 从既存类进行演化 从废弃型进行开发,实现,通过变量的声明、操作界面的实现及支持界面操作的函数的实现,可实现一个类的预期行为和状态。 实现是与语言有关的。一个好的面向对象语言应当分离共有界面与其内部实现。 采取必要措施分别编译界面和内部表示。,测试,单个的类为测试提供了自然的单元。 如果类的定义提供的界面比较狭窄,那么穷举测试就有可能实现。 类的测试在最抽象的层次开始,沿继承关系继续向下进行。 已经测试过的部分不需要从新测试。 重点放在对新类的测试和组装测试。,求精和维护,这是一个在软件生存期中最花费时间的部分。 传统的维护活动是针对应用的,而求精过程是针对类,针对把类

14、集成在一起的结构。 我们可以标识抽象的抽象,使得继承结构通过一般化增加新的层次,即在既存的根类之上增加新的层次。,概念的封装和实现的隐蔽,概念的封装和实现的隐蔽,使得类具有更大的独立性。在任一时刻都可以在类的界面上增加新的操作,并能够修改实现,以改进性能,或引入原来设计中没有的新服务。 为便于类的调整,应尽量做到定义与实现分离。对一个类的共有界面的实现所做的多次修改不应影响利用它的那些类。,9.3面向对象分析与模型化,面向对象分析是软件开发过程中的问题定义阶段。 这一阶段最后得到的是对问题论域的清晰、精确的定义。 分析阶段包括两个步骤:论域分析和应用分析。 它们都要标识问题论域中的抽象。,在分

15、析中,需要 找到特定对象 基于对象的公共特性组合它们 标识出对这个问题的抽象 在分析阶段中要标识 抽象之间的关系 这些关系在应用系统中常常用对象之间的消息来表示,叫做消息连接。,在一个面向对象的应用中的控制流由两部分构成: 每个单独操作内部的控制流 对象之间的消息模式 面向对象分析过程分两阶段: 论域分析 应用分析,论域分析,论域分析开发问题论域的模型 考察问题论域内的一个较宽的范围,分析覆盖的范围应比直接要解决的问题更多。 建立大致的系统实现环境,应用分析,应用分析则根据特定应用的需求进行论域分析。 应用(或系统)分析细化在论域分析阶段所开发出来的信息,把注意力集中于当前要解决的问题。,语义

16、数据模型,语义数据模型是一种特别适用的建立构成问题论域模型的技术。 它基于实体关系模型,并对这类模型进行了扩充和一般化。语义数据模型可以表达问题论域的内涵,还可以表示复杂的对象和对象之间的关系。,语义数据模型与面向对象方法,外部模型层反映应用的外部现实世界的视图,它体现了用户对问题的理解。 概念模型层考虑在外部模型层所标识的实体之间的关系。这些关系都是可直接观察到的交互关系。 内部模型层考虑实体的物理模型,就是我们生存期中的类设计阶段。,物理模型包括的属性,物理模型包括两类属性: 方法:对实体的行为模型化 数据:对实体的状态模型化 在模型中方法分为两种: 共有的 私有的 在分析阶段标识的属性是

17、描述性的,,在语义数据模型中的关系,一般化和特殊化关系可用来按层次渐增式地定义抽象(类)。 低层抽象是高层抽象的特殊化。 这种抽象层次构成论域模型的基础。 例如,小汽车,卡车和公共汽车可以归于更一般的概念汽车中。从这个较一般化的概念汽车可以定义其它较特殊的抽象:赛车,面包车和牵引车。,聚合关系支持使用几个其它较小和较简单的抽象来开发一个抽象。 它相应于一个记录中成份的声明。 例如,一个航班可以有6个属性:飞机编号、机组编号、离开和到达地点、起飞和降落时间。因此,航班类有一个聚合关系,它利用了表示飞机、人员、空间的类,并增加了时间窗口。,关联关系指定一个抽象做为其它抽象实例的包容(contain

18、er)。 关联和聚合之间的差别在于组合实体的意图。聚合指定一组实体中的某些元素做为一个类的组成,而关联是指群集的相互有关联的实体群。 例如,一个部门包含有人,这样一个部门关联了所有被分配给这个部门的人。,这些人在系统其它地方也可能出现。,对象模型化技术OMT,对象模型化技术把分析时收集的信息构造在三类模型中,即对象模型、功能模型和动态模型。 这个模型化的过程是一个迭代过程。,对象模型,是三个模型中最关键的一个模型,它的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,及它们之间的关系。 在OMT中,类与类之间的关系叫做关联。关联代表一组存在于两个或多个对象之间的、具有相同结构

19、和含义的具体连接。关联可以是物理的,也可以是逻辑的。,聚合,代表整体与部分的关系,这是一种特殊形式的关联。 限定,用以对关联的含义做某种约束。 角色,用来说明关联的一端。由于多数关联具有两个端点,因而涉及到两个角色。 附加的说明对象之间的连接的连接属性。,一般化关系,也称为继承性。一般化关系包含基类和几个派生类。 基类表示了一个较为一般、普遍的概念 每个派生类则是它的某个特殊形态 派生类除了自然地继承基类所具有的属性和操作外,还具有反映自身特点的属性和操作。,动态模型,要想对一个系统了解得比较清楚,还应当考察在任何时刻对象及其关系的改变。 系统的这些涉及时序和改变状况用动态模型来描述。 动态模

20、型着重于系统的控制逻辑。 它包括两个图,一是状态图,一是事件追踪图。,状态图,状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。 在状态图中,状态是对某一时刻中属性特征的概括。而状态迁移表示这一类对象在何时对系统内外发生的哪些事件做出何种响应。,操作是一个伴随状态迁移的瞬时发生的行为,与触发事件一起表示在有关的状态迁移之上。 活动则是发生在某个状态中的行为,往往需要一定的时间来完成,因此与状态名一起出现在有关的状态之中。,动态模型由多个状态图组成。 对于每一个具有重要动态行为的类都有一个状态图,从而表明所有系统活动的模式。 各个状态图并发地执行,并可以独立地改变状态。 各种类的状态

21、图可以通过共享事件组合到一个动态模型中。,事件,一个事件发生在某一时刻 每个事件都是单独发生的 我们建立事件类,并给每个事件一个名字,以指明共同结构和行为。 事件从一个对象向另一个对象传送信息。,有些事件类可能传送的是简单的信号“要发生某件事”,而有些事件类则可能传送的是数据值。由事件传送的数据值叫做属性。 列车出发(线路、班次、城市) 揿下鼠标按钮(按钮、位置) 拿起电话受话器 数字拨号(数字),事件追踪图,事件追踪图侧重于说明发生于系统执行过程中的一个特定“场景”。 场景也叫做脚本,是完成系统某个功能的一个事件序列。 场景通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件,它可

22、以包括发生在这个期间的系统所有的内部事件。,铃,铃,声,声,在,在,打,打,电,电,话,话,者,者,的,的,电,电,话,话,上,上,传,传,出,出,接,接,电,电,话,话,者,者,回,回,答,答,接,接,电,电,话,话,者,者,的,的,电,电,话,话,停,停,止,止,振,振,铃,铃,铃,铃,声,声,在,在,打,打,电,电,话,话,者,者,的,的,电,电,话,话,中,中,消,消,失,失,通,通,电,电,话,话,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,状态图与事件追踪图的关系,状态图叙述一个对象的个体行为,事件追踪图则给出多个对象所表现出来的集体行为。它们从不同侧面

23、来说明同一系统的行为。 例如,一个事件追踪图指出某一对象在接受一个事件之后发出另一事件,同一行为在此对象的状态图中也应当有所表示。,功能模型,功能模型表明,通过计算,从输入数据能得到什么样的输出数据,不考虑参加计算的数据按什么时序执行。 功能模型由多个数据流图组成,它们指明从外部输入,通过操作和内部存储,直到外部输出,这整个的数据流情况。,功能模型中所有的数据流图往往形成一个层次结构。 在这个层次结构中,一个数据流图中的过程可以由下一层的数据流图做进一步的说明。 一般来讲,高层的过程相应于作用在聚合对象上的操作,而低层的过程则代表作用于一个简单对象上的操作。,数据流图中允许加入控制流,但这样做

24、将与动态模型重复,不提倡夹带控制流。,基于三个模型的分析过程,功能模型着重于系统内部数据的传送和处理。 功能模型定义“做什么” 动态模型定义“何时做” 对象模型定义“对谁做”。,Coad与Yourdon面向对象分析,OOA有两个任务 形式地说明我们所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束。 明确地规定构成系统的对象如何协同合作,完成指定的功能。,OOA概念模型,通过OOA建立的系统模型是以概念为中心的,因此称为概念模型。 这样的模型由一组相关的类组成。 软件规格说明就是基于这样的概念模型形成的,以模型描述为基本部分,再加上接口要求、性

25、能限制等其它方面的要求说明。,构造OOA概念模型的层次,构造和评审OOA概念模型的顺序和由五个层次组成。 这五个层次是分析过程中的层次。 每个层次的工作都为系统的规格说明增加了一个组成部分。 这五个层次是:类与对象、属性、服务、结构和主题。,识别类和对象,面向对象分析的第一个层次主要是识别类和对象。 类和对象是对与应用有关的概念的抽象。不仅是说明应用问题的重要手段,同时也是构成软件系统的基本元素。 这一层工作是整个分析模型的基础。,选择类和对象的原则:,目标系统必须记住类和对象的某些 事情 类和对象应当提供某些服务或处理 多属性 所有属性对于类中所有实例都应有意义 对象类应表示问题论域的需求,

26、基于语言的信息分析,在发现对象过程中,可以使用一种十分有用的工具,即LIA(基于语言的信息分析)。 LIA的目的是标识出问题论域的所有概念及这些概念之间的关系。 短语频率分析(PFA) 矩阵分析(MA)。,资源库,资源库包括相关文件、模型、软件、人员以及包含问题论域或系统知识的其它资源。如果问题论域有参考材料(教材、惯例、操作过程等),这些材料必须包含在资源库中。 资源库包括其它一些信息:访问记录、形式的或非形式的系统规格说明、 已有的或相关系统的用户手册、日志(如系统变更请求或问题报告)。,LIA技术通常只应用于资源库的某个子集。这取决于分析员想把什么样的视图用于问题论域或应用系统。 通常,

27、根据与问题论域有关的资源建立起来的结果与根据目标系统的规格说明有关的资源建立起来的结果会有所不同。,短语频率分析 PFA,短语频率分析搜索选定的问题陈述,标识可以表示问题论域概念的术语。 PFA清单的建立基本上是一个客观的过程。但可能大多数标识出来的概念是与目标系统无关的。 PFA的优点就在于能广泛地标识问题论域的概念集合,并对它们进行评估,判定哪些与目标软件无关。,PFA将名词和动词标识为候选实体和属性。但由于名词动词的标识是非常主观的,可根据什么是名词或动词,以及根据分析员的理解,才能确定哪些名词或动词是要找的。 PFA是标识概念而不是标识语法单元。 所建立的PFA清单并不受建立清单的人的

28、很大影响。,对于任一有用的应用论域资源,PFA可能会产生一个长长的概念的清单。 许多被标识出的概念因与目标软件无关而被丢弃,但其它的则会成为OOA模型的成份,包括对象。,标识结构,面向对象分析的下一步工作是标识结构。典型的结构有两种: 一般化-特殊化结构(Gen-Spec结构) 整体-部分结构(Whole-Part结构),一般化-特殊化结构,整体-部分结构,以特殊化的视点来看,一个Gen-Spec结构可以看作是“is a”或“is a kind of”结构。例如, a Truck Vehicle is a Vehicle a Truck Vehicle is a kind of Vehicle

29、 在Gen-Spec结构中,使用继承将较一般化的属性和服务放在一般化的类和对象中。,从整体的视点来看,一个Whole-Part结构可看作一个“has a”或“is a part of”结构。例如, Vehicle has a Engine Engine is a part of Vehicle 其中,Vehicle是整体对象,Engine是局部对象。,标识Gen-Spec结构的方法和策略,对于每一个类和对象,将它看作是一个一般化的类,对它的所有特殊情况,考虑以下问题: 它是否在问题论域中? 它是否在系统的职责内? 继承性是否存在? 它是否能够符合选择类和对象的标准?,同样地,把每一个类和对象置

30、于特殊化对象的地位,对于它所有的一般化情形,考虑上述4个问题。 检查以前在相同或类似问题论域中面向对象分析的结果,看是否有可直接复用的Gen-Spec结构。 如果一个一般化对象可能有多个特殊化对象,应当先考虑最简单的特殊化对象和最复杂的特殊化对象,然后再考虑中间其他的特殊化对象。,标识Whole-Part结构的方法和策略,应当寻找什么 总体-部分(Assembly-Parts)关联,如飞机-发动机之间的关系。 包容-内含(Container-Content)关联,如飞机-飞行员之间的关系。 收集-成员(Collection-Members)关联,如机构-职员之间的关系。,将每一个类看作是一个W

31、hole类,对它的所有可能Parts情况,考虑以下问题: 它是否在问题论域中? 它是否在系统的职责内? 它是否代表一个以上的状态值? 若不是,是否将它变为Whole中的一个属性? 它是否提供问题论域中有用的抽象?,同样地,把每一个类置于Part 的地位,对于它所有的Whole情形,考虑上述5个问题。 检查以前在相同或类似问题论域中面向对象分析的结果,看是否有可直接复用的Whole-Parts结构。,标识属性,下一个层次称为属性层,对前面已识别的类和对象做进一步的说明。在这里,对象所保存的信息称为它的属性。 类的属性所描述的是状态信息,每个实例的属性值表达了该实例的状态值。,标识属性的方法和策略

32、,找出属性 将属性安放到适当的位置 找出实例连接 检查特殊情况 描述属性 考虑取值范围、极限值、缺省值、建立和存取权限、精确度、是否会受到其他属性值等。,属性层,实例连接关系的标识,定义服务,对象收到消息后所能执行的操作称为它可提供的服务。 对每个对象和结构的增加、修改、删除、选择等服务有时是隐含的,在图中不标出,但在存储类和对象有关信息的对象库中有定义。 其它服务则必须显式地在图中画出。,服务层,定义服务的方法和策略,找出每一个对象的所有状态,在各种状态需要做的工作。利用状态迁移图; 找出必要的操作。 建立消息连接。 描述服务:利用状态转换图、脚本和事件追踪图,描述服务的功能。,消息连接的标

33、识,两个对象之间可能存在着由于通信需要而形成的关系,这称为消息连接。 消息连接表示从一个对象发送消息到另一个对象,由那个对象完成某些处理。它们在图中用箭头表示,方向从发消息的对象指向收消息的对象。,找出消息连接的方法及策略,对于每一个对象,执行: 查询该对象需要哪些对象的服务,从该对象画一箭头到哪个对象; 查询哪个对象需要该对象的服务,从那个对象画一箭头到该对象; 循消息连接找到下一个对象,重复以上步骤。,识别主题,主题可以看成是高层的模块或子系统。 对于面向对象分析模型,主题表示此模型的整体框架。可以是一 个层次结构。 通过对主题的识别,可以让人们能够比较清晰地了解大而复杂的模型。,编辑管理

34、的主题,识别主题,将每一种结构(包括整体-部分结构、和一般化-特殊化结构)中最上层的类提升成为主题; 将各不属于任何结构的类提升主题; 检查在相同或类似的问题论域中以前做面向对象分析的结果,看是否有可直接复用的主题。,9.4面向对象设计(OOD),面向对象设计继续做面向对象分析阶段的工作,建立软件的结构。 主要工作分为两个阶段: 高层设计 类设计,高层设计,高层设计阶段开发系统的结构,即构造应用软件的总体模型。 高层设计阶段标识在计算机环境中进行问题解决工作所需要的概念,并增加了一批需要的类。 这些类包括那些可使应用软件与系统的外部世界交互的类。 此阶段的输出是适合应用软件要求的类、类间的关系

35、、应用的子系统视图规格说明。,高层设计模型,高层设计的特点,高层设计可以表征为标识和定义模块的过程。 模块可以是一个单个的类,也可以是由一些类组合成的子系统。 定义过程是职责驱动的。 类接口的协议如同“合同” :需方提出的请求必须列在协议表中,供方则必须提供所有协议的服务。,高层设计应遵循的原则,应使得在子系统的各个高层部件之间的通信量达到最小; 子系统应当把那些成组的类打包,形成高度的内聚; 逻辑功能分组,提供一个一个单元,识别并定位问题事件;,类设计,类与具有概念封装的子系统十分类似。 每个子系统都可以被当做一个类来实现,这个类聚集它的部件,提供了一组操作。 类和子系统的结构是正交的,一个

36、单个类的实例可能是不止一个子系统的一部分。,高层设计和类设计这两个阶段是相对封闭的。 应用软件中的每一个事物都是一个对象,包括应用软件自身在内! 两个阶段是连接的。 应用软件的设计是大类的设计,这种类设计考察应用软件所期望的每一个行为,并利用这些行为形成应用类的界面。,Coad 与 Yourdon 高层设计方法,Coad 与 Yourdon 在设计阶段中继续采用分析阶段中提到的五个层次。 在设计阶段中,这五个层次用于建立系统的四个组成成份。 问题论域部分 人机交互部分 任务管理部分 数据管理部分,问题论域部分,问题论域部分包括与应用问题直接有关的所有类和对象。 识别和定义这些类和对象的工作在O

37、OA中已经开始,在OOA阶段得到的有关应用的概念模型描述了我们要解决的问题。 在OOD阶段,应当继续OOA阶段的工作,对在OOA中得到的结果进行改进和增补。,问题论域部分的设计,在OOA阶段得到的概念模型描述了要解决的问题 在OOD阶段,继续OOA阶段的工作,对在OOA中得到的结果进行改进和增补。 对OOA模型中的某些类与对象、结构、属性、操作进行组合与分解。 要考虑对时间与空间的折衷、内存管理、开发人员的变更、以及类的调整等。,1.复用设计,根据问题解决的需要,把从类库或其它来源得到的既存类增加到问题解决方案中去。 标明既存类中不需要的属性和操作, 增加从既存类到应用类之间的一般化-特殊化的

38、关系。 把应用类中因继承既存类而成为多余的属性和操作标出。 修改应用类的结构和连接。,2.把问题论域相关的类关联起来,在设计时,从类库中引进一个根类,做为包容类,把所有与问题论域有关的类关联到一起,建立类的层次。 把同一问题论域的一些类集合起来,存于类库中。,3. 加入一般化类以建立类间协议,有时,某些特殊类要求一组类似的服务。 此时,应加入一个一般化的类,定义为所有这些特殊类共用的一组服务名,这些服务都是虚函数。 在特殊类中定义其实现。,4. 调整继承支持级别,在OOA阶段建立的对象模型中可能包括有多继承关系,但实现时使用的程序设计语言可能只有单继承,甚至没有继承机制,这样就需对分析的结果进

39、行修改。 多继承模式有两种: 狭义的菱形 广义的菱形,针对单继承语言的调整,把特殊类的对象看做是一个一般类对象所扮演的角色,通过实例连接把多继承的层次结构转换为单继承的层次结构。 把多继承的层次结构平铺,成为单继承的层次结构。在这种情况下,有些属性或操作在同层的特殊类中会重复出现。,针对无继承语言的调整,当使用无继承的程序设计语言时,必须把具有继承关系的类层次结构平铺开来,成为一组类和对象。 一般可利用命名惯例,把这些类或对象关联起来。,5. 改进性能,提高执行效率和速度是系统设计的主要指标之一。有时,必须改变问题论域的结构以提高效率。 如果类之间经常需要传送大量消息,可合并相关的类以减少消息

40、传递引起的速度损失。 增加某些属性到原来的类中,或增加低层的类,以保存暂时结果,避免每次都要重复计算造成速度损失。,6. 加入较低层的构件,在做面向对象分析时,分析员往往专注于较高层的类和对象,避免考虑太多较低层的实现细节。 在做面向对象设计时,设计师在找出高层的类和对象时,必须考虑到底需要用到哪些较低层的类和对象。,用户界面部分的设计,在 OOA 阶段给出了所需的属性和操作, 在设计阶段必须根据需求把交互细节加入到用户界面设计中,包括人机交互所必需的实际显示和输入。 用户界面部分设计主要由以下几个方面组成。,1. 用户分类,按技能层次分类: 外行初学者熟练者专家 按组织层次分类: 行政人员管

41、理人员专业技术人员其它办事员 按职能分类: 顾客职员,2. 描述人及其任务的脚本,对以上定义的每一类用户,列出对以下问题做出的考虑:什么人、目的、特点、成功的关键因素、熟练程度以及任务脚本。 在OOATOOLTM 中有一个例子: 什么人分析员 目的要求一个工具来辅助分析工作 (摆脱繁重的画图和检查图的工作)。,特点年龄:42岁;教育水平:大学;限制:不要微型打印,小于9个点的打印太小。 成功的关键因素工具应当使分析工作顺利进行;工具不应与分析工作冲突;工具应能捕获假设和思想,能适时做出折衷;应能及时给出模型各个部分的文档,这与给出需求同等重要。 熟练程度专家。,任务脚本 主脚本: 识别“核心的

42、”类和对象; 识别“核心”结构; 在发现了新的属性或操作时随时都可以加进模型中去。 检验模型: 打印模型及其全部文档。,3. 设计命令层,研究现行的人机交互活动的内容和准则:这些准则可以是非形式的,如“输入时眼睛不易疲劳”,也可以是正式规定的; 建立一个初始的命令层:可以有多种形式,如一系列 Menu Screens、或一个Menu Bar、或一系列Icons. 细化命令层:考虑以下几个问题。,排列命令层次。把使用最频繁的操作放在前面;按照用户工作步骤排列。 通过逐步分解,找到整体局部模式,以帮助在命令层中对操作分块。 根据人们短期记忆的“72”或“每次记忆3块每块3项”的特点,把深度尽量限制

43、在三层之内。 减少操作步骤:把点取、拖动和键盘操作减到最少。,4. 设计详细的交互,用户界面设计有若干原则,包括: 一致性:采用一致的术语、一致的步骤和一致的活动。 操作步骤少:减少敲键和鼠标点取的次数,减少完成某件事所需的下拉菜单的距离。 不要“哑播放”:每当用户等待系统完成一个活动时,要给出一些反馈信息。,Undo:在操作出现错误时,要恢复或部分恢复原来的状态。 减少人脑的记忆负担:不应在一个窗口使用在另一个窗口中记忆或写下的信息;需要人按特定次序记忆的东西应当组织得容易记忆。 学习的时间和效果:提供联机的帮助信息。 趣味性:尽量采取图形界面,符合人类习惯.,5. 继续做原型,用户界面原型

44、是用户界面设计的重要工作。人需要对提交的人机交互活动进行体验、实地操作,并精炼成一致的模式。 使用快速原型工具或应用构造器,对各种命令方式,如菜单、弹出、填充以及快捷命令,做出原型让用户使用,通过用户反馈、修改、演示的迭代,使界面越来越有效。,6. 设计 HIC (人机交互) 类,窗口需要进一步细化,通常包括:类窗口、条件窗口、检查窗口、文档窗口、画图窗口、过滤器窗口、模型控制窗口、运行策略窗口、模板窗口等。 设计HIC类,首先从组织窗口和部件的用户界面界面的设计开始。,每个类包括窗口的菜单条、下拉菜单、弹出菜单的定义。还要定义用于创建菜单、加亮选择项、引用相应的响应的操作。 每个类负责窗口的

45、实际显示。所有有关物理对话的处理都封装在类的内部。必要时,还要增加在窗口中画图形图符的类、在窗口中选择项目的类、字体控制类、支持剪切和粘贴的类等。与机器有关的操作实现应隐蔽在这些类中。,7. 根据图形用户界面进行设计,图形用户界面区分为字型、坐标系统和事件。 字型是字体、字号、样式和颜色的组合。 坐标系统主要因素有原点(基准点)、显示分辨率、显示维数等。 事件则是图形用户界面程序的核心,操作将对事件做出响应。,任务管理部分的设计,任务,是进程的别称,是执行一系列活动的一段程序。 当系统中有许多并发行为时,需要依照各个行为的协调和通信关系,划分各种任务,以简化并发行为的设计和编码。 任务管理主要

46、包括任务的选择和调整,它的工作有以下几种。,识别事件驱动任务: 一些负责与硬件设备通信的任务是事件驱动的,也就是说,这种任务可由事件来激发。 识别时钟驱动任务:以固定的时间间隔激发这种事件,以执行某些处理。某些人机界面、子系统、任务、处理机或与其它系统需要周期性的通信,因此时钟驱动任务应运而生。,识别优先任务和关键任务:根据处理的优先级别来安排各个任务。 识别协调者:当有三个或更多的任务时,应当增加一个追加任务,起协调者的作用。它的行为可以用状态转换矩阵来描述。 评审各个任务:对各任务进行评审,确保它能满足选择任务的工程标准事件驱动?时钟驱动?优先级/关键任务?协调者?,定义各个任务,定义任务

47、的工作主要包括:它是什么任务、如何协调工作及如何通信。 (1) 它是什么任务为任务命名,并简要说明这个任务。 (2) 如何协调工作定义各个任务如何协调工作。指出它是事件驱动还是时钟驱动。,(3) 如何通信定义各个任务之间如何通信。任务从哪里取值,结果送往何方。 (4) 一个模版任务的定义如下: Name (任务名) Description (描述) Priority (优先级) Servicesincluded (包含的操作)、 Communication Via (经由谁通信)。,数据管理部分的设计,数据管理部分提供了在数据管理系统中存储和检索对象的基本结构,包括对永久性数据的访问和管理。

48、它分离了数据管理机构所关心的事项,包括文件、关系型DBMS或面向对象DBMS等。,数据管理方法,数据管理方法主要有3种:文件管理、关系数据库管理和面向对象库数据管理。 文件管理提供基本的文件处理能力。 关系数据库管理系统关系数据库管理系统使用若干表格来管理数据。,面向对象数据库管理系统通常,面向对象的数据库管理系统以两种方法实现:一是扩充的RDBMS,二是扩充的面向对象程序设计语言。 扩充的RDBMS主要对RDBMS扩充了抽象数据类型和继承性,再加一些一般用途的操作创建和操纵类与对象。 扩充的OOPL在面向对象程序设计语言中嵌入了在数据库中长期管理存储对象的语法和功能。,程序设计语言的影响,详

49、细的面向对象设计与语言有关。 一般地,所有的语言都可以完成面向对象实现,但某些语言能够提供更丰富的语法,能够显式地描绘在面向对象分析和面向对象设计过程中所使用的表示法。,1. 面向对象设计与过程型语言,过程型语言只直接支持过程抽象 可以增加数据抽象及封装(如利用结构化设计的信息隐蔽模块) 无法明确地表示继承性。也无法明确支持整体与部分、类与成员、对象与属性等关系。 具有面向对象特性的过程型语言可以成为一种实用的且可行的语言。,2. 面向对象设计与基于对象的语言,基于对象的语言,也叫做面向软件包的语言,如Ada等 能够直接支持过程抽象、数据抽象、封装和对象与属性关系 它无法表示继承性,也无法表示类与成员、整体与部分的关系。 基于对象语言的面向对象设计代表一种可行的开发方法。,3. 面向对象设计与面向对象的程序设计语言,面向对象的程序设计语言,包括C+、Smalltalk、Objective-C、 Actor、 Eiffel等,都直接支持过程抽象、数据抽象、封装、继承、以及对象与属性、类与成员关系。 它们不明确地支持整体与部分关系,但可以方便地表示组装对象。,因此,从面向对象分析,到面向

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1