UML统一建模语言,java使用类图快速入门笔记,idea 的UML插件

UML(Unified modeling language)统一建模语言
  1. 一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的结果
  2. 本身是一套符号的规定,像数学和化学符号一样的功能,只不过UML符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等。
  3. 使用UML来建模,常用工具有Rational Rose,也可以使用一些插件来建模(下面推荐IDEA的插件)
    在这里插入图片描述
PlantUML 中文官方文档(主要看类图):https://plantuml.com/zh/

在这里插入图片描述

如何创建

在这里插入图片描述

一、符号解析

1.类、抽象类、接口、枚举、文本

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
'定义抽象类
abstract class AbstractList
'定义抽象类
abstract AbstractCollection
'定义接口'
interface List
interface Collection

'给一段文本,定义为N2
note "(<|--)此箭头符号表示泛化(继承)." as N2
'N2通过泛化符号指向List
List <|-- N2
'AbstractList通过没有箭头的线指向N2
N2 -- AbstractList

note right of List : 在指定目标右边的文本.

Collection <|-- AbstractCollection

Collection <|- List

AbstractCollection <|- AbstractList
AbstractList <|-- ArrayList

'定义类,和属性
class ArrayList {
Object[] elementData
size()
}
'定义枚举
enum TimeUnit {
DAYS
HOURS
MINUTES
}

@enduml

2. 关联符号

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
class A
class B
A -- B

class C
note "此线条表示关联" as N
class D
C--N
D--N
@enduml

3. 依赖符号(一个类使用了另一个类就是依赖)

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
class A
class B
A <.. B

class C
note "此线条表示依赖" as N
class D
C<..N
D..N
@enduml

4. 实现(一个类实现了某个接口)

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
interface A
class B
A <|.. B

interface C
note "此线条表示实现" as N
class D
C<|..N
D..N
@enduml

5. 泛化符号(表示继承)

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
class A
class B
A <|-- B

class C
note "此线条表示实现" as N
class D
C<|--N
D--N
@enduml

6. 聚合和组合

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram

class A
class B
A o-- B

class C
note "此线条表示聚合" as N
class D
C o--N
D--N

class E
class F
E *-- F

class G
note "此线条组合" as S
class H
G*--S
H--S
@enduml

二、类图的关系

1. 依赖关系

  1. 只要类中用到了对方,就称之为依赖
  1. B类是A类的一个成员属性,则A类依赖B
  2. B类是A类的方法返回值类型,则A类依赖B类
  3. B类是A类方法的参数,则A类依赖B类
  4. A类方法中用到B类,则A类依赖B类
    在这里插入图片描述
@startuml
'https://plantuml.com/class-diagram
class B
class Person
class IDCard
class A{
    'b:B表示声明B类型变量b
    b:B
    'void save(Person person)
    save(person:Person):void
    'IDCard getIDCard(Integer personId)
    getIDCard(personId:Integer):IDCard
}
A ..> B
A ..> Person
A ..> IDCard
@enduml

2. 泛化/继承关系

  1. A extends B类,则A 继承/泛化 B
    在这里插入图片描述
@startuml
'https://plantuml.com/class-diagram
class B{
    save():void
}
'A类继承Bclass A extends B{
    'void save(Person person)
    save(person:Person):void
}
@enduml

3. 实现关系

  1. A类实现接口C,则A实现C
    在这里插入图片描述
@startuml
'https://plantuml.com/class-diagram
interface C{
    save(person:Person)):void
}
'A类实现C接口
class A implements C{
    'void save(Person person)
    save(person:Person):void
}
@enduml

4. 关联关系

  1. 类与类之间的联系,依赖关系的特例
  2. 关联具有导航性:即双向关系或单向关系
  3. 关系具有多重性:如"1"(表示有且仅有一个),“0…”(表示0个或多个),“0,1”(表示0个或1个),“n…m”(表示n得到m个都可以),“m…*”(表示至少m个)
单向关系(以1对1为例)

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
class B
'A类继承Bclass A{

}
A "1"-->"1" B : "单向一对一关系"

@enduml
双向一对一关系

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
class B
'A类继承Bclass A{

}
A "1"--"1" B : "   双向一对一关系"
@enduml

5. 聚合关系

  1. 表示整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,具有关联的导航性和多重性。
  2. 一台电脑,由键盘、显示器、鼠标等组成;组成电脑的各个配件都可以从电脑上分离,使用带空心菱形实线表示
  3. 通俗的讲就是,A类使用B类,B类是A类的一部分,这部分可以与A类分开写,那么就是聚合关系

在这里插入图片描述

@startuml
'https://plantuml.com/class-diagram
class B
'A类继承Bclass A{
    private B b;
}
B --o A : B聚合到A@enduml

6. 组合关系

  1. 表示整体和部分的关系,整体与部分不可以分开
  2. 比如一台电脑,有主板,内存,CPU,这些东西丢失一个,都不能正常运行我们的计算机
  3. 这种关系为组合关系
    在这里插入图片描述
@startuml
'https://plantuml.com/class-diagram
class B
'A类继承Bclass A{
    private B b = new B();
}
B --* A :"     B组合到A中,当A类创建,B类会直接通过new创建,\n 当A类销毁,里面的变量b指向的B类实例也会销毁"
@enduml

三、实际案例

在这里插入图片描述

@startuml
package "factory.easy_factory.tradition.pizza"{
    abstract class Pizza{
     protected String name;
     public abstract void prepare();
     public void bake()
     public void cut()
     public void box()
     public void setName(String name)
    }
    note top: Pizza抽象类

    note left of Pizza::name
      名字
    end note
    note left of Pizza::prepare
      准备原材料,
      不同Pizza不一样
      因此,做成抽象方法
    end note


    class CheessPizza<extends Pizza>{
        @Override void prepare()
    }
    class GreekPizza<extends Pizza>{
     @Override void prepare()
    }
    Pizza <|-- GreekPizza
    Pizza <|--CheessPizza
}

package "factory.easy_factory.tradition.order"{
     class OrderPizza{
        OrderPizza()
     }
     note top: 订购Pizza类,根据用户需要的披萨\n动态调用不同实现类
     OrderPizza .right.> Pizza
     OrderPizza ...> CheessPizza
     OrderPizza ...> GreekPizza
     class PizzaShop
     note left: 披萨商店\n 需要下订单
     PizzaShop .right.> OrderPizza
}
@enduml
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷丿grd_志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值