UML类图关系总结

我就是我 2022-08-20 05:16 282阅读 0赞

对于uml的类图的理解几乎一直停留在一知半解的层面,也就在考试的时候会临时抱佛脚对一些知识有很好的理解,考完之后遍抛在脑后,时间久了便忘得一干二净,很不好也不应该,一些被证明是正确的东西应该强化记忆被永久的记下来。所以,趁现在时间不是特别的紧张,好好的总结整理一下,方便理解和记忆。整理的主要的意图是根据类图将类代码化或者根据代码类画成类图。

依赖(Dependency)

依赖关系是UML中最基本的关系,下边这个图在某种方式上类A依赖于类B。

Center

依赖还有更多的广泛的含义,最好不要过度的使用依赖关系

依赖关系所代表的到底是什么你,在上边的UML图中,类A使用了类B,但是类A不把B的实例作为A的一部分。

  1. import B;
  2. public class A {
  3. public void method1(B b) {
  4. // . . .
  5. }
  6. public void method2() {
  7. B tempB = new B()
  8. }
  9. }

事实上,不管类B在方法中作为参数使用还是在方法中作为一个本地的实例的引用,都是依赖关系的正确的使用。

  1. import B;
  2. public class A {
  3. private B b; // 错误的
  4. public B getB() {
  5. return b;
  6. }
  7. }

上边的例子中,类B通过在类A中声明类B的实例来定义类A的状态,但是这却是依赖关系的一个错误的使用。

关联(Association)

下边这个类图是一个类和另一个类的关联。

Center 1

关联定义了依赖,但是要比上边描述的依赖关系更强。在这个例子中,类A和类B相关联,换句话说类A使用和包含了类B的实例,但是类B不知道或者包含类A的实例。

  1. import B;
  2. public class A {
  3. private B b1;
  4. public B getB() {
  5. return b1;
  6. }
  7. }

关联关系定义了依赖类的实例状态,类A必须在它的实例范围中定义类B的实例。
还有更多的关联关系,我们已经讨论了状态,然而还有必要定义实例的声明周期和有多少个实例是想关联的。 聚合(Aggregation)和组合(Composition)就可以用来解决这个问题。例如下边这个图就是描述了两个类的聚合关系
Center 2
对应的代码的实现类:

  1. import B;
  2. public class A{
  3. List Bs;
  4. public void AddB(B b) {
  5. Bs.Add(b);
  6. }
  7. }

上边这个图意味着A聚合B,聚合描述了实例A中包含实例B的引用的关系而且是作为A的状态,但是特定的实例B也可能被其他的聚合者所共享。在这个例子中,A的生命周期结束了,实例B的生命周期不一定结束。
组合另一方面定义了A的生命周期包含了B的生命周期。如下图:
Center 3

对应是代码实现类:

  1. import B;
  2. public class A{
  3. List b = new B();
  4. }

泛化(Generalization)

泛化是相对好理解的一个概念,描述了子类实现了特定的超类,下边是类图。

Center 4

对应的代码实现类

  1. import B;
  2. public class A extends B {
  3. // . . .
  4. }

实现(Realization)

是一种类与接口的关系,表示类是接口所有特征和行为的实现,下边是类图

Center 5

对应的代码类

  1. import B;
  2. public class A implements B {
  3. // . . .
  4. }

参考资料:https://vaughnvernon.co/?page\_id=31
http://www.open-open.com/lib/view/open1328059700311.html
https://nirajrules.wordpress.com/2011/07/15/association-vs-dependency-vs-aggregation-vs-composition/

发表评论

表情:
评论列表 (有 0 条评论,282人围观)

还没有评论,来说两句吧...

相关阅读

    相关 UML关系总结

    对于uml的类图的理解几乎一直停留在一知半解的层面,也就在考试的时候会临时抱佛脚对一些知识有很好的理解,考完之后遍抛在脑后,时间久了便忘得一干二净,很不好也不应该,一些被证明是