UML圖中類之間的關系


類圖中的關系大致一下幾種

泛化

l 關聯

l 依賴

l 組合

l 聚合

 泛化

泛化是子集和超集的關系,常使用繼承和實現來表示;

繼承:子類到超類的實線和空心三角箭頭表示

實現:子類到超類的虛線和空心三角箭頭表示

 依賴

依賴常常表示 一方(客戶)知道另一方(提供者)並且另一方(提供者)有所改變時會對一方(客戶)產生影響。這就是常常說的耦合。

依賴有許多種類型,比較常見的類型;

擁有提供者類型的參數

接收提供者類型的參數

提供者是超類或接口

向提供者發送消息。對提供者的可見性可能是 屬性,參數變量,局部變量,全局變量或類方法。

 

  public class Client
    {

        /// <summary>
        /// 1.UpdatePrintMsg 方法接收Supplier對象作為參數,然后向其發送GetPrintMsg消息
        /// 由此可見 client對象對supper具有參數可見性,並且有發送消息的耦合,因此對supplier有依賴。
        /// 如果后者發生變化,client類將會受到影響。
        /// </summary>
        /// <param name="supplier"></param>
        public void UpdatePrintMsg(Supplier supplier)
        {
            var msg = supplier.GetPrintMsg();
            Console.WriteLine("客戶端:call-》"+ msg);
        }

    }

    public class Supplier
    {
        public string Msg => "提供者信息";
        public string GetPrintMsg()
        {
            return Msg;
        }
    }

客戶端調用並輸出 :客戶端: call-》提供者信息

  Client client = new Client();
  client.UpdatePrintMsg(new Supplier());

在看另外一個例子

public class Client
    {

        /// <summary>
        /// PrintCartNum方法調用了supplier的靜態方法。因此client對象對suplier類
        /// 具有靜態方法依賴。
        /// </summary>
        public void PrintCartNum()
        {
            long cartNum = Supplier.GetCartId();

            Console.WriteLine(cartNum);
        }

    }

    public class Supplier
    {
        public static long GetCartId() => 1000_2000_3000_4000;
    }

客戶端調用並輸出:1000200030004000

  Client client = new Client();

  client.PrintCartNum();

關聯

關聯是一種has a 的關系,用導航性箭頭(即實線+箭頭)由源對象(order)那個指向目標對象(OrderItem),表示Order的一個屬性是orderItem對象。在具體的實現時往往表示為類的屬性

關聯也可以不帶箭頭表示雙向關聯

 

聚合

聚合是uml中一種模糊的關聯,其不精確地暗示了整體-部分關系(和許多普通關聯一樣)

為什么還定義這一術語呢?參考uml創始人之一的話:“雖然並沒有給聚合賦予太多的語義,但是每個人都認為這是必要的。可以將其視為建模的安慰劑。”因此,聽從uml創始者的建議,不要費心去使用聚合。相反,在適當的時候要使用組合。

 

組合

組合也稱為組合聚合,這是一種很強的整體-部分聚合關系,並且在某些模型中具有效用。總是暗示“擁有-部分”的某系變體。使用實心菱形箭頭表示組合。

組合關系有一下幾層含義:1)在某一時刻,部分的實例只能屬於一個組成實例。

2)部分必須總是屬於組成;3)組成要負責創建和刪除其部分,既可以自己創建/刪除部分,可以與其他對象協作來創建/刪除部分。總之劍在人在,劍毀人亡。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM