UML作业第二次:类图中类的表示
一、学习PlantUML类图
在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)以及类之间的关系。
- 类(Class)
在面向对象编程中,类是对现实世界中一组具有相同特征的物体的抽象。
- 接口(Interface)
接口是一种特殊的类,具有类的结构但不可被实例化,只可以被实现(继承)。在UML中,接口使用一个带有名称的小圆圈来进行表示。
- 类图中关系(relation)
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
- 泛化(Generalization)
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类。
- 实现(Realization)
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
【箭头指向】:带三角箭头的虚线,箭头指向接口。
- 关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员
【箭头及指向】:带普通箭头的实心线,指向被拥有者。
二、简单的类图之间的关系
关系上的标识
在关系之间使用标签来说明时, 使用 :
后接 标签文字。
对元素的说明,你可以在每一边使用 ""
来说明.
@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
You can use {field}
and {method}
modifiers to override default behaviour of the parser about fields and methods.
@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
学籍注册{
-注册代码
-学号
-学期代码
-是否注册
~注册()
~登录查看()
}
class 学生基本信息
{ -姓名:string
-性别:string
-系别:string
-专业:string
-班级:string
-出生日期:string
-民族:string
-籍贯:string
-政治面貌:string
-学制:int
-入学日期:string
-联系电话:string
-家庭住址:string
~登录()
~查看信息()
~修改信息()
~删除信息()
}
class 学生成绩信息{
-姓名
-班级
-学号
-课程名
-学期代码
-课程类型 -
平时成绩
-期末成绩
-总成绩
-教师
-录入日期
-操作人 -
修改日期
-修改人
-修改内容
-补考成绩
-重修成绩
~登录()
~查看成绩()
~核对成绩()
~确认成绩()
~补考成绩()
~重修成绩()
}
class 学生奖励信息{
-奖励代码
-姓名
-学号
-奖励日期
-奖励类型
-奖励原因
-奖励金额
-备注
~登录查看()
~确认名单()
~确认类型()
}
学籍注册 *-- 学生基本信息
学籍注册 *-- 学生成绩信息
学籍注册 *-- 学生奖励信息
@enduml
四、我的用例图