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

  • 相关阅读:
    php CodeIgniter处理多环境错误级别配置
    bootstrap导航条在手机上默认展开二级目录,必须用setTimeout才能实现
    WordPress博客网站fonts.useso加载慢解决办法
    JS实现复制网页内容自动加入版权内容代码和原文链接
    bootstrap实现 手机端滑动效果,滑动到下一页,jgestures.js插件
    mysql字段varchar区分大小写utf8_bin、utf8_general_ci编码区别
    js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法
    php防盗链,php ci在control里面控制除了自己站内的链接点击跳转,其他来源的都跳到站内页面
    php原子操作,文件锁flock,数据库事务
    默认只显示指定高度,出来按钮 阅读更多,加载全文,点击后显示全文的实现方式
  • 原文地址:https://www.cnblogs.com/chengtian/p/8995532.html
Copyright © 2011-2022 走看看