【UML】— 类图

9 篇文章 0 订阅

一:类

概念:对现实世界中事物的抽象,描述系统的静态部分

(静态成员:在类图中加下划线表示静态成员,编码时用static关键字定义)

种类:抽象类、接口、关联类、模板类、主动类、嵌套类、

 种  类

说明

 抽  象  类

 在进行设计时,如果有些类具有相同方法和属性,可把这些方法或属性从具体类抽取出来,把它们封装在一个抽象类中,

通过扩展抽象类,重新定义这些具体类。抽象类不能被直接实例化,斜体表示。编码时用abstract关键字定义

 接  口

 类似抽象类,接口的方法都是抽象方法

 关  联  类

 两个类之间有多对多关系,且有的属性不属于关联两端的任何属性

 


 模  板  类

 板是根据参数类型生成函数和类的机制(有时称为“参数决定类型”),通过使用模板,可以只设计一个类来处理多种类型的数据,而不必为每一种类型分别创建类。

例如,我们需要一些能够处理整型、浮点型、字符串的数组,普通的做法是为他们个创造一个类,这三个类除了数据类型不同之外,其他的都是相同,但是仍然要定义三次。模板就是用来解决这个问题,可以根据占位符或者参数来定义类,而不用说明属性、方法返回值和方法参数的实际类型。通过实际值代替占位符即可创建新类

 主  动  类

 从运行的角度来看,还有一种特殊的类—主动类。主动类的实例称为主动对象,一个主动对象拥有一个控制线程并且能够控制线程的活动,具有独特的控制权。

 嵌  套  类


 在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。


属性:类名、属性(静态信息)、操作(动态行为)
注意:其中属性和方法可以没有,也可以隐藏

图符:3个矩形

   

表示(5种):

            

          1                 2                     3                    4                   5

     都有               操作隐藏       属性隐藏          都隐藏        没有属性和操作

注意:没有和隐藏的图不同,当然概念也不同


二:类的关系
4种:

A.关联associate:普通关联

1.图符:——

2.关联的修饰:关联名,角色名,多重性

3.关联的对象

两个类中可以有多个关联

一个类可以和多个类关联

自身关联
4.关联的分类
聚合:整体与部分,生命不依赖,可独立存在
组合:整体与部分,生命依赖;强调先有A,后有B
比较:

 

聚合

组合

图符

 

        空心

 

         实心

多重性

0或多   对   1或多


 1   对   0或多


编码区别():

聚合:import java.util.Vector,

class Boookeshelf{

public    Bookshelf(){}

private    Vector    the   Books;       //没有先后顺序,没强制制约

}

class Book{

private  Bookshelf   the   Bookshelf;   

public   Book(){}

}

组合:import java.util.Vector

class Book{

public  book(){}

private  Vector  the  pages=new Vector();    //强调先有书,后有页,强制制约

}

class Page{

public   Page(){}

private   Book   the   Book;

}

5.关联类:两个对象之间的连接可以看作一个类的实例时,称该类为关联类

6.关联说明

指两个类之间的联系,是一个类知道另一个类的属性和操作

可以是单向关联(单向箭头),也可以是双向关联(双向箭头)

B.依赖dependency:使用关系

1.图符:

2.依赖对象:类与类、包与包、构建与构件都可以是依赖关系

3.使用关系:

可以是方法使用到另一个类

class Professor{

public void teach(){Course c=new  Course();}

}

也可以是参数使用到另一个类

class Professor(

public void teach(Course c){...}

}

        4.分类:      

分类

包括

使用依赖:

客户使用提供者提供的服务

以实现它的行为

使用:声明一个类需要使用已存在的另一个·类

调用:声明一个类需要要到其它类的操作方法

参数:声明一个操作和它的参数之间的关系

发送:声明信号发送者和接受者之间的关系

实例化:声明用一个类的方法创建另一个类的实例

抽象依赖:

客户与提供者 用不同的方法 

表示同样的概念,

一个概念抽像,一个具体


 跟踪:声明不同模型中的元素之间存在一些连接但不如映射精确

 精华:声明语句两个不同语义层次上的元素之间的映射

 派生:声明一个实例可以从另一个实例导出

授权依赖:

提供者为客户提供某种权限

以访问期内容

 访问:允许一个包访问另一包的内容

 导入:允许一个包访问另一包的内容并为被访问包的组成部分增加别名

 友元:允许一个元素访问另一个元素,不管被访问元素是否可见

绑定依赖:

绑定模板以创建新的模板元 素 

 

 绑定:为模板参数指定值,以生成一个新的模型元素


C.泛化generalize:即所谓的继承,父类与子类的继承,is—a—kind—of

1.图符:

2.好处:软件复用、代码复用

3.分类:

单重继承:子类有且只有一个父类


多重继承:子类有两个或多个父类


问题:a.易出现歧义  b. c++允许有多个父类,但用关键字定义,而java不允许有多个父类,用接口实现

4.继承的权限

子类(Leaf)不是继承父类(Root)所有的变量和方法,public和protect成员可继承,private成员不可继承


 继承  对象

                                                                                                                  权限 

 子类

 继承

 父类

 的变  量

1.能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;

2.对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3.对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用

 子类

 继承

 父类

 的方     法


1.能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;

2.对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3.对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则会发生覆盖现象,即子类的成员变量会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用


5.编码:

java:class Employee{

class   Manager extends employee{...};

}

c++:class Employee{

class Manager :public Employee{...};

}

D.实现realiza:是类元之间的语义关系,在该关系中一个类元描述了另一个类元保证实现的契约

(语义关系:隐藏在句法结构后面由该词语的语义范畴所建立的联系)

1.分类

类实现接口     

包实现接口     

构件实现接口 

用例实现接口 

说明:接口:   ,编码时用interface关键字定义

类实现接口编码时:先定义接口,再定义类

interface Shape{

public void draw();

}

class Circle Implements Shape{

public void draw()

}

2.图符:

   关键字:implement定义实现关系

强弱关系:依赖 < 关联 < 实现 = 泛化

三:构成:类、接口、协作、关系、包、子系统等


四:类图的应用

怎样画类图:

1.分析用例图

2.画类图(类名即找系统中的名词)

3.写类的属性和方法(静态状态,动作行为)

4.找类之间的关系

5.修饰关系(多重性、角色名


五:产生阶段及使用人员
产生阶段:系统概要、详细设计阶段,是系统分析、设计、实现、确认阶段的重要依据,存在于概要设计文档、详细设计文档

使用人员:系统分析员、设计人员、开发人员、测试人员


六:图例(以机房收费系统为例)


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值