一、类图

(1)类图定义

类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图。它形象的描述出了系统的结构,帮助人们理解系统。 类图是在"所有的UML图"中,实用频率非常之高;掌握它对于我们软件设计,以及交流都很有帮助。对于类图而言,它的基本单位是类。类主要由三部分组成:类名、属性、操作(函数)。

类名:类的名称

属性:UML类图中,属性的基本格式: 可见性 名称: 类型 [=缺省值]

操作:UML类图中,属性的基本格式: 可见性 名称(参数类表) [:返回类型]

(2)类之间的关系

类之间的符号定义

@startuml

C01 <|-- C02:泛化

C03 <-- C04:关联

C05 *-- C06:组合

C07 o-- C08:聚合

C09 <|.. C10:实现

C11 <.. C12:依赖

C13 -- C14

@enduml

以上是常见的六种关系, -- 可以替换成 .. 就可以得到虚线。另外,其中的符号是可以改变方向的,例如: <|-- 表示右边的类泛化左边的类; --|> 表示左边的类泛化右边的类。

(1)关系上的标签

可以在关系上添加标签,只需要在文本后面添加冒号和标签名称即可。可以在关联的两边使用双引号。例如:

@startuml
C01 "1" *-- "many" C02 : contains
C03 o-- C04 : aggregation
Cs05 --> "1" C06
@enduml

可以在关系上使用 或者 表名两个类之间的关系,例如:

@startuml

class Car

Driver - Car:drives >

Car*-Wheel:have 4>

Car --Person:<owns

@enduml

(2)添加方法

在类名后面添加冒号可以添加方法和方法的参数,例如:

@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

(3)定义可访问性

@startuml

class Dummy {
-field1
#field2
~method1()
+method2()
}

@enduml

可以采用以下命令停用这些特性 skinparam classAttributeIconSize 0

@startuml
skinparam classAttributeIconSize 0
class Dummy {
-field1
#field2
~method1()
+method2()
} @enduml

(4)抽象和静态

可以使用 {static} 或者 {abstract} 来修饰字段或者方法,修饰符需要在行的开头或者末尾使用。你也可以使用 {classifier} 代替 {static} 

@startuml

class Dunmy{

{static}String id

{classifier}String name

{abstract}void methods()

}

@enduml

(5)高级类体

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

(6)备注和模板

模板通过类关键字("<<"和">>")来定义

你可以使用note left of , note right of , note top of , note bottom of这些关键字来添加备注。

你还可以在类的声明末尾使用note left, note right,note top, note bottom来添加备注。

此外,单独用note这个关键字也是可以的,使用 .. 符号可以作出一条连接它与其它对象的虚线。

@startuml
class Object << general >>
Object <|--- ArrayList note top of Object : In java, every class\nextends this one. note "This is a floating note" as N1
note "This note is connected\nto several objects." as N2
Object .. N2
N2 .. ArrayList class Foo
note left: On last defined class @enduml

(7)更多注释
可以在注释中使用部分html标签:
  • <b>
  • <u>
  • <i>
  • <s>, <del>, <strike>
  • <font color="#AAAAAA"> or <font color="colorName">
  • <color:#AAAAAA> or <color:colorName>
  • <size:nn> to change font size
  • <img src="file"> or <img:file>: the file must be accessible by the filesystem

你也可以在注释中展示多行。

你也可以在定义的class之后直接使用 note left, note right, note top, note bottom 来定义注释。

@startuml

class Foo
note left: On last defined class note top of Object
In java, <size:18>every</size> <u>class</u>
<b>extends</b>
<i>this</i> one.
end note note as N1
This note is <u>also</u>
<b><color:royalBlue>on several</color>
<s>words</s> lines
And this is hosted by <img:sourceforge.jpg>
end note @enduml

(8)链接的注释
在定义链接之后,你可以用 note on link 给链接添加注释

如果想要改变注释相对于标签的位置,你也可以用 note left on linknote right on linknote bottom on link。(对应位置分别在label的左边,右边,下边)

@startuml

class Dummy
Dummy --> Foo : A link
note on link #red: note that is red Dummy --> Foo2 : Another link
note right on link #blue
this is my note on right link
and in blue
end note @enduml

(9)抽象类和接口
用关键字abstractabstract class来定义抽象类。抽象类用斜体显示。 也可以使用interface, annotationenum关键字。
@startuml

abstract class AbstractList
abstract AbstractCollection
interface List
interface Collection List <|-- AbstractList
Collection <|-- AbstractCollection Collection <|- List
AbstractCollection <|- AbstractList
AbstractList <|-- ArrayList class ArrayList {
Object[] elementData
size()
} enum TimeUnit {
DAYS
HOURS
MINUTES
} annotation SuppressWarnings @enduml

(10)使用非字母字符
如果你想在类(或者枚举)的显示中使用非字母符号,你可以:
  • 在类的定义中使用 as 关键字
  • 在类名旁边加上 ""
