JAVA入门级教学之(类之间究竟有哪几种关系呢)

关于计算机的一些专业名词的解释

1.泛化关系:

  • 什么是泛化关系呢?
  • 简单来说就是一个子类继承父类,这就是一个泛化关系
  • 图例:

 

  •  或者说一个子接口继承父接口,这也是一个泛化关系
  • 图例:

 2.实现关系:

  • 实现关系其实很简单:一个类重写了接口类 【implements实现】
  • 图例:

 

3.关联关系:

  • 之前我们学习过黄晓明和baby的夫妻示例,要想两个类之间存在关联,并不是要继承另一个类,
  • 而是在其中一个类中添加一个类的引用地址,通过这个引用地址建立联系

举个栗子:

  • 新建一个Friend类:
public class Friend{//属性String name;String addr;String tel;//构造方法Friend(String addr){this.addr=addr;}
}
  •  新建一个Me类:
public class Me{//属性String name;//在当前类中含有其它类的引用Friend f;//Me和Friend就是关联关系//在当前对象中含有指向其它对象的引用//构造方法初始化,和普通的属性初始化道理一样Me(Friend f){this.f=f;}}
  •  新建一个测试类:
public class Test01{public static void main(String[] args){Friend f=new Friend("中国");//建立关联关系Me m=new Me(f);//通过m可以获得朋友的住址System.out.println(m.f.addr);}}

 

 

4.聚合关系

新建一个Student类:

package com.lbj.javase23;public class Student {int name;
}

新建一个教室类:

package com.lbj.javase23;import java.util.List;/*** * ClassRoom就是整体* * 什么是聚合关系* * @author 14811**/
public class ClassRoom {//ClassRoom和List集合属于关联关系,因为是同级别的//ClassRoom和元素Student属于聚合关系,一个是整体,一个是部分,聚合关系就是整体和部分的关系List<Student>stus;//Sutdent就是整体//聚合关系:学生走了还可以换一个班,班级不存在了学生还在//整体不依赖部分,部分也不会依赖整体//整体无法决定部分的生命周期//UML图的空心菱形代表的是聚合关系
}

UML图示意:

 

5.合成关系

public class 人{//人和List是关联关系
//人和四肢是合成关系,人是整体,四肢是部分
//合成关系和聚合关系是相似的,区别的地方在于:整体和部分是紧密联系的
List<四肢>s;}

UML图示意:(实心菱形指向)

 

6.依赖关系:

public class Test{//类中有局部变量、形参、和方法的返回值类型public void m1(){//局部变量User u=new User();//依赖关系}}
class User{}

UML图示意:

 

 

补充:这个我认为写的更好更全面

在 UML 2.0 的 13 种图中,类图(Class Diagrams)是使用频率最高的 UML 图之一。类图描述系统中的类,以及各个类之间的关系的静态视图,能够让我们在正确编写代码之前对系统有一个全面的认识。类图是一种模型类型,确切地说,是一种静态模型类型。类图表示类、接口和它们之间的协作关系,用于系统设计阶段。

类、接口和类图

1. 类

类(Class)是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础,具有封装性、继承性和多态性等三大特性。在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示。

(1) 类名(Name)是一个字符串,例如,Student。

(2) 属性(Attribute)是指类的特性,即类的成员变量。UML 按以下格式表示:

[可见性]属性名:类型[=默认值]

例如:-name:String

注意:“可见性”表示该属性对类外的元素是否可见,包括公有(Public)、私有(Private)、受保护(Protected)和朋友(Friendly)4 种,在类图中分别用符号+、-、#、~表示。

(3) 操作(Operations)是类的任意一个实例对象都可以使用的行为,是类的成员方法。UML 按以下格式表示:

[可见性]名称(参数列表)[:返回类型]

例如:+display():void。

如下所示是学生类的 UML 表示。
 

Student 类
Student 类

类图用 3 个矩形拼接表示,最上面的部分标识类的名称,中间的部分标识类的属性,最下面的部分标识类的方法。

类图中,需注意以下几点:

