zoukankan      html  css  js  c++  java
  • 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)组成要负责创建和删除其部分,既可以自己创建/删除部分,可以与其他对象协作来创建/删除部分。总之剑在人在,剑毁人亡。

  • 相关阅读:
    Python 集合
    Python sorted()
    CodeForces 508C Anya and Ghosts
    CodeForces 496B Secret Combination
    CodeForces 483B Friends and Presents
    CodeForces 490C Hacking Cypher
    CodeForces 483C Diverse Permutation
    CodeForces 478C Table Decorations
    CodeForces 454C Little Pony and Expected Maximum
    CodeForces 313C Ilya and Matrix
  • 原文地址:https://www.cnblogs.com/chengtian/p/8995532.html
Copyright © 2011-2022 走看看