UML九种图-包图、类图

一、包

(一)相关概念:

1、包:

一个包=一层=一个命名空间=一个文件夹

2、包的命名:

简单名:王老二

路径名:中国.河北省.廊坊市.廊坊师范学院.信息技术提高班.九期班.王老

3、可见性:

+公有;#保护;—私有

(二)包之间的关系:

引入和按访问依赖:

解析:百家讲坛邀请:中国.河北省.廊坊市.廊坊师范学院. 信息技术提高班.九期班.王老二  来讲课

(三)设计包的原则:

1、重用等价原则:

把类放入包中时,应考虑把包作为可重用的单元。

2、共同闭包原则:

把那些需要同时改变的类,放在同一个包中。

3、共同重用原则:

把一起使用的类,放在同一个包中。

4、非循环依赖原则:

包之间的依赖关系不要形成循环。

二、类Class

(一)相关概念:

1、类class:

类是对一组具有相同属性、操作、关系和语义的对象的抽象,面向对象系统组织结构的核心。类和对象表示现实世界,用消息和方法来模拟现实世界的核心思想。

2、抽象类(abstract class)

抽象类是一种不能被直接实例化的类。

抽象类是不完整的,并且它只能用作基基类

3、关联类(association class)

关联类既是关联也是类,它不仅像关联连接两个类,而且还可以定义一组属于关系本身的特性。

问:为什么使用关联类?

答:面向对象建模中存在这样的问题:两个类之间存在多对多的关系,有些属性不容易归到某一个类中。从图中可以看出Job类是即是一个关联关系也是一个类,是为了描述类Person与类Company之间的关联关系的。

解析:Person类和Company类因为工作的缘故而存在关系。要建模Person和Company之间的这种工作关系,很重要的一个内容是工作岗位和这一岗位的工资。如果没有关联类,那么将工资这一属性放在Person类或是Company类都不合适。那很自然,这一属性应当放在关联关系上。相反,如果不适用关联类的话,Person类的属性中应该包含Company,Company类的属性中也应该包含Person,从而造成了数据冗余的现象。所以,从另一个角度来讲,使用关联类目的是解耦合。

这一点也让我们联想到:数据库三范式中消除部分依赖、传递依赖。

(二)类之间都有哪些关系?

1、泛化(generalization):

泛化是指一般元素和特殊元素之间的分类关系

2、关联(association)

模型元素间的一种语义联系,它是对具有共同的结构特性、行为特性、关系和语义的链的描述。

(1)聚合(aggregation)

聚合是一种特殊的关联关系。表示类之间的整体与部分的关系。特征:多了不多,少了不少

在需求描述中的“包含”、“组成”、“分为…部分”等词汇都意味着存在聚合关系。

解析:雁群类是由大雁类组成的,但是多一只大雁对雁群没有影响,少一只大雁对雁群也没有影响。仍然是雁群,不会变成烧鸡。

(2)组合(composition)

组合是一种特殊形式的关联关系,组合关系中的整体与部分具有同样的生命周期。特征:不可分割

解析:大雁类是由翅膀类组成的,即每只大雁都有两个翅膀。两个翅膀是大雁不可分割的一部分。就像是国家的每一寸领土都是中国的一部分一样,是不可分割的组合关系。当然,你可能想到少了一只翅膀的大雁,不还是大雁吗?当然,只是这样子的大雁已经没有办法执行飞行的功能了,因此是一只不完整的大雁,不能称作是大雁。在这里,类应该是一个完整的。不完整的大雁不能称作是大雁。同样,缺少了翅膀的大雁不能被称作是大雁类。

3、实现(realization):

类实现接口

解析:大雁类实现飞接口。

4、依赖(dependency):

表现为函数中的参数(use a)。是一种使用关系y=f(x表示一个类依赖于另一个类的定义,其中一个事物的变化将影响使用该事物的另一事物。因为x变化,所以y才变化。

   

解析:如果王老二要借车,车具有被借的属性,则王老二与车之间是依赖关系。对应到定义里就是,车的改变将影响到使用车的王老二。

在类中,依赖由各种原因引起,如:

一个类向另一个类发消息;

一个类是另一个类的数据成员类型;

一个类是另一个类的某个操作参数类型;

    更为详细的用法请参加《设计模式之UML五种关系与代码的对应关系

三、接口Interface

(一)相关概念

1、接口:

接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

(二)抽象类与接口的差异?

答:接口比抽象类更抽象,主要体现在以下几个方面:

1)继承:类可以实现无限个接口,但仅能单重继承(从一个抽象/其他类继承)从抽象类派生的类仍可实现接口;接口是用来解决多重继承。

