UML的存在

类图是使用频率比較高的UML图,它用于描写叙述系统中所含的类以及它们之间的相互关系,帮助人们简化对系统的理解,也是系统分析和设计阶段的重要产物,也是系统编码和測试的重要类型根据。

UML的表示方法

它的表示方法也比較简单,分成三层,第一层是类名。第二层是属性,第三层是方法。

而 属性和方法中用到的“+”表示public,“-”表示private,“#”表示protected。以及属性的写法:权限修饰符、属性名(方法名),然后是数据类型(或返回值)。这些都是基本的语法,都比較明显也比較简单。

当然还有接口和抽象类的表示方法:

用来描写叙述接口;

用来描写叙述抽象方法。

UML描写叙述类图之间的关系

类图之间的关系有四种:泛化关系、实现关系、依赖关系、关联关系,而关联关系又分为普通关联关系、聚合关系和合成关系。而其实这些关系我们easy理解,可很多其它时候我们要注意怎样转化成java代码:

泛化关系

泛化关系实质上就是我们的继承,类继承与还有一个类,这个代码应该好些,我们仅仅须要记一下UML表示方法就好了


(图片是从网上任意转载的)
这里须要注意的是集成的方向,空心箭头加实现表示继承,箭头指向谁表示继承于谁。
至于 java中关系代码则为public class Tiger extends Animal(){};

实现 关系

这就是来相对于接口的,描写叙述实现接口,这个我们也来简单记下:

(图片是从网上任意转载)
作为对照,与继承类似的是都是空心箭头,而与继承不同的则是虚线表示实现;
而java代码在这里的写法则为public class PenBrush implents IBrush(){};

依赖关系

把依赖关系放在第三个。是由于它是类与类之间最浅的关系。它能够是单向的,也能够是双向的,可是我们通常都用单向的。避免双向的。

(图片是从网上任意转载)
依赖关系解释起来比起继承和实现来稍微有些麻烦。由于继承和实现我们经经常使用到。并且比較单一。有着明白的上下级,而依赖关系则不然,就像图中的人都依赖于计算机来作某些事情。就像在《大话设计模式》中动物依赖空气和水,空气和水是不同于动物的单独事物,就像计算机是不同于人类的独立的事物一样,它是独立存在的,而人类在计算或者其他行动中须要用到计算机,就像动物的呼吸须要空气,喝水须要水一样,它的行为中可能会用到还有一个独立的存在。而假设不进行这个行为可能就不须要动用这个存在,就像一个死去的动物,已经不要水和空气,但是它仍然是一个动物,这个类是不会变的。

解释起来可能相比較有些麻烦,可是表示方法还是非常easy的,一个虚线加上实心箭头就够了;
至于代码实现方法。则就须要详细情况进行详细对待了。

整体上说,通常能够表现为:

①:被指向的类。在指向它的类中,做为一个方法的參数,这是最经常使用的一种方式。
public class Person{
public void count(Computer computer){ }
}

②:还能够将被指向的类。在指向它的类中。作为一个方法中的局部变量;

public class Person{
public void count(){
Computer computer=new Computer();
}
}

③:再有一种方式就是被指向的类中含有静态方法。而指向它的类调用它的静态方法;


public class Computer(){
public static void test(){ }
}
public class Person{
Computer.test();
}

关联关系:

最后就是我们的关联关系了,说它分为三种状态:普通关联关系、聚合关系和合成关系,他们最大的共同之处就是都是关联关系,而代码表现出来的方式就是被指向类会作为指向类的成员变量出现,而我们再来看看它们有什么不同?

普通关联关系


(图片是从网上任意转载)
这是最普通的关联关系。代码也非常easy写:
public class Customer{
private Address address。
}

而对应的还有自关联和双向关联,而这些也都是将对应的类做成成员变量就可以。自关联将自己,双向关联互相做成。

聚合关系

关联关系就像是一个老人讲故事,要想知道这个事情,要从多少多少年说起了,那个年代那个背景可能会让你理解的更深刻。而聚合关系则不不过这样,不不过那个时代造成了这样,而是主人公可能就在一个组织里,那个组织的人的共性,他是组织里的人。组织都是由他这类人组成的。


(图片是从网上任意转载)
它的描写叙述形式比起简单的关联来多了一个菱形。而菱形所在的类指向对方。
它的代码编写,比起普通关联要麻烦了非常多:
public class Car{
private Engine engine;
public Car(Engine engine){ }
public void setEngine(Engine engine){ }
}

它不仅将被指向对象作为了成员变量。还将成员对象作为构造方法以及set方法或其它业务方法的參数。

合成关系

