Java设计模式1——初识UML

1、UML定义:统一建模语言(Unified Modeing Language,缩写UML),它是非专利的第三代建模和归约语言。

2、UML特点:UML是一种开放的方法,用于说明,可视化,构建和编写一个正在开发的面向对象的、软件密集系统的制品的开放方法。通过UML我们对系统可以有最直观的认识,UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
 

3、UML2.2分类:UML2.2中一共定义了14种图示,可分为三大类:
     1、结构式图形:强调的是系统式的建模,包含静态图(类图、对象图、包图)、实现图(组件图、部署图)、刨面图、复合结构图
     2、行为式图形:强调系统模型中触发的事件,包含活动图、状态图、用例图
     3、交互式图形:属于行为式图形子集合,强调系统模型中资料流程,包含通信图、交互概述图、时序图、时间图

4、下面重点介绍UML结构式图形中的类图。
类图用于表示类、接口、实例等之间相互的静态关系,虽然名字叫类图,但是类图中并不只有类。

UML箭头指向:从子类指向父类。(你可能会认为子类是以父类为基础的,箭头应该从父类指向子类,但这样理解是错误的)

记忆技巧:

  • 定义子类时需要通过extends关键字指向父类
  • 子类一定是知道父类的定义,但是父类并不一定知道子类的定义
  • 只有知道对方信息时才能指向对方,所以箭头方向是从子类指向父类。

UML图中实线代表继承、虚线代表实现,如下图:

大雁这个类实现了“飞翔”这个接口,唐老鸭这个类继承自鸭这个父类。

记忆技巧:空心三角箭头代表继承或者实现,实线代表继承,is a关系,扩展目的,不虚,很结实。虚线代表实现,实现某一个接口。

实线代表关联关系,虚线代表依赖关系,如下图:

企鹅和气候是关联关系;

动物依赖氧气和水。

虚线代表依赖关系,通常表示一种使用关系,一个类需要借助另一个类来实现功能,一般是一个类使用另一个类作为参数或者返回值使用。

实线代表关联关系,表示一个类对象和另一个类对象有关联,通常是一个类中有另一个类对象作为属性。

空心菱形代表聚合,实心菱形代表组合。

如上图,大雁聚合到一起行成了大雁群。

翅膀和鸟之间是组合关系。

聚合是整体和局部的关系,两者有着独立的生命周期,是has a的关系,和聚合关系相比,组合关系更加强调两者具有相同的生命周期,是contains-a的关系。

常见数字表达式及含义:假设有A类和B类,数字标记在A类侧。

  • 0..1:代表0或者1个实例,表示在某一个时刻,B可以和0个或者1个A的实例相关
  • 0..*:代表0或者多个实例,表示在某一个时刻,B可以和0个或者多个A的实例相关
  • 1..1:代表有且仅有1个实例,表示在某一个时刻,B有且仅有1个A的实例相关
  • 1:和上面的1..1一样
  • 1..*:至少有一个实例

5、UML时序图

UML时序图是显示对象之间交互的图,这些对象是按时间顺序排序的,时序图中包括建模元素有对象、生命线、控制焦点、消息等。

长条的矩形代表生命线。通过时序图我们可以了解整个系统的类和方法的调用和时间的关系。

6、类图详细介绍

看上面的类图:第一行GeelyClass是类的名字,如果是抽象类就用斜体来表示,第二行里是类的属性,第三行是类的方法。

访问权限:“+”代表public,“-”代表private,“#”代表protected,“~”代表什么都不加,default,

属性的sex和方法的playGames都有一条下划线,代表static

study()方法是斜体的,代表抽象方法,一个类如果带有抽象方法,那它一定是抽象类,所以GeelyClass应该是斜体的,此处为了演示,没有设置为斜体,是一个小错误。

方法的括号内是参数类型,冒号后面是返回值类型

复习——下面通过一个图来加深对UML的理解:把这个图理解透彻

wKioL1UKQXLRPBtlAABJWxoTGco878.jpg

    类图分三层:

   (1)类名称,如果是抽象类就用斜体标识。本例,类名称是“动物”,且其是一个抽象类。

   (2)类特性,通常是字段和属性。本例,类特性是“有生命”。

   (3)类操作,通常是方法或行为。本例有两个,一个是带参数的“新陈代谢”,一个是不带参数的 “繁殖”。

注意前面的符号:‘+’表示public,‘-’表示private,‘#’表示protect。本例的类属性和类操作均是public的。

2. 接口:两种表示法。

  (1)

wKiom1UKQHyhmesUAACamBOSMmk644.jpg

  (2)“棒棒糖”表示法

wKioL1UKQbmwrHqdAACT6Ix2idU614.jpg

3. 关系:类与类之间或者类与接口之间

  (1) 继承关系:空心三角+实线,被三角指向的是父类。

wKioL1UKQdHDa9I8AABZMjD1Qls061.jpg

wKiom1UKP-iBUbByAABR96Yn-3o934.jpg

  (2) 实现关系:用空心三角+虚线表示,被三角指向的是接口。

wKioL1UKQeejDv3oAABN4RDDUgg411.jpg wKioL1UKQfWx-OVQAABW9jK6VkE857.jpg

  (3)关联关系(association):用实线箭头表示,箭头表是方向,双向则无箭头。

wKiom1UKQODwRgjhAACc_FHSlaw475.jpg

       体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系

     比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系

     一般是平等的、关联可以是单向、双向的。本例,企鹅单向关联气候,企鹅需要知道气候。

  (4)聚合关系(aggregation):用空心菱形+实线箭头表示,菱形指向聚合端。

wKioL1UKQhyDiL8PAABSuH1v5f4522.jpgwKiom1UKQP_z9mMHAABgxtFr7yo783.jpg

       聚合表示一种弱的“拥有”关系,体现的是A可以拥有B,B对象不是A对象的一部分。本例A是雁 

    群,B是大雁。它们的生命周期不一样,没有必然联系。

  (5)合成关系(composition也有叫组合关系):用实心菱形+实线箭头表示,菱形指向整体部分。

wKiom1UKQQ7SiWQ0AADMH0yXICw907.jpg

 

      合成表示一种强的“拥有”关系,严格的部分与整体的关系,生命周期是一致的。本例,翅膀是

   鸟的组成部分。

  (6)依赖关系(dependency):用虚线箭头表示,箭头指向被依赖的对象。

wKiom1UKQSixKd8iAAClWQk7kuc674.jpg

wKiom1UKQTmBmwmJAABj5Vovp6A164.jpg

    两个相互独立的对象,对象A的存在必须依赖B。本例,A是动物,B有两个氧气和水。B的生命期结束则A必结束,反之则不然。

   也可这样理解:一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值