练习UML类图中的类的表示
第一部分:UML类图(class diagram)
类图用来展现一组类、类的特性以及其类相互之间的关系,一个类图由一组类以及它们之间的关系构成,类图用来对系统的领域概念以及静态结构进行建模。
在软件模型中,类图是最基本、也最重要的一种图。
类图中的元素有类、接口、协作、关系、注释、约束和包。
类的关系主要有关联、组成、泛化、依赖和接口的实现。
类图的作用主要有以下三点:
- 在软件空间中建立对问题空间抽象的结构映像。
- 用例分析和设计的逻辑结构建模。
- 数据库结构建模。
第二部分:PlantUML类图语法
基本语法:
类之间的关系通过下面的符号定义 :
| Type | Symbol | Drawing |
| Extension(扩展) | <|-- |
|
| Composition(组合) | *-- |
|
| Aggregation(聚合) | o-- |
|
使用.. 来代替 -- 可以得到点 线.
例如:
@startuml
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 -- Class10
@enduml

@startuml
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20
@enduml

@startuml
Class21 #-- Class22
Class23 x-- Class24
Class25 }-- Class26
Class27 +-- Class28
Class29 ^-- Class30
@enduml

在关系之间使用标签来说明时, 使用 :后接 标签文字。
对元素的说明,你可以在每一边使用 "" 来说明.例如:
@startuml Class01 "1" *-- "many" Class02 : contains Class03 o-- Class04 : aggregation Class05 --> "1" Class06 @enduml

在标签的开始或结束位置添加< 或 >以表明是哪个对象作用到哪个对象上。
@startuml
class Car Driver - Car : drives >
Car *- Wheel : have 4 >
Car -- Person : < owns @enduml

添加方法:
为了声明域或者方法,你可以使用 后接域名或方法名。
系统检查是否有括号来判断是方法还是域。例如:
@startuml
Object <|-- ArrayList Object : equals()
ArrayList : Object[] elementData
ArrayList : size() @enduml

也可以使用{} 把域或者方法括起来。注意,这种语法对于类型/名字的顺序是非常灵活的。
@startuml
class Dummy {
String data
void methods()
} class Flight {
flightNumber : Integer
departureTime : Date
}
@enduml

@startuml
class Dummy {
{field} A field (despite parentheses)
{method} Some method
} @enduml

定义可访问性:
一旦你定义了域或者方法,你可以定义 相应条目的可访问性质。
| Character | Icon for field | Icon for method | Visibility |
- |
![]() |
![]() |
private |
# |
![]() |
![]() |
protected |
~ |
![]() |
![]() |
package private |
+ |
![]() |
![]() |
public |
@startuml
class Dummy {
-field1
#field2
~method1()
+method2()
}
@enduml

你可以采用以下命令停用这些特性 skinparam classAttributeIconSize 0 :
@startuml
skinparam classAttributeIconSize 0
class Dummy {
-field1
#field2
~method1()
+method2()
} @enduml

抽象与静态:
通过修饰符{static}或者{abstract},可以定义静态或者抽象的方法或者属性。这些修饰符可以写在行的开始或者结束。也可以使用{classifier}这个修饰符来代替{static}.
@startuml
class Dummy {
{static} String id
{abstract} void methods()
}
@enduml

高级类体:
PlantUML默认自动将方法和属性重新分组,你可以自己定义分隔符来重排方法和属性,下面的分隔符都是可用的:--..==__.
还可以在分隔符中添加标题:
@startuml
class Foo1 {
You can use
several lines
..
as you want
and group
==
things together.
__
You can have as many groups
as you want
--
End of class
} class User {
.. Simple Getter ..
+ getName()
+ getAddress()
.. Some setter ..
+ setName()
__ private data __
int age
-- encrypted --
String password
} @enduml

