UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)。 /// <summary> #region 双向关联:双方都拥有对方的一个指针,当然也可以是引用或者是值。C1-C2
class C1 class C2 #region 单向关联:C3有C4的指针,而C4对C3一无所知。C3->C4 class C3 }; class C4 }; #region 自身关联(反身关联):自己引用自己,带着一个自己的引用。 class C14 }; #endregion /// <summary> class C9 class C10 }; //组合(也有人称为包容):一般是实心菱形加实线箭头表示, class C7 class C8 }; //指C5可能要用到C6的一些方法,也可以这样说, class C12 : C11 依赖和聚合\组合、关联等有什么不同呢? 关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。 依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。 组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。 上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。 这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如可能在某个问题域中,我是一个木匠,需要拿着锤子去干活,可能整个问题的描述就是我拿着锤子怎么钉桌子,钉椅子,钉柜子;既然整个问题就是描述这个,我和锤子就不仅是偶然的依赖关系了,我和锤子的关系变得非常的紧密,可能就上升为组合关系(让我突然想起武侠小说的剑不离身,剑亡人亡...)。这个例子可能有点荒谬,但也是为了说明一个道理,就是关系和类一样,它们都是在一个问题领域中才成立的,离开了这个问题域,他们可能就不复存在了。 |
一直让我迷惑的问题-UML的类图关系(c#实例)
最新推荐文章于 2022-02-25 20:00:37 发布