1. 程式人生 > >UML與Java-- UML類圖於Java的基本實現

UML與Java-- UML類圖於Java的基本實現

類圖是最常用的UML圖,他可以清楚地表示程式中類的基本結構,類與類之間的結構關係,掌握UML類圖對於瞭解系統的總體結構和設計模式有著重大的作用。下面我會介紹類圖的基本知識以及類圖在Java中的基本實現形式。
類(Class)

面向物件程式設計中,類是物件的骨架,它了包含3個組成部分。第一個是Java中定義的類名。第二個是屬性(attributes)。第三個是該類提供的方法。
對於標準的UML類圖,他的第一行表示類的名稱,第二行是類的屬性,也就是它的成員變數,第三行表示類的方法。當然,他們都是有可見範圍的。在UML類圖中,加號(+)表示具有公共可見性(public)。減號(-)表示私有可見性(private)。#號表示受保護的可見性(protected)。省略這些修飾符表示具有package(包)級別的可見性。如果屬性或操作具有下劃線,表明它是靜態的。在操作中,可同時列出它接受的引數,以及返回型別,如圖:


對應的Java程式碼如下:

public class Animal {

	public String name;
	private int age;
	protected String trueName;
	String sex;

	public String getName() {
		return name;
	}

	private void setName(String name) {
		this.name = name;
	}

}


介面(Interface)

介面是一系列操作的集合,它指定了一個類所提供的服務。它直接對應於Java中的一個介面型別。介面既可用下圖的那個圖示來表示,也可由附加了<<interface>>的一個標準類來表示。通常,根據介面在類圖上的樣子,就能知道與其他類的關係。


對應的Java程式碼如下:

public interface CollegePerson {
	
	public void getSchedule();
	

}

關係

後面的例子將針對某個具體目的來獨立地展示各種關係。雖然語法無誤,但這些例子可進一步精煉,在它們的有效範圍內包括更多的語義。

依賴(Dependency)

實體之間一個“使用”關係暗示一個實體的規範發生變化後,可能影響依賴於它的其他例項。更具體地說,它可轉換為對不在例項作用域內的一個類或物件的任何型別的引用。其中包括一個區域性變數,對通過方法呼叫而獲得的一個物件的引用(如下例所示),或者對一個類的靜態方法的引用(同時不存在那個類的一個例項)。也可利用“依賴”來表示包和包之間的關係。由於包中含有類,所以你可根據那些包中的各個類之間的關係,表示出包和包的關係。



對應Java程式碼如下:(後面使用了模版方法模式,所以這句話不需要再寫了)

public class Animal {

	public void drink(Water water){
		System.out.println("drink water");
	}

}
public class Water {

}


關聯(Association)

實體之間的一個結構化關係表明物件是相互連線的。箭頭是可選的,它用於指定導航能力。如果沒有箭頭,暗示是一種雙向的導航能力。在Java中,關聯轉換為一個例項作用域的變數,就像圖E的“Java”區域所展示的程式碼那樣。可為一個關聯附加其他修飾符。多重性(Multiplicity)修飾符暗示著例項之間的關係。在示範程式碼中,Employee可以有0個或更多的TimeCard物件。但是,每個TimeCard只從屬於單獨一個Employee。



public class TimeCard {

}
public class Employee {
	
	private TimeCard timeCard;
	
	//...

}

聚合(Aggregation)

聚合是關聯的一種形式,代表兩個類之間的整體/區域性關係。聚合暗示著整體在概念上處於比區域性更高的一個級別,而關聯暗示兩個類在概念上位於相同的級別。聚合也轉換成Java中的一個例項作用域變數。

public class People {
	
	private Person p;

}
public class Person{
	
}

合成(Composition)

合成是聚合的一種特殊形式,暗示“區域性”在“整體”內部的生存期職責。合成也是非共享的。所以,雖然區域性不一定要隨整體的銷燬而被銷燬,但整體要麼負責保持區域性的存活狀態,要麼負責將其銷燬。區域性不可與其他整體共享。但是,整體可將所有權轉交給另一個物件,後者隨即將承擔生存期職責。



public class People {
	
	private Person p;
	
	private Person p2;

}


泛化(Generalization)

泛化表示一個更泛化的元素和一個更具體的元素之間的關係。泛化是用於對繼承進行建模的UML元素。在Java中,用 extends 關鍵字來直接表示這種關係。



public class Animal {

	public void drink(Water water){
		System.out.println("drink water");
	}

}

public class Cat extends Animal{

	@Override
	public void drink(Water water) {
		super.drink(water);
	}
}


實現(Realization)

例項關係指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另一個實體保證履行該合同。對Java應用程式進行建模時,實現關係可直接用implements關鍵字來表示。


public interface Animal {

	public void drink();
}

public class Cat implements Animal{

	@Override
	public void drink() {
		
	}

}