【UML】类图、包图、对象图

举报
翟文彪 发表于 2021/12/25 23:13:41 2021/12/25
【摘要】 一、类图    1.类 类:对真实客观世界中真实存在的客观的事物的抽象的描述 例如在学籍管理系统中出现了student这个类 属性:描述一个类的静态的信息 操作/方法:描述一个类的动态的信息 在类的表示中: “-”减号表示私有 “+”加号表示公有 “#”井号表示保护 注意:画类图的时候可以根据情况...

一、类图

   1.类

类:对真实客观世界中真实存在的客观的事物的抽象的描述

例如在学籍管理系统中出现了student这个类

属性:描述一个类的静态的信息

操作/方法:描述一个类的动态的信息

在类的表示中:

-”减号表示私有

“+”加号表示公有

“#”井号表示保护

注意:画类图的时候可以根据情况酌情的把类的属性和方法部分的某一部分隐藏起来

   2.类的关系

(1)关联(普通关联、聚合、组合)

  • 普通关联

应用于关联的修饰

①名称(Association name):用以描述该关系的性质

②角色(Role):当一个类处于关联的某一端时,该类就在这个关系中扮演了一个特定的角色;角色是关联中靠近他的一端的类对另外端的类的呈现的职责。

③多重性(Multiplicity):关联角色的多重性是说明一个关联的实例中有多少个相互连接的对象。

关联的类型:

 -单向关联(导航关联)

 -双向关联

 -两个类之间可以有多种关联

 -一个类可以和多个类关联

 -自身关联

  • 组合和聚合

组合和聚合都是整体和部分关系

聚合:整体和部分之间是一种松耦合的关系,用空心菱形表示

举例,书和书架之间就是一种聚合关系,书或者书架都可脱离对方而独立存在,他们之间没有一种可以相互制约的生命关系

组合:整体和部分之间是一种紧耦合的关系

比较:

(2)依赖

依赖是一种使用关系。他说明一个事物规格说明的变化可能影响到使用它的另一个事物。但反之未必。

注意:

能用组合和聚合来表达的就不要用普通关联来表达。因为组合和聚合比普通关联信息描述的更佳严格,关联比依赖描述的信息更佳严格。

 

如果两个类之间有结构化关系,我们应该用关联来表示,因为关联的描述相比依赖更佳严密,并且包含依赖关系。如果没有结构化关系,只是一种简单的使用关系,我们采用依赖来表示。

(3)泛化(继承)

继承机制的引入目的就是为了最大化的进行软件的复用,减少软件发布之后的维护代价。

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

-多重继承:一个类有两个或两个以上的父类

例,水陆两系车他的父类可以是普通汽车和普通船。

注意:

多重继承可能会产生二义性,在Java语言中一个类是不允许继承多个类的,如

果要实现的话,必须通过接口来实现而不能通过多重继承的方式来实现。

(4)实现

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

   3.类图的构成

(1)用来描述系统的静态部分

(2)类图的构成

  • Classes(类)
  • Interfaces(接口)
  • Collaborations(协作)
  • Dependency(依据),Generalization(泛化) and Association relationships(关联关系)
  • Packages(包) or Subsystems(子系统)(for grouping)

注意:

在设计一个类的方法的时候,一定要注意一个简单的原则,当我们分析这个方法放到哪里的时候,一定要考虑这个方法的执行者是谁,应该把这个方法放到真正执行他的那个类里面,而不是调用他的那个类里面

举例:上课的过程中如果老师和学生都是类,那老师让学生发言这个方法应该添加到哪个类的下面,在这个方法中,真正的执行者是学生,因为老师只是调用学生这个类,真正的执行者是学生,所以应该把这个方法放到学生这个类里。

   4.类图深入讨论

(1)可见性Visibility

public/private/protected

(2)范围Scope

每个实例自己拥有自己的属性和方法

静态成员:对一个类的所有实例共享一个成员

“_”表示这是一个静态成员

(3)属性Attributes

(4)操作Operations

(5)模板类Template Classes

(6)实用类Utility Classes

   5.类图的应用

分析、设计、实现一个软件系统时需要以下步骤

(1)分析usecase图

(2)分析类图(寻找名词)

(3)确定每一个类的属性和方法(行为是哪个类实施的,这个方法就属于哪个类)

需要注意的问题:

(1)给定一个软件系统特征,可以抽象得到类

(2)抽象得到每个类的属性和方法

(3)正确的表达类与类之间的关系(注意:不能只用依赖关系,能用组合就不用聚合,能用聚合就不用一般关联,能用一般关联就不用依赖,该用接口实现的时候就用接口实现,需要用继承的时候就用继承)

(4)需要对这些关系进行修饰,比如关系的多重性、关系的名称、关系的角色名

二、包图

   1.包的作用

(1)逻辑上吧一个复杂的图模块化

(2)组织源代码

   2.包的图符

   3.包中的元素

(1)类、接口、构件、用例、其他包等

(2)若包被撤销,则其中的元素也被撤销了。

   4.包与包之间的关系

(1)泛化

(2)细化

(3)依赖(常用)

-如果两个包中的任意两个类之间有依赖关系,则这两个包之间有依赖关系。

   5.包常见的问题

(1)一定要避免循环依赖的产生

(2)测试时可以以包为测试单位

(3)应该尽量把概念和语义上相近的元素包含在同一个包中。

(4)对于一个包,找出哪些包内的元素是可以在包外访问的,把这些元素标记为公共的,其他所有元素都标记为受保护的或者私有的。

三、对象图

对象图包含对象、连接和包

对象图是系统在某个运行时刻的一个快照

四、小结

类图:是对一个软件系统的静态成分进行呈现

包图:是对一个软件系统进行模块划分,使得源码结构更加清晰

对象图:这个系统在某一时刻的一个快照

 

文章来源: blog.csdn.net,作者:翟文彪,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/zwb568/article/details/105647494

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。