UML 学习
概述
- Unified Modeling Language
- 统一建模语言
是一门 general-purpose visual modeling language 不像编程语言,它使用的是 standardized graphical symbols and text
是用于描述软件,视觉化过程和创建软件系统的文档
是 a set of standardized modeling methods that encapsulste past modeling techniques' experiences and incorporate the best practices of today's achievements
一套标准化的建模方法,既总结了过去建模技术的经验,又结合了当今成就的最佳实践。
学习目的
- 帮助正确 高效率 有效的 面向对象编程
- 项目相关者能通过 UML 更清晰地交流
- 提供项目的“big picture“
类图
在面向对象(OO)编程中,类是一个基本概念,它封装了数据和行为。以下是关键点的详细说明:
类的定义:类是用于创建对象的蓝图,这些对象共享相同的属性、操作和关系。类定义了对象将拥有的属性和方法。
职责:系统中的每个类都被设计为处理特定的职责。这意味着一个类负责执行某些功能或操作。设计良好的类通常遵循单一职责原则,即它应该只有一个改变的理由,专注于单一任务或功能。
这种方法有助于保持代码的清晰、模块化和可管理性,使其更易于理解、扩展和维护
类的属性代表其与数据相关的职责,而类的操作对应其行为职责。
类图:类图展示了系统的静态结构,显示了类的存在及其关系。
类图三部分
Class diagram consists of 3 components:
1. Name
- 任何类都有名字
- 遵守 JAVA 命名规则,首字母必须大写,subsequent 单词用大写字母开头
2. Attribute
属性是类的成员变量,类可以有多个属性也可以没有属性
需要使用驼峰命名法(camel case naming )
- 开头小写字母
- 不能以&(ampersand)$(dollar) _(underscore)开头
- 如果包含多个单词,需要驼峰命名 firstName
- 避免使用单字母作为变量,x,y,z
可见性 名称: 类型 [=默认值]
[Access] Name: Type [=Default]
Public +
Private -
Protected #
+ name: String
# age: int = 25
3.class operation
类的操作
操作上 代表类的成员方法的行为
名称中第一个单词需要全部小写, subsequent 单词用大写字母开头
可见性 名称(参数列表):返回类型
类之间的关系
Assocation 关联
或者叫单向关联 Singleton relationship
实线,表示两者之间有某种关系
A 指向 B 并标有 contains,即 B 包含在 A 里
如 JButton 为 LoginForm 的成员变量

bilateral association 双向关联
没有箭头,但是要写出两个关系

Self association 自关联

Multiplicity Association
代表两个关联的对象间的数量关系
直接用关联线上加上数字或数字范围,双端各要写

一个表单可能有 0 个或多个按钮,但是一个按钮只会对应一个表单,且必然有对应

Aggregation Association 聚合关联
聚合,指整体和局部的关系,而不仅仅是拥有或者关联
在聚合中,成员对象被视作整体的一部分,但是在整体不存在时, 该对象依然可以存在;比如引擎可以独立于车存在,也可以在车的内部存在
symbol 代表: solid line with the hollow diamond

Composition Association 组合关联
组合,类似聚合,也代表整体和局部的关系
但是局部和整体有相同的生命周期
一旦类的实例被销毁,内部的对象也会消失
存在关系是共享的
symbol: a line with solid diamond

Dependency 依赖关系
改变具体的实体可能会影响其他使用它的实体的一类使用关系
依赖或者使用其他实体都属于依赖关系
最常见的情况是 A 对象在函数参数使用 B 对象
则 A 依赖 B
symbol: a dotted line with arrow,箭头指向提供者
(下图线画错了,画成实线了,应该是点线)

典型的三种依赖情况
- 把 B 对象作为一个方法中的参数传递给 A 对象,A 将依赖 B
- 在方法中使用另一个对象作为局部变量,(如立即声明一个对象并使用)
- 在方法中调用另一个类的静态方法
Generalization 泛化关系
或者叫继承关系,描述父类/子类 基类/子类 超类/派生类等
继承只是实现泛化的一种方式

在继承关系中经常会出现 Protected 访问修饰符
对于标有 Protected 的属性或方法,
- 类自身可以可以访问
- 相同包内的其他类可以访问
- 类自身的子类可以访问
extends 关键字在 Java 中用于继承
Interface realization(接口与实现关系)
接口同样也可以用于类似类的继承和依赖关系
接口和类之间存在实现关系;
类实现接口,类中需要完成接口中声明的方法
Symbol: 接口实现和继承一样用 dotted line with the hollow triangle
接口用 hollow circle 表示
