zoukankan      html  css  js  c++  java
  • UML类图介绍

    类图是最常用的UML图形,也是开发人员在设计和修改代码时的重要工具。下面介绍一下常用图形:

    1.类

    面向对象编程中,类是对象的骨架,它了包含3个组成部分:

    第一个是Java中定义的类名

    第二个是属性(attributes)。

    第三个是该类提供的方法
    对于标准的UML类图,他的第一行表示类的名称,如下图的annimal。

    第二行是类的属性,也就是它的成员变量,如name、age、trueName、sex这四个属性。

    第三行表示类的方法,如getName()和setName()方法。

    当然,他们都是有可见范围的。

    在UML类图中,加号(+)表示具有公共可见性(public)。减号(-)表示私有可见性(private)。#号表示受保护的可见性(protected)。

    省略这些修饰符表示具有package(包)级别的可见性。

    如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图:

    对应代码如下:

     1 public class Annimal {
     2     public String name;
     3     private int age;
     4     protected String trueName;
     5     String sex;
     6 
     7     public String getName() {
     8         return name;
     9     }
    10 
    11     private void setName(String name) {
    12         this.name = name;
    13     }
    14 }

    2.接口

    接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。

    接口既可用下图的那个图标来表示,也可由附加了<<interface>>的一个标准类来表示。

    通常,根据接口在类图上的样子,就能知道与其他类的关系。

    对应代码如下:

    1 public interface CollegePerson {
    2     public void getSchedule();
    3 }

    3.关系

    3.1 依赖关系

    实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例。

    更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。

    其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(实例方法返回值),或者对一个类的静态方法的引用(静态方法返回值)。

    也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。

    对应代码如下:

     1 public class Annimal {
     2 
     3     public String name;
     4     private int age;
     5     protected String trueName;
     6     String sex;
     7 
     8     public String getName() {
     9         return name;
    10     }
    11 
    12     private void setName(String name) {
    13         this.name = name;
    14     }
    15     
    16     public void drink(Water water) {
    17         
    18     }
    19 }
    20 
    21 class Water{
    22     private String name;
    23 }

    3.2关联

    实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。

    如果没有箭头,暗示是一种双向的导航能力。

    在Java中,关联转换为一个实例作用域的变量,如下图所示。

    可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。

    在示范代码中,Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。

    代码如下:

     1 public class Employee {
     2 
     3     public Employee() {
     4         // TODO Auto-generated constructor stub
     5     }
     6     
     7     private TimeCard timeCard;
     8 
     9 }
    10 
    11 class TimeCard {
    12 
    13 }

    3.2.1 聚合

    聚合是关联的一种形式,代表两个类之间的整体/局部关系。组合是一种比较紧密的关系,整体和局部“同生共死”。

    聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。

    代码如下:

     1 public class People {
     2 
     3     public People() {
     4         // TODO Auto-generated constructor stub
     5     }
     6     private Person person;
     7 }
     8 
     9 class Person{
    10     
    11 }

    3.2.2 组合

    合成是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。

    所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。

    局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

    代码如下:

     1 public class People {
     2 
     3     public People() {
     4         // TODO Auto-generated constructor stub
     5     }
     6     private Person person1;
     7     private Person person2;
     8 }
     9 
    10 class Person{
    11     
    12 }

    3.2.3 泛化

    泛化表示一个更泛化的元素和一个更具体的元素之间的关系(子类继承父类)。泛化是用于对继承进行建模的UML元素。在Java中,用extends 关键字来直接表示这种关系。

    代码如下:

     1 public abstract class Annimal {
     2 
     3     public String name;
     4     private int age;
     5     protected String trueName;
     6     String sex;
     7 
     8     public String getName() {
     9         return name;
    10     }
    11 
    12     private void setName(String name) {
    13         this.name = name;
    14     }
    15     
    16     public abstract void drinkWater(Water water);
    17 }
    18 
    19 class Cat extends Annimal{
    20 
    21     @Override
    22     public void drinkWater(Water water) {
    23         // TODO Auto-generated method stub
    24         
    25     }
    26     
    27 }
    28 
    29 class Water{
    30     private String name;
    31 }

    3.2.4 实现

    实例关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。(子类继承接口)

    对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。

    代码如下:

     1 public interface IAnnimal {
     2     public void drinkWater(Water water);
     3 }
     4 
     5 class Cat implements IAnnimal{
     6 
     7     @Override
     8     public void drinkWater(Water water) {
     9         // TODO Auto-generated method stub
    10         
    11     }    
    12 }
  • 相关阅读:
    尚未笔记知识点
    jsonp的原理及其使用
    django中将views.py中的python方法传递给html模板文件
    UVA
    UVA
    UVA
    UVA
    UVA
    UVA 1600 Patrol Robot
    UVA
  • 原文地址:https://www.cnblogs.com/asenyang/p/14136831.html
Copyright © 2011-2022 走看看