??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产高清高潮精品美女,中文字幕视频精品一区二区三区,亚洲精品一级二级http://www.aygfsteel.com/asdtiang/category/47781.html交流学习(fn)JAVA zh-cnWed, 16 Feb 2011 12:05:30 GMTWed, 16 Feb 2011 12:05:30 GMT60面向对象UML中类关系--转蝲~辑http://www.aygfsteel.com/asdtiang/archive/2011/02/16/344455.htmlasdtiangasdtiangWed, 16 Feb 2011 07:56:00 GMThttp://www.aygfsteel.com/asdtiang/archive/2011/02/16/344455.htmlhttp://www.aygfsteel.com/asdtiang/comments/344455.htmlhttp://www.aygfsteel.com/asdtiang/archive/2011/02/16/344455.html#Feedback0http://www.aygfsteel.com/asdtiang/comments/commentRss/344455.htmlhttp://www.aygfsteel.com/asdtiang/services/trackbacks/344455.htmlhttp://www.uml.org.cn/oobject/200911174.asp



如果你确定两件对象之间是is-a的关p,那么此时你应该用承;比如菱Ş、圆形和方Ş都是形状的一U,那么他们都应该从形状cȝ承而不是聚合?br /> 如果你确定两件对象之间是has-a的关p,那么此时你应该用聚合;比如?sh)脑是由昄器、CPU、硬盘等l成的,那么你应该把昄器、CPU、硬盘这些类聚合成电(sh)脑类Q而不是从?sh)脑cȝѝ?/p>

c间的关p?

|上关于此类的讨论非常多Q发现对于该问题的理解各有各的说法,而各个说法中又相ȝq。通过览q些讨论以及(qing)寏VO'Reilly - UML 2.0 In A Nutshell (2007)》的参考,发表一下自q看法

c间关系有很多种Q在大的cd上可以分ZU:(x)U向关系、横向关pR?/p>

U向关系是l承关系Q它的概念非常明,也成为OO的三个重要特征之一Q这里不q多的讨论?/p>

横向关系较ؓ(f)微妙Q按照UML的徏议大体上可以分ؓ(f)四种Q?/p>

  1. 依赖    QDependencyQuses a
  2. 兌    QAssociationQhas a
  3. 聚合    QAggregationQowns a
  4. l合    QCompositionQis a part of 

它们的强弱关pL没有异议的:(x)依赖 < 兌 < 聚合 < l合

