UML作业第三次:分析《书店图书销售管理系统》
分析图书销售管理系统
一、概览
-
PlantUML类图语法学习小结
-
《书店图书销售管理》的类图元素
-
绘制类图脚本程序
-
绘制的类图
二、PlantUML类图语法
1.类之间的关系绘制
示例:
@startuml wtl01 <|-- wtl02 wtl03 *-- wtl04 wtl05 o-- wtl06 wtl07 .. wtl08 wtl09 -- wtl10 @enduml
示例:
@startuml wtl11 <|.. wtl12 wtl13 --> wtl14 wtl15 ..> wtl16 wtl17 ..|>wtl18 wtl19 <--*wtl20 @enduml
示例:
@startuml wtl #-- wtl22 wtl23 x--wtl24 wtl25 }-- wtl26 wtl27 +-- wtl28 wtl29 ^-- wtl30 @enduml
2.棒棒糖接口
需要定义棒棒糖样式的接口时可以遵循以下语法:
bar ()- foo
bar ()-- foo
foo -() bar
示例:
@startuml class wtl bar ()- wtl @enduml
3.命名空间
示例:
@startuml class wtl namespace net.dummy #DDDDDD { .wtl <|-- Person Meeting o-- Person .wtl <|- Meeting } namespace net.foo { net.dummy.Person <|- Person .wtl <|-- Person net.dummy.Meeting o-- Person } wtl <|-- net.unused.Person @enduml
4.关系上如何添加标识
(1)在关系之间使用标签来说明时, 使用 :
后接 标签文字,可以在每一边使用 ""
来说明元素。
示例:
@startuml Class01 "wtl" *-- "wtl" Class02 : contains Class03 o-- Class04 : wtl Class05 --> "wtl" Class06 @enduml
(2)在标签的开始或结束位置添加<
或 >
以表明是哪个对象作用到哪个对象上。
示例:
@startuml class Car Driver - Car : drives > Car *- Wheel : have 4 > Car -- Person : < wtl @enduml
5.如何添加方法
(1)为了声明域或者方法,可以使用后接域名或方法名,系统检查是否有括号来判断是方法还是域。
示例:
@startuml Object <|-- ArrayList Object : wtl() ArrayList : Object[] elementData ArrayList : wtl() @enduml
(2)同样可以可以使用{}
把域或者方法括起来
示例:
@startuml class wtl { String data void methods() } class wtl { flightNumber : Integer departureTime : Date } @enduml
6.抽象和静态
通过修饰符{static}
或者{abstract}
,可以定义静态或者抽象的方法或者属性,这些修饰符可以写在行的开始或者结束。也可以使用{classifier}
这个修饰符来代替{static}
。
示例:
@startuml class wtl { {static} String name {abstract} void methods() } @enduml
7.高级类体
PlantUML中默认自动将方法和属性重新分组,当然也自己定义分隔符来重排方法和属性,例如:--
..
==
__
,我们还可以在分隔符中添加标题。
示例7:
@startuml class wtl { 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 name { .. Simple Getter .. + getName() + getAddress() .. Some setter .. + setName() __ private data __ int age -- encrypted -- String password } @enduml
8.备注和模板
模板通过类关键字("<<"和">>")来定义,可以使用note left of
, note right of
, note top of
, note bottom of
这些关键字来添加备注,你还可以在类的声明末尾使用note left
, note right
,note top
, note bottom
来添加备注。
示例:
@startuml class age << general >> Object <|--- ArrayList note top of Object : my age is 22 note "This is a table" as N1 Object .. N2 N2 .. ArrayList class name note left: my name is wtl @enduml
9.如何给链接写注释
定义链接之后,用 note on link
给链接添加注释。
示例:
@startuml class student student --> name : A link note on link #red: name is wtl student --> age : Another link note right on link #blue age is 22 end note @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 empty members
. 这个命令会隐藏空白的方法和属性,可以使用 show/hide
命令来定义相关规则和例外,也可以使用 show/hide
命令来隐藏类。
示例:
@startuml class name { +myMethods() } class age { +hiddenMethod() } class school <<Serializable>> { String school } hide members hide <<Serializable>> circle show Dummy1 methods show <<Serializable>> fields @enduml
示例:
@startuml class name class school name *-- school hide school @enduml
12.类的泛型的定义
你可以用 <
>
来定义类的泛型。
示例:
@startuml class name<? nam is wtl> { int size() } name *- student @enduml
13.声明包
可以通过关键词 package
声明包,同时可选的来声明对应的背景色(通过使用html色彩代码或名称)。
示例:
@startuml package "student" #DDDDDD { wtl <|-- name } package student.uml { wtl <|-- age } @enduml
14.设计包的样式
可以通过以下的命令来设置默认样式 : 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
15.改变箭头方向
类之间默认采用两个破折号 --
显示出垂直方向的线. 要得到水平方向的可以像这样使用单破折号 (或者点)。
示例16:
@startuml student o- name student *-- age @enduml
![](https://img2018.cnblogs.com/blog/1636058/201904/1636058-20190402190853221-497391067.jpg)
二、《书店图书销售管理》的类图元素
类图元素:图书档案、图书类型、出版社、书架设置、图书注销
三、绘制类图脚本程序
@startuml
skinparam class {
BackgroundColor 99FFFF
ArrowColor 919191
BorderColor B5B5B5
} class 图书档案管理 { -图书编号:int -类型代码:int -图书名称:string -作者:string -译者:string -ISBN:char(20) -出版社名称:string -价格:int -页码数:int -书架名称:string -现存量:int -库存总量:int -入库时间:datatime -建档操作员:char -书籍简介:text __ +创建新图书档案对象() +添加() +修改() +删除() +查找() +打印() +显示全部() +退出() } class 图书类型{ -类型代码:int -类型名称:char __ +创建新图书档案对象() +添加() +修改() +删除() +查找() +打印() +显示全部() +退出() } class 出版社 { -ISBN:int -出版社名称:string __ +创建新出版社对象() +添加() +删除() +保存() } class 图书注销 { -图书编号:int -操作员:string __ +显示全部图书信息() +查找() +选中注销图书() +保存() +退出() } class 书架设置 { -书架编号:string -书架名称:string __ +创建书架设置对象() +添加() +修改() +删除() +保存() +退出() } 图书类型 --right--|> 图书档案管理 出版社 --|> 图书档案管理 图书注销--left--|> 图书档案管理 书架设置--|> 图书档案管理 @enduml
四、类图绘制