第7章-面向对象设计要点课件_第1页
第7章-面向对象设计要点课件_第2页
第7章-面向对象设计要点课件_第3页
第7章-面向对象设计要点课件_第4页
第7章-面向对象设计要点课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章面向对象设计面向对象设计过程与准则面向对象设计过程面向对象设计准则基于UML的面向对象设计过程系统构架设计用例设计类设计数据库设计用户界面设计7.1面向对象设计过程与准则面向对象设计的主要任务是在面向对象分析的基础上完成体系结构设计、接口设计、数据设计、类设计及构件设计。面向对象分析和设计的界限是模糊的,从面向对象分析到面向对象设计是一个逐渐扩充模型的过程。分析的结果通过细化直接生成设计结果,在设计过程中逐步加深对需求的理解,从而进一步完善需求分析的结果。分析和设计活动是一个反复迭代的过程。7.1.1面向对象设计过程面向对象设计过程(1)建立系统环境模型。在设计的初始阶段,系统设计师用系统环境图对软件与外部实体交互的方式进行建模。下图给出了系统环境图的一般的结构。(2)设计系统体系结构。体系结构设计可以自底向上进行,如将关系紧密的对象组织成子系统或层;也可以自顶向下进行,尤其是使用设计模式或遗产系统时,会从子系统的划分入手。

(3)对各个子系统进行设计。对于面向对象的系统,典型的子系统有问题域子系统、人机交互子系统和任务管理子系统。(4)对象设计及优化。7.1.1面向对象设计过程7.1.2面向对象设计准则面向对象设计准则模块化传统的面向过程方法中的模块通常是函数、过程及子程序等,而面向对象方法中的模块则是类、对象、接口、构件等。在面向过程的方法中,数据及在数据上的处理是分离的;而在面向对象方法中,数据及其上的处理是封装在一起的,具有更好的独立性,也能够更好地支持复用。7.1.2面向对象设计准则(2)抽象面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上就是一种抽象数据类型。可以将类的抽象分为规格说明抽象及参数化抽象:类对外开放的公共接口构成了类的规格说明,即协议。这种接口规定了外部可以使用的服务,使用者无需知道这些服务的具体实现算法。通常将这类抽象称为规格说明抽象。参数化抽象是指当描述类的规格说明时并不具体指定所要操作的数据类型,而是将数据类型作为参数。7.1.2面向对象设计准则(3)信息隐藏在面向对象方法中,信息隐藏通过对象的封装性实现。对于类的用户来说,属性的表示方法和操作的实现算法都应该是隐藏的。(4)弱耦合在面向对象设计中,耦合主要指不同对象之间相互关联的程度。如果一个对象过多地依赖于其它对象来完成自己的工作,则不仅使该对象的可理解性下降,而且还会增加测试、修改的难度,同时降低了类的可重用性和可移植性。对象不可能是完全孤立的,当两个对象必须相互联系时,应该通过类的公共接口实现耦合,不应该依赖于类的具体实现细节。7.1.2面向对象设计准则(5)强内聚设计类的原则是一个类的属性和操作全部都是完成某个任务所必须的,其中不包括无用的属性和操作。例如设计一个平衡二叉树类,该类的目的就是要解决平衡二叉树的访问,其中所有的属性和操作都与解决这个问题相关,其他无关的属性和操作在这里都是垃圾,应该清除。7.1.2面向对象设计准则(6)可重用软件重用是提高软件开发生产率和目标系统质量的重要途径。重用基本上从设计阶段开始。重用有两方面的含义:一是尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类);二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。7.2基于UML的面向对象设计过程面向对象的系统设计主要活动是进行系统分解,并在此基础上定义子系统/构件之间的接口。为此,首先根据子系统可提供的服务来定义子系统,然后对子系统细化,建立层次结构。要求对子系统的分解尽可能做到高内聚、低耦合。7.2.1相关概念子系统和类在大型和复杂的软件系统情形,首先根据需求的功能模型(用例模型),将系统分解成若干个部分,每一部分又可分解为若干子系统或类,每个子系统还可以由更小的子系统或类组成,如图所示。系统结构的类图

