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 类
类图用 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 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。例如,汽车和船实现了交通工具,其类图如下所示。
JAVA入门级教学之(类之间究竟有哪几种关系呢)相关推荐
- 【Java基础】UML类图及各种线代表的关系含义总结
文章目录 一.UML常见图 1.类图(Class Diagram) 2.对象图(Object Diagram) 3.时序图(Sequence Diagram) 二.UML类图线的概括 1.类(Clas ...
- JAVA入门级教学之(接口)
目录 JAVA入门级教学之(接口) 接口也是一种引用类型,可以等同看做类 1.如何定义接口,语法: 2.接口中只能出现: 3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的 4.接口中没有构造方法 ...
- JAVA入门级教学之(多态)
JAVA入门级教学之(多态) 怎么理解多态:你本身就该喊你爹叫爹,你让你爹叫你爹就是强制认做爹 多态的使用: A a = new D(); D类继承A类,父类型引用指向子类型对象 * 关于java语 ...
- JAVA入门级教学之(面向过程和面向对象的区别)
目录 JAVA入门级教学之(面向过程和面向对象的区别) 面向过程和面向对象的区别: -面向过程: -面向对象: -发展历程: -生命周期中包括: -什么是类: -什么是对象: -软件开发的过程: -重 ...
- JAVA入门级教学之(方法-1)
目录 JAVA入门级教学之(方法-1) 1.以下程序不使用"方法",分析一下程序会存在哪些优缺点? 2.方法的本质:是一段代码片段,可以完成特定功能,可以重复利用 3.注意:方法定 ...
- JAVA入门级教学之(数据类型)
目录 JAVA入门级教学之(数据类型) 1.数据类型的作用是什么? 2.java中的数据类型包括两种: 3.关于基本数据类型: 4.注意:字符串"abc"不属于基本数据类型,属于[ ...
- JAVA入门级教学之(abstract抽象类)
目录 JAVA入门级教学之(abstract抽象类) 1.如何定义抽象类? 2.抽象类无法被实例化 3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的 4.抽象类中可 ...
- JAVA入门级教学之(super关键字)
目录 JAVA入门级教学之(super关键字) 1.super关键字用在构造方法中: 2.语法规则: 3.注意:super();的调用只能放在构造方法的第一行,和this();的调用规则一样 4.通过 ...
- JAVA入门级教学之(package和import)
目录 JAVA入门级教学之(package和import) 1.包又称为package 2.怎么定义package? 3.包名的命名规范: 4.包名要求全部小写,包名也是标识符,必须遵守标识符的命名规 ...
最新文章
- 推荐11个构建和测试API的顶级工具
- 未来耳机可能将成为最强大的健康监护仪
- arima模型 p q d 确定_基于ARIMA预测股指期货价格走势
- Java 类型和数据库类型怎么实现相互映射?
- 赵加雨:追求极致的习惯让我受益匪浅
- 很全的sas基础知识
- DDL 操作数据表 查询表
- cad填充图案乱理石_CAD绘图,缺少填充图案怎么办?900多种自定义图案可解燃眉之急...
- python模拟内置函数all_Python内置all函数详细介绍
- Linux下idea 配置Android SDK
- calendar获取本周一的日期_Java日期时间API系列1-----Jdk7及以前的日期时间类
- Linux的shell中echo改变输出显示样式
- 批量调取接口_批量操作_API 文档_对象存储 - 七牛开发者中心
- sublime text3怎么运行python代码_怎么用sublime text 3搭建python 的ide?
- 最全的Redis安装教程
- Android contacts 的详解
- C++复习筛法求100以内素数
- php怎么用origin打开,[转载]origin 使用技巧 (4)
- 基于信创运维平台,实现国产化网络自动巡检
- 小学计算机管理员总结,计算机管理教学个人总结范文
热门文章
- node.js JS对象和JSON字符串之间的转换
- 跟我学《JavaScript高程3》第一讲,视频课程,课程笔记
- hdu 4588 Count The Carries
- Leetcode--85. 最大矩形
- tcp连接工具_基于Swoole如何搭建TCP服务,你掌握了吗?
- cat命令详解_需要!Linux常用监视和故障排查命令详解
- php 501解决办法,PHP 使用错误处理解析
- python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...
- php 解释语言,php是解释型语言吗
- 如何在linux下yum安装mysql_linux下使用yum安装mysql详解