1.类图各部分构成

属性名和方法名前的 -,+,#,~代表其可访问性
1>"-" 代表"private" 表示私有权限,仅允许本类访问,任何其他类或子类都无法访问
2>"+" 代表"pubic" 表示公有权限,允许任意类访问该属性或方法
3>"#" 代表"protected" 意味着属性和方法收到保护,只能由同一个类或子类访问
4>"~" 代表"package/default" 意味着只要在同一个包下,任何类都可以访问
2.类与类之间的关系
1>继承(泛化):空心三角,实线。继承父类由"+,#"修饰的属性和方法,同时自己本身可以新增特有的属性和方法

说明:Cat继承了Animal,Cat为子类,Animal即为父类
2>依赖:虚线箭头。 A的属性变化可能影响到B,此时可存在B依赖A的关系
3>关联:实线。
i. 双向关联,无箭头实线
ii.单向关联,有箭头实线
4>聚合: 空心菱形实线。部分聚合为整体,部分可随时离开整体独立出来。

说明:引擎(Engine)聚合为汽车(Car),但是引擎可单独脱离汽车
5>组合:实心菱形实线。部分组合为整体,不可脱离整体。

说明:卧室和厨房组合为房间,卧室和厨房不能脱离房间单独存在,并且房屋被拆,卧室和厨房都会将无法存在
6>实现:空心三角虚线指向接口。
3.对比总结
实线 vs 虚线
- 实线:结构性关系(关联、聚合、组合、泛化)
- 虚线:临时性关系(依赖、实现)
箭头含义
- 有箭头:表示方向性(知道的方向)
- 无箭头:表示双向知道
关联的特殊形式
- 聚合:空心菱形,表示"has-a"关系,部分可独立存在
- 组合:实心菱形,表示"contains-a"关系,部分依赖整体