类图

简介: 类图

类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性信息。


     类图(Class diagram)由许多(静态)说明性的模型元素(例如类、包和它们之间的关系,这些元素和它们的内容互相连接)组成。类图可以组织在(并且属于)包中,仅显示特定包中的相关内容。


     类图(Class diagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。


     类图(Class diagram)最基本的元素是类或者接口。

类图通常包含如下的内容

     
     
接口
     
协作
     
关系


 同其他的图一样,类图也可以包含注解和限制。


     类图中也可以包含包和子系统,这两者用来将元素分组。有时后你也可以将类的实例放到类图中。


     注:组件图和分布图和类图类似,虽然他们不包含类而是分别包含组件和节点。



     你通常通过下面三种方式使用类图:


     1,为系统词汇建模型

     为系统的词汇建模实际上是从词汇表中发现类,发现它的责任。


     2,模型化简单的协作

     协作是指一些类、接口和其他的元素一起工作提供一些合作的行为,这些行为不是简单地将元素加能得到的。例如:当你为一个分布式的系统中的事务处理过程建模型时,你不可能只通过一个类来明白事务是怎样进行的,事实上这个过程的执行涉及到一系列的类的协同工作。使用类图来可视化这些类和他们的关系。


     3,模型化一个逻辑数据库模式

     想象模式是概念上设计数据库的蓝图。在很多领域,你将想保存持久性数据到关系数据库活面向对象的数据库。你可以用类图为这些数据库模式建立模型。


1.
类(Class


 一般包含3个组成部分。第一个是类名;第二个是属性(attributes);第三个是该类提供的方法( 类的性质可以放在第四部分;如果类中含有内部类,则会出现第五个组成部分)。类名部分是不能省略的,其他组成部分可以省略。


     类名书写规范:正体字说明类是可被实例化的,斜体字说明类为抽象类。


     属性和方法书写规范:修饰符 [描述信息] 属性、方法名称 [参数] [:返回类型|类型]


     属性和方法之前可附加的可见性修饰符:


     加号(+)表示public;减号(-)表示private;#号表示protected;省略这些修饰符表示具有package(包)级别的可见性。


     如果属性或方法具有下划线,则说明它是静态的。


     描述信息使用 << 开头和使用 >> 结尾。


     类的性质是由一个属性、一个赋值方法和一个取值方法组成。书写方式和方法类似。

2. 包(Package


     包是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,通常使用逻辑性的包,用于对模型进行组织;使用物理性的包,用于转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。

3. 接口(Interface

 接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口的表示有大概两种方式。具体画法见下例:


4.
关系

常见的关系有:一般化关系(Generalization),关联关系(Association),聚合关系(Aggregation),合成关系(Composition),依赖关系(Dependency)。


     其中,聚合关系(Aggregation),合成关系(Composition)属于关联关系(Association)。


     一般关系表现为继承或实现关系(is a),关联关系表现为变量(has a ),依赖关系表现为函数中的参数(use a)。


     一般化关系:表示为类与类之间的继承关系,接口与接口之间的继承,类对接口的实现关系。

     表示方法: 用一个空心箭头+实线,箭头指向父类。或空心箭头+虚线,如果父类是接口。


     关联关系:类与类之间的联接,它使一个类知道另一个类的属性和方法。

     表示方法:用 实线+箭头, 箭头指向被使用的类。


     聚合关系:是关联关系的一种,是强的关联关系。聚合关系是整体和个体的关系。关联关系的两个类处于同一层次上,啊聚合关系两个类处于不同的层次,一个是整体,一个是部分。

     表示方法:空心菱形+实线+箭头,箭头指向部分。


     合成关系:是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,合成关系不能共享。

     表示方法:实心菱形+实线+箭头,


     依赖关系:是类与类之间的连接,表示一个类依赖于另一个类的定义。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。

     表示方法:虚线+箭头

通用建模技术


没有类是单独存在的,他们通常和别的类协作,创造比单独工作更大的语义。因此,除了捕获系统的词汇以外,还要将注意力集中到这些类是如何在一起工作的。使用类图来表达这种协作。


     l 确定你建模的机制。机制代表了部分你建模的系统的一些功能和行为,这些功能和行为是一组类、接口和其他事物相互作用的结果。


     l 对于每个机制,确定类、接口和其他的参与这个协作的协作。同时确定这些事物之间的关系。


     l 用场景来预排这些事物,沿着这条路你将发现模型中忽略的部分和定义错误的部分。


     l 确定用这些事物的内容来填充它们。对于类,开始于获得一个责任(类的职责),然后,将它转化为具体的属性和方法。




     很多系统都是有持久性数据的,也就是说要将这些数据保存到数据库中以便下一次使用。通常你会使用关系型数据库或面向对象的数据库,或其它类型的数据库来保存数据。UML很适合为逻辑数据库模式建模。



     UML的类图是E-R图(为逻辑数据库建模的通用工具)的超集,尽管E-R图的重点是数据,类图的扩展允许模型化行为。在物理数据库中这些逻辑操作一半转化为触发器或存储过程。


     l 确定那些状态比其生命周期要长的类。

     l 创建一张包含这些类的图,标记它们为持久性的。

     l 详细定义它们的属性。

     l 对于使得物理数据库设计复杂的模式如:循环关系、1对1关系、N元关系,考虑创建中间抽象来使得逻辑结构复杂。

     l 详细定义这些类的操作,特别是那些访问数据和涉及数据完整性的方法。

     l 如果可能的话使用工具来将你的逻辑设计转化为物理设计。


     建模是重要的,但要记住的是对于开发组来说软件才是主要的产品,而不是图。当然,画图的主要目的是为了更好地理解系统,预测什么时候可以提供什么样的软件来满足用户的需要。基于这个理由,让你画的图对开发有指导意义是很重要的。


     某些时候,使用UML。你的模型并不能直接映射成为代码。例如,如果你在使用活动图为一个商业过程建模,很多活动实际上涉及人而不是计算机。


     很多时候,你创建的图形可以被映射成为代码。UML并不是专门为面向对象的语言设计的,它支持多种语言,但使用面向对象的语言会更直观些,特别是类图的映射,它的内容可以直接映射成为面向对象语言的内容。如:C++,SMALLTALK、ADA、ObjectPascal、Eiffel和Forte。UML还支持如Visual Basic这样的面向对象的语言。


     正向工程:是从图到代码的过程。通过对某中特定语言的映射可以从UML的图得到该语言的代码。正向工程会丢失信息,这是因为UML比任何一种程序语言的语义都丰富。这也正是为什么你需要UML模型的原因。结构特性、协作、交互等可以通过UML直观地表达出来,使用代码就不是那么明显了。


     对类图的正向工程:


     l 选择将图形映射到哪一种程序语言。

     l 根据你选择的语言的语义,你可能要对使用某写UML的特性加以限制。例如:UML允许你使用多重继承,而SmallTalk只允许一重继承。

     l 使用标记值来指定比的目的语言。你可以在类级进行也可以在协作或包的层次上进行。

     l 使用工具来对你的模型进行正向工程。


     反向工程:反向工程是从代码到模型的过程。


     进行反向工程:


     l 确定将你的程序语言的代码反向成模型的规则。

     l 使用工具(Rose C++ Analyzer)进行反向工程。


提示和技巧


     一个结构化好的类图:


     l 焦点放在系统静态设计视图的一个方面。

     l 只包含为了理解该方面而应该存在的元素。

     l 提供足够的信息来理解该图。

     l 不让读者产生错误的信息。


     当你画类图的时候:


     l 给它起一个名字,这个名字能表达类图的用途。

     l 用最少的交叉线来组织它的元素。



















目录
相关文章
|
23天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
15天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2572 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
159 2
|
19天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1571 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
21天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
950 14
|
3天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
189 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
714 10