深入浅出UML类图
- 格式:doc
- 大小:522.50 KB
- 文档页数:20
UML类图⼀、什么是 UML 类图UML 类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型,它⽤来描述系统中类的内部结构、类与类之间的关系,可以简化⼈们对系统的理解⼆、UML 类图单个类的表⽰⽅式单个类的类图使⽤包含类名、属性(field)和⽅法(method)且带有分割线的矩形来表⽰,例如下⾯的这个类图属性的完整表⽰⽅式: 可见性名称:类型 [ = 属性的默认值]⽅法的完整表⽰⽅式: 可见性名称(参数列表) : 返回值类型属性/⽅法的可见性有四种表现⽅式- : private什么都不写: default# : protected+ : public所以上⾯的类图可以使⽤如下代码来描述public class User {private Integer id;String name;protected Integer age;public Double height;private void eat(){System.out.println("eat a lot of thing makes me stronger");}void drink(){System.out.println("I like drink a cup of tea");}protected String play(){return "play makes me happy";}public Integer think(){System.out.println("think make us clever");return 10086;}}三、UML 类图类与类关系的表⽰⽅式1、关联关系关联⽤来表⽰两个或多个类的对象之间的结构关系,它在代码中表现为⼀个类以属性的形式包含对另⼀个类的⼀个或多个对象1.1、单向关联⼀个类的属性是另外⼀个类的对象,表现为单向箭头指向被使⽤的类1.2、双向关联两个类的属性都持有对⽅类的对象,表现为双向箭头或者是直线1.3、⾃关联⼀个类的属性就是这个类的对象1.4、聚合关系聚合关系也属于关联关系,是⼀种强关联关系,是整体和部分之间的关系表现为: 空⼼菱形指向整体聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的⼀部分,但是成员对象可以脱离整体对象⽽独⽴存在,例如学校与⽼师的关系,学校⾥⾯有很多⽼师,如果学校停办了,⽼师并不会受到影响,依然继续存在1.5、组合关系组合关系类似于聚合关系,也是整体和部分之间的关系,它是⼀种更强烈的聚合关系,整体对象可以控制部分对象的⽣命周期,⼀旦整体对象不存在了,那么部分对象也将不存在,例如⼈的⾝体和⼿臂的关系,如果⼈的⾝体不存在了,那么⼿臂也不会存在表现为: 实⼼菱形指向整体1.6、依赖关系依赖关系是⼀种使⽤关系,它是对象之间耦合度最⼩的⼀种关联⽅式,它是⼀种临时性的关联,在代码中某个类通过局部变量、⽅法的参数、或者静态⽅法的调⽤来使⽤另外⼀个类的某些⽅法来完成⼀些功能2、继承关系继承关系是对象之间耦合度最⼤的⼀种关系,表⽰为⼀般和特殊的关系,是⽗类与⼦类的关系表现为: 带空⼼三⾓箭头使⽤实线由⼦类指向⽗类3、实现关系实现关系是接⼝和实现类之间的关系,在这种关系中,类实现了接⼝,类中的操作实现了接⼝中所声明的所有抽象操作表现为: 带空⼼三⾓箭头使⽤虚线由⼦类指向⽗类。
UML类图画法全程解析本节向⼤家介绍⼀下UML类图画法,主要包括UML类图元素和关系画法,希望通过本⽂的介绍,你对UML类图画法有⼀定的认识。
软件设计起步:UML类图画法学习设计模式,画UML类图是基础,通过UML类图,能更好地和⼤家交流,也能很容易就表达出⾃⼰的设计想法,它就好⽐普通话,是⼀种标准语⾔。
现在流⾏的主要⼯具有两种:RationalRose和MicrosoftVisio,这两种⼯具都⽐较易⽤,选择哪种⼯具就看个⼈的喜好了。
本⼈对Microsoft 的软件⽐较有好感,所以⾃然MicrosoftVisio2003是我的⾸选。
UML类图常⽤元素。
类:类是⼀种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在⼀起的集合体。
CPerson是⼀个抽象类,它是不能被实例化的,⽽CFamily可以被实例化。
接⼝:接⼝是被调⽤者调⽤的⼀组操作⽅法。
其实CPerson也可以作为接⼝。
UML类图中常见的⼏种关系。
泛化(Generalization):⼀句话,就是继承的表⽰。
是is-a的关系。
依赖(Dependency):UML类图画法中依赖是⼀种使⽤关系,它说明⼀个事物规范的变化可能影响到使⽤它的另⼀个事务,但反之则不然。
依赖关系的表⽰法是虚线箭头,箭头尾部的元素依赖箭头头部的元素,是use-a的关系。
关联(Association):⽤于描述类与类之间的连接,是has-a的关系。
聚合(Aggregation):聚合是关联的特例。
如果类与类之间的关系具有“整体和局部”的特点,则把这样的关联称为聚合。
它往往有“包含”,“由……组成”的意思。
我这⾥举的都是平时UML类图画法常⽤的⼏种情况,当然UML还有很多知识我没有了解,⽐如关联就有许多种。
本节向⼤家介绍⼀下UML类图符号,只有掌握了UML符号的意义,你才能很好的使⽤,本节从⼋个⽅⾯向⼤家介绍UML类图符号,希望通过本节的学习你对UML类图符号有初步的认识。
(⼆)UML之类图、接⼝、包
⼀、概念
类图(Class Diagram): 类图是⾯向对象系统建模中最常⽤和最重要的图,是定义其它图的基础。
类图主要是⽤来显⽰系统中的类、接⼝以及它们之间的静态结构和关系的⼀种静态模型。
类图的3个基本组件:类名、属性、⽅法,如下图:
⼆、在Rational Rose中画类图
2.1 新建Class Diagram并新建Class
2.2 为该类新增属性和⽅法:
1. 右击类名,选new Attribute或者new operation,新增属性/⽅法,如下
2. 双击该类,如下图,点击Operations和Attributes新增⽅法/属性
2.3 完整地添加⽅法和属性
2.4 创建接⼝
改变接⼝的样式,如下图,这⾥是label,如果选择其他则接⼝的呈现的样式(外观)就会改变。
三、包
包可以⽤来表⽰层次结构(⼦系统)
包可以⽤来组织各种内容。
UML各种图例——用例图、类图、状态图、包图、协作图、顺序图面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML的精彩之处.UML中有九种建模的图标,即:∙用例图∙类图∙对象图∙顺序图∙协作图∙状态图∙活动图∙组件图∙配置图本课程中的某些部分包含了这些图的细节信息的页面链接.而且每个部分都有一个小问题,测试一下你对这个部分的理解.为什么UML很重要?为了回答这个问题,我们看看建筑行业.设计师设计出房子.施工人员使用这个设计来建造房子.建筑越复杂,设计师和施工人员之间的交流就越重要.蓝图就成为了这个行业中的设计师和施工人员的必修课.写软件就好像建造建筑物一样.系统越复杂,参与编写与配置软件的人员之间的交流也就越重要.在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”.现在它已经成为了软件行业的一部分了.UML提供了分析师,设计师和程序员之间在软件设计时的通用语言.UML被应用到面向对象的问题的解决上.想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的.一个模型model就是根本问题的抽象.域domain就是问题所处的真实世界.模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的.记住把一个对象想象成“活着的”.对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations).对象的属性的值决定了它的状态state.类Classes是对象的“蓝图”.一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数).对象是类的实例instances.用例图用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象.强调这个系统是什么而不是这个系统怎么工作.用例图与情节紧紧相关的.情节scenario是指当某个人与系统进行互动时发生的情况.下面是一个医院门诊部的情节.“一个病人打电话给门诊部预约一年一次的身体检查.接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录.”用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和.角色actor是发动与这个工作有关的事件的人或者事情.角色简单的扮演着人或者对象的作用.下面的图是一个门诊部Make Appointment用例.角色是病人.角色与用例的联系是通讯联系communication association(或简称通讯communication)角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线.一个用例图是角色,用例,和它们之间的联系的集合.我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分.注意一个单独的用例可以有多个角色.用例图在三个领域很有作用.∙决定特征(需求).当系统已经分析好并且设计成型时,新的用例产生新的需求∙客户通讯.使用用例图很容易表示开发者与客户之间的联系.∙产生测试用例.一个用例的情节可能产生这些情节的一批测试用例.类图类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统.类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响.下面是一个顾客从零售商处预定商品的模型的类图.中心的类是Order.连接它的是购买货物的Customer和Payment.Payment有三种形式:Cash,Check,或者Credit.订单包括OrderDetails(line item),每个这种类都连着Item.每个类图包括类,关联和多样性表示.方向性和角色是为了使图示得更清楚时可选的项目.包和对象图为了简单地表示出复杂的类图,可以把类组合成包packages.一个包是UML上有逻辑关系的元件的集合.下面这个图是是一个把类组合成包的一个商业模型. dependencies关系.如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B.包是用一个在上方带有小标签的矩形表示的.包名写在标签上或者在矩形里面.点化线箭头表示依赖对象图Object diagrams用来表示类的实例.他们在解释复杂关系的细小问题时(特别是递归关系时)很有用.这个类图示一个大学的Department可以包括其他很多的Departments.这个对象图示上面类图的实例.用了很多具体的例子.UML中实例名带有下划线.只要意思清楚,类或实例名可以在对象图中被省略.每个类图的矩形对应了一个单独的实例.实例名称中所强调的UML图表.类或实例的名称可能是省略对象图表只要图的意义仍然是明确的.顺序图类图和对象图是静态模型的视图.交互图是动态的.他们描述了对象间的交互作用.顺序图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线.消息用从一个对象的生命线到另一个对象生命线的箭头表示.箭头以时间顺序在图中从上到下排列.协作图协作图也是互动的图表.他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色.在序列图中,对象的角色放在上面而消息则是连接线.对象角色矩形上标有类或对象名(或者都有).类名前面有个冒号(:).协作图的每个消息都有一个序列号.顶层消息的数字是1.同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等.状态图对象拥有行为和状态.对象的状态是由对象当前的行动和条件决定的.状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移.我们的模型例图建立了一个银行的在线登录系统.登录过程包括输入合法的密码和个人账号,再提交给系统验证信息.登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及Rejecting.每个状态都有一套完整的转移transitions来决定状态的顺序.状态是用圆角矩形来表示的.转移则是使用带箭头的连线表示.触发转移的事件或者条件写在箭头的旁边.我们的图上有两个自转移.一个是在Getting SSN,另一个则在上Getting PIN.初始状态(黑色圆圈)是开始动作的虚拟开始.结束状态也是动作的虚拟结束.事件或条件触发动作时用(/动作)表示.当进入Validating状态时,对象并不等外部事件触发转移.取而代之,它产生一个动作.动作的结果决定了下一步的状态.活动图活动图activity diagram是一个很特别的流程图.活动图和状态图之间是有关系的.状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程.活动图告诉了我们活动之间的依赖关系.对我们的例子来说,我们使用如下的过程.“通过ATM来取钱.”这个活动有三个类Customer, ATM和Bank.整个过程从黑色圆圈开始到黑白的同心圆结束.活动用圆角矩形表示.。
UML基础系列:类图1. 类图(Class Diagram)描述类的静态结构,定义类及描述类之间的联系,如关联、依赖、聚合等,还包括类的内部结构(类的属性和操作)。
类图是⼀种静态模型类型。
⼀个类图根据系统中的类以及各个类之间的关系描述系统的静态结构。
类图包含7个元素: ◊ 类(Class) ◊ 接⼝(Interface) ◊ 协作(Collaboration) ◊ 依赖关系(Dependency) ◊ 泛化关系(Generalization) ◊ 关联关系(Association) ◊ 实现关系(Realization) 类图是⾯向对象系统建模中最常⽤的图,它是定义其他图的基础,在类图的基础上,可以使⽤状态图、协作图、组件图和配置图等进⼀步描述系统其他⽅⾯的特性。
2. 类是对⼀组具有相同属性、操作、关系和语义的对象的描述。
类定义⼀组有着状态和⾏为的对象。
其中,属性和关联⽤来描述状态。
属性通常⽤没有⾝份的数据值表⽰。
关联则⽤有⾝份的对象之间的关系表⽰。
⾏为由操作来描述,⽅法是操作的实现。
在UML中,类⽤矩形来表⽰,分为3个部分:名称部分(Name)、属性部分(Attribute)和操作部分(Operation)。
其中顶端的部分存放类的名称,中间的部分存放类的属性、属性类型及其值,底部的部分存放类的操作、操作的参数和返回类型。
类的属性格式:name : attribute type UML规范允许在属性列表节中设置默认值的标识。
name : attribute type = default value 类的操作格式:name (parameter list) : type of value returned 当⼀个操作有参数时,参数被放在操作的括号内,参数格式:parameter name : parameter type 当⽂档化操作参数时,可以使⽤⼀个可选择的指⽰器,以显⽰参数到操作的输⼊参数或输出参数。
UML:图的分类及作⽤(共5类图,有9种图形)第⼀类:⽤例图:从⽤户⾓度描述系统功能,并指出各功能的操作者。
第⼆类:静态图:包括类图、对象图和包图。
1、类图:表⽰类之间的联系如关联、依赖、聚合等,包括类的内部结构(类的属性和操作)。
在系统的整个⽣命周期都是有效的 2、对象图:表⽰类图的⼀个实例,对象图只能在系统某⼀时间段存在。
3、包图:表⽰包与包之间的关系。
包图⽤于描述系统的分层结构。
第三类:⾏为图:状态图、活动图。
描述系统的动态模型和组成对象间的交互关系。
1、状态图:是对类图的补充,描述类的对象所有可能的状态以及事件发⽣时状态的转移条件。
在实⽤上并不需要为所有的类画状态图,仅为那些有多个状态其⾏为受外界环境的影响并且发⽣改变的类画状态图。
2、描述满⾜⽤例要求所要进⾏的活动以及活动间的约束关系,有利于识别并⾏活动。
第四类:交互图:包括顺序图 ,协作图(即合作图) 1、顺序图:强调的是时间和顺序的关系 2、协作图:强调的是上下级关系第五类:实现图:构件图,描述代码部件的物理结构及各部件之间的依赖关系。
从应⽤的⾓度看,当采⽤⾯向对象技术设计系统时,⾸先是描述需求;其次根据需求建⽴系统的静态模型,以构造系统的结构;第三步是描述系统的⾏为。
其中在第⼀步与第⼆步中所建⽴的模型都是静态的,包括⽤例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语⾔UML的静态建模机制。
其中第三步中所建⽴的模型或者可以执⾏,或者表⽰执⾏时的时序状态或交互关系。
它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语⾔UML的动态建模机制。
因此,标准建模语⾔UML的主要内容也可以归纳为静态建模机制和动态建模机制两⼤类。
总结:1、静态图:包括⽤例图、类图(包含包)、对象图、组件图和配置图等五个图形,⾸先是描述需求;其次根据需求建⽴系统的静态模型,以构造系统的结构; 2、动态图:包括状态图、活动图、顺序图和合作图等四个图形,是描述系统的⾏为;。
UML中的类图详解及其应用场景在软件开发过程中,UML(统一建模语言)被广泛应用于需求分析、系统设计和软件开发等各个阶段。
其中,类图作为UML的核心图表之一,用于描述系统中的类、对象以及它们之间的关系。
本文将详细介绍UML中的类图,并探讨其在实际应用中的场景。
一、类图的基本概念类图是一种静态结构图,用于表示系统中的类、接口、关联、继承、依赖等元素及其之间的关系。
在类图中,类用矩形表示,类名位于矩形顶部,类的属性位于矩形中部,类的操作(方法)位于矩形底部。
类之间的关系通过连线表示,如关联关系用实线箭头表示,继承关系用空心三角箭头表示,依赖关系用虚线箭头表示等。
二、类图的元素及其关系1. 类(Class):类是对象的抽象表示,用于描述具有相同属性和行为的一组对象。
类图中的类用矩形表示,类名位于矩形顶部。
2. 接口(Interface):接口是一组方法的集合,用于描述类的行为。
接口在类图中用带有<<interface>>标记的矩形表示。
3. 属性(Attribute):属性是类的特征,描述了类的状态。
属性在类图中用名称:类型的形式表示,例如“name:String”。
4. 操作(Operation):操作是类的行为,描述了类的方法。
操作在类图中用名称(参数列表):返回类型的形式表示,例如“getName():String”。
5. 关联关系(Association):关联关系描述了类之间的连接,表示一个类与另一个类之间的关联。
关联关系在类图中用实线箭头表示。
6. 继承关系(Inheritance):继承关系描述了类之间的继承关系,表示一个类继承自另一个类。
继承关系在类图中用空心三角箭头表示。
7. 依赖关系(Dependency):依赖关系描述了类之间的依赖关系,表示一个类依赖于另一个类。
依赖关系在类图中用虚线箭头表示。
三、类图的应用场景1. 系统设计:类图是系统设计的重要工具之一。
一、UML简介UML(Unified Modeling Language)即统一建模语言,是OMG(Object Management Group)发表的图标式软件设计语言。
UML的功能可视化:使用图表的形式来表现业务关系或者物理关系,可以促进对问题的理解和解决。
说明: UML提供了一种通用的、精通的、没有歧义的通信机制进行。
建造: UML通过自己的语法规则使得可以通过使用建模工具软件将设计模式映射到一种语言上。
建文档:使用UML进行设计可以同时产生系统设计文档。
UML包括:用例图(Use case diagrams)类图(Class diagrams)序列图(Sequence diagrams)合作图(Collaboration diagrams)状态图(Statechart diagrams)活动图(Activity diagrams)构件图(Component diagrams)部署图(Deployment diagrams)(蓝色为较重要并且常用的图)类图是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。
类图最基本的元素是类或者接口。
二、类图1. 类(Class)一般包含3个组成部分。
第一个是类名;第二个是属性(attributes);第三个是该类提供的方法(类的性质可以放在第四部分;如果类中含有内部类,则会出现第五个组成部分)。
类名部分是不能省略的,其他组成部分可以省略。
类名书写规范:正体字说明类是可被实例化的,斜体字说明类为抽象类。
属性和方法书写规范:修饰符[描述信息] 属性、方法名称[参数] [:返回类型|类型] 属性和方法之前可附加的可见性修饰符:加号(+)表示public;减号(-)表示private;#号表示protected;省略这些修饰符表示具有package(包)级别的可见性。
如果属性或方法具有下划线,则说明它是静态的。
描述信息使用<< 开头和使用>> 结尾。
UML类图是什么?怎样画UML类图呢?类图UML图表的其中⼀种,主要⽤来显⽰模型中的类、类的内部结构以及类与类之间的关系的图表,是⼀种⽤来描述系统的结构化设计。
类图的组成主要是由类和包等元素,是UML图中是最常⽤的⼀种。
类图通常被⽤来描述系统中的类以及类与类之间的关系,它最主要的作⽤就是帮助⼤家能够对系统有⼀个⽐较具体的了解。
类图已经不仅仅是系统分析和设计的产物,⽽且还是系统编码和测试的模型依据。
类图最常见⽤途有哪些?类图最常被⽤在在软件⼯程、词汇建模、词汇建模、协作、逻辑数据库等,通俗来讲,类图就是⼀种静态的结构图,这种图能够帮助⼤家对更好的理解系统。
1、词汇建模:类图可以为系统词建模,然后从词汇中找类和责任。
2、协作:通过类图可以将类以及接⼝等他元素⼀起⼯作所提供的合作⾏为可视化。
3、逻辑数据库:如果想要长期保存数据到关系数据库中,可以使⽤类图,建⽴数据库模型,就可以达到长期保存的⽬的。
如何绘制类图?类图的绘制⽅法并不难,下⾯就跟我⼀起来绘制⼀幅类图吧!第⼀步:下载并亿图图⽰软件然后打开,点击“新建”按钮开始作图;当然也可以打开浏览器,在亿图图⽰官⽹上打开⽹页版点击“开始作图”。
第⼆步:然后依次点击“软件/计算机”——“软件开发”——“UML图”,找到UML图之后,打开模板库找到符合⾃⼰需要的模板,打开后就可以开始绘制了;当然也可以直接在搜索框中输⼊“类图”,然后点开⾃⼰喜欢的模板制图。
第三步:双击模板中的⽂本框可以增删和修改⽂字,点击图表中的形状,在可以在左侧的符号库中找到需要的图形更换。
第四步:图表绘制完成以后,可以点击页⾯右侧的功能属性⾯板,软件拥有⼀键更换主题颜⾊的功能。
第五步:点击左上⾓的保存按钮可以将最终完成的图表保存按,当然也可以⼀键将类图导出为图⽚、Html、PDF、SVG、Word、Excel等多种格式。
类图绘制软件——亿图图⽰亿图图⽰软件是⼀款⾮常专业的办公绘图软件,适⽤于所有⼈群,基本可以满⾜各个职业的绘图需求。
UML简单介绍—类图这么看就懂了如何看懂类图1、类图简介 描述类的内部结构和类与类之间的关系,是⼀种静态结构图。
在UML类图中,常见的有以下⼏种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
2、各种关系的强弱顺序 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖3、类图关系3.1、泛化1. 表⽰继承关系, 表⽰类/接⼝对⽗类/接⼝的功能扩展。
2. java语法中的extends, ⽤来扩展⽗类或⽗接⼝的功能。
3. 图形表⽰: 空⼼三⾓箭头+实线, 箭头指向⽗类或⽗接⼝。
4. A继承B。
3.2、实现 1. 表⽰类实现接⼝定义的⾏为或功能。
2. java语法中的implements。
3. 图形表⽰:空⼼三⾓箭头+虚线, 箭头指向接⼝。
4. A实现B的接⼝。
3.3、依赖1. 可以简单的理解,就是⼀个类A使⽤到了另⼀个类B,⽽这种使⽤关系是具有偶然性的、临时性的、⾮常弱的,但是B类的变化会影响到A;⽐如某⼈要过河,需要借⽤⼀条船,此时⼈与船之间的关系就是依赖;表现在代码层⾯,为类B作为参数、属性被类A在某个method⽅法中使⽤。
2. java的语法中, 被依赖的对象/类, 以⽅法参数, 局部变量和静态⽅法调⽤的形式出现。
3. 图形表⽰: 因为依赖和被依赖关系⽐较弱, 所以使⽤虚线+箭头. 箭头指向被依赖者.⽽且⼀般是单向关系。
4. A依赖B,B是被依赖者。
3.4、关联1. 关联关系表⽰类与类之间的连接,它使得⼀个类知道另外⼀个类的属性和⽅法。
⽐如现实⽣活中的夫妻, 师⽣等关系. 长期存在并且是相互的关系. 此外关联可以表⽰⼀对⼀,⼀对多, 多对⼀, 多对多等各种关系。
2. java语法中, 被拥有者作为拥有者的成员变量存在。
UML类图详解_补上相关代码补:在visio中选择软件-UML模型图 -UML静态类结构中拖拽⼀个类到右边编辑区,双击类,在弹出的属性框中的左边区域点击“类” ,设置类的名称;点击特性,添加字段和属性;点击操作,添加⽅法。
这样就可以继续下⾯的内容了(本⽂摘⾃<<⼤话设计模式>>,但是纯⼿⼯编写,visio画图,上传图⽚等)1:矩形框表⽰⼀个类(Class),类图分为三层,第⼀层表⽰类的名称,如果是抽象类,则⽤斜体表⽰;第⼆层是类的特性,通常就是字段和属性;第三层是类的操作,通常是⽅法或⾏为,前⾯符号“+”表⽰public,“-”表⽰private,“#”表⽰protected。
2:矩形框顶端有<<interface>>表⽰是接⼝,第⼀层是接⼝名称;第⼆层是接⼝⽅法;接⼝还有另外⼀种表⽰⽅法,俗称棒棒糖表⽰⽅法,圆圈旁边为接⼝名称,接⼝⽅法写在实现类中。
3:继承关系⽤“空⼼三⾓形+实现”来表⽰:4:实现⽤“空⼼三⾓形+虚线”表⽰:这⾥要说明下在visio中没有直接“实现”的符号,需要设置下:新建⼀个接⼝和⼀个类,右击类选择“形状显⽰选项”,勾选“实现连接”,类中会出现⼀个黄点,将黄点拖动到要实现的接⼝即可。
5:动物需要氧⽓、⽔以及⾷物,他们之间是依赖关系,⽤“虚线箭头”表⽰:public class Animal{public Animal(Water water,YangQi yq){}}6:企鹅需要了解⽓候的变化规律,当⼀个类“知道”另⼀个类时表⽰是关联关系,⽤”实线箭头“表⽰:public class QiE{//简写⽅式public Climate Climate{get;set;}}7:我们在来看⼤雁与雁群两个类,每只⼤雁都属于⼀个雁群,⼀个雁群可以有多只⼤雁,所以他们之间满⾜聚合关系:表⽰⼀种弱的拥有关系,体现了A对象可以包含B对象,但是B对象不是A对象的⼀部分;我们⽤“空⼼的菱形+实线箭头”来表⽰:Public class YanQun{private DaYan[] arrayDaYan = null;}8: 鸟和翅膀是合成关系,因为他们是部分和整体的关系,并且他们的⽣命周期是相同的,表⽰⼀种强的拥有关系,体现额严格的部分和整体的关系;我们⽤“实⼼的菱形+实线箭头”表⽰:在visio中选则⼀个叫复合的形状图形(实⼼的菱形+实线箭头),但是在连接两个类时却显⽰不出菱形和箭头很郁闷那位知道的讲解下:Class Bird{private ChiBang cb=null;public Bird(){cb=new ChiBang();}}在Bird类中,初始化时实例化ChiBang,他们之间同时⽣成。
深入浅出UML类图
在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:标准对象建模语言简明指南(第3版)》)中有这么一段:“If someone were to come up to you in a dark alley and say, 'Psst, wanna see a UML diagram?' that diagram would probably be a class diagram. The majority of UML diagrams I see are class diagrams.”(“如果有人在黑暗的小巷中向你走来并对你说:„嘿,想不想看一张UML图?‟那么这张图很有可能就是一张类图,我所见过的大部分的UML图都是类图”),由此可见类图的重要性。
类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
1. 类 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。在系统中,每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责。在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。类的属性即类的数据职责,类的操作即类的行为职责。设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
在软件系统运行时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。
类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。
在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下面对这三种类加以简要说明:
(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,一般使用数据库表或文件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。实体类来源于需求说明中的名词,如学生、商品等。
(2) 控制类:控制类用于体现应用程序的执行逻辑,提供相应的业务操作,将控制类抽象出来可以降低界面和数据库之间的耦合度。控制类一般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有一个商品增加类,注册对应有一个用户注册类等
(3) 边界类:边界类用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类,如对话框、窗口、菜单等。 在面向对象分析和设计的初级阶段,通常首先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。
2. 类的UML图示 在UML中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name、age和email,以及操作modifyInfo(),在UML类图中该类如图1所示:
图1 类的UML图示 图1对应的Java代码片段如下: class Employee { private String name; private int age; private String email;
public void modifyInfo() { ...... }
在UML类图中,类一般由三部分组成: (1) 第一部分是类名:每个类都必须有一个名字,类名是一个字符串。 (2) 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性
UML规定属性的表示方式为: 可见性 名称:类型 [ = 缺省值 ] 其中: “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护
(protected)三种,在类图中分别用符号+、-和#表示。 “名称”表示属性名,用一个字符串表示。
“类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
“缺省值”是一个可选项,即属性的初始值。
(3) 第三部分是类的操作(Operations):操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。
UML规定操作的表示方式为: 可见性 名称(参数列表) [ : 返回类型] 其中: “可见性”的定义与属性的可见性定义相同。
“名称”即方法名,用一个字符串表示。
“参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗
号“,”隔开。 “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类
型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。
在类图2中,操作method1的可见性为public(+),带入了一个Object类型的参数par,返回值为空(void);操作method2的可见性为protected(#),无参数,返回值为String类型;操作method3的可见性为private(-),包含两个参数,其中一个参数为int类型,另一个为int[]类型,返回值为int类型。
图2 类图操作说明示意图 由于在Java语言中允许出现内部类,因此可能会出现包含四个部分的类图,如图3所示: 图3 包含内部类的类图 类与类之间的关系(1) 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式。
1. 关联关系 关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中,用实线连接有关联关系的对象所对应的类,在使用Java、C#和C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量。在使用类图表示关联关系时可以在关联线上标注角色名,一般使用一个表示两者之间关系的动词或者名词表示角色名(有时该名词为实例对象名),关系的两端代表两种不同的角色,因此在一个关联关系中可以包含两个角色名,角色名不是必须的,可以根据需要增加,其目的是使类之间的关系更加明确。
如在一个登录界面类LoginForm中包含一个JButton类型的注册按钮loginButton,它们之间可以表示为关联关系,代码实现时可以在LoginForm中定义一个名为loginButton的属性对象,其类型为JButton。如图1所示:
图1 关联关系实例 图1对应的Java代码片段如下: class LoginForm { e JButton loginButton; //定义为成员变量 public class JButton { …… }
在UML中,关联关系通常又包含如下几种形式: (1) 双向关联 默认情况下,关联是双向的。例如:顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系,如图2所示:
图2 双向关联实例 图2对应的Java代码片段如下: class Customer { e Product[] products;
class Product { e Customer customer;
(2) 单向关联 类的关联关系也可以是单向的,单向关联用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系,如图3所示: 图3 单向关联实例 图3对应的Java代码片段如下: class Customer { e Address address;
class Address { (3) 自关联 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:一个节点类(Node)的成员又是节点Node类型的对象,如图4所示:
图4 自关联实例 图4对应的Java代码片段如下: class Node { e Node subNode;
(4) 多重性关联 多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。
对象之间可以存在多种多重性关联关系,常见的多重性表示方式如表1所示: 表1 多重性表示方式列表 表示方式 多重性说明 1..1 表示另一个类的一个对象只与该类的一个对象有关系 0..* 表示另一个类的一个对象与该类的零个或多个对象有关系 1..* 表示另一个类的一个对象与该类的一个或多个对象有关系
0..1 表示另一个类的一个对象没有或只与该类的一个对象有关系
m..n 表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)
例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如图5所示:
图5 多重性关联实例 图5对应的Java代码片段如下: class Form { e Button[] buttons; //定义一个集合对象
class Button { (5) 聚合关系 聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系,如图6所示: