zoukankan      html  css  js  c++  java
  • UML类图Java

    箭头:

    指向父类或接口。
    指向依赖物。
    指向子元素。

     

     

     

    继承、实现是三角型箭头,其他都为箭头

    组合、聚合都有一个菱形端,且都为实线,其他都无菱形端

    继承是实线,实现是虚线

    关联是实线

    依赖是虚线

     

            一般化关系/泛化/继承

            实现

     

            关联

            聚合

                组合/合成 

     

            依赖

     

    传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系:

         泛化:表示类与类之间的继承关系、接口与接口之间的继承关系;

         实现:表示类对接口的实现;

         依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。

         关联:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示;

         聚合:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;

     

         组合:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;

     

    1. 类(Class

    一般包含3个组成部分。第一个是类名;第二个是属性(attributes);第三个是该类提供的方法(类的性质可以放在第四部分;如果类中含有内部类,则会出现第五个组成部分)。类名部分是不能省略的,其他组成部分可以省略。

     

    类名书写规范:正体字说明类是可被实例化的,斜体字说明类为抽象类。

     

    属性和方法书写规范:修饰符 [描述信息属性、方法名称 [参数] [:返回类型|类型]

     

    属性和方法之前可附加的可见性修饰符:

     

    加号(+)表示public;减号(-)表示private#号表示protected;省略这些修饰符表示具有package(包)级别的可见性。

          如果属性或方法具有下划线,则说明它是静态的。

             描述信息使用 << 开头和使用 >> 结尾。

             类的性质是由一个属性、一个赋值方法和一个取值方法组成。书写方式和方法类似。

    1

     

    Java代码  收藏代码
    1. public class TaxCalculator  
    2. {        
    3.          private longtaxRate ;  
    4.          private intsalary;  
    5.   
    6.          public TaxCalculator(long taxRate)  
    7.          {  
    8.                    this.taxRate = taxRate ;  
    9.          }  
    10.   
    11.         public long countTax()  
    12.          {  
    13.                   return taxRate*salary;  
    14.          }  
    15.   
    16.          public int getSalary()  
    17.          {  
    18.                    return salary;  
    19.          }  
    20.   
    21.          public void setSalary(int salary)  
    22.          {  
    23.                    this.salary = salary;  
    24.          }  
    25.   
    26. }   
      

    TaxCalculator

    -taxRate:long

    +TaxCalculator(a:long)

    +countTax():long

    salary:long

     

           
    2. 
    包(Package

     

    包是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,通常使用逻辑性的包,用于对模型进行组织;使用物理性的包,用于转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。:

     



     

    3. 接口(Interface

     

    接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口的表示有大概两种方式。具体画法见下例:

     

    例:

     

    Java代码  收藏代码
    1. public interface TaxCalculator  
    2. {  
    3.          public long countTax();  
    4.   
    5.          public int getSalary();  
    6.   
    7.          public void setSalary(int salary);  
    8.   
    9. }   
      

    画法一:

     



     

     

          画法二 :    

     

    Interface

    TaxCalculator

    +countTax():long

    +getSalary():int

    +setSalary()

     
     

    4. 关系

     

    常见的关系有:

    一般化关系(继承)、

    实现关系(接口实现)、

    聚合关系、

    合成关系、

    依赖关系。

    请注意不同关系在图中连线表示的不同。

     

    4.1一般化关系(Generalization

     

    在有的书籍和资料中也叫做泛化关系

     

           一般化关系表示类与类、接口与接口之间的继承关系。关系中的箭头由子类指向父类。在Java中,用extends关键字来直接表示这种关系。

     

    Java代码  收藏代码
    1. public abstract class Employee{  
    2.   
    3. }  
    4.   
    5. public class Programmer extends Employee{  
    6.   
    7. }   
     继承: 

     



     

     

    4.2实现(Realization

     

    实例关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。关系中的箭头由实现接口的类指向被实现的接口。在Java中,实现关系可直接用implements关键字来表示。

     

    Java代码  收藏代码
    1. public interface CollegePerson{  
    2.   
    3. }  
    4.   
    5. public class Professor implements CollegePerson{  
    6.   
    7. }  
     接口实现:

     

    表示方法一:(在Rose2003 下实现如下,连接线没有箭头,因为方向显而易见)



     

     

    表示方法二: 



     

     

     

     

    4.3关联(Association

     

    表示类与类之间的连接。它使一个类的可见属性和方法被另一个类使用。关联可以是双向或者单向的。双向的关联箭头是可选的,单向的箭头指向遍历或者查询的方向。在Java中,关联使用实例变量来实现。在关联关系中可以使用附加的基数来说明类之间对应的个数。

     

    基数

    含义

    0..1

    零个或者一个实例

    0..*或者*

    没有限制,任意

    1

    有且只能一个实例

    1..*

    至少有一个实例

     

    常见的基数

     

    例:以权限中的用户组、用户角色为例,一个用户角色可以属于一个或者多个用户组,一个用户组则可以包含多个用户角色。如果用户组采用下面的方法来获得用户角色的权限

    Java代码  收藏代码
    1. public class UserGroup{  
    2.   
    3. private UserRole uRole ;  
    4.   
    5.           ......  
    6.   
    7. }  
    8.   
    9. public class UserRole{  
    10.   
    11. }   
     

     

    则表现在图中为:(注意箭头的画法)



     

     


    注意:一个关联关系往往是聚合关系或者是合成关系。

     

    4.4聚合(Aggregation

     

    聚合是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。在Java中,聚合也是使用实例变量来实现的。
    关联和聚合的区别纯粹是概念上的,在Java语法上分辨不出来的。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。

     

    例:汽车与轮胎的关系可以很好的说问题。

     

    Java代码  收藏代码
    1. public class Car{  
    2.   
    3.          private Tyres tyres;  
    4. }  
    5.   
    6. public class Tyres{  
    7.   
    8. }   
     聚合:

     



     

     

     

    4.5合成、组合(Composition

     

    合成是聚合的一种特殊形式,暗示局部整体内部的生存期职责。合成关系是不能共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

     

           例:人和他的腿就是一个好的例子。

     

    Java代码  收藏代码
    1. public class Man{  
    2.   
    3.          private Legs legs;  
    4.   
    5. }  
    6.   
    7. public class Legs{  
    8.   
    9. }   
     合成:

     



     

     

     

    4.6依赖(Dependency

     

    依赖也是类与类之间的连接,并且依赖总是单向的。实体之间一个使用关 系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个 局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用依赖来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。

     

    例:给一个雇员计算薪水的时候,要使用计算器的例子

     

    Java代码  收藏代码
    1. public class Employee{  
    2.   
    3.          public void calcSalary(Calculator cSalary)  
    4.          {  
    5.   
    6.          }  
    7. }   
     依赖:




     






  • 相关阅读:
    考研竞赛数学微信交流群
    华东师范大学数学分析第5版提要03.04.01证明
    大学生数学竞赛题目分类30章之第02章函数极限202104版已发54题
    研赛02994北京大学数学分析习题集2.3.1(3)参考解答
    复旦大学高等代数问题2016A12参考解答
    华东师范大学数学分析第5版03.03函数极限存在的条件
    大学生数学竞赛题目分类30章之第01章数列极限202104版已发33题
    研赛02992北京大学数学分析习题集23.1
    裴礼文数学分析中的典型问题与方法第3版勘误32个
    Evans277-281
  • 原文地址:https://www.cnblogs.com/ruiser/p/52e9636a740918ec9783987dba4048f5.html
Copyright © 2011-2022 走看看