对象模型中类与类间的关系

类与类之间通常有关联、聚集、泛化(继承)、依赖和细化4种关系

1.关联
      关联表示两个类的对象之间存在某种语义上的联系。
(1) 普通关联
       只要在类与类之间存在连接关系就可以用普通关联表示。普通关联的图示符号是连接两个类之间的直线,如下图所示。
关联是双向的,可在每一个方向上为关联起一个名字(也可不起名字)。为避免混淆,在名字前面(或后面)加一个表示关联方向的黑三角。在表示关联的直线两端可以写上重数(multiplicity),它表示该类有多少个对象与对方的一个对象连接。

2.聚集

聚集也称为聚合,是关联的特例。聚集表示类与类之间的关系是整体与部分的关系。使用的“包含”、“组成”、“分为……部分”等字句,意味着存在聚集关系。有共享聚集和组合聚集两种特殊的聚集关系。
(1) 共享聚集
    如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。下图中,一个课题组包含许多成员,每个成员又可以是另一个课题组的成员,则课题组和成员之间是共享聚集关系。一般聚集和共享聚集的关联关系用空心菱形表示。

(2) 组合聚集
    如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失(或失去存在价值了),则该聚集称为组合聚集(简称为组成)。

3.泛化

UML中的泛化关系就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。
在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。
泛化关系指出在类与类之间存在“一般--特殊”关系。泛化可进一步划分成普通泛化和受限泛化。
(1) 普通泛化

    没有具体对象的类称为抽象类。抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为。图示抽象类时,在类名下

附加一个标记值{abstract}。

与抽象类相反的类是具体类,具体类有自己的对象,并且该类的操作都有具体的实现方法。

(2) 受限泛化

给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。预定义的约束有4种:多重、不相交、完全和不完全。这些约束都是语义约束。

多重继承指的是,一个子类可以同时多次继承同一个上层基类,右图中的水陆两用类继承了两次交通工具类。与多重继承相反的是不相交继承,即一个子类不能多次继承同一个基类(这样的基类相当于C++语言中的虚基类)。如果图中没有指定{多重}约束,则是不相交继承,一般的继承都是不相交继承。
完全继承指的是父类的所有子类都已在类图中穷举出来了,图示符号是指定{完全}约束。

不完全继承与完全继承恰好相反,父类的子类并没有都穷举出来,随着对问题理解的深入,可不断补充和维护,这为日后系统的扩充和维护带来很大方便。不完全继承是一般情况下默认的继承关系。

4.依赖和细化

(1) 依赖关系

    依赖关系描述两个模型元素(类、用例等)之间的语义连接关系: 其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。
    在UML的类图中,用带箭头的虚线连接有依赖关系的两个类,箭头指向独立的类。在虚线上可以带一个版类标签,具体说明依赖的种类。

(2) 细化关系

    当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。
    假设两个模型元素A和B描述同一个事物,它们的区别是抽象层次不同,如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。细化的图示符号为由元素B指向元素A的、一端为空心三角形的虚线(注意,不是实线),如下图所示。细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次的模型之间的相关性,常常用于跟踪模型的演变。


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

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

相关文章

记忆讲师石伟华微信公众号2017所有文章汇总(待更新)

17-10-24-不胜光荣的记忆 17-10-26-每日一个超长英文单词(2) 17-10-27-每日一个超长英文单词(3) 17-10-28-每日一个超长英文单词(4) 转载于:https://www.cnblogs.com/bakblog/p/9228096.html

Log4J日志配置详解

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日…

中文编码杂谈

编码问题的例子 在windows自带的notepad(记事本)程序中输入“联通”两个字,保存后再次打开,会发现“联通”不见了,代之以“”的乱码。这是windows平台上典型的中文编码问题。即文件保存的时候是按照ANSI编码&#xff…

Java NIO (十四)NIO 和 IO 的区别和适用场景分析

在研究Java NIO和IO API时,很快就会想到一个问题: 什么时候应该使用IO,什么时候应该使用NIO? 在本文中,我将尝试阐明Java NIO和IO之间的区别,它们的用例以及它们如何影响代码的设计。 ###Java NIO和IO之间的…

