UML类图解义

小菜:“对了,我时常在一些技术书中看到这些类图表示,简单的还看得懂,有些标记我很容易混淆。要不你给我讲讲吧。”

大鸟:“这个其实多看多用就熟悉了。我给你举一个例子,来看这样一幅图,其中就包括了UML类图中的基本图示法。”

UML类图图示样例

大鸟:“首先你看那个‘动物’矩形框,它就代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。”

大鸟:“然后注意左下角的‘飞翔’,它表示一个接口图,与类图的区别主要是顶端有<<interface>>显示。第一行是接口名称,第二行是接口方法。接口还有另一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了‘讲人话’的接口。”

小菜:“为什么要是‘讲人话’?”

大鸟:“鸭子本来也有语言,只不过只有唐老鸭是能讲人话的鸭子。”

小菜:“有道理。”

 

大鸟:“接下来就可讲类与类,类与接口之间的关系了。你可首先注意动物、鸟、鸭、唐老鸭之间关系符号。”

小菜:“明白了,它们都是继承的关系,继承关系用空心三角形+实线来表示。”

大鸟:“我举的几种鸟中,大雁是最能飞的,我让它实现了飞翔接口。实现接口用空心三角形+虚线来表示。”

class WideGoose : IFly

{

}

 

class Bird : Animal

{

}

 
 

大鸟:“你看企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。我们不去讨论为什么北极没有企鹅,为什么它们要每年长途跋涉。总之,企鹅需要‘知道’气候的变化,需要‘了解’气候规律。当一个类‘知道’另一个类时,可以用关联(association)。关联关系用实线箭头来表示。”

class Penguin : Bird

{

   private Climate climate;

大鸟:“我们再来看大雁与雁群这两个类,大雁是群居动物,每只大雁都是属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合(Aggregation)关系。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分[DPE](DPE表示此句摘自《设计模式》(第2版),详细摘要说明见附录二)。聚合关系用空心的菱形+实线箭头来表示。”

class WideGooseAggregate

{

   private WideGoose[] arrayWideGoose;

}

大鸟:“合成(Composition,也有翻译成‘组合’的)是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样[DPE]。在这里鸟和其翅膀就是合成(组合)关系因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的合成关系用实心的菱形+实线箭头来表示。另外,你会注意到合成关系的连线两端还有一个数字‘1’和数字‘2’,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就用‘n’来表示。关联关系、聚合关系也可以有基数的。”

class Bird

{

   private Wing wing;

   public Bird()

   {

       wing = new Wing();

   }

}

大鸟:“动物几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖于氧气和水。他们之间是依赖关系(Dependency),用虚线箭头来表示。”

abstract class Animal

{

   public Metabolism (Oxygen oxygen,Water water)

