疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

UML语言之用例图、类图


 

用例图
        用例图用于描述系统提供的系列功能,而每个用例则代表系统的一个功能模块。用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能,用例图对系统的实现不作任何说明,仅仅是系统功能的描述。
        用例图包括用例(以一个椭圆表示,用例的名称放在椭圆的中心或椭圆下面),“角色”(Actor,也就是与系统交互的其他实体,以一个人形符号表示),角色和用例之间的关系(以简单的线段来表示),以及系统内用例之间的关系。用例图一般表示出用例的组织关系一一要么是整个系统的全部用例,要么是完成具体功能的一组用例.图2.10是一个简单的BSS系统的部分用例示意:
        用例图通常用于表达系统或者系统范畴的高级功能。如图2.10所示,可以很容易看出该系统所提供的功能。这个系统允许注册用户登录、发帖和回复,其中发帖和回复需要依赖于登录;允许管理员删除其他人的帖子,删帖也需要依赖于登录。
        用例图主要在需求分析阶段使用,用于与客户交流,保证系统需求的无二性,不要把用例做得过多,过多的用例将导致难以阅读,难以理解;尽可能多地使用文字说明。
类图
        类图是最古老、功能最丰富、使用最广泛的UML图形。类图表示系统中应该包含哪些实体,各实体之间如何关联;换句话说,它显示了系统的静态结构,类图可用于表示逻辑类,逻辑类通常就是业务人员所谈及的事物种类。
类在类图上使用包含三个部分的矩形来描述,最上面的部分显示类的名称,中间部分包含类的属性,最下面的部分包含类的方法。图2.11显示了类图中类的表示方法:
        类图除了可以表示实体的静态内部结构之外,还可以表示实体之间的相互关系,类之间有三种基本关系:
       1.关联(包括聚合,组合)
       2.泛化(与继承同一个概念)
       3.依赖
       关联
       客观世界之间的两个实体之间总是存在千丝万缕的关系,当我们把这两个实体抽象到软件系统中时,两个类之间必然存在关联关系。关联具有一定的方向性:如果仅能从一个类单方向地访问另一个类,则被称为单向关联;如果两个类可以互相访问对象,则被双向关联。一个对象能访问关联对象的数目被称为多重性,例如建立学生和老师之间的单向关联,则可以从学生访问老师,但从老师不能访问学生,关联使用一条实线来表示,带箭头的关联表示单向关联。
      在很多时候,关联和属性很像,关联和属性的关键区别在于:类里的某个属性引用到另外一个实体时,则变成了关联。
关联关系包括两种特例:聚合和组合,它们都有部分和整体的关系,但通常认为组合比聚合更加严格。当某个实体聚合成另一个实体时,该实体还可以同时是另一个实体的部分,例如学生可以既是篮球俱乐部的成员,也可以是书法俱乐部的成员;当某个实体组成另一个实体时,该实体则不能同时是一个实体的部分。聚合使用带空心菱形框的实线表示,组合则使用带实心菱形框的实线表示。图2.12显示了几个类之间的关联关系。
       注意:图2.12中的Student, Teacher等类都没有表现其属性、方法等特性,因为本图的重点在于表现类之间的关系。实际的类图中可能会为Student, Teacher每个类都添加属性、方法等细节。
       2.12中描述Teacher和Student之间的关联关系:它们是双向关联关系,而且使用了多重性来表示Teacher和Student之间存在1:N的关联关系( 1..*表示可以是一个到多个),即一个Teacher实体可以有1个或多个关联的Student实体;Student和BasketBallClub存在聚合关系,即1个或多个Student实体可以聚合成一个BasketBallClub实体;而Arm(手臂)和Student之间存在组合关系,2个Arm实体组合成一个Student实体。
        泛化
        泛化与继承是同一个概念,都是指的子类是一种特殊的父类,类与类之间的继承关系是非常普遍的,继承关系使用带空心箭头的实线表示。图2.13显示了Student和Person类之间的继承关系。
        从图2.13中可以看出,Student是Person的子类,即Student类是一种特殊的Person类。
        依赖
        如果一个类的改动会导致另一个类的改动,则称为两个类之间存在依赖。依赖关系使用带箭头的虚线表示,其中箭头指向被依赖的实体。依赖的常见可能原因:
        1.改动的类将消息发给另一个类。
        2.改动的类以另一个类作为数据部分。
        3.改动的类以另一个类作为操作参数。
        通常而言,依赖是单向的,尤其是当数据表现和数据模型分开设计时,则数据表现依赖于数据模型。例如JDK基础类库中的JTable和DefaultTableModel,关于这两个类的介绍请参考本书12.11的介绍。图12.14显示了它们之间的依赖关系。
对于图2.14中表述的JTable和DefaultTableModel两个类,其中DefaultTableModel是JTable的数据模型,当DefaultTableModel发生改变时,JTable将相应地发生改变。(摘自[疯狂JAVA讲义].李刚)