类图是最常用的UML图,他可以清楚地表示程序中类的基本结构,类与类之间的结构关系,掌握UML类图对于了解系统的总体结构和设计模式有着重大的作用。下面我会介绍类图的基本知识以及类图在Java中的基本实现形式。

类(Class)

面向对象编程中,类是对象的骨架,它了包含3个组成部分。第一个是Java中定义的类名。第二个是属性(attributes)。第三个是该类提供的方法。
对于标准的UML类图,他的第一行表示类的名称,第二行是类的属性,也就是它的成员变量,第三行表示类的方法。当然,他们都是有可见范围的。在UML类图中,加号(+)表示具有公共可见性(public)。减号(-)表示私有可见性(private)。#号表示受保护的可见性(protected)。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图:

对应的Java代码如下:

public class Animal {public String name;private int age;protected String trueName;String sex;public String getName() {return name;}private void setName(String name) {this.name = name;}}
接口(Interface)

接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用下图的那个图标来表示,也可由附加了<<interface>>的一个标准类来表示。通常,根据接口在类图上的样子,就能知道与其他类的关系。

对应的Java代码如下:

public interface CollegePerson {public void getSchedule();}
关系

后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。

依赖(Dependency)

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

对应Java代码如下:(后面使用了模版方法模式,所以这句话不需要再写了)

public class Animal {public void drink(Water water){System.out.println("drink water");}}
public class Water {}
关联(Association)

实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。如果没有箭头,暗示是一种双向的导航能力。在Java中,关联转换为一个实例作用域的变量,就像图E的“Java”区域所展示的代码那样。可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。在示范代码中,Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。

public class TimeCard {}
public class Employee {private TimeCard timeCard;//...}
聚合(Aggregation)

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

public class People {private Person p;}
public class Person{}
合成(Composition)

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

public class People {private Person p;private Person p2;}
泛化(Generalization)

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

public class Animal {public void drink(Water water){System.out.println("drink water");}}
public class Cat extends Animal{@Overridepublic void drink(Water water) {super.drink(water);}
}
实现(Realization)

实例关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。

public interface Animal {public void drink();
}
public class Cat implements Animal{@Overridepublic void drink() {}}

UML与Java-- UML类图于Java的基本实现相关推荐

  1. 怎样用uml类图生成java类_JAVA:面向对象编程的底层逻辑,深度剖析

    什么是面向对象 在目前的软件开发领域有两种主流的开发方法,分别是结构化开发方法和面向对象开发方法.早期的编程语言如C.Basic.Pascal等都是结构化编程语言,随着软件开发技术的逐渐发展,人们发现 ...

  2. UML类图、JAVA DesignMode 设计模式、设计原则

    全文2.6W余字,读完需要20分钟,介绍23种设计模式,每个模式都有案例与真实使用场景,能够帮助初学者快速了解设计模式,建立起对代码中设计模式的初步理解,要明确:设计模式只是帮助我们更好的设计代码架构 ...

  3. java流类图结构_java I/O 流总结

    一.java 流操作有关的类和接口: 类                                                                          说明 Fil ...

  4. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  5. Uml 与 Rational Rose( 类图 )

    Uml 与 Rational Rose( 类图 ) 分类: UML  2005-12-04 16:09 类之间的关系可以分为四种: 关联关系( Association ) 依赖关系( Dependan ...

  6. java uml聚合代码_UML类图(下):关联、聚合、组合、依赖

    前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...

  7. java 电梯类图,电梯控制系统(用UML图理解)

    5.9  电梯控制系统 在前面几节中,讨论了用于实现单个UML图的基本技术.现在,将演示如何将所有这些技术应用到实际问题中去.下面是简化的电梯控制系统的描述. 电梯由门.监视器和电梯控制器组成.电梯控 ...

  8. java备忘录模式 类图,折腾Java设计模式之备忘录模式

    备忘录模式 Without violating encapsulation, capture and externalize an object's internal state allowing t ...

  9. java观察者模式类图_设计模式(十八)——观察者模式(JDK Observable源码分析)...

    1 天气预报项目需求,具体要求以下: 1) 气象站能够将天天测量到的温度,湿度,气压等等以公告的形式发布出去(好比发布到本身的网站或第三方).java 2) 须要设计开放型 API,便于其余第三方也能 ...

最新文章

  1. android圆形旋转菜单,而对于移动转换功能支持
  2. 用Matplotlib轻松复刻分析图,看看哪个城市买房最自由
  3. 笔记-高项案例题-2015年下-需求管理
  4. Android Glide图片加载框架(一)基本用法
  5. SqlServer2000中作业无法删除的原因和解决办法
  6. android注销广播接收器,使用广播接收器 - chuiyuan的个人页面 - OSCHINA - 中文开源技术交流社区...
  7. 对症下药,方能药到病除——如何修复drv?
  8. 向Spark集群提交任务
  9. 高等数学问题的符号解
  10. 使用DevKit开发插件
  11. md5的特点以及加密原理
  12. sqlserver 错误大全
  13. ETS88 获取TesterID
  14. idea中Empty tag doesn‘t work in some browsers 浏览器中一片空白,没有渲染样式,
  15. NYOJ-845无主之地1
  16. better-scroll内pullingUp无效(控制台报错)
  17. Pytest注册使用自定义mark标签
  18. 安卓Unity3D Camera图像和音频采集推送代码
  19. 如何将硬盘的分区大小设置为整数
  20. 孤陋寡闻的我刚知道怎么debug远程服务

热门文章

  1. 应届生必看的职场建议
  2. 为什么说品牌推广离不开软文营销呢?一文告诉你软文营销的优势
  3. Maven使用(一)
  4. 智能硬件产品开发全流程解析
  5. 西门子S7-200 SMART控制步进电机(三)
  6. vue使用element-ui table 清除表格背景色以及表格边框线
  7. os.listdir()详解
  8. Socket和ServerSocket(建立客户端和服务器端)
  9. k宝无法连接计算机,农行K宝无法识别
  10. 【FOFA】fofa搜索引擎的常用搜索语法