第3讲类与对象关系建模.ppt
《第3讲类与对象关系建模.ppt》由会员分享,可在线阅读,更多相关《第3讲类与对象关系建模.ppt(229页珍藏版)》请在三一办公上搜索。
1、面向对象技术,第3讲 类与对象关系建模,内容提要,概念数据建模概述类图与对象图类的确定类间关系确定建模方法与实例,概念数据建模概述,在完成用例建模之后,便可以进行其他系统分析活动,而概念数据建模是最重要的分析活动之一。概念数据建模是对组织数据的描绘,它以一种独立于实现的方式说明了数据的结构和数据之间的相互关系,为后续的分析设计提供了基础。,概念数据建模概述,概念数据建模的过程,概念数据建模概述,概念数据建模在系统分析中的作用,概念数据建模概述,如何进行概念数据建模?必须包括以数据为中心的问题和调查,而不是以过程、逻辑或用户界面为中心,从对业务性质的透彻理解导出数据模型,也可以通过审查系统内部处
2、理的特定业务文档计算机显示、报表和业务表单来收集。开发准确而完整的数据模型要考虑的问题类:业务的主题/客体是什么?什么类型的人、地点、事物和材料被用于这个业务或者和这个业务交互?每个对象可能存在多少实例?,概念数据建模概述,如何进行概念数据建模?开发准确而完整的数据模型要考虑的问题(续)属性:需要维护关于对象的什么数据?什么特征描述各个对象?对象在什么基础上被引用、选择、限定、整理和分类?对象的一个特性能有多少个值?对给定的一个对象,特性是必须的还是可选的?标识符:什么独有特性区分相同类型的各个对象?这个区别特性是随着时间变化还是持久的?即使在我们知道一个对象存在的时候,该对象的这个特性可以缺
3、少吗?对象可以通过一个数字序列标识吗?关联、聚合和组合:对象之间存在什么关系?一个关系是部分整体的那种吗?如果是,一个对象可以在没有另一个时存在吗?一个关系中涉及了多个对象吗?关系是同类对象之间的吗?参与一个关系的对象的基数是什么?,概念数据建模概述,如何进行概念数据建模?开发准确而完整的数据模型要考虑的问题(续)泛化:一个对象是“一种”或另一个对象的“一种”吗?对象形成一个比较一般到比较特殊的层次吗?,概念数据建模概述,Mark咖啡机控制软件设计加热器,开关保温盘,开关保温盘传感器加热传感器冲煮按钮减压阀门,概念数据建模概述,Mark咖啡机控制软件设计基本接口,namespace Coffe
4、eMaker public enum WarmerPlateStatus/保温盘 WARMER_EMPTY,POT_EMPTY,POT_NOT_EMPTY public enum BoilerStatus/加热器 EMPTY,NOT_EMPTY public enum BrewButtonStatus/冲煮按钮 PUSHED,NOT_PUSHED public enum WarmerState/保温 ON,OFF public enum IndicatorState/指示灯 ON,OFF public enum ReliefValveState/减压阀 OPEN,CLOSED,概念数据建模概述
5、,Mark咖啡机控制软件设计基本接口,namespace CoffeeMaker public interface CoffeeMakerAPI WarmerPlateStatus GetWarmerPlateStatus();BoilerStatus GetBoilerStatus();BrewButtonStatus GetBrewButtonStatus();void SetBoilerState(BoilerState s);void SetWarmerState(WarmerState s);void SetIndicatorState(IndicatorState s);void
6、SetReliefValvelState(ReliefValvelState s);,概念数据建模概述,Mark咖啡机控制软件设计类设计,概念数据建模概述,Mark咖啡机控制软件设计存在问题如何实现这些类,只是一个函数调用的转换器,水蒸气类,public class Lightpublic void On()CoffeeMaker.api.SetIndicatorState(IndicatorState.ON);public void Off()CoffeeMaker.api.SetIndicatorState(IndicatorState.OFF);,概念数据建模概述,Mark咖啡机控制软件
7、设计存在问题虚构的抽象,public interface Heatervoid TurnOn();void TurnOff();,public interface Sensorint Sensor();,概念数据建模概述,Mark咖啡机控制软件设计如何改进:根据功能抽象,概念数据建模概述,Mark咖啡机控制软件设计如何改进:追加用户界面,类图的概念,对象是指与应用问题有一定关联的某个事物,或者说是对某个事物的抽象描述。类是对一类具有相同特性的对象的描述,或者说是类属事物或系统的表示形式。类可以具有状态(通过使用自己的特性数据来描述),并且可以提供功能(通过使用其操作或方法来表示),类图的概念,
8、类图描述类、接口、协作及它们之间关系的图。类图显示系统中各个类的静态结构。,类图的概念,类图中的图示元素:类(Class)接口(Interface)协作(Collaboration)依赖关系(Dependency)泛化关系(Generalization)关联关系(Association)实现关系(Realization),类,面向对象系统组织结构的核心。对一组具有相同属性、操作、关系和语义的对象的抽象。包括名称部分、属性部分和操作部分。,类,Dialer类,Public class Dialer private string digits;private int nDigits;public
9、void Digit(int n);protected bool RecordDigit(int n);,类,类的名称应该来自系统的问题域。应该是一个名词,且不应该有前缀或后缀。分为简单名称和路径名称。,类,属性描述了类在软件系统中代表的事物(即对象)所具备的特性。类可以有任意数目的属性,也可以没有属性。在UML中,类属性的语法为:可见性 属性名:类型=初始值 属性字符串,类,属性可见性公有(Public)“”私有(Private)“”受保护(Protected)“”,类,属性属性名每个属性都必须有一个名字以区别于类中的其他属性。属性名由描述所属类的特性的名词或名词短语组成。单字属性名小写,如
10、果属性名包含了多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。,类,属性类型简单类型:整型布尔型实型枚举类型系统中的其他类,类,属性初始值目的:保护系统的完整性,防止漏掉取值或被非法的值破坏系统的完整性。为用户提供易用性。,类,属性属性字符串指定关于属性的其他信息,往往是约束条件。任何希望添加在属性定义字符串值但又没有合适地方可以加入的规则,都可以放在属性字符串里。实例Name:string readonly,类,操作对类的对象所能做的事务的抽象。一个类可以有任意数量的操作或者根本没有操作。返回类型、名称和参数一起被称为操作签名。在UML中,类操作的语法为:可见性 操作名(
11、参数表):返回类型 属性字符串,类,操作可见性公有(Public)“”私有(Private)“”受保护(Protected)“”包内公有(Package)“”,类,操作操作名用来描述所属类的行为的动词或动词短语。单字操作名小写,如果操作名包含了多个单词,这些单词要合并,并且除了第一个单词外其余单词的首字母要大写。,类,操作参数表一些按顺序排列的属性定义了操作的输入。是可选的,即操作不一定必须有参数才行。定义方式:“方向 名称:类型默认值”。若存在多个参数,将各个参数用逗号隔开。参数可以具有默认值。,类,操作返回类型是可选的,即操作不一定必须有返回类型。绝大部分编程语言只支持一个返回值。具体的编
12、程语言一般要加一个关键字void来表示无返回值。,类,操作属性字符串在操作的定义中加入一些除了预定义元素之外的信息。往往也是定义约束,类,职责类或其他元素的契约或义务。以自由形式的文本形式存在,即非形式化的方法来描述。,职责内容,类,约束指定了类所要满足的一个或多个规则。形式化的方法。,类,注释 注释可以包含图形也可以包含文本。,类,范例,接口与抽象类,接口在没有给出对象的实现和状态的情况下对对象行为的描述。包含操作但不包含属性。一个类可以实现一个或多个接口。,接口与抽象类,接口类:,接口与抽象类,抽象类是一种不能够被直接实例化的类,也就是说不能够创建一个属于抽象类的对象,接口与抽象类,抽象类
13、实例,类之间的关系,依赖关系泛化关系关联关系实现关系,类之间的关系,依赖关系表示两个或多个模型元素之间语义上的关系。客户以某种形式依赖于提供者。关联、实现和泛化都是依赖关系。,类之间的关系,依赖关系如果两个类的对象之间存在着下面的情形,且两个类之间不存在结构方面的联系(例如:供应类以成员变量的形式作为客户类的一部分),就可以建模成为具有依赖关系,这些情形是:(1)客户类访问定义在供应类内部的值(常量或 变量)。(2)客户类的操作启动了定义在供应类内的操作。(3)客户类的返回类或参数是供应类的实例。序列图中的两个对象,如果存在着消息的发送。且它们之间又没有结构方面的连接,就可以在类图上用依赖关系
14、对它们建模。,类之间的关系,泛化关系存在于一般元素和特殊元素间的分类关系。可以用于类、用例以及其他模型元素。描述了一种“is a kind of”的关系。,类之间的关系,泛化关系范例,public class Employeepublic class SalariedEmployee:Employee,类之间的关系,泛化关系泛化主要用途:多态:后代的实例可以用于任何祖先被声明使用的地方,从而使多态操作成为可能,即操作的实现方法由实际对象的类来确定继承:共享祖先描述,并允许对元素进行增量描述单继承多重继承,类之间的关系,泛化关系泛化主要用途:,类之间的关系,泛化关系泛化主要用途:,类之间的关系,
15、泛化关系泛化主要用途:,类之间的关系,关联关系一种结构关系。指明事物的对象之间的联系。最普通的关联是二元关联。,类之间的关系,关联关系范例,public class phoneprivate Button itsButtons15,类之间的关系,关联关系关联关系并不是仅仅一个抽象的概念,它在实现为程序设计语言源代码时,会有对应的映射。通常,当把两个有关联关系的类映射为特定的程序设计语言代码时,每一个类都会被定义为一个可以引用对方的类的对象的成员变量,这个成员变量视对关联关系的修饰的不同,可能会采取不同的形式,如:它可以指向对方的类的指针,也可能是对方类的对象。,类之间的关系,关联关系,类之间的
16、关系,关联关系名称(Name)角色(Role)多重性(Multiplicity)聚合关系(Aggregation)组合关系(Composition)导航性(Navigation),类之间的关系,关联关系名称(Name)使用一个动词或动词短语来命名关联。清晰而简洁地说明对象间关系。关联的名称并不是必需的。可以前缀或后缀一个指引阅读方向的方向指示符,以消除歧义。,类之间的关系,关联关系角色(Role)关联关系中一个类对另一个类所表现出来的职责。角色的名称应该是名词或名词短语,以解释对象是如何参与关系的。,类之间的关系,关联关系多重性(Multiplicity)指有多少对象可以参与该关联。可以表达一
17、个取值范围、特定值、无限定的范围或一组离散值。格式:“minimum.maximum”(均为Int型)。赋给一个端点的多重性表示该端点可以有多少个对象与另一个端点的一个对象关联。,类之间的关系,关联关系聚合关系(Aggregation)一种特殊类型的关联。表示整体与部分关系的关联。描述了“has a”的关系。,类之间的关系,关联关系组合关系(Composition)聚合关系中的一种特殊情况,是更强形式的聚合,又称强聚合。成员对象的生命周期取决于聚合的生命周期。聚合不仅控制着成员对象的行为,而且控制着成员对象的创建和解构。,类之间的关系,关联关系导航性(Navigation)描述一个对象通过链进
18、行导航访问另一个对象。使用导航性可以降低类间的耦合度。包括:单向关联和双向关联。,类之间的关系,关联关系,类之间的关系,关联关系,类之间的关系,关联关系关联类:在有些问题中,关联关系不仅需要一个名称、需要定义相关对象的角色及其参与这些角色的对象数量(多重性),而且还需要设置一些属性、操作以及其它特性,此时一般需要引入关联类。,类之间的关系,关联关系关联类,类之间的关系,实现关系规格说明和其实现之间的关系。客户必须至少支持提供者的所有操作。泛化和实现都可以将一般描述与具体描述联系起来:泛化将同一语义层上的元素连接起来,并且通常在同一模型内。实现将不同语义层内的元素连接起来,并且通常建立在不同的模
19、型内。,类,类图实例,类,类图说明标识符:是一个属性或属性组合,它被选择用作一个类的唯一特征。多值属性:可以具有多于一个的值,在概念设计期间处理多值属性有两种方法:多值构造型;为多值属性创建一个类;组合属性:具有多个子属性的属性,例如地址,类,类图说明,分析类,如何发现类类的种类:实体类边界类控制类实体类:实体类的判别特征是它的对象持有应用的大部分数据,一般实体类的对象是持久的,也就是说它们的存在超过一个会话的生命期,或者有时存在于系统的整个生命期间。,分析类,如何发现类边界类:参与者用边界类的对象与系统交互,例如表单、对话框、菜单和其他交互屏幕等,边界类还可以用于建立与另一个系统的通信,例如
20、遗留系统。因此边界类将系统与系统外部的变化隔离开。控制类:协调任务并捕捉用例中的主要应用逻辑。,分析类,如何发现类通过事件流寻找类(名词动词分析法)分析事件流中的名词,将性质相同的归为一类;去除不恰当的或含糊的,去除应归为属性的项目。命名所获取的类。,分析类,如何发现类如何确定属性注意需求中的名词;注意用例模型或需求文档中的名词,数据表。如何确定方法实现:实现业务功能,通过事件流中的动词分析进行捕捉;管理:管理对象的创建或构造;访问:查询或修改每个类的属性;帮助:说明类完成任务所需要的操作。,分析类,需求描述小王是一个爱书之人,家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书
21、管理系统。该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号,可以修改信息,但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望能够对书籍的购买金额、册数按特定时间周期进行统计,分析类,发现类小王是一个爱书之人,家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动
22、按规则生成书号,可以修改信息,但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望能够对书籍的购买金额、册数按特定时间周期进行统计,分析类,筛选备选类“小王”、“人”、“家里”很明显是系统外的概念,无须对其建模;而“个人图书管理系统”、“系统”指的就是将要开发的系统,即系统本身,也无须对其进行建模;很明显“书籍”是一个很重要的类,而“书名”、“作者”、“类别”、“出版社”、“书号”则都是用来描述书籍的基本信息的,因此应该作为“书籍”类的属性处理,而“规则”是指书号的生成规则,而书号则是书籍的一个属性,因此“规则”可以作为编写“书籍”类构造函数的指
23、南。“基本信息”则是书名、作者、类别等描述书籍的基本信息统称,“关键字”则是代表其中之一,因此无需对其建模;“功能”、“新书籍”、“信息”、“记录”都是在描述需求时使用到的一些相关词语,并不是问题域的本质,因此先可以将其淘汰掉;,分析类,筛选备选类“计算机类”、“非计算机类”是该系统中图书的两大分类,因此应该对其建模,并改名为“计算机类书籍”和“非计算机类书籍”,以减少歧义;“外借情况”则是用来表示一次借阅行为,应该成为一个候选类,多个外借情况将组成“外借情况列表”,而外借情况中一个很重要的角色是“朋友”借阅主体。虽然到本系统中并不需要建立“朋友”的资料库,但考虑到可能会需要列出某个朋友的借阅
24、情况,因此还是将其列为候选类。为了能够更好地表述,将“外借情况”改名为“借阅记录”,而将“外借情况列表”改名为“借阅记录列表”;“购买金额”、“册数”都是统计的结果,都是一个数字,因此不用将其建模,而“特定时限”则是统计的范围,也无需将其建模;不过从这里的分析中,我们可以发现,在该需求描述中隐藏着一个关键类书籍列表,也就是执行统计的主体。,分析类,得到候选类在使用“名词动词法”寻找类的时候,很多团队会在此耗费大量的时间,特别是对于中大型项目,这样很容易迷失方向。其实在此主要的目的是对问题领域建立概要的了解,无需太过咬文嚼字,类的设计原则的方法,1.单一职责原则(SRP)含义:就一个类而言,应该
25、仅有一个引起它变化的原因。范例说明:,类的设计原则的方法,1.单一职责原则(SRP),类的设计原则的方法,1.单一职责原则(SRP),类的设计原则的方法,1.单一职责原则(SRP)总结SRP是所有原则中最简单的原则之一;也是最难正确应用的原则之一。,类的设计原则的方法,2.开放封闭原则(OCP)含义:软件实体应该是可以扩展的,但是不可修改的;对于扩展是开放的,对于修改是封闭的。范例说明:,类的设计原则的方法,2.开放封闭原则(OCP),类的设计原则的方法,3.Liskov替换原则(LSP)含义:子类型必须能够替换掉它们的基类型。替换性质:若对于每个类型S的对象O1,都存在一个类型T的对象O2,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象 关系 建模
链接地址:https://www.31ppt.com/p-5636847.html