uml类图

1.关于UML

    回顾20世纪晚期–准确地说是1997年,OMG组织(Object Management Group对象管理组织)发布了统一建模语言(Unified Modeling Language,UML)。

    UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML提出了一套IT专业人员期待多年的统一的标准建模符号。通过使用UML,这些人员能够阅读和交流系统架构和设计规划–就像建筑工人多年来所使用的建筑设计图一样。


2.UML类图

在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency),其中聚合和组合是关联的一种。下面逐一学习。


2.1 泛化(Generalization)

表示”is-a”的关系,是一种继承关系,表示一般与特殊的关系.它指定了子类如何特化父类的所有特征和行为,是对象之间耦合度最大的一种关系。

继承使用: 空心三角形+实线表示

eg1:狮子和猫都是动物的一种。如图1所示:

                                          图1 :动物类的继承关系

eg2:经理、秘书、程序员都是员工的一种,同时销售经理又是经理的一种特殊情况。如图2所示:


                                     图2: 职员类的继承关系


2.2 实现(Realization)

是一种类与接口的关系,表示类是接口所有特征和行为的实现.

实现接口用空心三角形+虚线表示。

eg:鸭子和天鹅都实现了飞翔的接口.如图3所示:


                                                     图3 :接口的继承


2.3 关联(Association)

关联是两个类间的联接。在 UML 2 中,有五种关联,包括接下来要介绍的双向/单向关联,聚合和组合(它们是特殊的关联)以及关联类。


2.3.1 双向关联(Bi-directional (standard) association)

默认情况下,关联是双向的。一个双向关联用两个类间的实线表示。在线的任一端,你放置一个角色名和多重值。多重值的含义如下表1所示:


表示方式

多重性说明

1..1

表示另一个类的一个对象只与该类的一个对象有关系

0..*

表示另一个类的一个对象与该类的零个或多个对象有关系

1..*

表示另一个类的一个对象与该类的一个或多个对象有关系

0..1

表示另一个类的一个对象没有或只与该类的一个对象有关系

m..n

表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

                               表1 :关联关系中多重值的说明


2.3.2 单向关联(Uni-directional association)

在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在。

一个单向的关联的UML表示法:指向已知类的开放箭头的实线。

eg:教师和学生之间是双向关联,一位教师可以教多个学生,同时一名学生可以有多个老师教授。而老师与课程之间则是单向关联,老师可以教多门课程,而课程无需知道这个关系的存在。如图4所示:



                                               图4 :单向与双向关联关系

注意,还有一种特殊的应该算是双向关联的特例的,自生关联或者叫反射关联(Reflexive associations)。类也可以使用反射关联与它本身相关联,当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。

eg :员工类的实例经理管理多名员工,同时员工被一个经理管理。如图5所示:

图5:自身关联


2.3.3 聚合(Aggregation)

   聚合表示”has-a”的关系,是一种特别类型的关联,用于描述整体与局部的关系。

  聚合较强于一般关联,但是它是一种不稳定的包含关系,部分类 的生命周期可以独立于整体类 的生命周期。如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。

UML表示法:空心菱形 + 实线 + 箭头。

eg:公司和员工的聚合关系,如图6所示:

 

图6 :公司与员工的聚合关系


2.3.4组合(Composition)

组合表示”contains-a”的关系,也是描述是整体与部分的关系。但它是一种强烈的包含关系,组合类负责被组合类的生命周期,子类实例的生命周期依赖于父类实例的生命周期,表现为部分不能脱离整体存在。如公司和部门的关系,没有了公司,部门也不能存在了。

UML表示法:实心菱形 + 实线 + 箭头。

eg:公司与部门的组合关系,如图7所示:

图7:公司与部门的组合关系


2.3.5 关联类(Association class)

关联类是一个拥有关联和类特性的模型元素。关联类既是类也是关联,它有着关联和类的特性,可以看作是一个拥有关联特性的类。通过关联类可以向关联添加属性或者操作。

eg : 公司与员工之间是通过工作关系来关联到一起的,如图8所示:

图8:公司与员工之间的工作类

关联类理解起来稍嫌麻烦,可以参考 关于关联类的讨论摘抄或者:英文教程


2.4 依赖(Dependency)

依赖表示”uses-a”的关系,是一种使用的关系,即一个类的实现需要另一个类的协助或者说需要另一个类的服务。依赖具体表现为局部变量、方法的参数或者对静态方法的调用。注意,不使用双向的互相依赖。

eg1 :比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作,如图9所示:

 

图9:人要依赖螺丝刀工具

eg2:人生活需要依赖氧气和水,如图10所示:


                                                                                                            图10: 人类依赖氧气和水


3.类间关系的比较

3.1聚合和组合的区别

   这两个比较难理解,重点说一下。聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。


3.2各种关系耦合度的比较

 类间的几种关系的耦合度强弱比较为:

实现 > 组合 > 聚合 > 关联 > 依赖 。

下面给出包含这几中关系的一个实例,该实例改编自《大话设计模式》,如图11所示:


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值