2)方法:抽象类可以存在非抽象的方法;接口里面的方法只是一个声明,必须用public来修饰,没有具体实现的方法。

3)成员变量:抽象类中的成员变量可以被不同的修饰符修饰;接口中的成员变量默认的都是静态变量。

4)本质:抽象类是对象的抽象;接口是一种行为规范。

 
 

UML九种图-包图、类图的更多相关文章

  1. UML九种图 之 包图和对象图

    前言     对象图和包图依然是对系统的静态的描写叙述.UML九种图加上包图,事实上是十幅图. 包图     1.构成           2.包中的元素      类.接口.用例.构件.其他包等.( ...

  2. UML九种图 之 用例图和类图

    前言     近期写UML文档,看视频的时候感觉掌握的还能够,当真正写文档的时候才发现不是一件easy的事.写文档自己又翻开自己的笔记看了一遍又一遍. 以下就给大家介绍一下我画的几张图: 用例图   ...

  3. 浅谈UML——九种图(一)

    前言 学UML将近两个星期了,对UML有了一定的了解,学过的没学过的都知道UML中最最最核心的部分要数那九个图了.浅谈UML九种图. 实例 1.用例图: 什么是用例?描绘一个系统外在可见的需求情况,是 ...

  4. 解析UML九种图

            UML作为设计工具,重在实践上,而这就离不开九种图了.绘图是在看完视频以后进行的,刚開始绘图的时候脑袋懵懵的,不知道该从哪下手,于是就在绘图之前再次的学习了一下这九种图和四种关系.理了 ...

  5. 【转】浅谈UML的概念和模型之UML九种图

    原文地址:浅谈UML的概念和模型之UML九种图 目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图.本文我们重点讲解UML每种图的 ...

  6. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  7. UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  8. 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实

    2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  9. 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程

    1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

随机推荐

  1. 完整具体解释GCD系列(二)dispatch_after;dispatch_apply;dispatch_once

    原创Blog,转载请注明出处 本文阅读的过程中,如有概念不懂,请參照前专栏中之前的文章,假设还有疑惑,请留言. 这是我关于GCD专栏的地址 http://blog.csdn.net/column/de ...

  2. FZU操作系统课程实验 实验一

    实验1 [实验名称]:并发程序设计(实验1) [实验目的]:掌握在程序中创建新进程的方法, 观察并理解多道程序并发运行的现象. [实验原理]:fork():建立子进程.子进程得到父进程地址空间的一个复 ...

  3. 解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the system administrator

    原文:解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the syste ...

  4. OpenGL入门【1 高速入门】

    // OpenGL.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include &l ...

  5. monkey源码分析之事件注入方法变化

    在上一篇文章<Monkey源码分析之事件注入>中,我们看到了monkey在注入事件的时候用到了<Monkey源码分析番外篇之Android注入事件的三种方法比较>中的第一种方法 ...

  6. Wowza流媒体Live直播和VOD点播配置实战-attach

    Wowza是当今可以说最流行的流媒体服务器之一,近来因为需要搭建相应的服务器,但又不想用camera等作真实的直播,所以想办法用媒体文件转换成直播流再提供给Wowza进行直播.这里把该设置步骤以及设计 ...

  7. How to:installshield安装包怎样才能出现选择路径的界面?

    原文:How to:installshield安装包怎样才能出现选择路径的界面? 这个问题新手问的很多,installshield的安装包默认设置下选择路径的界面藏在Custom安装类型下.在做完安装 ...

  8. 一淘搜索网页抓取系统的分析与实现(3)—scrapy+webkit &amp; mysql+django

    图 scrapy+webkit: 如结构图③. scrapy不能实现对javascript的处理,所以须要webkit解决问题.开源的解决方式能够选择scrapinghub的scrapyjs或者功能更 ...

  9. jQuery圆形统计图实战开发

    今天我给大家介绍一款圆形统计图circliful,它基于HTML5的画布和jQuery,无需使用图像轻松实现圆形统计图,而且有很多属性设置,使用起来非常方便. 首先我们需要将jquery库文件和jqu ...

  10. HDU 5185 Equation (DP)

    题目:LINK 题意:求满足题目要求的x序列的种类数. 能够发现符合条件的序列去重后是一个0, 1, ..., k的连续序列(k满足k*(k+1)/2 <= n) ,则这个去重后的序列长度最长为 ...