7.2.1相关概念服务和子系统接口子系统分层的目的是建立系统的层次结构。每一层仅依赖于它下一层提供的服务,而对它的上一层可以一无所知。下图给出了一个三层的系统结构的示例。7.2.1相关概念服务和子系统接口如果在一个系统的层次结构中,每一层只能访问与其相邻的下一层,则称之为封闭体系结构;如果每一层还可访问比其相邻下一层更低的层次,则称之为开放体系结构。典型的封闭体系结构的例子就是开放系统互联参考模型(OSI模型),如图所示。7.2.1相关概念服务和子系统接口开放体系结构的一个例子是Java的Swing用户接口包。它允许绕过高层直接访问低层接口以克服性能瓶颈。如图所示。7.2.2基于UML的面向对象设计过程系统构架设计用例设计类设计数据库设计用户界面设计构架设计构架设计的目的是要勾画出系统的总体结构,这项工作由经验丰富的构架设计师主持完成。该活动以用例模型、对象模型为输入。输出:物理结构、子系统及其接口、概要的设计类。构架设计第1步:构造系统的物理模型首先用UML的配置图描述系统的物理构架将需求分析阶段捕获的系统功能分配到这些物理节点上。配置图上可以显示计算节点的拓扑结构、硬件设备配置、通信路径、各个节点上运行的系统软件配置、应用软件配置。一个图书馆信息管理系统的物理模型如图示构架设计构架设计配置图中考虑到图书馆内部用户如果也通过互联网使用系统,效率会受影响。这个系统中设计了三种访问模式:一种是远程读者,通过Internet访问系统,实现查询图书、预借图书的功能;第二种是本单位其他部门的读者,通过单位局域网查询、预借图书;第三种是图书馆内部工作人员,在局域网上完成日常的借还书、采编、图书管理等工作。构架设计第2步设计子系统第2步:设计子系统这步的主要任务是:划分各个子系统,定义各个子系统的接口,说明子系统之间的关系。对于一个复杂的软件系统来说,将其分解成若干个子系统,子系统内还可以继续划分子系统或包,这种自顶向下、逐步细化的组织结构非常符合人类分析问题的思路。每个子系统与其它子系统之间应该定义接口,在接口上说明交互信息,注意这时还不要描述子系统的内部实现。1)划分各个子系统划分各个子系统的方式:按照功能划分,将相似的功能组织在一个子系统中;按照系统的物理布局划分,将在同一个物理区域内的软件组织为一个子系统;按照软件层次划分子系统,软件层次通常可划分为用户界面层、专用软件层、通用软件层、中间层和数据层,具体的表达方式见图构架设计构架设计用户界面层是与用户应用有密切关系的内容,主要接受用户的输入信息,并且将系统的处理结果显示给用户。这部分变化通常比较大,所以建议将界面层剥离出来,用一些快捷有效的工具实现。构架设计专用软件层是每个项目中特殊的应用部分,它们被复用的可能性很小。在开发时可以适当地减小软件元素的粒度,以便分离出更多的可复用构件,减少专用软件层的规模。构架设计通用软件层是由一些公共构件组成,这类软构件的可复用性很好。在设计应用软件时首先要将软件的特殊部分和通用部分分离,根据通用部分的功能检查现有的构件库。如果有可用的构件,则复用已有的构件会极大地提高软件的开发效率和质量。如果没有可复用的构件,则尽可能设计可复用的构件并且添加到构件库中,以备今后复用。构架设计数据层主要存放应用系统的数据,通常由数据库管理系统管理,常用的操作有更新、保存、删除、检索等。构架设计在图书馆图书信息管理系统层次划分:系统层采用微软的Windows操作系统和SQLServer数据库。数据层主要是建立应用数据库,包括数据库表、视图等。中间层使用微软的ADO.NET,实现对数据库的插入、修改、删除的事务处理。通用软件层实现权限管理、用户登录、通用查询类。专用软件层实现读者查询、借书、还书、处罚、预订、通知等处理。界面层实现查询界面、借书界面、还书界面、预订界面、通知界面等用户界面。构架设计2)定义子系统之间的关系:划分子系统后,要确定子系统之间的关系。子系统之间的关系:“请求-服务”关系,“请求”子系统调用“服务”子系统,“服务”子系统完成一些服务,并且将结果返回给“请求”子系统。平等关系,每个子系统都可以调用其它子系统。如果子系统的内容相互有关联,就应该定义它们之间的依赖关系。在设计时,相关的子系统之间应该定义接口,依赖关系应该指向接口而不要指向子系统的内容。构架设计注意:如果两个子系统之间的关系过于密切,则说明一个子系统的变化会导致另一个子系统变化,这种子系统理解和维护都会比较困难。解决子系统之间关系过于密切的办法基本上有两个:重新划分子系统,这种方法比较简单,将子系统的粒度减少,或者重新规划子系统的内容,将相互依赖的元素划归到同一个子系统之中;定义子系统的接口,将依赖关系定义到接口上;构架设计3)定义子系统的接口。每个子系统的接口上定义了若干操作,体现了子系统的功能,而功能的具体实现方法应该是隐藏的,其他子系统只能通过接口间接地享受这个子系统提供的服务,不能直接操作它。构架设计第3步:非功能需求设计分析阶段定义了整个系统的非功能需求,在设计阶段要研究这些需求,设计出可行的方案。非功能需求包括:系统的安全性,错误监测和故障恢复,可移植性和通用性等等。具有共性的非功能需求一般设计在中间层和通用应用层,目的是充分利用已有构件,减少重新开发的工作量。构架设计用例设计根据分析阶段产生的高层类图和交互图,由用例设计师研究已有的类,将它们分配到相应的用例中。检查每个用例功能,依靠当前的类能否实现,同时检查每个用例的特殊需求是否有合适的类来实现。同时细化每个用例的类图,描述实现用例的类及其类之间的相互关系,其中的通用类和关键类可用粗线框区分,这些类将作为项目经理检查项目时的重点。第1步:通过扫描用例中所有的交互图识别参与用例解决方案的类。每个类的方法都可以通过分析交互图得到,一般地检查所有的交互图发送给某个类的所有消息,这表明了该类必须定义的方法。例如“借书控制”类向“读者”类发送“检查读者(读者编号)”消息,那么“检查读者”就作为“读者”类应该提供的方法。第2步:添加类之间的关系,包括关联、依赖、继承。用例设计类设计:类的设计步骤由构件工程师详细设计每个类的属性、方法和关系。第1步定义类的属性。类的属性反映类的特性,通常属性是被封装在类的内部,不允许外部对象访问。1)分析阶段和概要设计阶段定义的一个类属性在详细设计时可能要被分解为多个,减小属性的表示粒度有利于实现和复用。但是一个类的属性如果太多,则应该检查一下,看能否分离出一个新的类。2)如果一个类因为其属性的原因变得复杂而难于理解,那么就将一些属性分离出来形成一个新的类。3)通常不同的编程语言提供的数据类型有很大差别,确定类的属性时要用编程语言来约束可用的属性类型。定义属性类型时尽可能使用已有的基础类型,太多的自定义类型会降低系统的可维护性和可理解性等性能指标。4)类的属性结构要坚持简单的原则,尽可能不使用复杂的数据结构。类设计:类属性设计的注意点1)属性的类型。设计属性时必须要根据开发语言确定每个属性的数据类型,如果数据类型不够,设计人员可以利用已有的数据类型定义新的数据类型。2)属性的可见性。在设计属性时要确定公有属性、私有属性、受保护属性。类设计:设计类属性时必须定义内容1)属性的初始值:如果有默认值,用户在操作时会感觉很方便。例如在计算税费的程序中,如果定义了初始默认税率,用户就不必每次都重复输入税率值。2)属性在类中的存放方式:①Byvalue(按数值)属性放在类中。②Byreference(引用)属性放在类外,类指向这个属性。后者一般是属性本身为一个对象,例如“教研室”类有一个属性是“教师”,而“教师”对象本身在“教研室”类之外已经定义了,这时“教研室”类中只保存一个指针指向这个外部对象。类设计:设计类属性时可选择内容第2步:定义类的操作由构件工程师为每个类的方法设计必须实现的操作,并用自然语言或伪代码描述操作的实现算法。一个类可能被应用在多个用例中,由于它在不同用例中担当的角色不同,所以设计方法时要求详细周到。类设计:类的设计步骤1)分析类的每个职责的含义,从中找出类应该具备的操作。2)阅读类的非功能需求说明,添加一些必须的操作。3)确定类的接口应该提供的操作。这关系到设计的质量,特别是系统的稳定性,所以确定类接口操作要特别小心。4)逐个检查类在每个用例实现中是否合适,补充一些必须的操作。类设计-设计类操作的注意事项设计时不仅要考虑到系统正常运行的情况,还要考虑一些特殊情况:例如,一个对象结束前必须释放占用的资源;在并发系统中,一个任务结束前必须通知其它任务自己已经结束;经验丰富的设计者可以预见有规律的出错,好的设计通常在可能出现致命错误的地方设计一个良好的出口,在系统终止前尽可能清晰地保留当时的信息和环境,尽可能多的反应出错误信息。类设计-设计类操作的注意事项操作描述:说明操作的具体实现内容,可以用伪代码或者文字描述操作的处理逻辑。定义操作的参数:说明每个参数名称和类型。操作返回类型:操作可见性:Public、Private和Protected。操作异常:说明每个操作中的异常处理。前件和后件:说明操作运行之前要满足的条件和操作运行之后要满足的条件。类设计-设计类操作时必须定义内容第3步定义类之间细节关系设置基数:一个类的实例与另一个类的实例之间的联系。在图书馆信息管理系统中,“图书”类和“读者”类关联,如果需求说明中有“一位读者可借图书的数量为0至10本”,那么它们之间的基数为1:0..10。使用关联类:可以放置与关联相关的属性。例如“图书”类和“读者”类,如果要反映读者的借还书情况,该如何处理呢?可以创建一个关联类,这个类中的属性包括“借还书日期、图书编号、读者编号”。设置限定:为了减小关联的范围。例如一个目录下虽有多个文件,但是在一个目录范围内确定惟一一个文件,用“文件名”限定目录与文件之间的关系。类设计:类的设计步骤类设计:类的设计步骤在传统的结构化设计方法中,很容易将实体-关系图映射到关系数据库中。而在面向对象设计中,我们可以将UML类图看作是数据库的概念模型。在映射时可以按下面的规则进行:数据库设计(1)一个普通的类可以映射为一个表或多个表,当分解为多个表时,可以采用横切和竖切的方法。竖切常用于实例较少而属性很多的对象,一般是现实中的事物,将不同分类的属性映射成不同的表。通常将经常使用的属性放在主表中,而将其他一些次要的属性放到其他表中。横切常常用于记录与时间相关的对象,如成绩记录、运行记录等。由于一段时间后,这些对象很少被查看,所以往往在主表中只记录最近的对象,而将以前的记录转到对应的历史表中。数据库设计(2)关联关系的映射