合成关系,还有人把它叫做组合关系。它之所以不同于聚合关系,是由于关联的对象在本质上是在一起的。就像四肢对于生物。就像数字对于计算。

(图片是从网上任意转载)
鉴于它的同根同源性,菱形变成了实心。而对应的程序也做出了变化:
public class Head{
private Mouth mouth;
public Head(){
mouth=new Mouth();
}
}

它是在总体的构造方法中直接实例化成员。


积跬步,聚小流------关于UML类图的更多相关文章

  1. 四步轻松实现用Visio画UML类图

    本节和大家一起学习一下用Visio画UML类图的方法,主要有四个步骤,这里和大家分享一下,相信通过本节的学习,你对Visio画UML类图的步骤一定会有所了解. 用Visio画UML类图 对于画类图的工 ...

  2. 23种经典设计模式UML类图汇总

    在这里23种经典设计模式UML类图汇总       创建型模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基 ...

  3. UML:类图关系总结

    UML类图几种关系的总结,泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Reali ...

  4. 设计模式学习笔记(详细) - 七大原则、UML类图、23种设计模式

    目录 设计模式七大原则 UML类图 设计模式分类 单例模式 工厂设计模式 简单工厂模式 工厂方法模式(使用抽象类,多个is-a) 抽象工厂模式(使用接口,多个like-a) 原型模式 建造者模式 适配 ...

  5. UML类图的6大关系

    <小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...

  6. 初识UML类图--类之间关系

    前言 最近有打算学习一下设计模式,所以就去看了园子里面左潇龙大哥的设计模式文章,看完之后只有一个感觉,我啥时候也能写出来这么牛逼的文章啊,但是我这语文老师死的早的人还是算了,但是设计模式还是要学的,这 ...

  7. 设计模式之UML类图的常见关系

    设计模式之UML类图的常见关系 本文来自转载 烧点饭博客 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association), ...

  8. 深入浅出UML类图

    原作者:http://www.uml.org.cn/oobject/201211231.asp 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作&l ...

  9. UML类图相关实践

    最近看了下设计模式,其中无可避免会设计很多类图,UML类图对于学习设计模式很重要,关于设计模式,我也会在这里写上一写,这一篇关于UML类图的就先当个铺垫. 1.先上一个简单的类图来简单说明下: 1). ...

随机推荐

  1. mysql数据库中列转行

    今天突然想到了数据库中的行专列与列转行,还不熟悉,在上网看了一下然后就自己写了个例子. 数据库表示这样滴! //全部查询出来SELECT (case type when 'MySql数据库' then ...

  2. Xcode 那些简单实用的插件推荐

    古人云“工欲善其事必先利其器”,打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径!   晾一下我的武器库,欢迎大家选用:)     全能搜索家CodePilot 2.0 ------------ ...

  3. linux服务器在运行210天左右宕机

    减小字体 增大字体 作者:错新网  来源:www.cuoxin.com  发布时间:2014-2-25 19:21:32 错新网讯   最近几天,一批linux线上的服务器接连宕机,当时以为是硬件问题 ...

  4. crtmpserver初探

    前言       Adobe的FMS(Flash Media Server)是很好用.但对应着分级授权的是money和有限功能开放.商业的东西既然用不起,也阻碍了我们的技术进步,那就只能求助于开源社区 ...

  5. C语言数据结构----栈与递归

    本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系. 一.函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址 ...

  6. Android开发中如何解决加载大图片时内存溢出的问题

    Android开发中如何解决加载大图片时内存溢出的问题    在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...

  7. LuCI探究(转)

    原文链接 : http://www.cnblogs.com/gnuhpc/archive/2013/08/31/3293643.html 1. 多语言 1)检查: opkg list | grep l ...

  8. 狼追兔子问题C模拟解

    说,一只兔子在O点处,它的洞穴在正北20m的B点处,一只狼位于兔子正东33米的A点处,模拟如下追逐问题:狼以一倍于兔子的速度紧盯兔子追击,问兔子到达洞口前是否会被狼逮住? 网上很多人说能被追上,包括类 ...

  9. Core Data Stack学习笔记

    Entity Entities 实体->数据表一个实体可以表示一个数据模型 1> 通过图形化界面可以建立一个模型关系图,可以指定一对多,多对一,多对多的数据关系 -在数据库开发中,少用多对 ...

  10. C#DB2开发问题随记

    最近公司有个小工具需要用到DB2数据库,以前没玩过DB2,觉得应该很容易就实现了. 这个小工具最开始用了Nhibernate来连接DB2,Nhibernate也是第一次用..实在是惭愧啊... 第一次 ...