然而它们四个之间的差别却又不那么好拿捏Q需要好好体?x)?/p>

  1. 依赖Q?
    • UML表示法:(x)虚线 + 头
    • 关系Q? ... uses a ..."
    • 此关pL为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象Q而被依赖的对象只是作ZU工具在使用Q而ƈ不持有对它的引用?
    • 典型的例子很多,比如Q?br /> class Human
      {
          public void breath()
          {
              Air freshAir = new Air();
              freshAir.releasePower();
          }
          public static void main()
          {
              Human me = new Human();
              while(true)
              {
                  me.breath();
              }
          }
      }

      class Air
      {
          public void releasePower()
          {
              //do sth.
          }
      }
       
    • 释义Q一个h自创生就需要不停的呼吸Q而h的呼吸功能之所以能l持生命在于吸q来的气体发挥了作用Q所以说I气只不q是人类的一个工P而hq不持有对它的引用?
  2. Q?
    • UML表示法:(x)实线 + 头
    • 关系Q? ... has a ..."
    • 所谓关联就是某个对象会(x)长期的持有另一个对象的引用Q而二者的兌往往也是怺的。关联的两个对象彼此间没有Q何强制性的U束Q只要二者同意,可以随时? 除关pL是进行关联,它们在生命期问题上没有Q何约定。被兌的对象还可以再被别的对象兌Q所以关联是可以׃n的?
    • 典型的例子很多,比如Q?br /> class Human
      {
          ArrayList friends = new ArrayList();
          public void makeFriend(Human human)
          {
              friends.add(human);
          }
          public static void main()
          {
              Human me = new Human();
              while(true)
              {
                  me.makeFriend(mySchool.getStudent());
              }
          }
      }
    • 释义Qh从生x都在不断的交朋友Q然而没有理p为朋友的生死与我的生L必然的联p,故他们的生命期没有关联,我的朋友又可以是别h的朋友,所以朋友可以共享?
  3. 聚合Q?nbsp; 
    • UML表示法:(x)I心菱Ş + 实线 + 头
    • 关系Q? ... owns a ..."
    • 聚合是强版本的关联。它暗含着一U所属关pM?qing)生命期关系。被聚合的对象还可以再被别的对象兌Q所以被聚合对象是可以共享的。虽然是׃n的,聚合代表的是一U更亲密的关pR?
    • 典型的例子很多,比如Q?br /> class Human
      {
          Home myHome;
          public void goHome()
          {
              //在回家的路上
              myHome.openDoor();
              //看电(sh)?br />     }
          public static void main()
          {
              Human me = new Human();
              while(true)
              {
                  //上学
                  //吃饭
                  me.goHome();
              }
          }
      }
       
    • 释义Q我的家和我之间h着一U强烈的所属关p,我的家是可以分n的,而这里的分n又可以有两种。其一是聚合间的分享,q正如你和你媛_儉K对这个家有着同样的强烈关联;其二是聚合与兌的分享,如果你的朋友来家里吃个便饭,估计你不?x)给他配一把钥匙?
  4. l合Q?
    • UML表示法:(x)实心菱Ş + 实线 + 头
    • 关系Q? ... is a part of  ..."
    • l合是关pd中的最强版本,它直接要求包含对象对被包含对象的拥有以及(qing)包含对象与被包含对象生命期的关系。被包含的对象还可以再被别的对象兌Q所以被包含对象是可以共享的Q然而绝不存在两个包含对象对同一个被包含对象的共享?
    • 典型的例子很多,比如Q?br /> class Human
      {
          Heart myHeart = new Heart();
          public static void main()
          {
              Human me = new Human();
              while(true)
              {
                  myHeart.beat();
              }
          }
      }
    • 释义Q组合关pd是整体与部分的关p,部分属于整体Q整体不存在Q部分一定不存在Q然而部分不存在整体是可以存在的Q说的更明确一些就是部分必d生于? 体创生之后,而销毁于整体销毁之前。部分在q个生命期内可以被其它对象关联甚臌合,但有一点必L意,一旦部分所属于的整体销毁了Q那么与之关联的对象 中的引用׃(x)成ؓ(f)I引用,q一点可以利用程序来保障。心脏的生命期与人的生命期是一致的Q如果换个部分就不那么一定,比如阑尾Q很多h在创生后的某个时? 对其厌倦便提前销毁了它,可它和hcȝ关系不可辩驳的属于组合?br /> 在UML中存在一U特例,是允许被包含对象在包含对象销毁前转移l新的对象,q虽然不自然Q但它给需要心脏移植的(zhn)者带来了音?
也可以这样分Q?br />
  • 依赖(dependency)是一U用关p,他描qC个事物的规约变化可能影响C用它的另一个事物。个为在参数或者方法体中用到另外的类是对该cL依赖的关pRuse a
  • 泛化(dependency)用于描述子类到父cM间的关系?Is a kind of
  • 兌(association)是一U结构关p,他描qC个对象与另一个对象相联系?Has a
    • 双向兌(association)通过A对象可以扑ֈB对象QB对象同样可以扑ֈA对象的关联ؓ(f)双向兌?
    • 单向兌(direction-association)通过A对象可以扑ֈB对象Q但通过B对象不能扑ֈA对象的关联ؓ(f)单向兌?
    • 聚合(aggreation)A对象是B对象的一个组成部份,但A对象同时可能是C对象的组成部分这U关联ؓ(f)聚合?
    • l合(composition)A对象是B对象的一个组成部份,除非B对象A对象转交l其他对象,否则A对象只能是B对象的组成部分,q种兌为组合?
q篇文章写的也很好,理解h比较Ҏ(gu)点:(x)
http://www.uml.org.cn/oobject/201006243.asp


asdtiang 2011-02-16 15:56 发表评论
]]>
վ֩ģ壺 | Ǭ| ̨| | | | ¬| | | | | | | | | | | | | | | ˮ| û| | ɽ| | | ̽| | | ͼ| | | | ŷ| Ļ| Ԫ| Ȫ| ƽ| Դ| |