1、 以以功能为中心功能为中心的软件开发方法(结构化方法)的软件开发方法(结构化方法)以以数据为中心数据为中心的软件开发方法(信息建模方法)的软件开发方法(信息建模方法)低内聚,高耦合,缺乏灵活性和可维护性低内聚,高耦合,缺乏灵活性和可维护性分析与设计阶段采用的概念和表示不一致分析与设计阶段采用的概念和表示不一致对功能的处理较弱,不适合具有复杂功能对功能的处理较弱,不适合具有复杂功能的系统的系统面向对象方法基本思想面向对象方法基本思想面向对象软件开发方法的目标面向对象软件开发方法的目标 源于面向对象程序设计语言源于面向对象程序设计语言 1967,Simula67 1970s,Smalltalk,M
2、odula 1980s-90s,C+,Objective-C,Eiffel,java 向分析、设计甚至测试、维护等整个软件生命向分析、设计甚至测试、维护等整个软件生命 周期扩展周期扩展 1990s,统一建模语言(,统一建模语言(Unified Modeling Language,UML)诞生)诞生1.3 1.3 面向对象方法的基本概念和原则面向对象方法的基本概念和原则 基本概念基本概念 类与对象,属性与操作,继承、聚合和关联类与对象,属性与操作,继承、聚合和关联 基本原则基本原则 抽象,分类,封装,消息,多态性抽象,分类,封装,消息,多态性例例2 2:对下列事物进行分类和抽象:对下列事物进行分
3、类和抽象显微镜、摩天楼、望远镜、飞机、铆钉、显微镜、摩天楼、望远镜、飞机、铆钉、管道、管道、卡车、单向阀、指数、过滤器、压力器、卡车、单向阀、指数、过滤器、压力器、自行自行车、正旋、岩洞、眼镜、车库、车、正旋、岩洞、眼镜、车库、滑翔机、平方滑翔机、平方根、铁钉、水龙头、螺钉、根、铁钉、水龙头、螺钉、余旋、螺栓、余旋、螺栓、帐篷、帐篷、双筒镜、车棚、杂物堆房、摩托车、帆船、瞄准双筒镜、车棚、杂物堆房、摩托车、帆船、瞄准器器例例1 1:数据抽象和过程抽象:数据抽象和过程抽象 数据抽象:数据抽象:学生、客户、电子邮件、汽车学生、客户、电子邮件、汽车过程抽象:交易、答辩、备课、开门过程抽象:交易、答辩
4、、备课、开门光学设备类:显微镜、眼镜、望远镜、瞄准器、双筒镜光学设备类:显微镜、眼镜、望远镜、瞄准器、双筒镜管道控制类:管道、单向伐、水龙头、过滤器、压力器管道控制类:管道、单向伐、水龙头、过滤器、压力器交通工具类:自行车、帆船交通工具类:自行车、帆船、卡车、飞机、滑翔机、摩托车、卡车、飞机、滑翔机、摩托车五金类:五金类:铁钉、螺钉、螺栓、铆钉铁钉、螺钉、螺栓、铆钉建筑类:建筑类:帐篷、岩洞、车棚、车库、杂物堆房、摩天楼帐篷、岩洞、车棚、车库、杂物堆房、摩天楼数学概念类:平方根、指数、正旋、余旋数学概念类:平方根、指数、正旋、余旋 光学设备类:聚焦度、变焦长度、单双镜形式、用途功能光学设备类:
5、聚焦度、变焦长度、单双镜形式、用途功能管道控制类:时速、功率,动力资源、消耗、用途、管道控制类:时速、功率,动力资源、消耗、用途、五金类:五金类:材料、直径、长度、硬度、用途材料、直径、长度、硬度、用途建筑类:建筑类:面积、高度、材料、用途面积、高度、材料、用途数学概念类:概念定义、公式内容、用途数学概念类:概念定义、公式内容、用途 抽取同类事物的共同性质:抽取同类事物的共同性质:分类:分类:学生学生姓名姓名年龄年龄研究生研究生导师导师研究方向研究方向本科生本科生班级班级专业专业人员人员姓名姓名年龄年龄研究生研究生导师导师研究方向研究方向职工职工部门部门职务职务在职研究生在职研究生运输工具运输
6、工具轮船轮船车辆车辆飞机飞机卡车卡车轿车轿车继承:继承:多继承:多继承:继承层次:继承层次:关联关联 关联表示类之间的静态联系。关联表示类之间的静态联系。当类实例化为对象后,关联实例化为对象之间当类实例化为对象后,关联实例化为对象之间的链。的链。可以通过属性来表达关联。可以通过属性来表达关联。职员职员公司公司关联:关联:工作工作聚合聚合 聚合表示对象之间的整体部分关系,具有聚合表示对象之间的整体部分关系,具有“有有 一个一个”或或“是一部分是一部分”的语义的语义 聚合也是一种关联。聚合也是一种关联。汽车汽车发动机发动机车轮车轮聚合:聚合:系统复杂性控制(包)系统复杂性控制(包)包用于控制系统的
7、包用于控制系统的粒度粒度,将系统组成元素组织,将系统组成元素组织到不同的包中,可以方便系统整体规划,减小到不同的包中,可以方便系统整体规划,减小系统分析和设计的复杂性。系统分析和设计的复杂性。面向对象方法实现其目标的途径面向对象方法实现其目标的途径1.4 1.4 面向对象软件系统模型面向对象软件系统模型 系统模型系统模型 为了理解和实现所要建造的软件系统,对系统及其工作为了理解和实现所要建造的软件系统,对系统及其工作 环境的简化和形式化描述。环境的简化和形式化描述。一个完整的软件系统模型通常包括若干不同层一个完整的软件系统模型通常包括若干不同层次、不同视角的模型次、不同视角的模型 层次:系统的
8、抽象程度层次:系统的抽象程度 视角:系统的不同方面(交互、功能、实现、组织视角:系统的不同方面(交互、功能、实现、组织)面向对象模型视图面向对象模型视图用况视图用况视图进程视图进程视图部署视图部署视图设计视图设计视图实现视图实现视图结构视图结构视图 用况视图:软件系统的内外交互情况用况视图:软件系统的内外交互情况 设计视图:软件系统的功能需求设计视图:软件系统的功能需求 进程视图:软件系统的控制与驱动进程视图:软件系统的控制与驱动 实现视图:软件系统的配置与管理实现视图:软件系统的配置与管理 部署视图:软件系统的物理分布与安装部署视图:软件系统的物理分布与安装 结构视图:结构视图:软件系统的体
9、系结构软件系统的体系结构面向对象模型视图的构成面向对象模型视图的构成2.1 2.1 分析面临的主要问题分析面临的主要问题 OOA OOA与与OODOOD的界限的界限 对问题域和系统责任的理解对问题域和系统责任的理解 人与人之间的交流人与人之间的交流 需求的不断变化需求的不断变化 软件复用的要求软件复用的要求OOAOOA与与OODOOD的界限的界限 OOA OOA:运用面向对象方法,对问题域和系统责任进行分运用面向对象方法,对问题域和系统责任进行分析和理解,找出描述问题域和系统责任所需的对象,定析和理解,找出描述问题域和系统责任所需的对象,定义对象的属性和操作以及对象之间的关系,建立一个符义对象
10、的属性和操作以及对象之间的关系,建立一个符合问题域,满足用户需求的合问题域,满足用户需求的OOAOOA模型。模型。OOA OOA不考虑与系统具体实现有关的因素,而将其不考虑与系统具体实现有关的因素,而将其留给留给OODOOD去处理,因此去处理,因此OODOOD包括两方面的工作:包括两方面的工作:1 1)根据实现条件对)根据实现条件对OOAOOA模型作某些必要的修改和调整。模型作某些必要的修改和调整。2 2)针对具体实现条件,建立人机界面、数据存储和控)针对具体实现条件,建立人机界面、数据存储和控制驱动等模型。制驱动等模型。问题域和系统责任问题域和系统责任软件分析人员必须尽快了解和明确:软件分析
11、人员必须尽快了解和明确:1 1)问题域)问题域-被开发系统的应用领域,现实世界中,被开发系统的应用领域,现实世界中,要要求系统处理的业务范围。求系统处理的业务范围。2 2)系统责任)系统责任-所开发的系统应该具备的功能。所开发的系统应该具备的功能。问题域不等于系统责任,但它们有很多重合部分问题域不等于系统责任,但它们有很多重合部分 金融业务金融业务 个人储蓄个人储蓄 代发工资代发工资收费业务收费业务 贷款业务贷款业务办公管理办公管理数据备份数据备份系统责任问题域人与人之间的交流人与人之间的交流 交流包括三部分人员之间:交流包括三部分人员之间:1 1)开发人员与用户(需求方)开发人员与用户(需求
12、方)2 2)开发人员之间)开发人员之间 3 3)开发人员与管理人员)开发人员与管理人员 交流工具包括谈话和文档交流工具包括谈话和文档 用户文档,技术文档,管理文档用户文档,技术文档,管理文档需求的不断变化需求的不断变化树立树立“需求变化是绝对的需求变化是绝对的”的观念,从分析的观念,从分析到设计,始终注意到设计,始终注意“易维护修改易维护修改”这一原则。这一原则。需求变化时,最容易变化的是系统功能。在需求变化时,最容易变化的是系统功能。在面向对象方法中,最容易变化的成分是对象面向对象方法中,最容易变化的成分是对象中的操作,其次是对象间的交互与协作,第中的操作,其次是对象间的交互与协作,第三是对
13、象的属性。对象本事是相对稳定的。三是对象的属性。对象本事是相对稳定的。隐蔽内部操作,抽取高层类,可以使系统稳隐蔽内部操作,抽取高层类,可以使系统稳定且易于应对需求变化。定且易于应对需求变化。软件复用的要求软件复用的要求在已有的软件成分基础上建造系统,是新型软在已有的软件成分基础上建造系统,是新型软 件开发方法的一个重要原则。件开发方法的一个重要原则。复用已有的软件成分,不仅是提高开发效率的复用已有的软件成分,不仅是提高开发效率的资源集约化生产方式,更重要的原因在于复用资源集约化生产方式,更重要的原因在于复用已有软件成分可以保证其相对正确性,回避不已有软件成分可以保证其相对正确性,回避不宜保证的
14、软件质量问题。宜保证的软件质量问题。复用是多方面的,从执行代码、源代码到设计复用是多方面的,从执行代码、源代码到设计文档,乃至分析文档。文档,乃至分析文档。2.2 2.2 面向对象的分析模型面向对象的分析模型目标:目标:用规范的面向对象图表和文字来描述所要建造用规范的面向对象图表和文字来描述所要建造的软件系统,以便在用户与系统分析人员之间达成共的软件系统,以便在用户与系统分析人员之间达成共识,同时使后续工作得以继续。识,同时使后续工作得以继续。内容:内容:需求描述需求描述 Use CaseUse Case 用况图用况图 辅助模型辅助模型 SequenceSequence 交互图交互图 Coll
15、aborationCollaboration 协作图协作图 State TransitionState Transition 状态转换图状态转换图 ComponentComponent 包图包图基本模型基本模型 ClassClass类图类图 详细说明详细说明对象层关系层特征层用况图(用况图(Use CaseUse Case)捕获与描述用户需求的工具捕获与描述用户需求的工具类图(类图(ClassClass)类图是系统模型的基础,描述系统的静态结构。类图是系统模型的基础,描述系统的静态结构。三个层次:三个层次:对象层:描述问题域和系统责任所需的对象对象层:描述问题域和系统责任所需的对象 关系层:类
16、之间的相互关系关系层:类之间的相互关系 特征层:类的属性和操作(分析阶段不用细化)特征层:类的属性和操作(分析阶段不用细化)顺序图(顺序图(SequenceSequence)按时间顺序排列在完成某一功能过程中对象之间的交互按时间顺序排列在完成某一功能过程中对象之间的交互行为。行为。协作图(协作图(CollaborationCollaboration)以某一对象为中心描述对象之间的交互。以某一对象为中心描述对象之间的交互。状态转换图(状态转换图(State TransitionState Transition)描述对象在生命周期内,响应事件的状态转换过程,以描述对象在生命周期内,响应事件的状态转
17、换过程,以及响应事件后所做的反映。及响应事件后所做的反映。包图(包图(ComponentComponent)对关系密切的模型元素进行打包。对关系密切的模型元素进行打包。2.3 2.3 面向对象的分析过程面向对象的分析过程分析过程中各个步骤不要求按固定顺序进行。所以,面向分析过程中各个步骤不要求按固定顺序进行。所以,面向对象的分析步骤经常被叫做对象的分析步骤经常被叫做“活动活动”。建立建立Use CaseUse Case发现对象发现对象定义属性与服务定义属性与服务建立结构与连接建立结构与连接定义:顺序图、定义:顺序图、协作图、状态图协作图、状态图建立建立ClassClass详细说明详细说明原型开
18、发原型开发实施实施OOAOOA的几点建议:的几点建议:1 1)确定需求的工作放在前面;)确定需求的工作放在前面;2 2)建立)建立ClassClass图,可以随时切换到其他活动;图,可以随时切换到其他活动;3 3)建立顺序图、协作图和状态图的活动,放在对象)建立顺序图、协作图和状态图的活动,放在对象 识别之后,并与基本模型活动交错进行,识别之后,并与基本模型活动交错进行,4 4)详细说明应分散在各项活动之中进行,最后做一次审)详细说明应分散在各项活动之中进行,最后做一次审查和补充;查和补充;5 5)原形可以反复地进行,早期的原型可以用来证实用户)原形可以反复地进行,早期的原型可以用来证实用户需
19、求;需求;6 6)对于规模较小系统,分析时可以省略包图。)对于规模较小系统,分析时可以省略包图。第三章第三章 面向对象的设计面向对象的设计 3.1 3.1 面向对象设计概述面向对象设计概述3.2 3.2 问题域设计问题域设计3.3 3.3 人机交互设计人机交互设计3.4 3.4 控制驱动设计设计控制驱动设计设计3.5 3.5 数据管理设计数据管理设计3.6 3.6 构件和部署设计构件和部署设计3.1 3.1 面向对象设计概述面向对象设计概述按照软件生命周期的规律,面向对象的方法学也包括分按照软件生命周期的规律,面向对象的方法学也包括分析活动和设计活动。析活动和设计活动。分析活动和设计活动并没有
20、明显的阶段划分,对应喷泉分析活动和设计活动并没有明显的阶段划分,对应喷泉式模型:式模型:演化演化维护维护测试测试实现实现设计设计分析分析 体现认识事物的循环迭代性体现认识事物的循环迭代性 强调开发活动的无间隙性(无强调开发活动的无间隙性(无明显的阶段划分)明显的阶段划分)强调开发活动的并发性强调开发活动的并发性 面向对象分析活动面向对象分析活动-针对问题域和系统责任,不考虑针对问题域和系统责任,不考虑与实现有关的因素,建立独立于实现的与实现有关的因素,建立独立于实现的OOA模型。模型。面向对象设计活动面向对象设计活动-考虑与实现有关的问题,建立针考虑与实现有关的问题,建立针对具体实现的对具体实
21、现的OOD模型,设计内容包括:模型,设计内容包括:1)根据实现语言对类(属性与操作)进行描述)根据实现语言对类(属性与操作)进行描述 2)人机交互界面设计)人机交互界面设计 3)系统控制部分的设计)系统控制部分的设计 4)数据管理部分的设计)数据管理部分的设计 5)系统构件部署)系统构件部署问题域问题域 部分部分 详细说明详细说明控制驱动部分控制驱动部分人机交互部分人机交互部分数据管理部分数据管理部分行为图与包图行为图与包图类图类图用况图用况图详详细细说说明明面向对象设计准则面向对象设计准则 以设计元素的耦合性、内聚性以及复用性为主以设计元素的耦合性、内聚性以及复用性为主要准则要准则 耦合性耦
22、合性 衡量耦合度的两个方面:衡量耦合度的两个方面:成分之间的信息传输量成分之间的信息传输量成分之间传递信息的复杂程度成分之间传递信息的复杂程度 交互耦合:成分之间通过消息交互,越松散越好交互耦合:成分之间通过消息交互,越松散越好 继承耦合:成分之间有继承关系,越紧密越好继承耦合:成分之间有继承关系,越紧密越好5 为提高性能进行类调整要求多项任务同时进行,则每项任务对应一个控制流。r:postResults()只能通过消息访问执行操作算法6 为对象存储增补属性与操作 OOA与OOD的界限 过程抽象:将确定的功能定义为单一实体(确定的功能是由一系列操作完成的)可见性 操作名(参数表):返回 性质C
23、ollaboration4 面向对象软件系统模型status:OUT)实现-对象接收消息所响应的操作实现细节,包括属性和操作过程的描述 具有数据库应有的特性和功能例2:对下列事物进行分类和抽象THEN sensor.内聚性内聚性 操作内聚:完成单一功能的操作的内聚最高操作内聚:完成单一功能的操作的内聚最高 类内聚:类中没有多余的属性和操作,且所有属性和类内聚:类中没有多余的属性和操作,且所有属性和操作应该是自身的责任,每个操作也是高内聚的。操作应该是自身的责任,每个操作也是高内聚的。复用性复用性 执行代码级的复用执行代码级的复用 源代码级的复用和继承源代码级的复用和继承 分析和设计结果的复用和
24、继承分析和设计结果的复用和继承 体系结构的复用和继承(设计模式)体系结构的复用和继承(设计模式)清晰准则清晰准则统一的用语统一的用语一致的约定一致的约定消息模板要少消息模板要少类责任表达要明确类责任表达要明确独立处理算法和策略算法独立处理算法和策略算法继承关系层次不宜过深继承关系层次不宜过深 类简洁性准则类简洁性准则避免过多的属性,使用继承保持属性量避免过多的属性,使用继承保持属性量对象间协作最小化对象间协作最小化避免过多的操作避免过多的操作保持操作的高内聚保持操作的高内聚保持内部成员的私有性保持内部成员的私有性(包括属性和操作)(包括属性和操作)其他设计准则其他设计准则3.2 3.2 问题域
25、设计问题域设计 3.2.1 3.2.1 引入可复用类引入可复用类 3.2.2 3.2.2 增设一般类增设一般类 3.2.3 3.2.3 调整继承关系调整继承关系 3.2.4 3.2.4 调整多态性调整多态性 3.2.5 3.2.5 为提高性能进行类调整为提高性能进行类调整 3.2.6 3.2.6 为对象存储增补属性与操作为对象存储增补属性与操作 3.2.7 3.2.7 关联的实现关联的实现 3.2.8 3.2.8 调整属性调整属性 3.2.9 3.2.9 设计算法设计算法 3.2.10 3.2.10 定义对象的可访问性定义对象的可访问性3.2.1 3.2.1 引入可引入可复用类复用类目标目标-
26、尽可能地使用可以利用的复用成分。尽可能地使用可以利用的复用成分。例:已经存在图书类,在书店管理系统和图书馆例:已经存在图书类,在书店管理系统和图书馆系统中可以复用它。系统中可以复用它。图书图书零售图书零售图书馆藏图书馆藏图书书店系统书店系统图书馆系统图书馆系统 可可直接利用:把可复用的类加到问题域并做标记。直接利用:把可复用的类加到问题域并做标记。只满足部分利用:把可复用类加到问题域,用子类继承只满足部分利用:把可复用类加到问题域,用子类继承并重新定义或新添操作。并重新定义或新添操作。只有部分可以利用:把可复用的类加到问题域,删除多只有部分可以利用:把可复用的类加到问题域,删除多余部分成为新的
27、类。余部分成为新的类。注:注:重新重新规划问题域中的复用类与原有类之间的关联。规划问题域中的复用类与原有类之间的关联。复用方法复用方法 车辆车辆序号序号颜色颜色样式样式出厂日期出厂日期序号认证序号认证()()车辆车辆序号序号厂商厂商样式样式序号认证()序号认证()例:例:新建的类新建的类已有的类已有的类换名字换名字3.2.2 3.2.2 增设一般类增设一般类 目标目标-把具有相同操作和属性的类组织在一起把具有相同操作和属性的类组织在一起形成超类,建立继承关系。形成超类,建立继承关系。处理策略处理策略 1)若子类中不需要父类中的某些操作,可在子类中重)若子类中不需要父类中的某些操作,可在子类中重
28、新声明该操作为无方法的操作。新声明该操作为无方法的操作。2)若在不同的类中的操作具有相同语义名字,但方法)若在不同的类中的操作具有相同语义名字,但方法不同,可利用多态机制,在一般类中为该操作做一个不同,可利用多态机制,在一般类中为该操作做一个虚函数。虚函数。3)若继承来的操作执行效果相同,只是缺少参数。在)若继承来的操作执行效果相同,只是缺少参数。在父类操作中加入必要的参数,执行时忽略该参数。父类操作中加入必要的参数,执行时忽略该参数。3.2.3 3.2.3 调整调整继承关系继承关系1)对不支持多继承的编程语言,需要将多继承)对不支持多继承的编程语言,需要将多继承关系调整为单继承关系关系调整为
29、单继承关系 方法方法1:用聚合关系将多继承关系转换为单继承关系:用聚合关系将多继承关系转换为单继承关系 照相机照相机照相照相 照相机照相机照相照相 方法方法1例例1:学生学生职工职工在职学生在职学生人员人员学生学生职工职工身份身份人员人员方法方法1例例2:身份身份=在职学生在职学生=学生学生=职工职工方法方法2例例1:学生学生职工职工人员人员在职学生在职学生学生学生在职学生在职学生人员人员职工职工学生信息学生信息职工信息职工信息方法方法2:提升多继承子类的层次,将多继承转换为单继承:提升多继承子类的层次,将多继承转换为单继承方法方法2例例2:学生学生职工职工在职学生在职学生方法方法1:取消继承
30、:取消继承方法方法2:改为聚合:改为聚合 照相机照相机 照相机照相机 照相机照相机2)对不支持继承的编程语言,需要将继承关系)对不支持继承的编程语言,需要将继承关系取消。取消。照相机照相机 对多态性的调整对多态性的调整 若编程语言不支持多态,需修改与相关的属性和若编程语言不支持多态,需修改与相关的属性和 操作的名字,并根据情况,重新进行对象分类。操作的名字,并根据情况,重新进行对象分类。多边形多边形线条色线条色线形线形边数边数顶点坐标顶点坐标绘图绘图填充填充正多边形正多边形*顶点坐标顶点坐标*绘图绘图矩形矩形 边数边数*顶点坐标顶点坐标*绘图绘图多边形多边形线条色线条色线形线形填充填充不规则多
31、边形不规则多边形边数边数顶点坐标顶点坐标绘图绘图正多边形正多边形顶点坐标顶点坐标绘图绘图矩形矩形顶点坐标顶点坐标绘图绘图 例:例:*表示多态表示多态新增的类新增的类virtual 表示不用表示不用3.2.5 3.2.5 为为提高性能进行类调整提高性能进行类调整 影响系统性能的因素影响系统性能的因素 为提高性能可以做的处理:为提高性能可以做的处理:1)调整对象的分布)调整对象的分布 2)增加保存中间结果的属性或类)增加保存中间结果的属性或类 3)调整系统功能的并发度)调整系统功能的并发度 4)合并通信频繁的类)合并通信频繁的类 5)缩小类范围,分解复杂对象)缩小类范围,分解复杂对象数据传输时间数
32、据传输时间数据存取时间数据存取时间数据处理时间数据处理时间1)调整对象的分布:)调整对象的分布:频繁交换信息的对象,尽量集中在一个物理空间处频繁交换信息的对象,尽量集中在一个物理空间处理。例如:理。例如:2)增加保存中间结果的属性或类)增加保存中间结果的属性或类 经常重复的某些处理,要设置中间存储。例如:经常重复的某些处理,要设置中间存储。例如:对月报表的处理,通常存储周统计信息;对上半年与对月报表的处理,通常存储周统计信息;对上半年与下半年的增长率的计算,通常要累计阶段性的增长率,下半年的增长率的计算,通常要累计阶段性的增长率,不要每次都从头计算。不要每次都从头计算。将与用户频繁交互的操作界
33、面对象集中在前端客户机;将与用户频繁交互的操作界面对象集中在前端客户机;将与数据库频繁交换信息的业务处理逻辑对象集中在将与数据库频繁交换信息的业务处理逻辑对象集中在主机服务器。主机服务器。流速调节器流速调节器指定流速指定流速流速调节流速调节流速探测器流速探测器当前流速当前流速流速探测流速探测取当前流速取当前流速流速控制器流速控制器指定流速指定流速当前流速当前流速流速调节流速调节流速探测流速探测例如:合并流速探测器和流速调节器两个类,减少频例如:合并流速探测器和流速调节器两个类,减少频繁通讯,提高效率。繁通讯,提高效率。4)合并通信频繁的类)合并通信频繁的类原设计:原设计:1:n1对应对应5)缩
34、小类范围,分解复杂对象)缩小类范围,分解复杂对象例例1:将范围较大的类分解为较具体的类,可以使复杂处:将范围较大的类分解为较具体的类,可以使复杂处理简单化。理简单化。几何图象几何图象多边形多边形椭圆椭圆扇形扇形例例2 2:用聚合关系描述分解的复杂对象,可以分别应对不用聚合关系描述分解的复杂对象,可以分别应对不同的情况。同的情况。祯祯显示显示背景背景显示显示前景前景显示显示 存储对象是指永久性对象,为了存储永久性对存储对象是指永久性对象,为了存储永久性对象,需要在对象类中增补必要的属性与操作象,需要在对象类中增补必要的属性与操作 方法方法1:在作为永久对象的类属性中增加类名,并增加在作为永久对象
35、的类属性中增加类名,并增加存储和检索操作,使类的对象可以自己存储或检索自存储和检索操作,使类的对象可以自己存储或检索自己。己。永久存储类永久存储类类名类名(对应数据库表名对应数据库表名)存储对象存储对象()检索对象检索对象()3.2.6 3.2.6 为对象存储增补属性与操作为对象存储增补属性与操作方法方法2:设立独立的数据管理对象类,负责问题域中所设立独立的数据管理对象类,负责问题域中所有永久对象的存储和检索。有永久对象的存储和检索。存储数据管理器存储数据管理器类名类名(对应各个数据库表对应各个数据库表)存储对象存储对象检索对象检索对象方法方法3:利用面向对象数据库存储和检索永久对象。利用面向
36、对象数据库存储和检索永久对象。3.2.7 3.2.7 关联的转化与实现关联的转化与实现 关联的转化:关联的转化:1 1)把关联类和)把关联类和N N元关联转化为二元关联元关联转化为二元关联 2 2)把多对多关联转化为一对多关联)把多对多关联转化为一对多关联供货商供货商客户客户1.*供货商供货商客户客户供需合同供需合同卖方卖方买方买方1.*11例:例:关联的实现关联的实现 1)聚合实现:在整体类中,加入部分类类型的属性)聚合实现:在整体类中,加入部分类类型的属性 或指针属性或指针属性 汽车汽车型号型号颜色颜色牌照牌照 底盘底盘 发动机发动机 车轮车轮 车厢车厢底盘底盘发动机发动机车轮车轮*车厢车
37、厢例:例:2)关联实现:)关联实现:单项关联:用关联对象作为指针属性的类型,加入源单项关联:用关联对象作为指针属性的类型,加入源 对象类;双向关联:在两端都设置对方类型的指针属对象类;双向关联:在两端都设置对方类型的指针属性性 关联重数为关联重数为1:设立一个指针对象;关联重数大于:设立一个指针对象;关联重数大于1:设立指针集合设立指针集合 机场机场城市城市.飞机飞机航班号航班号机型机型.学生学生学号学号姓名姓名 课程课程名称名称学分学分着陆城市机场着陆城市机场*例:例:1.n0.n着陆着陆有有停放的飞机停放的飞机*1.n0.n有有课程课程*授课教师授课教师姓名姓名院系单位院系单位1.n1.n
38、有有课程课程*授课教师授课教师*讲授讲授3.2.8 3.2.8 调整属性调整属性学生学生姓名姓名学号学号籍贯籍贯学生学生姓名姓名学号学号籍贯籍贯国家国家省省县县验证验证11 属性是组合数据项时,可能需要对属性进行调整属性是组合数据项时,可能需要对属性进行调整 按照属性的语法,明确标出属性的完整内容按照属性的语法,明确标出属性的完整内容 包括:包括:可见性可见性 属性名称属性名称:类型类型=初始值初始值 性质性质例例:属性的性质,指属性范围的限定。属性的性质,指属性范围的限定。例:例:姓名姓名:420字符字符;学号;学号:8位数字位数字;成绩总和成绩总和read:RETUNS sensor.ID
39、,sensor.status;MESSAGE(motion.sensor)-set:SENDS sensor.ID,sensor.status;用结构化自然语言描述协议例用结构化自然语言描述协议例系统设置协议:系统设置协议:MESSAGE(system)-program:可细化为:可细化为:MESSAGE(system)-install:telephone number MESSAGE(system)-define:alarm time MESSAGE(system)-build:sensor table MESSAGE(system)-load:password Procedure Safe
40、Home software PACKAGE system IS TYPE system data PORC install,define,build,load PROC display,reset,query,modify,call PRIVATE PACKAGE BODY system IS PRIVATE system.id IS STRING LENGTH verification phone.number,telephone.number,.IS STRING LENGTH(8);sensor.table DEFINED sensor.type IS STRING LENGTH(2),
41、sensor.number,alarm.threshold IS NUMBER;PUBLIC PORC install RECEIVES(telephone.number)design detail for operation install .(多个操作描述)(多个操作描述)END system.END SafeHome softwareTYPE:数据类型说明PROC:过程说明数数据据对对象象定定义义用结构化自然语言描述算法例:用结构化自然语言描述算法例:SafeHome 高高层构件设计描述(类似层构件设计描述(类似Ada的伪码)的伪码)操作部分描述操作部分描述PROC read(senso
42、r.id,sensor.status:OUT)GET(sensor,exception:sensor.status:=error)raw.signal;raw.signal IS BIT STRING IF(hardware.interface.type=“S”&alarm.characteristics.signal.type=“B”THEN COVERT raw.signal TO internal.signal.level;IF internal.signal.level threshold THEN sensor.status:=“event”;ELSE sensor.status:=
43、“no event”;ENDIF ELSE processing for other type of S interfaces would be specified ENDIF RETURN sensor.id,sensor.status;END read 定义对象:在算法设计中,根据实现条件,按定义对象:在算法设计中,根据实现条件,按以下方式以下方式 定义对象:定义对象:内存中的对象:内存中的对象:用相应的类定义,可以一个对象定义一个变量,也可用相应的类定义,可以一个对象定义一个变量,也可以定义对象数组,包括静态声明。以定义对象数组,包括静态声明。外存上的对象:外存上的对象:(永久对象)(永
44、久对象)设置专门的操作,按照规定的格式,从外存中读取对设置专门的操作,按照规定的格式,从外存中读取对象;前提是有对应的保存永久对象的操作。象;前提是有对应的保存永久对象的操作。3.2.10 3.2.10 定义对象及可访问性定义对象及可访问性 类之间存在依赖,表明对象间的访问有如下情况:类之间存在依赖,表明对象间的访问有如下情况:1)类的对象作为参数传递)类的对象作为参数传递 例例:vector multiply(matrix&m,vector&v,int n)2)类对象被声明为操作的局部成分)类对象被声明为操作的局部成分 例例:outer_class:write()inner_class g;
45、g.write();3)类对象被声明为全局的)类对象被声明为全局的 例例:sensor s_control(“cc”);main()类之间存在关联,也就是对象之间存在链,表明对类之间存在关联,也就是对象之间存在链,表明对 象间可以访问,且可见性为象间可以访问,且可见性为“公共公共”的。的。根据类的关联考虑对象的可访问性根据类的关联考虑对象的可访问性3.3 3.3 人机交互设计人机交互设计3.3.1 3.3.1 人机交互人机交互设计原则设计原则界面设计界面设计 规则规则至于用户的控制之下至于用户的控制之下减少用户的记忆负担减少用户的记忆负担保持界面风格一致保持界面风格一致界面设计问题界面设计问题
46、响应时间问题响应时间问题联机帮助问题联机帮助问题错误提示问题错误提示问题命令操作问题命令操作问题设计人员设计人员设计设计界面界面设计目标设计目标用户用户学习学习评判评判经验与需求经验与需求反馈反馈启发启发3.3.2 3.3.2 人机交互的人机交互的设计过程设计过程 设计人员与用户协作的重复过程设计人员与用户协作的重复过程3.3.3 3.3.3 人机交互的分析策略人机交互的分析策略1)通过与系统交互的参与者进行分析通过与系统交互的参与者进行分析 列举所有的人员与参与者列举所有的人员与参与者 对人员与参与者进行调查研究对人员与参与者进行调查研究 区分人员类型区分人员类型 统计(或估算)出各类人员的
47、比例统计(或估算)出各类人员的比例 了解各类人员的主观需求了解各类人员的主观需求 按照一定的准则进行折中与均衡按照一定的准则进行折中与均衡2)通过用况进行分析通过用况进行分析 分析用况脚本陈述,划分参与者行为和系统行为分析用况脚本陈述,划分参与者行为和系统行为 分离出每个段落包含的输入或输出分离出每个段落包含的输入或输出 去掉与输入或输出无关的陈述去掉与输入或输出无关的陈述 包括:参与者或系统自身的行为,以及一些控制行为包括:参与者或系统自身的行为,以及一些控制行为收款(usecase)输入本次收款命令;收款准备,应收款总数置为0 输出提示信息;for 顾客选购的每种商品 do 输入商品编号;
48、if 此种商品多于一件 then 输入商品数量 end if;检索商品名称及单价;货架商品数减去售出数;if 货架数低于下限 then 通知供货员请求上货 end if;计算商品总价并 打印编号、名称、数量、单价和总价;总价累加到应收款总数;end for;打印应收款总数;输入顾客交来的款数;计算应找回的款数;打印以上两个数目;收款(人机交互)输入开始本次收款命令;输出提示信息;for 顾客选购的每种商品 输入商品编号;if 此种商品多于一件 then 输入商品数量end if;打印商品编号名称、数量、单价和总价;end for;打印应收款总数;输入顾客交来的款数;打印交款数及找回款数;通过用
49、况分析人机交互例通过用况分析人机交互例3.3.4 3.3.4 面向对象的面向对象的人机交互设计人机交互设计1)确定输入设备)确定输入设备2)设计输入界面对象)设计输入界面对象3)输入步骤细化输入步骤细化 对话框设计要点对话框设计要点:(a)使用有意义且易理解的标题;)使用有意义且易理解的标题;(b)按逻辑排序输入框;)按逻辑排序输入框;(c)允许编辑文本型输入框;)允许编辑文本型输入框;(d)对输入错误有保证措施,出错时有提示;)对输入错误有保证措施,出错时有提示;(e)明确标出输入框的可选和必选;)明确标出输入框的可选和必选;(f)有必要的输入框解释(如在)有必要的输入框解释(如在Windo
50、ws的状态条上)。的状态条上)。菜单菜单对话框对话框1)设计输入设计输入 检查输入的内容:检查输入的内容:(a)输入框组合的完备性:确保所有必要的输入框都要被输入)输入框组合的完备性:确保所有必要的输入框都要被输入(b)数据的有效范围控制:检查所输入数据类型)数据的有效范围控制:检查所输入数据类型(c)数据有效位数的控制)数据有效位数的控制:检查所输入数据值范围检查所输入数据值范围2)设计输出设计输出设计相应的设备类及接口操作设计相应的设备类及接口操作1)确定输出设备)确定输出设备2)确定输出的形式和内容)确定输出的形式和内容3)输出步骤的细化)输出步骤的细化设备驱动设备驱动用户操作界面用户操