   {

   }

}

小菜:“啊,看来UML类图也不算难呀。回想那天我面试题写的代码,我终于明白我为什么写得不成功了,原来一个小小的计算器也可以写出这么精彩的代码,谢谢大鸟。”

大鸟:“吼吼,记住哦,编程是一门技术,更加是一门艺术,不能只满足于写完代码运行结果正确就完事,时常考虑如何让代码更加简练,更加容易维护,容易扩展和复用,只有这样才可以真正得到提高。写出优雅的代码真的是一种很爽的事情。UML类图也不是一学就会的,需要有一个慢慢熟练的过程。所谓学无止境,其实这才是理解面向对象的开始呢。”

哈哈,很好理解,多多学习了!

转载于:https://www.cnblogs.com/HeroBeast/archive/2008/01/23/1050615.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis学习(2):基本设置和核心配置

1创建一个简单的java项目 2导入jar包 建立一个lib包 链接&#xff1a;https://pan.baidu.com/s/1eJ7xXF2qvUbgde2T--Sphg 提取码&#xff1a;3bgy 加入junit的包 右键项目---build path---add library 4导入配置文件 log4j.properties ### ### log4j.rootLogger ERROR,s…

mybatis学习(3):映射文件的配置和接口创建

配置文件 db.properties jdbc.drivercom.oracle.jdbc.OracleDriver jdbc.urljdbc:oracle:thin:127.0.0.1:1521:wiicare jdbc.usernamewiicare jdbc.passwordMdsd123 log4j.properties ### ### log4j.rootLogger ERROR,stdout### ¡ ### log4j.appender.stdout org.ap…

mybatis学习(4):工具类和实体类的创建

配置文件 db.properties jdbc.drivercom.oracle.jdbc.OracleDriver jdbc.urljdbc:oracle:thin:127.0.0.1:1521:wiicare jdbc.usernamewiicare jdbc.passwordMdsd123 log4j.properties ### ### log4j.rootLogger ERROR,stdout### ¡ ### log4j.appender.stdout org.ap…

windows下解决pip安装出错问题

今天使用pip install xxx突然报错&#xff0c;找了好久全是在linux上的解决方案&#xff0c;好不容易找到一个windows下的解决方案&#xff0c;所以将他记录下来。 解决方案&#xff1a; cmd中敲命令&#xff1a;python -m ensurepip 得到pip的setuptools 然后就可以用&#xf…

检测ID卡的输入或者是其它卡的输入。

由于ID卡或者是其它的一些不同类型的卡&#xff0c;它们只是负责模拟键盘的录入&#xff0c;但是&#xff0c;它们在录入的时候没有一个很好的标识位可以让我们知道当前输入的是客户手工录入的字符串还是ID卡读入的字符串&#xff0c;我相信&#xff0c;很多人在做这样的开发时…

mybatis学习(6):IntelliJ IDEA 如何创建一个普通的 Java 项目,及创建 Java 文件并运行

一、创建 Java 项目&#xff1a; 1、打开 IDEA 软件&#xff0c;点击界面上的 Create New Project 2、出现以下界面&#xff0c;选中 Java&#xff0c;然后选择 JDK&#xff0c;最后点击 Next&#xff0c;进行下一步&#xff08;我的是 jdk1.8&#xff09; 3、这里是选择生成项…

第一百五十期:Java程序员必备:异常的十个关键知识点

总结了Java异常十个关键知识点&#xff0c;面试或者工作中都有用哦&#xff0c;加油。异常是指阻止当前方法或作用域继续执行的问题。比如你读取的文件不存在&#xff0c;数组越界&#xff0c;进行除法时&#xff0c;除数为0等都会导致异常。 前言 总结了Java异常十个关键知识点…

学用 TStringGrid [1] - ColCount、RowCount、Cells

本例功能:1、获取 StringGrid 的行数、列数;2、给单元赋值.运行效果图://示例代码: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, Grids;typeTForm1 class(TForm)StringGrid1: TStringG…

第一百五十一期:最新计算机技能需求排名出炉:Python仅排第三,第一你猜得到吗?

除了编程语言之外&#xff0c;要想找一份计算机相关的工作&#xff0c;还需要很多其他方面的技能。最近&#xff0c;来自美国求职公司 Indeed 的一份报告显示&#xff1a;在全美工作技能需求中&#xff0c;数据库语言 SQL、编程语言 Java 分列前两位。 除了编程语言之外&#x…

歌谣致学习编程的你们

目录 致学习编程的你们&#xff0c;希望对大家有所帮助&#xff0c;纯属个人学习经验 前言 学习路线 个人网课学习平台 个人推荐两款软件 个人对于参加培训的看法 个人博客写作 同事同学资源 总结 前言 我是歌谣&#xff0c;一个致力于成为一名优秀的技术革新人员。高…

开发者福音!面向Web场景的云开发服务正式开放!

导 语 继支持小程序开发之后&#xff0c;云开发也支持Web使用啦&#xff01;开发者们可以使用云开发提供的云端能力&#xff0c;直接开发网站应用&#xff0c;如PC端网页、公众号中的网页等。由此开发者可以在网站应用中借助云函数实现业务逻辑&#xff0c;通过与云数据库、对象…

PetShop4.0--转载

以下文章转载于http://www.cnblogs.com/dragonlhf/archive/2006/07/30/463110.html petshop是微软推出的企业级程序架构随着asp.net 2.0推出了petshop4.0&#xff0c;正好这几天没有事&#xff0c;研究一下&#xff0c;学习一下2.0的新特性&#xff0c; 它包括…

mybatis学习(7):Windows下安装MySQL详细教程

1、安装包下载。 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 点击下载之后&#xff0c;可以选择注册Oracle账号&#xff0c;也可以跳过直接下载。 下载完成后&#xff0c;选择一个磁盘内放置并解压。 2 安装教程 &#xff08;1&#xff09;配置环境变量 变量…

[NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL

1. Motivation 在Transformer-XL中&#xff0c;由于设计了segments&#xff0c;如果仍采用transformer模型中的绝对位置编码的话&#xff0c;将不能区分处不同segments内同样相对位置的词的先后顺序。 比如对于$segment_i$的第k个token&#xff0c;和$segment_j$的第k个token的…

配置文件 web.config 的讨论

可以直接修改&#xff0c;修改后立即生效&#xff0c;无需重新编译&#xff0c;可以把数据连接对象直接加到web.config 中&#xff0c;从而方便修改&#xff0c;如果写在类中的话&#xff0c;修改后需要重新编译1、所有的配置都必须放在<configuration></configuratio…

mybatis学习(8):The server time zone value '???ú±ê×??±??' is unrecognized or represents more

【报错信息】 【百度翻译】 服务器时区值???????无法识别或表示多个时区。如果要利用时区支持&#xff0c;必须配置服务器或JDBC驱动程序&#xff08;通过ServerTimeZone配置属性&#xff09;&#xff0c;以使用更具体的时区值 【解决方法】 数据库连接配置conf.xml(在原…

mybatis学习(9):mybatis连接mysql数据库

首先本地安装一个mysql数据库 修改账号密码 我的是root 123 并用navicate测试连接 数据库为mybatis 表名为users 我们看一下目录结构 直接上代码 user类 package com.edu.hpu.domain;/*** author Administrator*user表所对应的实体类*/ public class User {//实体类的属…

C#创建xml文件

View Code 1 XmlDocument doc new XmlDocument();2 XmlDeclaration dec doc.CreateXmlDeclaration("1.0", "GB2312", null);3 doc.AppendChild(dec);4 //创建一个根节点&#xff08;一级&#xff09;5 …

推荐几个.NET开源图表组件 [转]

转自&#xff1a;http://blog.csdn.net/liujien/archive/2005/10/03/494509.aspx推荐几个.NET开源图表组件&#xff0c;希望大家发行有其它的可以添加一下&#xff0c;说明&#xff1a;因为没有记录在哪里下载&#xff0c;所以大部分只能让大家亲自搜索一下&#xff1a; &#…

MapReduce原理与设计思想

简单解释 MapReduce 算法 一个有趣的例子 你想数出一摞牌中有多少张黑桃。直观方式是一张一张检查并且数出有多少张是黑桃&#xff1f; MapReduce方法则是&#xff1a; 给在座的所有玩家中分配这摞牌让每个玩家数自己手中的牌有几张是黑桃&#xff0c;然后把这个数目汇报给你你…