类图详解

  阅读本文前请先阅读:UML简单介绍—类图这么看就懂了

1、泛化关系

  一个动物类:

 /**
* 动物类
*/
public class Animal { public String name;//名字
public int age;//年龄 public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

  属性的表示方式为:【可见性】【属性名称】:【类型】={缺省值,可选}

  方法的表示方式为:【可见性】【方法名称】(【参数列表】):【类型】

  如下:

  子类Dog:

 public class Dog extends Animal{

     private String sound = "汪汪";//声音

     protected void sleep(){
System.out.println("睡四个小时");
} public String getSound() {
return sound;
}
}

  子类Cat:

 public class Cat extends Animal {

     private String sound = "喵喵";//声音

     protected void sleep(){
System.out.println("睡六个小时");
} public String getSound() {
return sound;
}
}

  类图表示如下:

2、实现关系

  动物接口:

 /**
* 动物接口
*/
public interface Animal { public void getName();
public void getAge();
}

  实现类Dog:

 public class Dog implements Animal{

     @Override
public void getName() {
System.out.println("我是小汪");
} @Override
public void getAge() {
System.out.println("我4岁了");
}
}

  实现类Cat:

 public class Cat implements Animal {

     @Override
public void getName() {
System.out.println("我是小喵");
} @Override
public void getAge() {
System.out.println("我3岁了");
}
}

3、依赖关系

  人过河要依赖船,鱼依赖水,动物依赖水、食物和空气等,这些都是依赖关系。

  船类:

 public class Ferry {

     public void move(){

     }
}

  

  人依赖船,船类作为参数、属性被类Person在某个method方法中使用。

 public class Person {

     /**
* 人过河要使用船(依赖船)
*/
public void boating(Ferry ferry){
ferry.move();
}
}

4、关联关系

  关联是一种拥有关系,人拥有手机。被拥有者作为拥有者的成员变量存在。

  被拥有着:

 public class Mobile {

     /**
* 手机有看视频功能
*/
public void watchTV(){ }
}

  拥有者:

 public class Person {

     //被拥有者成员变量
private Mobile mobile; /**
* 人拥有手机可以看视频
*/
public void watchTV(){
mobile.watchTV();
}
}

5、聚合关系

  聚合是整个与个体的关系,此时整体和部分是可以分离的。作为一个程序员,每天都和电脑打交道,我们以电脑为例,假设电脑有显示器、主机、键盘组成的。

 /**
* 显示器
*/
public class Monitor {
}
 /**
* 主机
*/
public class Host {
}
 /**
* 键盘
*/
public class keyboard {
}
 import javax.swing.*;

 public class Computer {

     private Monitor monitor;//显示器
private Host host;//主机
private KeyStroke keyStroke;//键盘 public Computer(Monitor monitor, Host host, KeyStroke keyStroke) {
this.monitor = monitor;
this.host = host;
this.keyStroke = keyStroke;
} public void program(){
System.out.println("开始编程");
}
}

6、组合关系

  组合关系:是整体与部分的关系,但部分不能离开整体而单独存在。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。比如大雁有两个翅膀,雁翅无法脱离大雁而单独生存。

 /**
* 大雁
*/
public class WildGoose { private Wing wing;//翅膀 public WildGoose(Wing wing) {
wing = new Wing();
}
}
 /**
* 翅膀
*/
public class Wing {
}

  

总合实例:

  一个动物类,动物依赖氧气、水、食物;

  鸟类继承动物,是泛化关系;

  鸟类和翅膀是组合关系;

  大雁和鸭继承鸟类,是泛化关系;

  大雁实现飞行接口,和雁群是聚合关系;

  唐老鸭继承鸭类,是泛化关系,实现讲话接口;

  

  

UML简单介绍—类图详解的更多相关文章

  1. UML简单介绍—类图这么看就懂了

    如何看懂类图 1.类图简介 描述类的内部结构和类与类之间的关系,是一种静态结构图. 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关 ...

  2. UML类图详解_关联关系_一对多

    对于一对多的示例,可以想象一个账户可以多次申购.在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了. 下面我们来看一个“一对多” ...

  3. UML类图详解_关联关系_多对一

    首先先来明确一个概念,即多重性.什么是多重性呢?多重性是指两个对象之间的链接数目,表示法是“下限...上限”,最小数据为零(0),最大数目为没有设限(*),如果仅标示一个数目级上下限相同. 实际在UM ...

  4. UML 类图详解

    转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187 可以参考:http://www.uml.org.cn/oobject/2012 ...

  5. UML类图详解_泛化关系

    泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h #include <cstdlib> ...

  6. UML类图详解

    下面是类图的实例: (注:飞翔接口那里应为空心三角形) UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’):依赖:虚线+箭头(动物和空气的关系):关联:实线+箭头(企鹅需要知道气候才迁移 ...

  7. UML类图详解_组合关系

    组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力.一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭.另外,外界也不能直接与 ...

  8. UML类图详解和示例

    ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription UML类图概述 什么是UML ...

  9. UML类图详解_聚合关系

    结合UML关系,以看台和基金来介绍聚合关系 aggregation,是一种特殊的关联关系,既有关联关系的特质,还独有“整体 —— 部分(whole —— part)”的特质. 也就是说,用之前的关联关 ...

随机推荐

  1. Python基础之第三方库gevent安装

    安装gevent库: 想要安装gevent库,我们需要确定pip版本: 使用 pip3 list: 我们可以发现pip版本为19.3.1,如果你们的pip版本不是最新版可以使用命令python -m ...

  2. Windows下创建Python虚拟环境的两种方法:

    在实际的项目开发中,我们会根据自己的需求去下载各种相应的框架库,但是每个项目可能使用的库不一样,或者版本不一样等等等.为了避免这些因素对我们的项目造成一些不必要的影响,我们可能需要来回的切换或者装卸等 ...

  3. Tomcat下载安装并部署到IDEA(附带idea两种热部署设置方法)

    目录 Tomcat下载教程 Tomcat安装教程 Tomcat热部署到IDEA idea两种热部署设置方法 使用Idea的时候,修改了代码,需要反复的重启Tomcat,查看效果,是不是贼烦?还记得刚上 ...

  4. 数据库Oracle函数之单行函数的介绍

    函数介绍: 函数:是数据库产品中提供的能够处理查询结果的方法. 函数能够用于下面的目的: • 执行数据计算 • 修改单个数据项 • 格式化显示的日期和数字 • 转换列数据类型 • 函数有输入参数,并且 ...

  5. openlayers4 入门开发系列结合 echarts4 实现统计图(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  6. Python3 函数小练习

    函数小练习 第一题 现有文件info.txt, 其内容如下: alpha male 18 1000 bravo male 28 2000 charlie female 38 3000 delta fe ...

  7. 【React】383- React Fiber:深入理解 React reconciliation 算法

    作者:Maxim Koretskyi 译文:Leiy https://indepth.dev/inside-fiber-in-depth-overview-of-the-new-reconciliat ...

  8. 【Canvas】311- 解决 canvas 在高清屏中绘制模糊的问题

    点击上方"前端自习课"关注,学习起来~ 一.问题分析 使用 canvas 绘制图片或者是文字在 Retina 屏中会非常模糊.如图: 因为 canvas 不是矢量图,而是像图片一样 ...

  9. 《吊打面试官》系列-ConcurrentHashMap & HashTable

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和 ...

  10. SpringBoot电商项目实战 — 前后端分离后的优雅部署及Nginx部署实现

    在如今的SpringBoot微服务项目中,前后端分离已成为业界标准使用方式,通过使用nginx等代理方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多端化服务(多 ...