UML类对象基本关系解析

27 篇文章 0 订阅
2 篇文章 0 订阅

我们平常要使用UML工具画类之间的关系,因此经常会见到依赖、关联、泛化、继承、实现、聚合、组合等概念,那么他们是怎么样的,区别在哪里呢?我在这里整理一下:

  •   依赖

       依赖是指类A要完成一定的功能,必须要类B的帮助,例如使用到类B的方法,而类A和类B之间并没有比较亲密的联系,只是要利用B而已,他们之间的关系是偶然的,临时性的,比较脆弱,体现在代码形式上:类B只需作为类A的方法参数,或者类A直接使用类B的静态方法,而类B不会形成类A的属性

    

   在UML类图关系表示上:

  

      虚线+箭头指向被依赖方,依赖关系好的实践是单向依赖,坏的实践的相互依赖,,千万不要出现双向依赖。

 

  •   关联

     关联是指类A和类B之间存在比较强的关系,与依赖相比,这种关系不是偶然性的,例如人和人的常用住址,就是一种比较强的关系,不是临时的,是长期的,体现在代码层面:类B作为类A的一个属性存在,体现出他们的关系比较紧密。

 

 在UML类图关系上:

 

实线+箭头指向被关联方,关联关系可以是双向,即A和B相互为对方的一个属性。

至于到底是用依赖还是关联关系,主要是看类之间关系的强弱,这个需要在一定的语境中来确定。

  • 泛化(继承)

泛化关系其实就是继承关系,包括接口继承和类继承,这个比较好理解。

  

  在UML关系图上表现:

   

  实线+空心三角箭头指向被继承的基类或接口

  •  实现

      实现关系也很好理解,类实现了一个接口。

UML关系图如下:

 

虚线+空心三角箭头指向被实现接口

 

  • 聚合

 聚合是关联的一种特例,语义上表示整体和个体 概念,表示has-a关系,整体和个体是可以分离的,整体和个体生命周期是独立的,例如,公司和员工,社团和成员,成员可以属于多个不同的整体,在代码层面上,聚合与关联是一样的,因此只能从语义上来区分。

 在UML类图关系如下:

 

  •    组合

组合也是关联的一种特例,语义上表示主体和部分 概念,表示contains-a关系,整体和部分是不可以分离的,他们的生命周期是关联在一起的,主体灭亡,部分也随着灭亡,代码层面上,组合关系与聚合和关联都是一样的,因此也只能从语义上进行区分。

 

 

可见,其实这几个区别还是比较明显的,他们之间的关系基本都体现在语义关系上,代码上的实现可能基本类似,不过有一点,有了语义上的区分,那么在代码层面上尽量体现出语义来,也是一个比较好的做法,例如,代码中最好不要带着hand对象单独到处跑,应该跟着person才是最好的选择。

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
网上选课管理系统是一个用于学生在线选课的平台,通过UML类与对象图可以对其进行分析和设计。 在这个系统中,我们可以识别出以下几个主要的类: 1. 学生类(Student):代表了学生的基本信息,如学号、姓名、专业等。学生类拥有选课和退课的方法,可以通过这些方法进行选课和退课操作。 2. 课程类(Course):代表了所有可选课程的信息,如课程编号、课程名称、授课老师等。课程类包含了学生选课的相关信息,如选课人数、已选人数等。 3. 教师类(Teacher):代表了教师的基本信息,如教师编号、姓名、所教课程等。教师类可以与学生类和课程类进行关联,表示教师与课程之间的关系。 4. 选课记录类(SelectionRecord):记录了学生选课的详细信息,包括学生信息、课程信息、选课时间等。 5. 课程表类(Timetable):用于展示学生已选课程的时间表安排,包括课程时间、地点等。 在这些类之间存在一些关联关系: 1. 学生类与选课记录类之间存在多对多关联关系,一个学生可以选多门课程,一门课程也可以被多个学生选择。 2. 选课记录类与课程类之间存在多对一关联关系,表示一门课程可以被多个学生选择。 3. 教师类与课程类之间存在一对多关联关系,表示一个教师可以教授多门课程。 通过类与对象图的分析,我们可以清晰地了解系统中的类之间的关系,并根据这些关系进行系统的设计和开发。同时,通过类与对象图的建立,我们可以更好地理解系统中不同类的属性和方法,进而实现系统的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值