UML:类图

类图用于展示系统中的类及其相互之间的关系。本质上说,类图是现实世界问题领域的抽象对象的结构化、概念化、逻辑化描述。对类的理解有三个层次的观点,分别是概念层、说明层和实现层。在UML中,从开始的需求到最终的设计类,类图也是围绕着这三个层次的观点进行建模的。类图建模是先概念层,再说明层,进而实现层这样一个随着抽象层次的逐步降低而逐步细化的过程。

概念层类图

概念层的观点认为,在这个层次的类图描述的是现实世界中问题领域的概念理解,类图中表达的类与现实世界的问题领域有着明显的对应关系,类之间的关系也与问题领域中实际事物的关系有着明显的对应关系。在概念层上,类图着重于对问题领域的概念化理解,而不是实现,因此类名称通常都是问题领域中实际事物的名称。概念层的类图是独立于实现语言和实现方式的。

概念层类图位于业务建模阶段。通常在这个阶段类图是以领域模型图,即业务实体图来表示的。

说明层类图

说明层的观点认为,在这个层次的类图考察的是类的接口而不是实现,类图中表达的类关系应当是对问题领域在接口层次抽象的描述。也就是说,这时候不必关心类最终是用什么语言编码的、是用什么设计模式设计的、是遵循什么标准的,所关心的只是这样一些类,它们通过接口进行交互,进而完成了问题领域中的业务目标

说明层类图是搭建在现实世界和最终实现之间的一座桥梁。在这个阶段,类通常都非常粗略,虽然它表达了计算机的观点,但是在描述上却采用了近似现实世界的语言,以保证从现实世界代码实现的过渡。

说明层类图位于概念模型阶段。在这个阶段,类图是以分析类和分析模型图来表示的。

实现层类图

实现层观点认为,类是实现代码的描述,类图中的类直接映射到可执行代码。在这个层次上,类必须明确采用哪种实现语言、什么设计模式、什么通信标准、遵循什么规范等。

实现层的类图大概是用得最普遍的,许多人在建模的时候根本没有概念层和说明层的类图而直接跳到实现层类图。原因不是他们确认对问题领域已经足够了解,并且设计经验十分丰富,而通常是因为他们不知道类图还有三个层次的观点。

实现层类图位于设计阶段。在这个阶段,类图可视为伪代码。甚至可以用工具直接将实现层类图生成可执行代码。实际上许多MDA( Model Driven Architecture,模型驱动架构)建模工具就是通过模型来生成代码的,虽然Rose并非纯粹的MDA工具,不过Rose也可以从类图生成可执行代码。

类之间的关系

表达类之间的关系时,类只需要画出名字就可以了,属性和方法可以省略显示。类之间的关系有:直线关系、包含关系、继承关系、依赖关系。

(1)“直线”关系

A、B两个类,它们之间有关系,但又不确定是怎样的关系时,可以将此关系设定为“直线”“直线”关系其实就是关联(Association)“关联”是UML中文术语的标准说法。

“直线”关系是最常见的关系,最简单的“直线”关系就是两个类之间画条线就可以了。也可以进一步细化这条“直线”关系:在这条直线的两端,可以标记上数字名称数字表示是几对几的关系,名称则表示在这个关系中,直线两端的两个类分别是怎样的一个角色,而这条直线也可以变成带箭头的直线

写代码时,如果A类有一个成员变量保存的是类B的引用,也就是说由类A可以找到类B,那么,A类与B类之间的关系为“导航”关系。“导航”关系由“箭头”直线表示,箭头表示方向,由A可“导航”到B。

做软件需求分析时,如果觉得两个业务概念之间有联系,但暂时不能确定具体是怎样的,那么就先画一条线将两者连起来再说。随着对业务的理解,可对这条线条做进一步的具体化,为这条线添加更多的元素。

直线、几对几的关系、角色、箭头,可以搭配使用,以能准确反映出业务关系为目的。

“直线”关系只是一种俗称,UML中文术语标准是关联(Association)关系。另外,需要说明的是:类图中类太多时,为了排版方便,可以将“直线”画成“折线”,这称为“折线”关系

(2)“包含”关系