备注和模板:
模板通过类关键字("<<"和">>")来定义
你可以使用note left of , note right of , note top of , note bottom of这些关键字来添加备注。
你还可以在类的声明末尾使用note left, note right,note top, note bottom来添加备注。
此外,单独用note这个关键字也是可以的,使用 .. 符号可以作出一条连接它与其它对象的虚线。
链接的注释:
在定义链接之后,你可以用 note on link 给链接添加注释
如果想要改变注释相对于标签的位置,你也可以用 note left on link, note right on link, note bottom on link。(对应位置分别在label的左边,右边,下边)
抽象类和接口:
用关键字abstract或abstract class来定义抽象类。抽象类用斜体显示。 也可以使用interface, annotation 和 enum关键字。
使用非字母字符:
如果你想在类(或者枚举)的显示中使用非字母字符,你可以:
- 在类的定义中使用
as关键字 - 在类名旁边加上
""
@startuml
class "This is my class" as class1
class class2 as "It works this way too" class2 *-- "foo/dummy" : use
@enduml

隐藏类:
你也可以使用 show/hide 命令来隐藏类
如果你定义了一个大的!included文件,且想在文件包含之后隐藏部分类,该功能会很有帮助。
泛型(generics):
你可以用 < 和 > 来定义类的泛型。
@startuml
class Foo<? extends Element> {
int size()
}
Foo *- Element
@enduml

指定标记(Spot):
通常标记字符 (C, I, E or A) 用于标记 类(classes), 接口(interface), 枚举(enum)和 抽象类(abstract classes).
但是当你想定义原型时,可以增加对应的单个字符及颜色,来定义自己的标记(spot),就像下面一样:
@startuml class System << (S,#FF7700) Singleton >>
class Date << (D,orchid) >>
@enduml

包
你可以通过关键词 package 声明包,同时可选的来声明对应的背景色(通过使用html色彩代码或名称)。
注意:包可以被定义为嵌套。
@startuml
package "Classic Collections" #DDDDDD {
Object <|-- ArrayList
}
package net.sourceforge.plantuml {
Object <|-- Demo1
Demo1 *- Demo2
}
@enduml

包样式:
包可以定义不同的样式。
你可以通过以下的命令来设置默认样式 : skinparam packageStyle,或者对包使用对应的模板:
@startuml
scale 750 width
package foo1 <<Node>> {
class Class1
} package foo2 <<Rectangle>> {
class Class2
} package foo3 <<Folder>> {
class Class3
} package foo4 <<Frame>> {
class Class4
} package foo5 <<Cloud>> {
class Class5
} package foo6 <<Database>> {
class Class6
} @enduml

你也可以参考下面的示例来定义包之间的连线:
@startuml
skinparam packageStyle rectangle
package foo1.foo2 {
}
package foo1.foo2.foo3 {
class Object
}
foo1.foo2 +-- foo1.foo2.foo3
@enduml

第三部分:以班级学生管理系统中的 —— “学生” 类为例
在班级管理系统中,学生是一个类,与此同时,课程、宿舍、成绩与学生这个类也有着很大的关系。
class 课程 {
-课程号:int
-课程名:string
-主课教师:string
__
+课程信息
+选择课程
}
class 学生{
-学号:int
-姓名:string
-班级:string
-专业:string
__
+登陆
+修改信息
+退出
+已选课程
+课程信息
}
class 宿舍 {
-宿舍号:int
-楼号:int
-所住人员:string
__
+登陆
+修改信息
+退出
}
class 成绩 {
-课程号:int
-课程名:string
-考试成绩:int
__
+课程信息
+查看成绩
}
宿舍 -left-> 学生
学生 -down-> 成绩
@enduml