面向对象三种模型之间的关系

功能模型指明了系统应该“做什么”;动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;对象模型则定义了做事情的实体。在面向对象方法学中,对象模型是最基本最重要的,它为其他两种模型奠定了基础,人…

android node

pkg install nodejs-current转载于:https://www.cnblogs.com/insight0912/p/9231342.html

springmvc 中@Controller和@RestController的区别

1.Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2.Controller, RestController的不同点 Controller标识一个Spring类是Spring MVC controller处理器 RestController: a convenience annotation that does nothing more …

easyUI 日期控件修改...

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 个人觉得easyUI挺好用的。 它的中文文档地址: http://www.zi-han.net/case/easyui/ 日期本来效果是这样的: 改…

面向对象分析的三个模型与5个层次

在面向对象分析中,主要由对象模型、动态模型和功能模型组成。对象模型是最基本、最重要、最核心的。 面向对象建模得到的模型包含系统的3个要素,即静态结构(对象模型)、交互次序(动态模型)和数据变换(功能模型)。解决的问题不同,这3个子模型…

学成在线--15.课程计划查询

文章目录一.需求分析二.页面原型1.tree组件介绍2.webstorm配置jsx三.API接口1.数据模型2.自定义模型类3.接口定义四.sql语句五.服务器端1.Dao1)Mapper接口2)Mapper映射文件2.Service3.Controller4.测试六.前端1.Api方法2.Api调用1)定义查询课…

团队作业-项目答辩

1. 王书磊 1600802063 http://www.cnblogs.com/wsl-1117/ 刘令斌 1600802017 http://www.cnblogs.com/liulingbin/ 许浩然 1600802066 https://www.cnblogs.com/xuhaoran1/ 成明龙 1600802038 http://www.cnblogs.com/CMLCML/ 2这是我们的效果图. 3.(1)修…

Java构造和解析Json数据的两种方法详解一

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是…

面向对象方法开发的方法

面向对象分析首要的工作,是建立问题域的对象模型。 这个模型描述了现实世界中的“类与对象”以及它们之间的关系,表示了目标系统的静态数据结构。静态数据结构对应用细节依赖较少,比较容易确定。因此,用面向对象方法开发绝大多数…

程序员编程需要多少个小时?

Michael Arrington曾发表一篇博文说,创业者必须加倍的努力工作,甚至不惜趴在办公桌上睡觉,这样才能成功。对此,我并不赞同其观点,我看了很多评论都是关于这样工作会适得其反,不但没有获得成功,相…

事务以及@Transcational注解

文章目录1.事务的概念2.事务的四个特性3.关于Transcational注解的理解4.使用场景5.举例6.编程式事务管理7.相关知识1.事务的概念 事务,是指作为单个逻辑工作单元执行的一系列操作,结果只有成功和失败两种,要么全部成功(全部提交)&#xff0c…

提高代码复用率

由于现在的互联网企业业务比较繁忙,导致产品狗不停地提需求,还总是改来改去,最后留给程序猿的时间少之又少。程序猿也不是吃素的,干脆直接copy一下代码随便搞一下实现功能就行,也谈不上所谓的精心设计了。这样的确是缩…

java 对 redis 的基本操作

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、server端安装 1、下载https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6 2、安装 1)解压…

JsRender 前端渲染模板常用API学习

JsRender 常用API 1. $.templates() $.templates()方法是用来注册或编译模板的,使用的情况有以下几种。 把html字符串编译编译成模板获取使用script标签声明的模板,并返回一个模板对象把html字符串或者在script标签中声明的模板注册成命名模板获取之前就…

状态图

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。

我身边的手机应用开发者

手机应用火了,我身边的一位朋友(A君)也投身到开发者行列,不过他还算聪明并没有辞掉工作专做手机应用软件开发。 其原因在于他们领导打算做一款自己的应用软件,正当A君愁到底是做IOS平台还是Android平台的时候,领导说:…