手把手教你使用start uml畫類圖
在畫類圖之前,首先得了解類與類之間的關係,剛開始也是知道類與類之間就是繼承啊,什麼聚合 關聯,自關聯等,都不太懂,其實也不是不懂,是平時不知道這些名詞,但我們在寫程式碼中無時無刻在使用到了,如果是面試,肯定要被面試官鄙視了,哈哈,現在就類與類之間的關係大致分為如下幾種
1:依賴(Dependency)
2:泛化(Generalization)
3:實現(Realization)
4:關聯(Association)
5:聚合(aggregation)
6:組合(combination)
現在一一對這6個進行概念性的分析並利用類圖去展示
A:依賴
類一方的改動將引起另一方的變動。這是一種典型的臨時關係,代表了類之間的一種短暫的互動。依賴關係在 Java 語言中體現為區域性變數、方法的引數或者對靜態方法的呼叫
程式碼體現:
Person.java
public class Person {
public String getContent(String name){
String result = "您的名字是";
if(name!=null&&!"".equals(name)){
return result+name;
}
return "";
}
}
Test.java
public class Test {
public static void main(String[] args) {
Person p = new Person();
String name = p.getContent("狗");
System.out.println(name);
}
}
類圖表示:
也就是說在Test類中獲取到Person物件後 你要去呼叫getContent()方法並且這個方法必須要傳遞一個引數,不傳遞就報錯,並且這個方法中還依賴了一個區域性變數,所以說Test類是依賴Perosn類,否則無法執行!
B:泛化
泛化定義了一般元素和特殊元素之間的分類關係,如果從面向物件程式設計語言的角度來說,類與類之間的泛化關係就是平常所說的類之間的繼承關係。如人與男人和女人的關係,比如人有眼睛 年齡 名字,那麼男人和女人都是有這些屬性的,所以不必去重新定義這些屬性,只要繼承Person類就相當於有了這些資料,
程式碼體現:
public class Animal {
public int age;//動物年齡
public String sex ;//性別
public void call(){
System.out.println("動物叫");
}
public void eat(){
System.out.println("動物吃");
}
}
Dog.java
public class Dog extends Animal {
}
Cat.java
public class Cat extends Animal {
}
測試類Test
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.call();
Cat cat = new Cat();
cat.eat();
}
}
uml圖如下:
C:實現
實現是一種類與介面的關係, 表示類是介面所有特徵和行為的實現,一般都是幾個類的行為都有共性,或者約定的一般定義一個介面,子子類去實現
程式碼體現:
HttpBase.java
public interface HttpBase {
public void get();
public void post();
}
HttpClientGet.java
public class HttpClientGet implements HttpBase {
@Override
public void get() {
}
@Override
public void post() {
}
}
HttpClientPost.java
public class HttpClientPost implements HttpBase {
@Override
public void get() {
}
@Override
public void post() {
}
}
類圖如下:
D:關聯
關聯關係是類與類之間的聯結,它使一個類知道另一個類的屬性和方法 ,關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。在 Java 中,關聯關係是通過使用成員變數來實現的。 如人與車
關聯有單向關聯和雙向關聯
單向關聯:就是自己的類中有引入自己的類引用變數,這個單例模式就是一個很好的例子
雙向關聯:就是一個類中的成員變數有一個有另一個類的引用,所以才可以獲取到另一個類的方法
程式碼體現:
A.java
public class A {
String name;
int age;
B b;
public void print(){
System.out.println("我是A中的方法");
b.back();
}
public void setB(B b) {
this.b = b;
}
}
B.java
public class B {
public void back(){
System.out.println("誰呼叫了我 哈哈");
}
}
Test.java
public class Test {
public static void main(String[] args) {
A a = new A();
a.setB(new B());
a.print();
}
}
類圖:
E:聚合