@startuml
class "This is my class" as class1
class class2 as "It works this way too" class2 *-- "foo/dummy" : use
@enduml

(11)隐藏属性、函数等
通过使用命令“hide/show”,你可以用参数表示类的显示方式。

基础命令是: hide empty members. 这个命令会隐藏空白的方法和属性。

empty members 外,你可以用:

  • empty fields 或者 empty attributes 空属性,
  • empty methods 空函数,
  • fieldsattributes 隐藏字段或属性,即使是被定义了
  • methods 隐藏方法,即使是被定义了
  • members 隐藏字段 和 方法,即使是被定义了
  • circle 类名前带圈的,
  • stereotype 原型。

同样可以使用 hideshow 关键词,对以下内容进行设置:

  • class 所有类,
  • interface 所有接口,
  • enum 所有枚举,
  • <<foo1>> 实现 foo1 的类,
  • 一个既定的类名。

你可以使用 show/hide 命令来定义相关规则和例外。

@startuml

class Dummy1 {
+myMethods()
} class Dummy2 {
+hiddenMethod()
} class Dummy3 <<Serializable>> {
String name
} hide members
hide <<Serializable>> circle
show Dummy1 methods
show <<Serializable>> fields @enduml

(12)隐藏类
你也可以使用 show/hide 命令来隐藏类

如果你定义了一个大的!included 文件,且想在文件包含之后隐藏部分类,该功能会很有帮助。

@startuml

class Foo1
class Foo2 Foo2 *-- Foo1 hide Foo2 @enduml

(13)泛型(generics)
你可以用 <> 来定义类的泛型。
@startuml

class Foo<? extends Element> {
int size()
}
Foo *- Element @enduml

(14)指定标记(Spot)
通常标记字符 (C, I, E or A) 用于标记 类(classes), 接口(interface), 枚举(enum)和 抽象类(abstract classes).

但是当你想定义原型时,可以增加对应的单个字符及颜色,来定义自己的标记(spot),就像下面一样:

@startuml

class System << (S,#FF7700) Singleton >>
class Date << (D,orchid) >>
@enduml

(15)包
你可以通过关键词 package 声明包,同时可选的来声明对应的背景色(通过使用html色彩代码或名称)。

注意:包可以被定义为嵌套。

@startuml

package "Classic Collections" #DDDDDD {
Object <|-- ArrayList
} package net.sourceforge.plantuml {
Object <|-- Demo1
Demo1 *- Demo2
} @enduml

(16)包样式
包可以定义不同的样式。

你可以通过以下的命令来设置默认样式 : 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

(17)命名空间(Namespaces)

@startuml

class BaseClass

namespace net.dummy #DDDDDD {
.BaseClass <|-- Person
Meeting o-- Person .BaseClass <|- Meeting
} namespace net.foo {
  net.dummy.Person  <|- Person
  .BaseClass <|-- Person   net.dummy.Meeting o-- Person
} BaseClass <|-- net.unused.Person @enduml

(18)自动创建命名空间
使用命令 set namespaceSeparator ??? 你可以自定义命名空间分隔符(为 “.” 以外的字符).
@startuml

set namespaceSeparator ::
class X1::X2::foo {
some info
} @enduml


禁止自动创建包则可以使用 set namespaceSeparator none.

@startuml

set namespaceSeparator none
class X1.X2.foo {
some info
} @enduml
(19)棒棒糖 接口
需要定义棒棒糖样式的接口时可以遵循以下语法:
  • bar ()- foo
  • bar ()-- foo
  • foo -() bar
@startuml
class foo
bar ()- foo
@enduml

(20)改变箭头方向
类之间默认采用两个破折号 -- 显示出垂直 方向的线. 要得到水平方向的可以像这样使用单破折号 (或者点):
@startuml
Room o- Student
Room *-- Chair
@enduml

你也可以通过改变倒置链接来改变方向
@startuml
Student -o Room
Chair --* Room
@enduml

也可通过在箭头内部使用关键字, 例如left, right, up 或者 down,来改变方向
@startuml
foo -left-> dummyLeft
foo -right-> dummyRight
foo -up-> dummyUp
foo -down-> dummyDown
@enduml

(21)关系类
你可以在定义了两个类之间的关系后定义一个 关系类 association class 例如:
@startuml
class Student {
Name
}
Student "0..*" - "1..*" Course
(Student, Course) .. Enrollment class Enrollment {
drop()
cancel()
}
@enduml

也可以用另一种方式:
@startuml
class Student {
Name
}
Student "0..*" -- "1..*" Course
(Student, Course) . Enrollment class Enrollment {
drop()
cancel()
}
@enduml

 

二、班级学生管理系统

属性:

(1)基本信息:学号:varcher  姓名:string  年龄:int  班级:string  班级职务:string

(2)课程信息:学号:varcher 姓名:string 课程名:string 教师:string  教室:string

