在学习过Java面向对象之后,老师几乎都会提到类与类之间的关系;类之间的关系有五种:继承、依赖、关联、聚合、组合.在UML绘制图的过程中我们也要使用这五种关系图,下面将个人前段时间上课所记录笔记供大家学习,希望有所收获。
*1、关联 Association 关联指的是类之间的引用关系。这是实体域对象之间最普遍使用最广泛的一种关系。关联可分为一对一、一对多和多对多关联
案例:
Customer(客户)对象与Orders(订单)对象之间就存在着一对多的关联关系,一个Customer(客户)可以有多个Orders(订单),而一个Orders(订单)只能属于一个Customer(客户)。显然客户与订单之间存在着一对多的关系,反之订单与客户之间存在着多对一的关系。
那么对于java中的类到底怎么实现一对多与多对一得关联呢?
答:如果类Customer与Orders关联,那么第一种方式:在Customers(客户)类中定义集合Orders(订单)类的对象作为Customer(客户) 类的一个属性.这样就解决了Customer类与Orders类之间的一对多的关系了.具体的代码如下:
package redarmy_chen.edu;
import java.util.HashSet;
import java.util.Set;
public class Customer {
/** 客户的ID */
private int id;
/** 客户的名称 */
private String name;
/** 客户的邮箱 */
private String email;
/** 所有与客户Customer对象关联的Order对象 */
private Set<Orders> allOrders = new HashSet<Orders>();
/**默认的构造器*/
public Customer() {
}
/**完整的构造器*/
public Customer(int id, String name, String email, Set<Orders> allOrders) {
this.id = id;
this.name = name;
this.email = email;
this.allOrders = allOrders;
}
/**下面是对应私有属性的set get方法 */
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Set<Orders> getAllOrders() {
return allOrders;
}
public void setAllOrders(Set<Orders> allOrders) {
this.allOrders = allOrders;
}
}
以上就构成了Customer类到Orders类的一对多关联。关联的EA图如图1.1所示
图1.1
同样也可以建立从Orders类到Customer类的关联,一个Orders类的对象只能对应一个Customer的对象,因此在Orders类中定义一个Customer对象,来存放该订单属于哪个客户。这样就可实现java类中的多对一的关系了.具体代码如下:
package redarmy_chen.edu;
public class Orders {
/** Orders订单对象的序号ID */
private int id;
/** Orders订单对象的编号 */
private String orderNumber;
/** Orders订单对象的价格 */
private double price;
/** 与Orders对象关联的Customer对象 */
private Customer customer;
public Orders() {
}
public Orders(int id, String orderNumber, double price, Customer customer) {
this.id = id;
this.orderNumber = orderNumber;
this.price = price;
this.customer = customer;
}
/** 下面是对应私有属性的set get方法 */
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
以上就构成了Orders类到Customer类的多对一的关联。关联的EA图如1.2图所示:
图1.2
同过以上的讲解我们又可以把关联分为单向关联和双向关联
a、单向关联:仅仅建立从Customer到Orders的一对多的关联,即仅仅在Customer类中定义allOrders集合,或者仅仅建立从Orders到Customer的多对一的关联,即仅仅在Orders类中定义customer属性(参考以上两个图的结果)。
b、双向关联:即建立从Customer到Orders的一对多的关联,又建立从Orders到Customer的多对一的关联。如图1.3所示:
图1.3
*2、依赖 Dependency 依赖指的是类之间的访问关系。如果类A访问类B的属性或方法,或者类A负责实例化类B, 那么可以说类A依赖类B
和关联关系不同,无需把类B定义为类A的属性
案例1:在原有的Customer类的基础之上,我们再创建一个CustomerOper的类,此类完成向数据库表中插入一条Customer(客户)记录.代码如下:
package redarmy_chen.edu;
public class CustomerOper {
/**在此方法中我们使用到Customer类对象并使用此对象的属性或者方法*/
public boolean insert(Customer customer){
/**在此方法中省略了插入数据库实现的方法,如果学员有兴趣可以自己实现*/
return false;
}
}
以上就构成了CustomerOper类到Customer类的依赖关系。依赖的EA图如1.4图所示:
图1.4
案例2:在原有的Customer类的基础,创建CreateCustomer类,此类负责创建一个Customer类的实例.代码如下:
package redarmy_chen.edu;
publicclass CreateCustomer {
/**在此负责创建一个Customer的实例并返回*/
public Customer loadCustomer(){
/**具体实现方法省略 */
return null;
}
}
以上就构成了CustomerCreate类到Customer类的依赖关系。依赖的EA图如1.5图所示:
此外,软件应用中上层的类总是依赖下层的类或接口.比如在业务逻辑层的类依赖持久化层的类或接口。
总结:谁使用了谁,谁负责创建谁=è谁就依赖谁。
*3、聚合 Aggregation 聚集是关联关系的一种特例聚集指的是整体与部分之间的关系 他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;例如:人与手就是聚集关系.由于聚集关系比较简单,通过图1.6所示:
*4、组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;如图1.7所示
*5、一般化 Generalization 一般化值得是类之间的继承关系在学习面向对象的时候老师都会重点讲解:下面给出EA图的绘制方法如图1.8所示
以上内容归本人原创,版权归本人所有不得随意转载,如有问题请发送邮件到redarmy_chen@qq.com
分享到:
相关推荐
1. **日期格式化与解析**:通常,工具类会提供`format()`和`parse()`方法,用于将日期转换为字符串(例如"yyyy-MM-dd HH:mm:ss"格式)和将字符串解析回日期对象,这有助于在输出日志、存储或交换数据时保持一致性。...
映射是Hibernate的核心功能,它涉及到如何将Java类和数据库表之间建立对应关系,包括实体类、属性与数据库字段的映射,以及关系映射(如一对一、一对多、多对多等)。这里的“心得”意味着作者可能分享了一些实践中...
1. 数据库概念与模型:包括关系模型、ER模型、层次模型和网状模型的基本概念,以及这些模型之间的转换。此外,还会涉及到数据库的分类,如集中式、分布式、云数据库等。 2. SQL语言:SQL是数据库操作的基础,考生...
此外,还会讨论音乐作品的收益分配机制,包括音乐人、制作公司、平台之间的利益关系。 五、行业挑战与机遇 在分析了市场现状后,报告将讨论原创音乐面临的挑战,如侵权行为、市场竞争加剧等,并提出应对策略。同时...
- **定义递推关系**:找出当前状态的dp值与之前状态的dp值之间的关系。 - **初始化dp数组**:设置dp数组的边界条件或特殊情况的值。 - **确定遍历顺序**:按顺序填充dp数组,确保所有的状态都被处理。 - **空间优化*...
通过这个类,开发者可以避免使用XML配置文件,而是直接在Java类上使用注解来声明bean的定义和依赖关系。例如,`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于标记组件,而`@Autowired`则用于...
这涉及到科研投入、科技创新与经济效益之间的逻辑联系,需要考生理解科学研究的长远价值。 6. 经济学概念: 第六题提到了资本的价值构成,这是经济学中的一个重要概念,通常指资本中不变资本(如厂房、设备)和可变...
与surfaceflinger之间的关系、surfaceflinger的工作原理、surface系统中的帧数据传输以及layerbuffer的工作流程。第9章对vold和rild的原理和机制进行了深入的分析,同时还探讨了 phone设计优化的问题;第10章分析了...
解析函数的研究历史非常悠久,它与复变函数理论有着密切的联系,复变函数理论不仅对数学的发展起到了巨大的推动作用,而且在物理学、工程学以及信息科学等多个领域都有广泛的应用。 卢型近于凸函数族是指一类在单位...
在数列问题中,有时会涉及到数列项之间的特殊关系,如等差数列中某些项成等比数列的情况,或是等比数列中某些项之和的情况。通过设置方程求解,可以得到数列的公差、公比或前n项和等信息。 5. 综合应用题: 在高考...
在解析中,文章围绕“文学自觉”的主题,提出了“人的自觉”和“文体的自觉”两个视角,深入探讨了文学作品与创作主体之间的关系。 首先,文章指出“文学自觉”应该从“人的自觉”出发理解。这是因为文学作为一种...
图像如图9所示,P2与R2的关系为P2=1/(2R2)*(U^2-R1^2*U/U),这是功率与电阻之间的一个二次函数关系。 通过这些图像和解析式,我们可以看到,电学图像题目的解题关键在于理解和应用基本的电学定律,如欧姆定律和...
通过对上述案例的具体分析,可以看出在撰写涉及系统开发类的论文时,除了遵循基本的格式要求之外,还需要深入理解所研究领域内的关键技术点,并能够清晰地阐述自己的研究成果。此外,合理安排论文结构,确保各部分...
本文将深入解析该规范中的关键知识点,涵盖视频业务平台架构、接口关系以及详细接口定义等核心内容。 ### 平台组成架构 #### 运营管理平台 运营管理平台负责视频业务的整体运营与管理,包括但不限于用户管理、...
标题 "Ext+Spring+Hibernate(原创送给javaeye朋友)" 暗示了这是一个关于整合Java技术栈的教程或示例项目,其中涉及了三个关键组件:Ext(ExtJS)、Spring和Hibernate。这些技术在企业级Java开发中广泛使用,分别用于...
### ChatGPT技术的长文本生成与阅读理解能力解析 #### 一、ChatGPT技术概述 ChatGPT是一项革命性的自然语言处理技术,由知名的人工智能研究实验室OpenAI开发。这项技术的核心优势在于其出色的长文本生成能力和阅读...
### KXC354计算机图形学与动画:深入解析与技术要点 #### 一、课程概述与目标 《KXC354 计算机图形学与动画》是一门旨在培养学生掌握三维计算机图形学基本原理及其应用的专业课程。通过本课程的学习,学生不仅能够...
### 网络推广原创宝典关键知识点解析 #### 一、概览 《网络推广原创宝典》是由杨涛编著的一本关于网络推广实战经验的书籍,内容涵盖多种网络推广策略和技术,旨在帮助读者掌握有效的网络推广方法。本书不仅适合...
6e-04class-object-package.ppt阐述了如何定义类的属性、操作,以及类之间的继承、关联、聚合等关系。对象图则是类图在特定时刻的实例。 5. 状态图与活动图: 状态图(State Diagram)描述了一个对象在其生命周期...