设计模式之基础-UML

1 UML类图

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency)

1.1 泛化关系(Generalization)

【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类。

这里写图片描述

public class Animal {
}
public class Tiger extends Animal {
}

1.2 实现关系(Realization)

【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现。
【箭头指向】:带三角箭头的虚线,箭头指向接口。

这里写图片描述

public interface Vehicle {  
    public void move();  
}  
public class Ship implements Vehicle {  
    public void move() {  
        ……  
    }  
}  
public class Car implements Vehicle {  
    public void move() {  
        ……  
    }  
}  

1.3 关联关系(Association)

【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子。
关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者。
这里写图片描述
上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

(1)双向关联

public class Customer {  
    private Product[] products;  
}  
public class Product {  
    private Customer customer;  
}  

(2)单向关联

public class Customer {  
    private Address address;   
}  
public class Address {  
    ……  
} 

(3)自关联
这里写图片描述

public class Node {  
    private Node subNode;  
    ……  
} 

1.4 聚合关系(Aggregation)

【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体。

这里写图片描述

这里写图片描述

public class Student {
}
public class School {  
    private List<Student> students ;  //学校与学生是聚合关系
}

1.5 组合(Composition)

【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体。

这里写图片描述
这里写图片描述

public class Menu {
}
public class Window {
    private List<Menu> menus;
}

1.6 依赖(Dependency)

【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用。
【箭头及指向】:带箭头的虚线,指向被使用者。

这里写图片描述
这里写图片描述

public class Screwdriver {    
    //螺丝刀,作为人类的工具,是用来被人类使用的
}
public class Person{
    public void screw(Screwdriver src){    
        //拧螺丝,需使用螺丝刀
    }
}

1.7 总结

各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

下面这张UML图,比较形象地展示了各种类图关系:

这里写图片描述

2 UML用例图

用例图主要用来描述“用户、需求、系统功能单元”之间的关系。它展示一个外部用户能够观察到的系统功能模型图。用例图多用于静态建模阶段(主要是业务建模和需求建模),帮助开发团队以一种可视化的方式理解系统的功能需求。

2.1 参与者(Actor)

在系统外部与系统直接交互的人或事物;需要注意以下两点:
(1)参与者是角色而不是具体的人,它代表了参与者在与系统打交道的过程中所扮演的角色。所以在系统的实际运作中,一个实际用户可能对应系统的多个参与者。不同的用户也可以只对应于一个参与者,从而代表同一参与者的不同实例。
(2)参与者作为外部用户(而不是内部)与系统发生交互作用,是它的主要特征。

在UML中,参与者使用如图所示的一个小人表示:

这里写图片描述

2.2 用例(Use Case)

系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。用椭圆表示,椭圆中的文字简述系统的功能:

这里写图片描述

2.3 关系(Relationship)

这里写图片描述

2.3.1 关联(Association)

表示参与者与用例之间的交互,通信途径,任何一方都可发送或接受消息。
箭头指向:指向消息接收方。

这里写图片描述

2.3.2 泛化(Inheritance)

在编程中,泛化关系是一种很重要的关系,我们随处可见。
泛化关系是一般和特殊关系,就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。
箭头指向(需要特别注意):指向父用例。这里写图片描述

2.3.3 包含(Include)

包含关系用来把一个较复杂用例所表示功能分解成较小的步骤。包含用例是必须的,如果缺少包含用例,基用例就不完整;包含用例必须被执行。
箭头指向:指向分解出来的功能用例。

这里写图片描述

2.3.4 扩展(Extend)

扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性。
箭头指向(需要特别注意):指向基用例

这里写图片描述

2.3.5 供一个完整的系统的用例图

这里写图片描述

3 UML时序图

时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:角色(Actor)、对象(Object)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。

3.1 角色(Actor)

系统角色,可以是人、及其甚至其他的系统或者子系统。

3.2 对象(Object)

对象包括三种命名方式:
第一种方式包括对象名和类名;
第二中方式只显示类名不显示对象名,即表示他是一个匿名对象;
第三种方式只显示对象名不显示类明。

3.3 生命线(Lifeline)

生命线在顺序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间,如下图:

这里写图片描述

3.4 控制焦点(Focus of Control)

控制焦点是顺序图中表示时间段的符号,在这个时间段内对象将执行相应的操作。用小矩形表示。如下图表示:

这里写图片描述

3.5 消息(Message)

消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message).如下图所示:

这里写图片描述

3.5.1 同步消息=调用消息(Synchronous Message)

消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。

3.5.2 异步消息(Asynchronous Message)

消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。

3.5.3 返回消息(Return Message)

返回消息表示从过程调用返回。

