网址简化在线生成,北京seo人员,番禺网络科技有限公司,卓天商务怎么入驻静态建模#xff08;类和对象建模#xff09;
类和对象模型的基本模型元素有类、对象以及它们之间的关系。系统中的类和对象模型描述了系统的静态结构#xff0c;在UML中用类图和对象图来表示。 类图由系统中使用的类以及它们之间的关系组成。类之间的关系有关联、依赖、泛…静态建模类和对象建模
类和对象模型的基本模型元素有类、对象以及它们之间的关系。系统中的类和对象模型描述了系统的静态结构在UML中用类图和对象图来表示。 类图由系统中使用的类以及它们之间的关系组成。类之间的关系有关联、依赖、泛化、实现等。类图是一种静态模型它是其他图的基础。一个系统可以有多张类图一个类也可出现在几张类图中。
什么是类 类图的核心组成 类类名属性操作 类之间的关系关联聚集、组合、依赖、泛化、实现 多样性多重性通常在关联、聚合、组合中使用代表有多少个关联对象存在。使用数字…星号数字表示类分为 实体类如学生、商品来自需求说明中的名词 控制类如增加商品类、用户注册类 边界类如对话框、窗体、菜单
如何用UML表示一个类
• 名称每个类都有一个惟一的名称通常采用CamelCase俗称驼峰格式每个单词的首字母都要大写其他均以小写字母出现。格式表示 • 属性是已被命名的类的特性它描述该类实例中包含的信息 • 操作是类所提供的服务它可以由类的任何对象请求以影响其行为 • 属性名和操作名也通常采用CamelCase格式表示只不过首字母通常为小写。
UML对属性的描述
UML中**描述一个属性的语法**如下visibilityopt /opt attribute-name ⌊ : type ⌋optmultiplicityopt ⌊ initial-value⌋opt⌊ {property-string}⌋opt 其中带下标opt或⌊ ⌋opt的部分表示该部分是任选的 ------------------------------------------------***类属性的语法(重要)----------------------------------------------------------- visibility可见性表示该属性在哪个范围内可见即可使用见下表 attribute-name表示属性名。type类型用来指明属性值的类型multiplicity重数用来指出该属性可能的值的个数以及它们的排列次序和唯一性。值的个数写在方括号([ ])中其形式是[minimum…maximum]。maximum可以是“ * ”表示“无限”。当值的个数是单一值如值的个数是3时可写成[3…3]或简写成[3]。典型的写法有[0…1][1]表示[1…1][ * ]表示[0… * ][1… * ][1…3]。当重数缺省时隐含表示重数为1。当一个属性有多个值时可在值的个数后面指明值元素的排列次序和唯一性排列次序和唯一性写在花括号({ })中可使用的关键字如下表所示其默认值是set即无序且值元素唯一。 initial-value初值在创建一个类的实例对象时应对其属性赋值如果类中对某属性定义了初值那么该初值可作为创建对象时该属性的默认值。property-string特征字符串用来明确地指明该属性可能的候选值如红黄绿指出该属性可枚举的值只能是红、黄、绿。 属性还可以定义为类属性class attribute 表示被这个类的所有实例对象共享该属性的值。类属性是这个类的名字空间中的全局变量。类属性用下划线来指明。
UML对操作的描述
UML中描述一个操作的语法如下 visibilityopt operating-nameparameter-list ⌊ : return-type ⌋opt ⌊ { property-string }⌋opt 操作可见性的含义与属性中的含义相同。 参数表是用逗号分隔的形式参数序列描述一个参数的语法如下 directionopt parameter-name type ⌊ multiplicity⌋opt ⌊ default -value⌋opt 其中direction方向用来指明参数信息流的方向 类也可以定义类操作class operation。通常操作是在该类的对象实例上被调用的而类操作可以在没有对象实例的情况下被调用但此时只允许访问类属性.
类之间的关系
对象并非遗世独立对象间存在千丝万缕的联系UML中关注以下几种类型的关系 关联关系Association) 聚合与组合关系(Aggregation and Composition 泛化关系(Generalization)依赖关系(Dependency)实现关系(Realization) 类图描述类和他们之间的关系 关联 关联描述了系统中对象之间或其他实例之间的连接。关联的种类主要有二元关联多元关联受限关联聚集aggregation和组合composition
(1)二元关联 - 二元关联表示为在两个类之间用一条直线连接直线上可写上关联名 关联的两端可加上重数multiplicity 表示该类有多少个对象可与对方的一个对象关联 重数 在一个类的关联端点附加的重数表示这个类的多少个实例对象可以与另一个类该关联的另一端的一个实例相关。允许一个类与自身关联 (2)多元关联 三个或三个以上的类之间可以互相关联 3受限关联qualified association受限关联用于一对多或多对多的关联。限定符qualifier用来区分关联“多”端的对象集合它指明了在关联“多”端的某个特殊对象 4聚合 【聚合关系】是整体与部分的关系且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系轮胎离开车仍然可以存在。**聚合关系是关联关系的一种是强的关联关系**关联和聚合在语法上无法区分必须考察具体的逻辑关系。 5组合composition 【组合关系】是整体与部分的关系但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系没有公司就不存在部门。组合关系是关联关系的一种是比聚合关系还要强的关系它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
泛化 泛化是一种继承关系表示一般与特殊的关系它指定了子类如何特化父类的所有特征和行为。比如老虎是动物的一种既有老虎的特性也有动物的共性。具体画法有有共享表示法和分离表示法两种。
泛化共享表示法多个类共享一个泛化箭头 泛化分离表示法每个类有自己的泛化箭头
实现 类与接口的关系表示类是接口所有特征和行为的实现。 依赖 是一种使用的关系即一个类的实现需要另一个类的协助。 可以简单的理解就是一个类A使用到了另一个类B而这种使用关系是具有偶然性的、临时性的、非常弱的但是B类的变化会影响到A比如某人要过河需要借用一条船此时人与船之间的关系就是依赖。 如何阅读类图
先看清有哪些类然后看看类之间存在的关系并结合多重性来理解类图的结构特点以及各个属性和方法的含义 读出类图中共有7个类Order订单、OrderItem订单项目、Customer客户、Consignee收货人、DeliverOrder提货单、Peddlery商家、Prodcut产品读出关系从图中关系最复杂也就是线最密集的类开始阅读本图中最复杂的就是Order类。 1OrderItem和Order之间是组合关系 2Order类和Customer、Consignee、DeliverOrder是关联关系。也就是说一个订单和客户、收货人、送货单是相关的。多重性用来说明关联的两个类之间的数量关系 Order类有两个方法dispatch()和close()从名字中可以猜出它们分别实现“分拆订单生成送货单”和“完成订单”。而在DeliveOrder()类中则有一个Close()方法同理它应该表示“完成送货”。而在OrderItem中有一个stateChange()方法和deliverState不难猜出它就是用来改变其“是否交给收货人”标志位的先调用Order的dispatch()方法它将根据其包含的OrderItem中产品信息来按供应商户分拆成若干个DeliverOrder。商户登录系统后就可以获取其DeliverOrder并在执行完后调用close()方法。这时就将调用OrderItem的stateChange()方法来改为其状态。同时再调用Order的close()方法判断该Order的所有的OrderItem是否都已经送到了如果是就将其真正close()掉
其他高级概念自学
接口与抽象类
• 抽象类是一种不能够被直接实例化的类也就是说不能够创建一个属于抽象类的对象 • 接口则是一种类似于抽象类的机制它是一个没有具体实现的类
关联类
• 关联类即是关联也是类它不仅像关联那样连接两个类而且还可以定义一组属于关系本身的特性 Role
模板类
• 可以根据占位符或参数来定义类而不用说明属性、方法返回值和方法参数的实际类型 左边的是模板类
主动类与嵌套类
• 主动类的实例称为主动对象一个主动对象拥有一个控制线程并且能够发起控制活动它不在别的线程、堆栈或状态机内运行具有独立的控制期。从某种意义上说它就是一个线程 • 在诸如Java的语言中允许你将一个类的定义放在另一个类定义的内部这就是嵌套类在Java中也称为内层类。嵌套类是声明在它的外层类中的因此只能够通过外层类或外层类的对象对它进行访问
如何绘制类图
案例1个人图书管理系统的需求描述
• 小王是一个爱书之人家里各类书籍已过千册而平时又时常有朋友外借因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号可以修改信息但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录可对外借情况列表打印。另外还希望能够对书籍的购买金额、册数按特定时间周期进行统计
如何识别类
(1)考虑问题域 可以启发分析员发现对象的因素包括人员、组织、物品、设备、抽象事物、事件、文件及结构等
人员(a)需要由系统保存和管理其信息的人员如户籍管理系统中的每个居民(b)应该在系统中完成某些功能提供某些服务的人员如户籍管理员。符合上述情况之一者应考虑用相应的人员对象来描述 组织在系统中发挥一定作用的组织结构。如工作班组等 物品需要由系统管理的各种物品。如经营的商品等。 设备在系统中动态地运行、由系统进行监控或供系统使用的各种设备、仪表、机器及运输工具等 抽象事物指没有具体的物理形态却对用户的业务具有实际意义的逻辑上的事物。 事件指那些需要由系统长期记忆的事件。 文件泛指在人类日常的管理和业务活动中使用的各种各样的表格、档案、证件和票据等文件 结构通过考虑结构可以得到一种启发一一从已经发现的对象联想到其他更多的对象
识别属性
(1)策略与启发 按常识这个对象应该有哪些属性例如人的姓名、职业、地址等在当前的问题域中对象应该有哪些属性例如商品的条形码根据系统责任这个对象应具有哪些属性特卡人的使用地点建立这个对象是为了保存和管理哪些信息对象为了实现操作的功能需要增设哪些属性 (例如传感器对象为了实现其定时采集信号的功能需要一个“时间对象是否需要通过专设的属性描述其状态 (例如设备对象在关闭、待命、运行、故障等不同状态将呈现不同的行为需要为其设置一个状态”属性)用什么属性表示聚合和关联 (对于关联应该在关联一端的类中定义一个属性来指出另一端的哪个对象与本端的对象发生关联其数据类型是指向另一端对象的指针或对象标识)
识别操作
区分对象行为的类型 为了明确OOA应该定义对象的哪些操作首先区分对象行为的不同类型 (1)系统行为 例创建、删除、复制、转存 (2)对象自身的行为—算法简单的操作 例读、写属性值 (3)对象自身的行为—算法复杂的操作计算或监控
发现类
小王是一个爱书之人家里各类书籍已过千册而平时又时常有朋友外借因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号可以修改信息但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录可对外借情况列表打印。另外还希望能够对书籍的购买金额、册数按特定时间周期进行统计
筛选备选类
• “小王”、“人”、“家里”很明显是系统外的概念无须对其建模 • 而“个人图书管理系统”、“系统”指的就是将要开发的系统即系统本身也无须对其进行建模 • 很明显“书籍”是一个很重要的类而“书名”、“作者”、“类别”、“出版社”、“书号”则都是用来描述书籍的基本信息的因此应该作为“书籍”类的属性处理而“规则”是指书号的生成规则而书号则是书籍的一个属性因此“规则”可以作为编写“书籍”类构造函数的指南。 • “基本信息”则是书名、作者、类别等描述书籍的基本信息统称“关键字”则是代表其中之一因此无需对其建模 • “功能”、“新书籍”、“信息”、“记录”都是在描述需求时使用到的一些相关词语并不是问题域的本质因此先可以将其淘汰掉
筛选修选类
• “计算机类”、“非计算机类”是该系统中图书的两大分类因此应该对其建模并改名为“计算机类书籍”和“非计算机类书籍”以减少歧义 • “外借情况”则是用来表示一次借阅行为应该成为一个候选类多个外借情况将组成“外借情况列表”而外借情况中一个很重要的角色是“朋友”—借阅主体。虽然到本系统中并不需要建立“朋友”的资料库但考虑到可能会需要列出某个朋友的借阅情况因此还是将其列为候选类。为了能够更好地表述将“外借情况”改名为“借阅记录”而将“外借情况列表”改名为“借阅记录列表” • “购买金额”、“册数”都是统计的结果都是一个数字因此不用将其建模而“特定时限”则是统计的范围也无需将其建模不过从这里的分析中我们可以发现在该需求描述中隐藏着一个关键类—书籍列表也就是执行统计的主体。
得到候选类 • 在使用“名词动词法”寻找类的时候很多团队会在此耗费大量的时间特别是对于中大型项目这样很容易迷失方向。其实在此主要的目的是对问题领域建立概要的了解无需太过咬文嚼字
关联分析建模多重性分析再建模 职责分析
• 书籍类从需求描述中可找到书名、类别、作者、出版社同时从统计的需要中得知“定价”也是一个关键的成员变量。 • 书籍列表类书籍列表就是全部的藏书列表其主要的成员方法是新增、修改、查询按关键字查询、统计按特定时限统计册数与金额。 • 借阅记录类借阅人朋友、借阅时间。 • 借阅记录列表类主要职责就是添加记录借出、删除记录归还以及打印借阅记录
案例2网上购物系统
通过相应的网址访问网上购物系统进入系统后客户即可通过多级分类目录逐级浏览商品的名称、规格、单价、图片等信息直至阅浏览某个商品的详细技术指标。浏览过程中客户可随时将需要的商品放到购物车内系统可显示购物车内已选购的商品、单价、数量及价格客户还可随时删去购物车内尚未结账的任何商品。当客户选择好所需的商品后可要求结账此时系统首先要求客户注册/登录对新客户需先注册填写客户信息然后登录对老客户只需通过用户名和密码直接进行登录即可然后根据购物车中所选的商品形成初始的订单同时选择支付方式填写相关的派送信息如送货地址、建议的送货时间段等此时即可提交订单系统向客户返回一个订单号。 系统提供网上在线支付和货到现金支付两种支付方式。网上在线支付方式由专门的网上支付系统实现在线支付需根据网上支付系统的要求填写相关的账户信息如账号、密码等并进行扣款网上在线支付的结果或者是付款成功或者是付款失败。货到现金支付方式由送货员在送达商品时向客户收取现金。客户还可通过订单号查询自己订单的当前状态如已提交未付款、已发货已付款等并允许取消尚未发货的订单。 系统业务员将客户提交的订单交由物流系统或快递公司向客户发货又称派送物流系统或快递公司送达商品后对未付款的客户收款并将客户签收单返回给系统业务员系统业务员负责更新订单的状态以便跟踪和了解订单的执行情况。
静态建模实例
标识候选对象
外部实体客户系统业务员网上购物系统物流系统网上支付系统客户信息管理系统商品信息管理系统需要存储、处理的信息商品的名称、规格、单价购物车中的物件订单的订单项即选购的商品、支付信息、送货信息。由此可导出候选对象是商品购物车订单
筛选候选对象
物流系统未出现在用况图中删除网上支付系统仅作为外部执行者完成网上在线支付功能删除客户信息管理系统和商品信息管理系统只是作为外部执行者参与创建和维护客户信息和商品信息本案例并不关心这些外部系统的具体细节删除系统业务员在本案例中主要作为修改订单状态的输入者其自身没有属性删除网上购物系统代表本案例的完整系统所有信息的显示、操作界面等都由网上购物系统来展示保留称为“网上商城”客户、商品、购物车、订单有明确的属性和操作保留考虑到一份订单可以由多个订单项组成一辆购物车可以放多件物品因此增加订单项和物件两个对象
标识属性和操作 4.确定类之间的关系
网上商城拥有多件商品和购物车并能从网上商城查到所有的商品信息任意多个客户可以到网上商城订购商品网上商城能查到所有的注册客户信息一个客户可以拥有多份订单客户可以查看自己的全部未到货订单一份订单由多个订单项组成一个客户只有一辆购物车一辆购物车可以放多件物件从购物车可以查到车内所有的物件一个订单项或物件对应一个商品但一个商品可对应多个订单项或购物车中的多个物件
网上购物系统的类图 总结建立类图的步骤
1.研究分析问题领域确定系统的需求。 2.发现对象与类明确它们的含义和责任确定属性和操作。 3.发现类之间的关系。把类之间的关系用关联、泛化、聚集、组合、依赖等关系表达出来。 4.设计类与关系。调整和细化已得到的类和类之间的关系解决诸如命名冲突、功能重复等问题。 5.绘制类图并编制相应的说明。
静态建模——对象图
对象的概念与特性 • 对象代表一个单独的、可确认的物体、单元或实体它可以是具体的也可以是抽象的在问题领域里有确切定义的角色。换句话说对象是边界非常清楚的任何事物 • 状态对象的状态包括对象的所有属性通常是静态的和这些属性的当前值通常是动态的 • 行为没有一个对象是孤立存在的对象可以被操作也可以操作别的对象。而行为就是一个对象根据它的状态改变和消息传送所采取的行动和所做出的反应 • 标识为了将一个对象与其它所有对象区分开来我们通常会给它起一个“标识”
对象 vs 类
• 对象是一个存在于时间和空间中的具体实体而类仅代表一个抽象抽象出对象的“本质”。 • 类是共享一个公用结构和一个公共行为对象集合 • 类是静态的对象是动态的类是一般化对象是个性化类是定义对象是实例类是抽象、对象是具体
对象图的表示法
• 对象名由于对象是一个类的实例因此其名称的格式是“对象名类名”这两个部分是可选的但如果是包含了类名则必须加上“”另外为了和类名区分还必须加上下划线。 • 属性由于对象是一个具体的事物因此所有的属性值都已经确定因此通常会在属性的后面列出其值。
阅读对象图
• 首先找出所有的类即在“”之后的名称 • 整理完之后就可以通过对象的名字来了解其含义 • 按类来归纳属性然后再通过关联来确定含义
绘制对象图的过程
• 先找出类和对象通常类在“class”、“new”、“implements”等关键字之后的而对象名则通常是在类名之后的 • 然后对其进行细化的关联分析绘制出相应的对象图 • 论证类模型的设计当设计了类模型时你可以通过对象图来模拟出一个运行时的状态这样就可以研究在运行时设计的合理性。同时也可以作为开发人员讨论的一个基础。 • 分析和说明源代码由于类图只是展示了程序的静态类结构因此通过类图看懂代码的意图是很困难的。因此在分析源代码时可以通过对象图来细化分析。而对于开发人员对于逻辑较复杂的类交互时可以考虑画出一些对象图来做补充说明