• 认真地记录技术中遇到的坑!

UML类图实例讲解

设计模式 Moxun 来源:UML类图实例讲解 2年前 (2018-03-26) 594次浏览 0个评论

声明:本节中内容取自程杰所著《大话设计模式》,一方面感觉这种分析方法有助于理清思路,另一方面手上的学习资料都是用UML类图来分析设计模式的,所以为了加深自己的印象,深刻理解每一个模式的基本结构,所以我把书上的UML类图讲解部分挪到了这篇博文里。

类图图示样例

UML类图实例讲解

  1. 类图
    UML类图实例讲解

用矩形框来表示类图,一个类图表示一个类。类图分为三层,第一层显示类的名称,如果是抽象类,就用斜体表示。第二层是类的特性,通常就是字段和属性,第三层就是类的操作,通常是方法或行为。注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。

关于属性和字段这里需要注意一下,C++里的属性和Java或者C#里的属性是不一样的概念,C++的属性指的就是数据成员,既然是数据成员,那么就应该有获取和设置的操作,Java里建议程序员对每个属性提供一个getter()和setter()来保护,在C++中我们也可以用函数来模拟这个机制,而C#中为了支持属性的机制,直接加入了属性的概念,而字段在C#中就是指用public修饰的数据成员,对这些数据成员不需要调用setter或者getter。因此,可以说属性是对数据成员的封装,字段则是用public修饰的单纯的数据成员。那么对于C++来说,其实就是指数据成员了。所以在C#中属性是对数据成员的封装,方法和C++一样是对对象行为的封装。

  1. 接口图
    UML类图实例讲解

C++中接口描述了类的行为和功能而不需要特定实现,在编程上表现为:接口通过抽象类实现,在一个类中只要有一个纯虚函数,那么就说这个类是抽象类。

interface IFly                             interface Ilanguage                              
{                                             {
   voidFly();                                   void Speak();
}                                            }
  1. 类与类之间的关系-继承关系
    UML类图实例讲解

这幅图表示的是类之间的继承关系,继承关系用空心三角形+实线来表示。其中空心三角形所指向的类图表示基类,实线一端类图表示的子类。

  1. 类与接口的关系
    UML类图实例讲解

实现接口用空心三角形+虚线表示,其中空心三角形端是要实现的接口,虚线端是实现接口的类。

class Bird:Animal                      class WideGoose:IFly
{                                       {
   //继承动物类                                 //实现飞翔接口
}                                       }
  1. 类与类的关系-关联关系
    UML类图实例讲解
class Penguin :Bird
{
   private Climateclimate;//在企鹅Penguin中,引用到气候Climate对象
}

企鹅类需要知道气候类的变化才能更好的生存,所以类似这样当一个类需要知道另一个类时用关联关系来表示,关联关系用实线箭头表示,实线一端是需要知道其它类的类,箭头指向知识类(其它类需要知道这个类)。这两个类单独来看都是有实际意义的。

  1. 类与类的关系-聚合关系
    UML类图实例讲解

如图所示,大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以有多只大雁,所以大雁类和雁群类构成了一个聚合关系:大雁聚合成了雁群。聚合关系用空心的菱形+实线箭头表示,其中空心端表示的是要聚合成的目标类,实线箭头端的是单体类。聚合描述的是一种弱拥有的关系,体现的是A可以包含B对象,但B对象是A的一部分(这里讲的这种弱拥有是一种逻辑上的拥有而非代码层面的拥有)

classWideGooseAggregate
{
   private WideGoose[]arrayWideGoose;
   //在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose
}
  1. 类与类的关系-合成关系
    UML类图实例讲解

合成关系表示的是一种强拥有关系,体现了严格的部分和整体关系(即部分脱离了整体是没有独立存在的意义的),部分和整体的生命周期一样。合成关系用实心的菱形+实线箭头来表示,连线两端的数字1和2被称为基数,表明这一端的类可以有几个实例,如果一个类可能有无数个实例,那么用‘n’来表示,在这个例子中,明显一只鸟只能有两只翅膀。其中实心菱形端是整体,实线箭头端是部分,关联关系和聚合关系也可以有基数。

class Bird 
{
  private Wing wing;
  public Bird()
   {
      wing=new Wing();
    //在鸟Bird类中,初始化时,实例化翅膀Wing,它们之间同时生成
   }
}
  1. 类和类的关系-依赖关系
    UML类图实例讲解

在此例中,动物几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说动物依赖于氧气和水。它们之间是依赖关系,用虚线箭头表示。也就是说依赖关系实际就是指,一个类的接口,它的形参类型是另外的类B,那么就说这个类依赖于类B。

abstract class Animal
{
   public bolism(Oxygenoxygen,Water water)
    {
    } 
}

转载请注明出处 UML类图实例讲解
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址