3.5.4 自关联消息(Self-Message)

表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。

这里写图片描述

3.5.5 Combined Fragments

表示带有一些特定条件发送的消息。

这里写图片描述

如上图,就表示,循环(loop)发送GetProperty消息获得属性。在使用Astah画时序图时,选择一个Combined Fragments之后,可以在其对应的属性面板更改对应的发送条件。里面介绍了很多,此处列举一二:
Alternative fragment(denoted “alt”) 与 if…then…else对应
Option fragment (denoted “opt”) 与 Switch对应
Parallel fragment (denoted “par”) 表示同时发生
Loop fragment(denoted “loop”) 与 for 或者 Foreach对应

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《UML与模式应用》(中文3版)是由Craig Larman撰写的一本关于UML和软件设计模式应用的书籍。这本书主要介绍了如何使用面向对象的思维方式进行软件设计和开发。 UML(Unified Modeling Language,统一建模语言)是一种用于描述、构建和文档化软件系统的标准化图形化语言。它能够帮助开发人员更好地理解和组织软件系统的结构、行为和交互。《UML与模式应用》这本书中详细介绍了UML的各种图形符号和建模技巧,并通过实例演示了如何使用UML进行系统设计和分析。 软件设计模式是一种被广泛运用于软件开发的解决问题的经验总结。《UML与模式应用》这本书中详细介绍了23种经典的设计模式,如单例模式、观察者模式、工厂模式等。每一种模式都详细描述了其应用场景、结构和相互之间的关系,并给出了具体的代码示例。通过学习和掌握这些设计模式,开发人员可以在软件开发过程中更好地解决各种设计问题,提高代码的可重用性、可维护性和可扩展性。 总的来说,《UML与模式应用》这本书通过UML设计模式的结合,帮助读者更好地理解面向对象的思维方式,并指导开发人员如何使用UML进行系统设计和分析,以及如何运用设计模式解决实际的软件设计问题。这本书对于软件开发人员来说是一本很好的学习和参考资料。 ### 回答2: 《UML与模式应用》中文3版是Martin Fowler和、Kendall Scott、Uwe Zdun等人合著的一本软件工程领域的经典著作。 这本书主要介绍了面向对象设计和软件开发中的UML建模语言及设计模式的应用。首先,书中详细介绍了UML建模语言的基本概念和各种图形符号的使用方法,包括用例图、类图、时序图等。通过对不同类型的图形组合使用,可以更好地表达软件系统的结构、功能和行为。 其次,该书还介绍了设计模式的概念及常见的设计模式,如观察者模式、单例模式、工厂模式等。设计模式是对常见软件设计问题的解决方案的总结和抽象,能够提高软件系统的可重用性、灵活性和可维护性。 在应用方面,该书通过实际的案例分析,演示了如何将UML建模语言和设计模式应用于软件系统的开发过程中。通过使用UML进行需求分析、系统设计和系统测试,可以有效地沟通和共享软件开发团队的思想和设计意图;同时,通过使用设计模式提供的规范化解决方案,可以更好地降低软件系统的复杂性,并提高软件系统的可维护性。 总的来说,《UML与模式应用》中文3版是一本介绍UML建模语言和设计模式应用的实战教程,对软件工程从业人员和学习者都具有一定的参考价值。通过对该书的学习和实践,在软件开发过程中可以更好地进行系统建模和设计,并提高软件系统的质量和可维护性。 ### 回答3: “UML与模式应用 中文3版” 是一本介绍UML设计模式的书籍。UML是一种统一的建模语言,它提供了一套标准的图形符号和规范,用于描述软件系统的结构、行为和交互。设计模式则是一种被广泛认可的解决特定问题的方法论或经验总结。 这本书以中文的方式详细介绍了UML和各种设计模式的概念和应用。它首先讲解了UML的基本语法和图形符号,然后介绍了对象、类、关联等基本概念,以及创建、结构和行为图的使用方法。 接着,书中详细介绍了23种常见的设计模式,包括创建型模式、结构型模式和行为型模式。针对每种模式,书中提供了详细的示例代码和应用场景,帮助读者理解和掌握模式的核心思想和应用方法。 除了介绍UML设计模式基础知识,这本书还讨论了如何在实际项目中应用UML设计模式。它提供了一些实践经验和指导原则,帮助读者更好地理解和运用UML设计模式的优点和局限性。 总的来说,“UML与模式应用 中文3版”是一本系统而全面的介绍UML设计模式的教材,适合对软件开发和设计感兴趣的读者阅读和学习。通过学习这本书,读者可以掌握UML的语法和应用,理解和使用设计模式来提高软件系统的可靠性、可扩展性和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值