(3)成绩信息:学号:varcher 姓名:string 成绩:string 课程名:string

@startuml class 学生基本信息{

学号:varchar

姓名:string

年龄:int

班级:string

班级职务:string

__

+修改信息()

+保存()

}

class 学生课程信息{

学号:varchar

姓名:string

课程名:string

教师:string

教室:string

__

+修改课程()

+保存()

+返回()

+查看课程()

+课程成绩()

}

class 学生成绩信息{

学号:varchar

姓名:string

成绩:string

课程名:string

__

+查看成绩()

+返回()

}

学生基本信息<--right--学生课程信息

学生基本信息<--学生成绩信息

@enduml

UML与软件建模:第二次作业(类图中类的表示)的更多相关文章

  1. UML与软件建模:第一次作业(用例图绘制)

    一.小结 用例图是UML用于描述软件功能的图形.用例图包括用例.参与者及其关系,用例图也可以包括注释和结束. 用例图的要素: (1)参与者,即与用例存在交互关系的系统外部实体; (2)用例,用来描述个 ...

  2. UML作业第二次:类图中类的表示

    1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚集.泛化和实现五种. 2.五种类间关系 ...

  3. UML与软件建模:第一次作业(UML用例图绘制)

    uml第一次作业: 用例图是什么? 用例图我感觉就是把网站中各个用户的动作分解一下,再用rational rose软件把图画出来. 画例图主要分为三个步骤:a 确定系统角色  b 确定用例  c 对用 ...

  4. UML类图中类与类的四种关系图解

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. UML建模—EA创建Class(类图)

    1.新建类图 2.添加类或接口 在类图可以捕获系统-类-和模型组件的逻辑结构.它是一个静态模型,描述存在什么,有哪些属性和行为,而不管如何去做. 说明关系之间的类和接口; 泛化. 聚合和关联是在分别反 ...

  6. UML基本架构建模--获取类

     Getting Started 開始 Modeling a system involves identifying the things that are important to your p ...

  7. OOP 第二章作业总结

    实现策略 这里结合一下我画的第三次作业的时序图(可能有画的不好的地方)来叙述一下我的实现逻辑.最开始主线程负责创建必要的线程(输入.调度线程)与请求队列类实例:输入线程负责与人进行交互,将获取到的请求 ...

  8. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  9. UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

随机推荐

  1. photoKit使用笔记

    @主要用到的类 1PHAssetCollection:图片资源数组(代表着相簿数组) 作用:获取相簿资源数组 示例代码: //获取相簿资源 PHFetchResult<PHAssetCollec ...

  2. [English] Time complexity wise this solution is the best among all

    Time complexity wise this solution is the best among all, we can do all operations in O(1) time. 时间复 ...

  3. mybatis 动态sql和参数

    mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...

  4. 中国建设工程造价管理系统 http://zaojiasys.jianshe99.com/cecaopsys/

    建造师造价管理系统漏洞提示: 可以绕过,直接进入后台,为了安全起见,我就不多说了,. 里面的数据,从小学,中学,高中,大学,户口,电话,身份等, 很全, 本人没有破坏任何数据,

  5. YouTuboba视频搬运~哔哩哔哩

    将YouTube上面的视频搬运到哔哩哔哩上面教程 1.首先选择YouTube上面一个视频,需要谷歌登录,然后保存这个视频播放链接. 2.在浏览器中输入这个网址:en.savefrom.net,点击En ...

  6. (04) springboot 下的springMVC和jsp和mybatis

    1. springboot 和springmvc下的注解完全一样(新增了一些有用的) 常用的注解如下: @Controller @RestController= @Controller + @Resp ...

  7. springBoot 随笔(一)

    服务化的世界,越来越多应用拆分为微服务,有些为了业务而拆,也有为了技术而拆,也有什么都不知道就瞎拆的,反正就是要微服务. 以下为一个认识springBoot的简单过程 1/eclipse 新建 mav ...

  8. lumion的物体系统5.30

    1.“自然"点击这棵树.可以打开自然库.不同的植物分类有很多页数. 选择一棵树,自动返回页面单击鼠标左键可以种植这个树.成排种树:点击”人群安置“点击我们想安置的起点.再点击终点.用鼠标右键 ...

  9. 前端经典面试题之CSS实现三栏布局,左右宽度固定,中间宽度自适应

    前端常问的面试题,题目:假设高度一定,请写出三栏布局,左右宽度300px,中间自适应. 看到这里我希望你能停下来思考几分钟, 1分钟~2分钟~3分钟~4分钟~5分钟! 好了,那么你想出了几种答案呢? ...

  10. springboot based 主从数据源中间件方案

    先定几个原则/目标: 原则: 1.必须保证数据逻辑的一致性: 反例:刚写了数据,(因为主从延迟)查询不到: 2.对开发人员透明,对业务代码无侵入性:与单数据源的业务代码调用一致: 反例:对已有业务代码 ...