进入正题
UML类图可以按照指定的图形规则,有效的表示出类与类直接的关系,就像五线谱一样,按照指定规则的书写,阅读者就知道对应的曲调,当然前提你也得会,看得多了就会,不过我现在还不会。。。。。。。。
UML画图工具:ProcessOn
VS也可以使用UML,详细请看这篇文章:广东雨神的爱情故事
UML解释感谢海澜大叔的帮助
下面开始官方讲解:
类
public abstract class Newbie
{
/// <summary>
/// 姓名
/// </summary>
public string name = "菜鸟海澜";
/// <summary>
/// 有多少钱
/// </summary>
protected float money = -666.0;
/// <summary>
/// 身份证号码
/// </summary>
private string IDNumber = "1234567890";
public abstract void FindGoodWork0(string parameter = "钱多");
public abstract string FindGoodWork1(string parameter = "活少");
public abstract float FindGoodWork2( int[] distance, string parameter = "离家近" );
}
对应的类图:
- 第一行显示类名
- 第二行显示类的特性,通常就是字段和属性
- 第三行就是操作,通常是方法或行为
- +代表public
- -代表private
- #代表protected
- 如果是抽象类,用斜体显示
- UML规定属性的表示方式为:可见性 名称:类型 [ = 缺省值 ]
- “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号+、-和#表示。
- “名称”表示属性名,用一个字符串表示。
- “类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
- “缺省值”是一个可选项,即属性的初始值。
- UML规定操作的表示方式为:可见性 名称(参数列表) [ : 返回类型]
- “可见性”的定义与属性的可见性定义相同。
- “名称”即方法名,用一个字符串表示。
- “参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。
- “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。
接口:
接口
public interface IUnity
{
void PlayUnity();
}
对应的接口图
- 第一行是接口名称
- 第二行是几口方法
继承
public class HaiLan : Newbie
{
public override void FindGoodWork0(string parameter = "钱多")
{
}
public override string FindGoodWork1(string parameter = "活少")
{
return "";
}
public override float FindGoodWork2(int[] distance, string parameter = "离家近")
{
return 0.0f;
}
}
实现接口
关联关系
public class Unity : IUnity
{
public Csharp learnCsharp;
public void PlayUnity()
{
Debug.Log("使用Unity");
}
}
public class Csharp
{
}
当一个类中引用另一个类的时候是引用关系
聚合关系
public class Math3D
{
}
public class Unity1
{
public Math3D math3D;
}
聚合关系可以理解为一直较弱的关联 ,表示一种状态,例如使用Unity3D中可以会3D数学,但是呢也不能说不会3D数学你就不能用Unity,你可以弄点UI、写写编辑器什么的。这种特殊的状态强调独立性,这种独立性体现在他们的都有各自的生命周期,例如我会3D数学可以用在DirectX,不一定要在Unity3d中使用,但是呢Unity3d可以含有3D数学
合成关系
public class UnityLifeCycle
{
}
public class Unity2
{
public UnityLifeCycle unityLifeCycle;
public Unity2()
{
unityLifeCycle = new UnityLifeCycle();
}
}
合成(组合)关系 是一种强的拥有关系,他们生命周期共存,同生共死,不可单独存在。例如unity中特定函数的生命周期(Awake 、Start等),在其他游戏引擎中是无用的,不能存在的,反正unity离开这些也是不行的。
依赖关系
public class API
{
}
public class VersionChange
{
public void Change(API api)
{
}
}
依赖关系(Dependency) 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依 赖关系体现在某个类的方法使用另一个类的对象作为参数。
重数性关联
public class Eye
{
}
public class People
{
public Eye[] eye;
public People()
{
eye = new Eye[2];
}
}
重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。
1和2被称为基数 表明这一段的类可以有几个实例,同样适用于聚合关系金和合成关系,最下方为多重性表示方式表格。
表示方式 | 多重性说明 |
---|---|
1..1 | 表示另一个类的一个对象只与一个该类对象有关系 |
0..* | 表示另一个类的一个对象与零个或多个该类对象有关系 |
1..* | 表示另一个类的一个对象与一个或多个该类对象有关系 |
0..1 | 表示另一个类的一个对象没有或只与一个该类对象有关系 |
m..n | 表示另一个类的一个对象与最少m、最多n个该类对象有关系 (m<=n) |
线段含义总览
不知道大家有没有发现其中的规律
- 关于描述“实现”这种的”都是三角箭头,继承这种紧密的关系用的是实线,接口这种相对松散的关系用的是松散的虚线
- 关于描述“关系”的都是用>(大于号)这种箭头,弱的聚合关系用的是空闲的三角箭头,强的组合关系用的是实心的三角箭头