“包含”关系有两种表示法,一种是空心菱形,一种是实心菱形。两种菱形表示包含的强烈程度不同,空心菱形是“弱”包含,实心菱形则是“强”包含。“弱”包含与“强”包含只是一种俗称,空心菱形的UML中文术语标准说法是聚合(Aggregation),实心菱形是组合(Composition)

(3)“继承”关系

“继承”同样是一种俗称,UML中文术语标准是泛化(Generalization),此关系用空心三角形来表示。泛化这个词可以理解为抽象、提炼等。

(4)“依赖”关系

“依赖(Dependency)”关系虚线箭头表示,这里的虚线箭头与“导航”关系的实线箭头很相似。所谓的“依赖”关系,依赖程度是相对而言的,不一定是A没有B就不能“生存”了。在具体的业务逻辑中,对于某个事情,A需要B来协助才能完成,这样也是一种依赖。

如下为类图中类之间关系的图形表示
在这里插入图片描述

Markdown编辑器绘制类图

教程
https://www.appinn.com/markdown/
https://www.cnblogs.com/zuizui2015/articles/4975559.html

(1)关联(Association)

类名用中括号[]表示,->表示导航关系-表示直线关系

代码<img src="http://yuml.me/diagram/nofunky/class/[Customer]->[Billing Address]" >
效果

(2)基数(Cardinality)

基数-基数表示“关联”关系两端的基数,其中,基数可以为0,1,0..*等任意定义的值。

代码<img src="http://yuml.me/diagram/nofunky/class/[Customer]1-0..*[Address]" >
效果

(3)“导航”关系

->表示“导航”关系,可以如此定义名称:-名称>

代码<img src="http://yuml.me/diagram/nofunky/class/[Order]-billing >[Address], [Order]-shipping >[Address]" >
效果

(4)聚合(Aggregation)

<>->+->表示聚合关系。

代码<img src="http://yuml.me/diagram/nofunky/class/[Company]<>-1>[Location], [Location]+->[Point]" >
效果

(5)组合(Composition)

++->表示组合关系。

代码<img src="http://yuml.me/diagram/nofunky/class/[Company]++-1>[Location]" >
效果

(6)备注(Notes)

使用[note:注解内容]表示备注,同样备注可以自定义颜色{bg:颜色名}

代码<img src="http://yuml.me/diagram/nofunky/class/[Customer]<>1->*[Order], [Customer]-[note: Aggregate Root{bg:cornsilk}]" >
效果

(7)继承(Inheritance)

使用^-表示类的继承关系,右边的类是子类。

代码<img src="http://yuml.me/diagram/nofunky/class/[Wages]^-[Salaried], [Wages]^-[Contractor]" >
效果

(8)接口继承(Interface Inheritance)

使用^-.-表示接口继承关系。

代码<img src="http://yuml.me/diagram/nofunky/class/[<<ITask>>]^-.-[NightlyBillingTask]" >
效果

(9)依赖关系(Dependencies)

使用-.->表示类的依赖关系,依赖是最弱的关联关系,一般用来表示类方法的参数或者实现用到了依赖类。

代码<img src="http://yuml.me/diagram/nofunky/class/[HttpContext]uses -.->[Response]" >
效果

(10)接口(Interface)

和类名相比,接口的名称一般包含在<<>>中。

代码<img src="http://yuml.me/diagram/nofunky/class/[<<IDisposable>>;Session]" >
效果

(11)类定义(Class with Details)

可以在类符号[]中定义类的所有成员。使用|表示类名与类成员变量和成员函数的分割符,不同的成员之间用冒号;隔开,使用+,-分别表示公开和私有成员。

代码<img src="http://yuml.me/diagram/nofunky/class/[User|+Forename+;Surname;+HashedPassword;-Salt|+Login();+Logout()]" >

效果

完整的示例

代码:
<img src="http://yuml.me/diagram/nofunky/class/[note: You can stick notes on diagrams too!{bg:cornsilk}],[Customer]<>1-orders 0..*>[Order], [Order]++*-*>[LineItem], [Order]-1>[DeliveryMethod], [Order]*-*>[Product], [Category]<->[Product], [DeliveryMethod]^[National], [DeliveryMethod]^[International]" >

效果:

  • 1
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值