关于UML类图和时序图

什么是UML类图

UML是统一建模语言[Unified Modeling Language],可以表示对象/类之间的关系、结构、层次、属性等。

类之间的关系

泛化(Generalization)

泛化关系其实就是Java中的继承,继承就没啥好说的了,OOP的基础,对象关系中耦合度最高,子类持有父类所有属性。
以空心箭头的实线来表示,从子类指向父类,是is-a关系。若A是B的子类,那么A肯定属于B的一种,B包括A,A在B之内。
eg:狗是动物的一种,所以狗是动物的子类。狗继承自动物,即狗->动物。

@startuml
class Animal {
    -String name;
    -int age;
    +void dead();
    +void birth();
}
class Dog extends Animal{
    -String name;
    -int age;
    +void dead();
    +void birth();
}
@enduml

实现(Realization)

实现关系其实也和Java中的实现是一样的。
以空心箭头的虚线来表示,由实现类指向抽象类。即Java中的实现类impl与接口interface
eg:每个动物拥有行为,但是不同动物之间的行为又不尽相同,所以抽象出接口Action。由子类去实现这个接口来定义具体的行动方式。

@startuml
interface Action {
    +void move();
    +void sleep();
    +void eat();
}
note bottom of Bird : Move is fly, sleep in tree, eat worm.
class Bird implements Action {
    +void move();
    +void sleep();
    +void eat();
}
note bottom of Horse : Move is run,sleep standing, eat grass.
class Horse implements Action {
    +void move();
    +void sleep();
    +void eat();
}
note bottom of Flash : Move is swim,sleep in water, eat worm.
class Flash implements Action {
    +void move();
    +void sleep();
    +void eat();
}
@enduml

依赖(Dependency)

依赖关系是对象之间最弱的一种关联方式,是use-a关系,它属于临时性关系,一般在运行时产生,并且可能随着状态的变化,依赖关系也有可能变化,即临时知道对方后,还使用对方的属性。依赖也是有方向的,但是双向依赖是一种非常糟糕的关系,不应该出现,因此我们要保证单向依赖,防止双向依赖。
它以箭头虚线表示,由依赖者指向被依赖中。
eg:A类中使用了B类的静态成员变量或者调用了B类的静态方法。过河的时候,人需要坐船,过完河就不需要用船了。

Person..>Boat

关联(Association)

关联关系描述了不同类对象之间的结构。一般用于定义不同对象之间天然的、静态的结构关系,属于强依赖关系。
它以直线表示,并且关联关系默认是不强调方向的,表示对象间相互知道。如果强调了方向,则由使用类指向被关联的类。
多数情况下由常识、客观因素等决定。
eg:1. 小明参军了,所以他是一名军人。小王在学校读书,所以他是一名学生。

学生-老师

聚合(Aggregation)

聚合在新华字典中的意思是聚集到一起。所以聚合关系表示整体由部分构成,是has-a的关系,父类包含子类,子类也可以独立于父类存在。所以整体与部分的关系较强于一般关联,但并非强依赖。即使整体不存在了,部分仍然存在,不因此消失。
它以空心菱形箭头的实线表示,从部分指向整体。
eg:项目组解散了,员工依然存在。班级可以有学生,也可以没有学生,毕业了班级就解散了,但是学生这些人还会继续存在着。雁群由大雁组成,但是雁群解散后或大雁脱离雁群也能存货。

Student -o Class

组合(Composition)

组合的字面意思就是把独立的东西组织成一个整体。但是这种关系是contains-a的关系,是一种强依赖关系。组合类负责被组合类的生命周期,部分不能脱离整体存在。
它以实心菱形箭头的实线表示,从部门指向整体。
eg:公司倒闭了,项目组自然也解散了。学校没有了,自然也不会有班级这个概念了。

Team -* Company

关系总结

  1. 聚合和组合其实也是关联的一种,无法直接区别,只能从语义上进行区分。
  2. 依赖关系程度由强到弱:泛化=实现>组合>聚合>关联>依赖。

什么是时序图

时序图(Sequence Diagram),也叫序列图,循序图,是一种UML行为图,可以表示用例的行为顺序。
其主要建模元素有以下几种:

1. 角色Actor

2. 对象Object

3. 生命线Lifeline

4. 控制焦点Focus Of Control

5. 消息Message

@startuml
actor 用户
boundary 客户端
control 接口
database 数据库

用户 -> 客户端: 进行登录
客户端 -> 接口: 发送请求
接口 -> 数据库:查询数据
数据库 -> 接口:返回数据
接口 ->客户端:返回结果
客户端->用户:展示页面

@enduml
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