Android开发之UML类图简介

2017-04-22 20:00 阅读 8,681 次 评论 0 条

摘要:

在学习设计模式之前,你需要了解一下UML类图的基本知识,UML是Unified Model Language英文的首字母简写,称为统一建模语言。UML类图属于结构图,常用于一个系统的静态结构,包含类(Class)的UML图接口(Interface)UML图以及泛化关系(Generalization)的UML图关联关系(Association)的UML图依赖关系(Dependency)的UML图实现关系(Realization)的UML图,下面分别进行简单的介绍,首先看一下UML的合法,如下图:

依赖关系的UML图

一、类的UML图

在类的UML图中,使用一个长方形描述一个类的主要构成,将长方形垂直地分为三层。

第一层:表示类名,抽象类使用斜体字形,非抽象类使用常规字形。

第二层:表示属性,列出类的成员变量和类型,格式是“变量名字:类型”(如果一个类的变量很多,根据需要只列出重要的几个变量)。Public访问权限的变量,需要在变量名字前用“+”修饰;Protected访问权限的变量,需要在变量名字前用“#”修饰;Private访问权限的变量,需要在变量名字前用“-”修饰;如果变量的访问权限是友好的,不需要在变量名字前用任何的符号修饰。

第三层:表示方法,列出类的方法和返回类型,格式是“方法名字:类型”(如果一个类的方法很多,根据需要只列出重要的几个方法)。Public访问权限的方法,需要在方法名字前用“+”修饰;Protected访问权限的方法,需要在方法名字前用“#”修饰;Private访问权限的方法,需要在方法名字前用“-”修饰;如果方法的访问权限是友好的,不需要在方法名字前用任何的符号修饰;如果是静态方法,需要在方法名字下用“下划线”修饰。

在绘制类的UML图之前,TeachCourse先定义一个简单的类Student.java,该类包含常量SCHOOL,变量name,变量age,变量grade和方法information(),代码如下:

public class Student{
   public String SCHOOL="北京大学";
   protected String name;
   private String age; 
   float grade;

   public String information(){
       return name+"来自"+SCHOOL;
   }
   ...
}

类的UML类图:

类的UML图

二、接口的UML图

表示接口(Interface)的UML图和表示类(Class)的UML图类似,使用一个长方形描述一个接口的主要构成,将长方形垂直分为三层。

第一层:表示接口名,使用斜体字形,而且需要用《Interface》修饰接口名,并且该修饰和名字分列在两行。

第二层:表示常量层,列出接口中的常量及类型,格式是“常量名字:类型”。在Java中,接口的中的常量访问权限都是public的,需要在常量名字前用“+”修饰。

第三层:表示方法层,列出接口中的方法及返回类型,格式是“方法名字:类型”。在Java中,接口的中的方法访问权限都是public的,需要在方法名字前用“+”修饰。

在绘制接口的UML图之前,TeachCourse先简单定义一个接口OnClickListener.java,接口中包含常量STATE,方法onClick(),代码如下:

public interface OnClickListener{
   public int STATE=0;
   public void onClick();
}

接口的UML图:

接口的UML图

三、泛化关系的UML图

对于面向对象语言,UML中所说的泛化关系就是指类的继承关系。如果一个类是另一个类的子类,通过使用一个实线连接两个类的UML图来表示两者之间的继承关系,实线的起始端是子类的UML图,终点端是父类的UML图,但终端使用一个空心的三角形表示实线的结束。

在绘制泛化关系的UML图之前,TeachCourse先简单定义一个子类StudentA.java,继承上文的Student,在子类中定义变量birthday和方法skill(),代码如下:

public class StudentA extends Student{
    private String birthday;

    public void skill(){
       System.out.println("擅长打篮球。。。");
    }
}

泛化关系的UML图:

泛化关系的UML图

四、关联关系的UML图

如果A类中成员变量是用B类(接口)来声明的变量,那么A和B的关系是关联关系(Association),称A关联于B。如果A关联于B,那么UML通过使用一个实线连A和B的UML图,实线的起始端是A的UML图,终点端是B的UML图,但终点端使用一个指向B的UML图的方向箭头表示实线的结束。

在绘制关联关系的UML图之前,TeachCourse先简单定义一个类Button.java,定义成员变量OnClickListener,成员变量Student,成员方法getText(),其中OnClickListener是上文定义的接口,Student是上文定义的类,代码如下:

public class Button{
    public OnClickListener onClickListener;
    private String content;
    Student Student;    

    public void getText(){
        System.out.println("获取按钮是的文本内容。。。");
    }
}

关联关系的UML图:

关联关系的UML图

五、依赖关系的UML图

如果A类中某个方法的参数用B类(接口)来声明的变量或某个方法返回的数据类型是B类型,那么A和B的关系是依赖关系(Dependency),称为A依赖于B。如果A依赖于B,那么UML通过使用一个虚线连A和B的UML图,虚线的起始端是A的UML图,终点端是B的UML图,但终点端使用一个指向B的UML图的方向箭头表示虚线的结束。

在绘制依赖关系的UML图之前,TeachCourse先简单定义一个类TextView.java,声明成员方法displayInfo(Student stu),传入Student对象,其中Student为上文定义的类,代码如下:

public class TextView{
    private OnClickListener onClickListener;
    public Student displayInfo(String name,float grade){
        return new Student(name,grade);
    }
    public void setOnClickListener(OnClickListener onClickListener){
       this.onClickListener=onClickLitener;
    }
}

依赖关系的UML图:

依赖关系的UML图

六、 实现关系的UML图

如果一个类实现了一个接口,那么类和接口就是实现关系(Realization),称类实现接口。UML通过使用虚线连接类和它所实现的接口,虚线起始端是类,虚线终点端是接口,但终点使用一个指向接口的空心三角形表示虚线的结束。

在绘制实现关系的UML图之前,TeachCourse先简单定义一个类OnClickListenerImpl.java,其中OnClickListenerImpl实现上文的OnClickListener接口,代码如下:

public class OnClickListener implement OnClickListener{

   @Override
   public void onClick(){
      System.out.println("类实现接口。。。");
   }
}

依赖关系的UML图:

依赖关系的UML图

七、注释

UML使用注释(Annotation)为类图提供附加的说明。UML类图在一个带卷角的长方形中显示给出的注释,并使用虚线将这个带卷角的长方形和它所注释的实体连接起来。

在绘制注释图形之前,TeachCourse首先确定想要给Student.java类的UML图的information()方法添加注释,如下图:

类图注释

总结:

到此,我们已经简单地介绍完类的UML图接口的UML图泛化关系的UML图关联关系的UML图依赖关系的UML图实现关系的UML图,重点在于理解每一种UML图的定义和表示方法,总结如下:

  • 类的UML图分为抽象类和非抽象类,抽象类名使用斜体字形;
  • 接口的UML图,接口名使用斜体字形,同时使用《Interface》符号修饰;
  • 泛化关系的UML图使用实线空心箭头表示;
  • 关联关系的UML图使用实线箭头表示;
  • 依赖关系的UML图使用虚线箭头表示;
  • 实现关系的UML图使用虚线空心箭头表示。

你可能感兴趣的文章

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ158#9359$239或公众号TeachCourse)
转载请注明出处: https://www.teachcourse.cn/2432.html ,谢谢支持!

资源分享

分类:Android 标签:,
TreeMap方法解析 TreeMap方法解析
MediaRecorder实现微信、QQ、人人、易信等语音录制功能工具:MediaUtilAPI MediaRecorder实现微信、QQ、
浅谈View类 浅谈View类
java提供的容器类 java提供的容器类