一对一关联的映射:对于一对一关联,可以在两个表中都引入外键,这样两个表之间可以进行双向导航。也可以根据具体情况,将类组合成一张单独的表。

一对多关联的映射:可以将关联中的“一”端毫无变化地映射到一张表,将关联中表示“多”的端上的类映射到带有外键的另一张表,使外键满足关系引用的完整性。

多对多关联的映射:由于记录的一个外键最多只能引用另一条记录的一个主键值,因此关系数据库模型不能在表之间直接维护一个多对多联系。为了表示多对多关联,关系模型必须引入一个关联表,将两个类之间的多对多关联转换成表上的两个一对多关联。数据库设计TheoMandel提出了三条界面设计原则:置用户于控制之下:用户界面能够对用户的操作作出恰当的反应,并帮助用户完成需要的工作。减少用户的记忆负担:系统应该“记住”有关的信息,通过缺省项、快捷方式或界面视觉减少用户的记忆负担。保持界面的一致:用户应该以一致的方式展示和获取信息。用户界面设计1)按功能将界面划分为块,每块要有功能说明或标题。相近功能的界面元素,像命令按钮、选择按钮等元素,应集中放置或者用组框将它们括起来,减少鼠标移动的距离。2)对于同一种功能应该提供多种操作方式:鼠标、快捷键或者声音等等。3)界面要支持键盘浏览按钮功能,即按Tab键的自动切换功能。Tab键的顺序与控件排列顺序要一直,一般是从上到下、从左到右。.1用户界面设计:易用性是核心4)按照信息的输入顺序,以及信息的重要程度安排控件,重要的信息应放在窗口较醒目的位置。5)一个界面的控件数最好不超过10个,多于10个时应该考虑使用分页或多标签页显示。6)分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab。7)默认按钮要支持Enter操作,即按Enter后自动执行默认按钮对应的操作。8)当检测到非法输入后应给出说明并能自动获得焦点。.1用户界面设计:易用性是核心9)复选项和单选项应按选择概率排列,支持默认选项和Tab选择。10)当选项个数较少并且固定时,应采用选项框而不用下拉列表框。但是如果界面空间较小时,应该使用下拉框而少用选项框。11)当软件的功能很多,特别是分支复杂的情况下,应该提供方便的导航功能,引导用户顺利完成需要的一系列功能。如下图所示。12)界面用词要规范。.1用户界面设计:易用性是核心.1用户界面设计:易用性是核心最忌讳每换一个屏幕,用户就要换一套操作命令与操作方法。.2用户界面设计:界面必须一致1)完成相同或相近功能的菜单项用横线隔在同一组内。2)菜单深度一般要求控制在三层以内。3)图标能直观地代表要完成的操作。4)工具栏可以由用户自己定制,其中的每个按钮要有瞬时提示信息,工具栏的长度不能超出屏幕宽度。常用的工具栏有默认位置。.2用户界面设计:界面必须一致5)状态条显示用户需要的信息:目前的操作、系统状态、用户位置、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。6)滚动条的长度要根据显示信息的长度或宽度及时变换,滚动条的宽度比状态条的略窄。7)菜单条和工具条要有清楚的界限。8)右键快捷菜单采用与菜单相同的准则。.2用户界面设计:界面必须一致1)提供及时调用系统帮助的功能,常用F1键。2)调用帮助时,能够定位到与该操作相对应的位置,即帮助要有即时性和针对性。3)提供关键词搜索帮助的功能。4)在帮助中提供技术支持方式,一旦用户难以自己解决问题时,可以方便地寻求其他帮助方式。5)帮助中应该提供超级链接和返回功能。.3用户界面设计:界面提供帮助.3用户界面设计:界面提供帮助1)屏幕布局合理,不过于密集或稀疏,合理地利用空间。2)主窗体位置和比例合适。主窗体的中心位置应该在对角线焦点附近。长宽接近黄金分割点比例,切记长宽比例失调,超宽界面。3)子窗体位置应该在主窗体的左上角或正中。多个子窗体弹出时应该依次向右下方偏移,以显示出窗体标题为宜。4)重要的命令按钮与使用较频繁的按钮要放在界面瞩目的位置。按钮大小应该与界面大小成比例、大小一致,按钮上文字不要太长,要避免在空旷的界面上放置很大的按钮。5)关闭窗体的按钮不应该放在易点位置,经验表明横排开头或最后与竖排最后的按钮为易点位置。.4用户界面设计:界面设计合理性6)与正在进行的操作无关的控件应该加以屏蔽,通常用灰色表示无效控件。7)界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。字体通常使用宋体9-12,很少使用超过12号的字体。8)一个界面中最好不要超过3种颜色。前景与背景色搭配要协调,反差不宜太大,主色要柔和,通常使用浅色调,如浅灰、白色等,具有亲和力。重要操作组件则以彩度较高的颜色来表达,但是区域不可太大,否则看起来显得很混乱。9)如果能给用户提供自定义界面风格更好,由用户自己选择颜色、字体等。.4用户界面设计:界面提供帮助10)对可能造成数据无法恢复的操作必须提供确认操作,给用户放弃选择的机会。11)非法的输入或操作应有准确的提示说明。12)对运行过程中出现问题要有提示,让用户明白错误出处,避免形成无限期等待。13)允许用户中断当前的工作,转去执行其他任务,结束后再回到中断点继续工作。14)由于不同的用户可能有不同的需求,软件可以根据需要设置“下一步”、“完成”等操作步骤,面对不同

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论