《软件工程--原理、方法和工具》观后感之UML类图之间的关系

在最开始先向大家介绍如何在Rational rose 2003中把类的关系图转换成代码(转自http://hi.baidu.com/dudangyimian/item/e4bbff107fb0efe55f53b1b0)

1. 创建类图

  创建两个类 CAirplane 和 CWhirlybird,它们是继承关系(直升机类继承飞机类)

2. 用ANSI C++ 创建组件

  在菜单中依次选择 Tools -> ANSI C++ -> Convert From Classic C++


  选择转换model中的所有类,设置该组件名称即可(默认Converted Classes),本操作会生成一个组件Converted Classes。

3. 用ANSI C++ 生成源代码

  设置刚才创建的组件的属性

  在“Realizes”页中,将所有的类“assign ”,即指定那些将要被转换成 ANSI 风格的类(毕竟还有Java 风格的类),这是关键的一步,只有确定了类的风格,Rose才能进行下一步的处理。

  类的风格可在 Tools -> ANSI C++ -> Class Customization...中详细设置
  选择组件,然后在在菜单中选择Tools -> ANSI C++ -> Generate Code...

  指定一个目录,代码就会在那个目录中生成了。


一、关联

    1)双向关联:指两个类之间可以相互调用对方的公共属性或方法(如下图所示)。

         

    2)单向关联:源头的类可以调用箭头方向的类的公共属性或方法(如下图所示),没有生命期的依赖,一般是引用。

          

           class A
{
  public:
    Integer q;
    B *the c;
};

class B
{
  public:

    Integer the c;
};

二、聚合/组合

       首先,它是表示整体和部分的关系。

       再来,看下聚合和组合用rational rose 生成的图和代码:

      聚合:

                   

class A

{
  public:
    B b;
};

class B
{
};

      组合:

                      

class A

{
  public:
    B b;
};

class B
{
};

从上面可以看到聚合和组合的生成的代码是一样的,查找了相关资料,发现2种关系的区别是:聚合的B类,离开A也能照样存在;而组合的A类必须知道B类的生存周期,即控制B类的构造和解析,或者通过其他途径知道B类的构造和解析。


另外这里介绍个小技巧:

                        组合的关系符号在Rational rose 里面没有,可以通过在聚合的关系符号上做些修改就能改成组合的样子,方法:

                           

                                           1.可以先画一个aggregation(空心)的关系, 
                                           2.然后右键单击这个关系,open specification ->Role B Detail, 
                                           3.你会发现有三项选(By Value, By Reference, Unspecified),在你选上By Value的时候,菱形就变成实心的了。

   

 三、依赖

         依赖是一种弱关联,即A要用到B,但两者之间的关系不是特别明显,形式上一般是A中的方法用到B的对象作为参数。

          

class A
{
};

class B
{
};

就把我现在的理解都写了,可能理解错误或不到位,知道的留下言好让我改正,还有其他的关系没写,等以后理解且有空了再来继续写。

你可能感兴趣的:(《软件工程--原理、方法和工具》观后感之UML类图之间的关系)