UML作业第三次:分析《书店图书销售管理系统》

时间:2024-02-24 14:04:46

分析图书销售管理系统

一、概览

  1. PlantUML类图语法学习小结

  2. 《书店图书销售管理》的类图元素

  3. 绘制类图脚本程序

  4. 绘制的类图

二、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
        

 

 

 

 

二、《书店图书销售管理》的类图元素

类图元素:图书档案、图书类型、出版社、书架设置、图书注销

三、绘制类图脚本程序

 

@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

 

四、类图绘制