第四部分:总结
类通常都是用一个矩形来表示,这个矩形分为三部分,最上面是类名,中间是类的属性,最下面是类的操作。
通过类图,能很清晰的就将系统中的各个类对象都描述清楚,然后再根据这些类图来进行设计就非常的方便。
同时,也可以通过类图来对与客户的要求进行完善,以免出现软件设计后却不符合客户要求的情况。
练习UML类图中的类的表示的更多相关文章
- UML类图中类与类的四种关系图解
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- UML类图中的关系和表示方法
类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这六种关系中类之间的紧密程度是依 ...
- UML类图中连接线与箭头的含义(转)
UML类图是描述类之间的关系 概念 类(Class):使用三层矩形框表示. 第一层显示类的名称,如果是抽象类,则就用斜体显示. 第二层是字段和属性. 第三层是类的方法. 注意前面的符号,'+'表示pu ...
- UML类图中最重要的几种类关系及其表示
阅读UML图最常见到的类与类之间的关系有如下几种: 1.依赖关系 依赖关系是指一个类在计算时,应用了“另一个类”类型的参数,这种关系是偶然.临时.弱的. UML类图中,依赖关系用带单箭头的虚线表示,即 ...
- UML第二次作业:类在类图中的表示
类在类图中的表示 一.概览 1.plant UML语法学习小结 2.班级学生管理系统中的 —— “学生” 类的属性.方法 3.类图脚本程序 4.类图示例 二.类图语法学习小结 1.类之间的关系 通过某 ...
- UML类图中箭头和线条的含义和用法
UML类图中箭头和线条的含义和用法 在学习UML过程中,你经常会遇到UML类图关系,这里就向大家介绍一下UML箭头.线条代表的意义,相信通过本文的介绍你对UML中箭头.线条的意义有更明确的认识. AD ...
- UML类图中的六种关系(物理设计阶段)
UML类图中经常会用到各种箭头和线条来表示不同类或者接口之间的关系,因此非常好的理解各个图标的含义是很有必要的. 在物理设计阶段可以通过EA工具将类图搭建好,然后直接生成物理类,这样也可以减少物理设计 ...
- UML类图中的几种关系的画法和含义
UML的类图中,一共有以下六大关系: 泛化(Generalization), 实现(Realization), 依赖(Dependence),关联(Association),聚合(Aggregatio ...
- UML类图中的各种箭头代表的含义(转自:http://www.cnblogs.com/damsoft/archive/2016/10/24/5993602.html)
1.UML简介Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他 ...
随机推荐
- Android模拟器Genymotion使用
介绍 Genymotion是一款出色的跨平台的Android模拟器,具有容易安装和使用.运行速度快的特点,是Android开发.测试等相关人员的必备工具. 官网地址:https://www.genym ...
- 微信小程序开发和h5的区别
1. 开发小程序时,每个页面一定要在app.json文件中注册,页面文件夹和其包含的四个文件的名字要保持一致. 2. 小程序发起的都是HTTPS网络请求,在开发调试的过程中可以不校验协议和TLS版本, ...
- 关于分布式版本控制系统Git与集中式版本控制系统SVN的区别
我觉得最最主要的区别就是:分布式Git主要是在本地有各个历史版本,在不联网的时候,也可以更新到最新版本和查看过去的版本,而集中式SVN是所有人都将版本上传到中央服务器,当出现断网情况的时候,用户只有一 ...
- CentOS7系统系统检查脚本
#!/bin/bash ############################################################## # File Name: .sh # Versio ...
- ie11兼容
项目里遇到ie11的问题, 1.控制台报:SCRIPT7002: XMLHttpRequest: 网络错误 0x80070005, 拒绝访问. 后来发现是由于传参过长,不应该用get请求,后改成pos ...
- vue整理
安装 vue ui axios import axios from 'axios' // let curWwwPath = window.document.location.href // let p ...
- 使用contenteditable=true的div模拟textarea(vue2.0中使用,带placeholder且高度自动撑开)
子组件: <template> <div class="item-address"> <span v-show="!hasAddress&q ...
- unistd.h
unistd.h是unix std的意思,是POSIX标准定义的unix类系统定义符号常量的头文件, 包含了许多UNIX系统服务的函数原型 unistd.h在unix中类似于window中的windo ...
- PROJ.4学习——初识PROJ
PROJ.4介绍——初始认识 前言 PROJ是一个通用的坐标转换软件,它将地理空间坐标从一个坐标系转换为另一个坐标系.这包括地图投影和大地坐标变换. PROJ包含命令行应用程序,可以方便地从文本文件或 ...
- Linux虚机安装配置Tomcat
d第一步:下载Tomcat包,网址http://tomcat.apache.org/ 选择tar.gz包下载,并传到虚机中 第二步:解压下载好的Tomcat包 命令:tar -zxvf apache- ...








