有御姐儿看不懂UML类图和不会画一个UML类图。居士我今天来稍微讲解一下。
Paste_Image.png
UML类图的基本图示法
首先,看到一个UML类图,第一个反应就是一堆框,这些框意味着什么呢?有java基础的即时不懂UML类图应该也能猜出八九。不错,就是**类和接口**。
先来看类(Class),类图有三层,第一层为类名,用粗体表示,其中,对于抽象类而言,是用斜粗体显示(抽象方法也是斜体哦)。
实体类
public abstract class 动物 {
public String 羽毛 ="白羽毛";
public boolean 有角质X没有牙齿= true;
public void 下蛋() {
...
}
}
抽象类
public abstract class 动物 {
public boolean 有生命 = true;
public void 新陈代谢(氧气 oxygen,水 water) {
...
}
}
第二层是类的特性,也就是字段和属性。
第三层是类的操作,也就是方法。
注意事项:**"+"表示public,"-"表示private,"#"表示protected**
**接口**
接口
public interface 飞翔{
void 飞();
}
接口大体样式与类图相似,但是,也有区别,主要是顶部有“《interface》”表示是接口,这个好懂的吧。
同理,第一层是接口名称,第二层是接口的方法。
注意事项:
接口还有一种表示方式:
public interface 唐老鸭{
void 讲话();
}
第二步讲类图之间、类与接口之间等等之间的关系线
**继承**:用空心三角形+实线表示。
继承
public class 鸟 extends 动物 {
...
}
这个最好懂吧,鸟是动物的一种嘛。再讲个例子本居士(类)信的是佛,所以我也算是修佛者的一种(类)。
**实现接口**:用空心三角形+虚线表示。
实现接口
public class 大雁 implements 飞翔{
...
}
正常的大雁当然都会飞喽。再讲个例子本居士(类)是佛家人,所以我当然会念经(接口)啦。
**关联(association)**:用实线箭头表示
关联
企鹅和气候有关联,企鹅需要知道气候的变化。
public class 企鹅{
private 气候 climate;
}
再讲个例子本居士(类)礼佛也是分时间的,所以我当然要知道礼佛的农历时间了(类)啦。
聚合和组合,是两种虽然都是拥有关系,但强度和性质不同。
**聚合**:用空心菱形+实线箭头来表示。
聚合
聚合是一种弱性拥有关系,即雁群包含了许多的大雁,但是对于大雁这个实体类而言,他并不是雁群的一部分。是一种分散的聚集到一起。
就像我是居士,是居士群体的一部分,但是世上居士那么多,我就是我,居士这个群体并不能代表我。
public class 雁群{
private List<大雁> wideGooseList = new ArrayList<>();
}
组合:用实心菱形+实线箭头来表示。
组合组合是一种强性拥有关系,即,翅膀对于鸟来说是身体的一部分,对正常的鸟而言,翅膀不可割舍。
注意:组合关系的两端,有“1”和“2”,这个叫做基数。表示了,一端的类可能有多个实例,比如:鸟有两只翅膀。如果有无数个实例,可用“n”来表示。关联和聚合关系两个也可以有基数。
public class 鸟{
private 翅膀 wing;
public 鸟()
{
wing = new翅膀();
}
}
也举个例子,就像本居士有头发,那么当我没头发了,那一定是我 死了,是的,一定是我死了。所以,我不是和尚啊。
**依赖**:用虚线表示
依赖
动物想生存,需要依赖氧气和水。
public abstrac class 动物{
public 动物(氧气 oxygen,水 water)
{
...
}
}
是不是,觉得我的解释有个毛用,看起来感觉好像每个都能互相套用。所以,还不如看着上面对应的代码的写法来理解。有时候代码确实还是比文字描述更好理解。
网友评论