  • 抽象类或抽象方法用斜体表示
  • 如果是接口,则在类名上方加 <<Interface>>
  • 字段和方法返回值的数据类型非必需
  • 静态类或静态方法加下划线

2. 接口

接口(Interface)是一种特殊的类,它具有类的结构但不可被实例化,只可以被子类实现。它包含抽象操作,但不包含属性。它描述了类或组件对外可见的动作。在 UML 中,接口使用一个带有名称的小圆圈来进行表示。

如下所示是图形类接口的 UML 表示。
 


Graph 接口

3. 类图

类图(ClassDiagram)是用来显示系统中的类、接口、协作以及它们之间的静态结构和关系的一种静态模型。它主要用于描述软件系统的结构化设计,帮助人们简化对软件系统的理解,它是系统分析与设计阶段的重要产物,也是系统编码与测试的重要模型依据。

类图中的类可以通过某种编程语言直接实现。类图在软件系统开发的整个生命周期都是有效的,它是面向对象系统的建模中最常见的图。如下所示是“计算长方形和圆形的周长与面积”的类图,图形接口有计算面积和周长的抽象方法,长方形和圆形实现这两个方法供访问类调用。
 

“计算长方形和圆形的周长与面积”的类图
“计算长方形和圆形的周长与面积”的类图

类之间的关系

UML 将事物之间的联系归纳为 6 种,并用对应的图形类表示。下面根据类与类之间的耦合度从弱到强排列。UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

1. 依赖关系

依赖(Dependency)关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。

在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。如下是人与手机的关系图,人通过手机的语音传送方法打电话。
 

依赖关系的实例
依赖关系的实例

2. 关联关系

关联(Association)关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。

关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。也可以在关联线的两端标注角色名,代表两种不同的角色。

在代码中通常将一个类的对象作为另一个类的成员变量来实现关联关系。如下是老师和学生的关系图,每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联。
 

关联关系的实例
关联关系的实例

3. 聚合关系

聚合(Aggregation)关系是关联关系的一种,是强关联关系,是整体和部分之间的关系,是 has-a 的关系。

聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。

在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。如下是大学和教师的关系图。
 

聚合关系的实例
聚合关系的实例

4.组合关系

组合(Composition)关系也是关联关系的一种,也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 cxmtains-a 关系。

在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。

在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。如下是头和嘴的关系图。
 

组合关系的实例
组合关系的实例

5.泛化关系

泛化(Generalization)关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系,是 is-a 的关系。

在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。在代码实现时,使用面向对象的继承机制来实现泛化关系。例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下所示。
 

泛化关系的实例
泛化关系的实例

6.实现关系

实现(Realization)关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。

在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。例如,汽车和船实现了交通工具,其类图如下所示。
 

实现关系的实例

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

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

相关文章

c 字符串数组_在C++中将字符串转换为char数组

我们许多人遇到了错误‘cannot convert std::string to char[] or char* data type’。例如&#xff1a;Input : string s "geeksforgeeks" ;Output : char s[] { g, e, e, k, s, f, o, r, g, e, e, k, s } ;Input : string s "coding&q…

51C语言编译后执行到一半,“C语言” 读书札记之[再续编译执行]

介绍上一篇a.out(hello&#xff0c;world程序)执行之后发生了什么&#xff1f;这次通过系统硬件和操作做粗略的描述&#xff0c;这样对我们也是有一些帮助的。如果中间若有误&#xff0c;请不吝赐教。从键盘上读取a.out命令当我们打开我们的终端的时候&#xff0c;shell程序会执…

linux 安装mysql8_MySQL 8.0与MariaDB 10.4,谁更易于填坑补锅?

作者介绍贺春旸&#xff0c;凡普金科DBA团队负责人&#xff0c;《MySQL管理之道&#xff1a;性能调优、高可用与监控》第一、二版作者&#xff0c;曾任职于中国移动飞信、安卓机锋网。致力于MariaDB、MongoDB等开源技术的研究&#xff0c;主要负责数据库性能调优、监控和架构设…

JAVA入门级教学之(文档里的is-a、is-like-a、has-a到底是什么意思)

1.is-a&#xff1a;【什么什么是】 描述的是一个继承关系 2.is-like-a&#xff1a;【什么什么像】 描述的是一个接口关系 3.has-a&#xff1a;【什么什么包含】 描述的是一个关联关系

python 字符转义_2500字 字符串专题总结

我的完整施工计划已完成专题&#xff1a;1.我的施工计划2.数值专题这篇是字符串专题总结除了常见的数值型&#xff0c;字符串是另一种常遇到的类型。一般使用一对单引号或一对双引号表示一个字符串。字符串中如果遇到 \ 字符&#xff0c;可能是在做字符转义&#xff0c;所谓的转…

JAVA入门级教学之(异常机制的原理到底是什么)

* 1.异常是什么&#xff1f; * * 第一&#xff1a;异常模拟的是现实世界中"不正常的"事件 * * 第二&#xff1a;java中采用"类"的形式去模拟异常 * * 第三&#xff1a;类是可以创建对象的 * * 例如&#xff1…

python修改列表指定位置的_Python 基础教程—列表(1)

Python内置了多种序列&#xff0c;本次讨论&#xff1a;列表。列表是Python提供的容器型数据类型。可变并且有序。可变 - 列表中的每个元素的值可变&#xff0c;列表的长度可变&#xff0c;列表中的顺序可变。(支持增、删、改)有序 - 每个元素可以通过下标来确定位置1、 列表的…

操作系统之(一篇文章让你简单搞定:什么是进程和线程)

文章目录1.为什么引入进程2.进程究竟是什么&#xff1f;进程的定义和属性&#xff1a;3.进程的状态和转换4.什么是进程上下文5.进程的控制和管理6.为什么要引入线程7.线程的概念8.引入线程的好处9.进程和线程的区别1.为什么引入进程 1、我们知道&#xff0c;最早出现的OS系统是…

冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结

一、排序算法说明排序的定义&#xff1a;对一个无序的序列进行排序的过程。输入&#xff1a;n个数&#xff1a;a1,a2,a3,…,an。输出&#xff1a;n个数的排列:a1,a2,a3,…,an&#xff0c;使得a1<a2<a3<…<an。排序的稳定性&#xff1a;相同值的节点相对位置是否会发…

docker 挂载目录_Docker容器数据管理

在Docker容器内部创建的文件默认存储在可写的容器层&#xff0c;容易产生几个问题:当容器不存在时&#xff0c;数据文件不能持久化&#xff0c;同时这些数据文件不方便在容器之外被其他进程使用。当容器运行的时候容器可写层严重依赖宿主机&#xff0c;不能轻易移动这些数据文件…

IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReady

打开AS有时会报这个错&#xff0c;之前没怎么在意&#xff0c;因为完全没影响&#xff0c;但是看起来标红就很难受&#xff0c;总觉得认真有强迫症的程序员才是好的程序员&#xff0c;所以特意查了解决办法&#xff0c;也很简单&#xff0c;就点击Files----->Invalidate and…

java数组有跨类建立对象_必会的 55 个 Java 性能优化细节!一网打尽!

程序员的成长之路互联网/程序员/成长/职场 关注阅读本文大概需要 10 分钟。来源&#xff1a;https://yq.aliyun.com/articles/662001在 Java 程序中&#xff0c;性能问题的大部分原因并不在于 Java 语言&#xff0c;而是程序本身。养成良好的编码习惯非常重要&#xff0c;能够显…

android平板截屏方法,Android 各种截屏方法

1 应用内截屏(无SurfaceView, TextureView)boolean cacheEnable captureView.isDrawingCacheEnabled();captureView.setDrawingCacheEnabled(true);captureView.buildDrawingCache();Bitmap bitmap captureView.getDrawingCache();cache[0] Bitmap.createBitmap(bitmap);cap…

新手操作HTML

一、 首先得学会使用HTML5-API手册&#xff0c;因为HTML的属性有很多很多&#xff0c;如果将这些属性全部记下来的话得不偿失&#xff0c;需要花费大量的时间和经历&#xff0c;因此我们需要学会使用这个帮主文档才能全面而深入的了解HTML&#xff1b; 就像你去找对象一样&am…

nginx 判断手机端跳转_nginx基本功能和工作原理

nginx能做什么反向代理正向代理负载均衡HTTP服务器(包含动静分离)反向代理和正向代理1.正向代理简单的说,我是一个用户,我无法直接访问一个网站,但是我能访问一个代理服务器,这个代理服务器能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内…

Node.js教程-express框架

概述 Express是基于Node.js平台(建立在Node.js内置的http模块上)&#xff0c;快速、开放、极简的Web开发框架。 中文官网 http://www.expressjs.com.cn/。 Github地址&#xff1a;https://github.com/orgs/expressjs。 Express核心特性&#xff1a; 可设置中间件来响应 HTTP…

python猜数字游戏续_python3实现猜数字游戏

本文实例为大家分享了python3实现猜数字游戏的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 需求目标&#xff1a; 需求:猜数字游戏 1: 开始游戏产生一个1~100随机数 2: 用户输入&#xff0c;游戏根据输入值提示大或者小 3: 用户根据提示继续输入&#xff0c;知道猜…

HTML的script标签

在 HTML 页面中插入一段 JavaScript&#xff1a; 这句话可能大家一开始根本不了解JavaScript&#xff0c;是什么&#xff1f; 在我的了解中JavaScript并不是用java语言开发的&#xff0c;人家用的是c语言和另外一种语言的结合体&#xff0c;就像印度和印度尼西亚根本不是同一…

tesseract4.0.0 中文语言包_一份TensorFlow2.0中文教程

近两个月&#xff0c;网上已经出现了大量 TensorFlow 2 0 英文教程。在此文章中&#xff0c;本文为大家推荐一个持续更新的中文教程&#xff0c;以便大家学习。来源&#xff1a;机器之心今年 3 月份&#xff0c;谷歌在 Tensorflow Developer Summit 2019 大会上发布 TensorFlow…

HTML的块级元素和行级元素的标签列表

行内元素列表: <a>标签可定义锚点 <abbr>表示一个缩写形式 <acronym>定义只取首字母缩写 <b>字体加粗 <bdo>可覆盖默认的文本方向 <big>大号字体加粗 <br>换行符号 <cite>引用进行定义 <code>定义计算机代码文…