精华内容
下载资源
问答
  • UML类图是描述类之间的关系 概念 类(Class):使用三层矩形框表示。 第一层显示类的名称,如果是抽象类... 接口:使用两层矩形框表示,与类图的区别主要是顶端有<>显示 。 第一行是接口名称。 第二行...

    UML类图是描述类之间的关系

    概念

    1. 类(Class):使用三层矩形框表示。
      第一层显示类的名称,如果是抽象类,则就用斜体显示。
      第二层是字段和属性。
      第三层是类的方法。
      注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。

    2. 接口:使用两层矩形框表示,与类图的区别主要是顶端有<>显示 。
      第一行是接口名称。
      第二行是接口方法。

    3. 继承类(extends):用空心三角形+实线来表示。

    4. 实现接口(implements):用空心三角形+虚线来表示

    5. 关联(Association):用实线箭头来表示,例如:燕子与气候

    6. 聚合(Aggregation):用空心的菱形+实线箭头来表示

    聚合:表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分,例如:公司和员工
    组合(Composition):用实心的菱形+实线箭头来表示
    组合:部分和整体的关系,并且生命周期是相同的。例如:人与手

    1. 依赖(Dependency) :用虚线箭头来表示,例如:动物与氧气

    2. 基数 :连线两端的数字表明这一端的类可以有几个实例,比如:一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就用‘n’来表示。关联、聚合、组合是有基数的。

    重复度:

    • 单重复度,只存在一对一的关系。
    • 多重复度,用列表、vector或其它的数据结构维护一对多,多对多的关系

    这里再说一下重复度,其实看完了上面的描述之后,我们应该清楚了各个关系间的关系以及具体对应到代码是怎么样的,所谓的重复度,也只不过是上面的扩展,例如A和B有着“1对多”的重复度,那在A中就有一个列表,保存着B对象的N个引用,就是这样而已。

    形式:依赖/关联, 组合/聚合,继承/实现

    Dependency /Association,Composition/ Aggregation,Generalization/Realization

    关联-属性指针-associate

    1. 双向关联-相互关联,

    ** 相互把对方作为自己的指针**

    C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。
    在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关 系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。

    使用ROSE 生成的代码是这样的:

    class C1{
    public C2 theC2;
    
    }
    
    class C2 {
    public C1 theC1;
    
    }

    双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。

    1. 单向关联-关联到它就把它当做自己的属性指针

    C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。
    没有生命期的依赖。一般是表示为一种引用
    生成代码如下:

    class C3{
    
    public C4 theC4;
    
    }
    
    class C4{
    
    }

    单向关联的代码就表现为C3有C4的指针,而C4对C3一无所知。

    1. 自身关联(反身关联)-关联到自己,就是把自己当做属性指针

    自己引用自己,带着一个自己的引用

    代码如下:

    class C5{
    public C5 theC5;
    
    }

    就是在自己的内部有着一个自身的引用。

    2.依赖-依赖

    就把它的指针或引用,作为自己的函数形参-dependency

    (1)单向依赖

    依赖:
    指C5可能要用到C6的一些方法,也可以这样说,要完成C5里的所有功能,一定要有C6的方法协助才行。C5依赖于C6的定义,一般是在C5类的头文件中包含了C6的头文件。ROSE对依赖关系不产生属性。
    注意,要避免双向依赖。一般来说,不应该存在双向依赖。
    ROSE生成的代码如下:

    class C6
    {
     public void Func(C7 *pC7Obj);
    
    }
    
    class C7
    {
    
    }

    (2)双向依赖

    双向依赖关系图没有看到标准的画法,知道时候补上。

    那依赖和聚合\组合、关联等有什么不同呢?

    • 关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。
    • 依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖 也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系 的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。

    组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。

    上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。
    这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了,例如可能在某个问题域中,我是一个木匠,需要拿着 锤子去干活,可能整个问题的描述就是我拿着锤子怎么钉桌子,钉椅子,钉柜子;既然整个问题就是描述这个,我和锤子就不仅是偶然的依赖关系了,我和锤子的关 系变得非常的紧密,可能就上升为组合关系(让我突然想起武侠小说的剑不离身,剑亡人亡...)。这个例子可能有点荒谬,但也是为了说明一个道理,就是关系 和类一样,它们都是在一个问题领域中才成立的,离开了这个问题域,他们可能就不复存在了

    3.组合/聚合-属性对象-composite/aggreate
    (1)组合-自己是实心的,去组合它,把它当做自己的属性对象,只是被组合的类不会单独存在(自己构造函数中使用)

    组合(也有人称为包容):一般是实心菱形加实线箭头表示,如上图所示,表示的是C8被C7包容,而且C8不能离开C7而独立存在。但这是视问题域而定的, 例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义 的,这就可以用聚合了。
    在《敏捷开发》中还说到,A组合B,则A需要知道B的生存周期,即可能A负责生成或者释放B,或者A通过某种途径知道B的生成和释放。

    他们的代码如下:

    class C8
    {
    public C9 theC9;
    
    }
    
    class C9
    {
    
    }

    可以看到,代码和聚合是一样的。具体如何区别,可能就只能用语义来区分了。

    (2)聚合-自己空心的,去聚合它,把它当做自己的属性对象,被聚合的类可以单独存在(自己构造函数中不使用)

    当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。

    聚合:表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。这句话怎么解,请看下面组合里的解释)。
    代码如下:

    class C10
    {
    public C11 theC11;
    
    }
    
    class C11
    {
    
    }

    总结聚合和组合:

    问题域的语义上:组合中被组合类单独存在没有意义; 聚合中被聚合类在可以有单独存在的意义。

    生命期上:组合中必须要负责被组合类的生命期; 聚合中可不负责被聚合类的声明期,可以由外部程序来创建和消亡(可用赋值)。
    4.泛化和实现 derived/implement
    (1)继承(Derived)-子对象指向父对象

    泛化关系:如果两个类存在泛化的关系时就使用,例如父和子,动物和老虎,植物和花等。
    ROSE生成的代码很简单,如下:

    class C12 extends C13
    {
    
    }

    (2)接口实现(implement)

    实现关系指定两个实体之间的一个合约。换言之,一个实体定义一个 合约 ,而另一个实体保证履行该合约 。

    转自http://blog.csdn.net/blues1021/article/details/45739941

    展开全文
  • UML 类图关系描述

    2021-01-28 11:44:17
    UML类图中最常用关系有如下几种 泛化(Generalization),实现(Realization),依赖关系(Dependency),关联(Association),聚合(Aggregate),组成(Composition)关系

    1. UML 类图

    ⏰ 概述

    • UML 类图是一种通用的静态结构图,该图描述了系统的类集合,类的属性和类之间的关系等。他们一般都被用于应用程序的概念建模(conceptual modelling),并可将模型转译成代码。
    • UML 类图中最常用的关系有如下几种 泛化(Generalization)实现(Realization)依赖关系(Dependency)关联(Association)聚合(Aggregate)组成(Composition)关系
    • 类图中关系表示如下:
      image
    ⏰ 泛化关系(Generalization)

    • 泛化(generalization) 关系时指一个类(子类、子接口)继承另外一个类(称为父类、父接口)的功能,并可以增加它自己新功能的能力,继承是类与类或者接口与接口最常见的关系,在Java中通过关键字extends来表示。用带空心三角形箭头的实线表示。
      image
    ⏰ 实现关系(Realization)

    • 实现(Realization)指的是一个class类实现interface接口(可以是多个)的功能;在Java中此类关系通过关键字implements明确标识。用带空心三角形箭头的虚线表示。
      image
    ⏰ 依赖关系(Dependency)

    • 依赖关系(Dependency)可以简单的理解为一个类A使用到了另一个类B," … uses a …",被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。而这种使用关系是具有偶然性、临时性的、非常弱的,但是B类的变化会影响到A;表现在代码层面,为 类B作为参数被类A在某个method(方法)中使用。用带燕尾箭头的虚线表示。表示一个类依赖于另外一个类的定义;依赖关系仅仅描述了类与类之间的一种使用与被使用的关系。
    • 在java中,依赖表现为:局部变量方法中的参数对静态方法的调用
      image
    ⏰ 关联关系(Association)

    • 关联关系(Association) 代表一个家族的联系。关联可以命名,可以饰以角色名称,有权指针,多重性,可视性,以及其他属性(如相互关联和有方向的(带燕尾箭头的实线表示)关联)。在语义上是两个类之间、或类与接口之间一种强依赖关系,是一种长期的稳定的关系," … has a …" 。关联关系使一个类知道另外一个类的属性和方法;通常含有“知道”、“了解”的含义。某个对象会长期的持有另一个对象的引用,关联的两个对象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,它们在生命期问题上没有任何约定。被关联的对象还可以再被别的对象关联,所以关联是可以共享的。
    • 在代码层面:被关联类以类属性的形式出现在关联类中,也可能是关联类引用了一个类型为被关联类的全局变量。目前定义有五种不同类型的关联。双向(Bi-directional)和单向(uni-directional)的关联是最常见的。
    • 关联表示:可以使用单箭头表示单向关联,使用双箭头或者无箭头表示双向关联,不建议使用双向关联,关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例:
      0..1 表示可以有0个或者1个实例
      0..* 表示对实例的数目没有限制
      1 表示只能有一个实例
      1..* 表示至少有一个实例
    • 在Java中,关联关系是使用实例变量来实现的
      image
    ⏰ 聚合关系(Aggregate)

    • 聚合关系(Aggregation)关联关系的特例,是强的关联关系,是表示整体与部分的一类特殊的关联关系,是“弱”的包含(" … owns a …" )关系,成分类可以不依靠聚合类而单独存在,可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享(sharable)。例如,池塘与(池塘中的)鸭子。再例如教授与课程就是一种聚合关系。又例如图书馆包含(owns a) 学生和书籍。即使没有图书馆,学生亦可以存在,学生和图书馆之间的关系是聚集。图形以空心的菱形箭尾与实线来表示。
    • 聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次,而聚合则明显的在两个不同的层次。
      image
    ⏰ 组成(Composition)

    • 组成(Composition)关系,是一类“强”的整体与部分的包含关系(" … is a part of …")。成分类必须依靠合成类而存在。整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。合成类别完全拥有成分类别,负责创建、销毁成分类别。例如汽车与化油器,又例如公司与公司部门就是一种组成关系。图形以实心的菱形箭尾与实线表示。
      image
    ⏰ 关联、组成和聚集的差异
    • 它们的差别主要描述了子类的生命周期的不同。组成关系中,一旦父类被销毁子类也会随之销毁;聚合关系中,子类的生命周期与父类独立。
    • 另一个维度他们的关联关系强弱如下: 由弱到强分别是 依赖 < 关联 < 聚合 < 组成
    • 范例: 例如,一个大学包含若干个系(如化学系),每个系由若干名教授。如果大学撤销,这些系也就不复存在了,但这些教授仍会继续存在。还需注意,一名教授可以在不同系甚至不同学校兼职,而一个系不能属于两所大学。所以,大学与系之间是组成关系,而系与教授是聚合关系。
      image
    展开全文
  • 类图描述

    千次阅读 2018-08-10 22:33:10
    在软件设计上有一门课程——UML,它就是利用了一系列图形来描述项目结构、代码结构、执行顺序等等,现在开发之中如果是一个开发项目设计书上,一定要提供有UML图,但是很少再有人直接去画了。 工具:...

    在软件设计上有一门课程——UML,它就是利用了一系列的图形来描述项目结构、代码结构、执行顺序等等,现在的开发之中如果是一个开发的项目设计书上,一定要提供有UML图,但是很少再有人直接去画了。

    工具:PowerDesigner、RationalRose


    一、类图

    如果要想描述类图一般有三个组成结构:

    · 第一层:类名称,如果是抽象类使用斜体字;

    · 第二层:描述类中的属性,对于属性肯定要封装,如果是封装使用“-”表示;

    |-public(+)、protected(#)、private(-)

    · 第三层:类中定义的方法;

    这样的描述是在是太辛苦了,所以在PowerDesigner里面提供有专门的转换引擎。


    二、时序图

    时序图是描述整个代码的执行步骤。

    范例:工厂设计模式

    interface Fruit {
    	public void eat();
    }
    
    class Apple implements Fruit {
    	public void eat() {
    		System.out.println("苹果");
    	}
    }
    
    class Factory {
    	public static Fruit getInstance() {
    		return new Apple();
    	}
    }
    
    public class Demo {
    	public static void main(String args[]) {
    		Fruit f = Factory.getInstance();
    		f.eat();
    	}
    }

    下面通过时序图来描述以上流程。

    在最后的使用工作里面就需要给出用户的操作图。

     

     

    展开全文
  • Block类图描述

    2012-04-21 21:32:25
    前面2个描述了datanode以及INodeFile,还缺个Block的描述,这里补上,针对block的结构还有些不是特别明确,这个需要举例子才好说明,先把大体的类图结构描述下    Block   Java代码    ...

    前面2个描述了datanode以及INodeFile,还缺个Block的描述,这里补上,针对block的结构还有些不是特别明确,这个需要举例子才好说明,先把大体的类图结构描述下

     


        Block

     

    Java代码   收藏代码
    1. /**************************************************  
    2.  * A Block is a Hadoop FS primitive, identified by a   
    3.  * long.  
    4.  *  
    5.  **************************************************/   

     

         BlocksMap

     

     

    Java代码   收藏代码
    1. /**  
    2.  * This class maintains the map from a block to its metadata.  
    3.  * block's metadata currently includes INode it belongs to and  
    4.  * the datanodes that store the block.  
    5.  */   

     

          BlockInfo

     

     

    Java代码   收藏代码
    1. /**  
    2.    * Internal class for block metadata.  
    3.    */   

     

         Object[] triplets

     

     

    Java代码   收藏代码
    1. /**  
    2.  * This array contains triplets of references.  
    3.  * For each i-th data-node the block belongs to  
    4.  * triplets[3*i] is the reference to the DatanodeDescriptor  
    5.  * and triplets[3*i+1] and triplets[3*i+2] are references   
    6.  * to the previous and the next blocks, respectively, in the   
    7.  * list of blocks belonging to this data-node.  
    8.  */   

     更多信息请查看 java进阶网 http://www.javady.com

    展开全文
  • 23中设计模式的类图描述,是英文我想看懂应该没问题。
  • 菜鸡Java笔记 类图

    2019-09-25 20:38:14
    如何实现类图的描述 2.时序图的使用 从实际i的开发标准:应该在项目编写钱设计类图 而现在的开发大部分情况下,都是先完成功能,交工前将代码换为类图 类图描述 如果要想描述出类图,基本上都会采用一下的结果完成 ...
  • Java 类图描述类图

    千次阅读 2018-05-02 19:36:57
    使用PowerDesigner可以描述出类结构图与时序图范例1:Dog类==============分割线==============范例2:抽象类
  • INodeFile类图描述

    2012-04-21 21:32:05
    针对具体存储在hdfs上文件有个对象来模型化他那就是INodeFile这个类,因为hdfs文件系统也是树形结构,故衍生出一些其他类来模型化这些对象,见类图描述如下    INode   Java代码    ...
  • UML类图描述设计模式 本文使用plantUML来画UML类图描述23种设计模式! 首先介绍一下UML类图语法: 以下是使用一些示例: 抽象工厂模式(Abstract Factory Pattern) 其UML类图表示为: ...
  • UML类图——精简描述

    2019-04-22 21:00:31
    作者精心寻找规律,精简叙述,使图形化与描述相结合快速记忆。 口诀写很精简。相信你们可以看懂 一、类基本表示方式 在UML类图中,每一个矩形代表一个类。我们举一个简单例子: 这是一个代表车辆类。 ...
  • 类图的概述

    千次阅读 2017-08-07 10:28:09
    类图的概述 类图是描述类、接口以及它们之间关系的图,是一种静态模型,显示...其他许多图(如状态图、协作图、组件图和配置图等)都是在类图的基础上进一步描述系统的其他特性。 类图可以包括类、接口、依赖关系
  • UML类图描述符号说明

    2017-11-08 14:54:39
    类定义 类(Class):使用三层矩形框表示。 第一层:类名(斜体表示...接口:使用两层矩形框表示,与类图的区别主要是顶端有《interface》 符号定义 形式 依赖/关联(Dependency / Association) 聚合/组...
  • 类图

    2020-08-31 09:15:08
    类图的关系: 1、关联(修饰:名称:描述关系的性质;角色:靠近他一端的类对另外端的类的呈现的职责) 1、普通关联 两个对象有自己的属性和行为,把连接看作是一个类的实例,这个类为关联类 2、聚合 整体 / ...
  • UML类图的定义 不知是不是因为我天资愚钝,还是因为管中窥豹. 经历一段时间的研究结合实际使用的经验 总是觉得UML类图的定义不是严谨的. UML的类图包括两部分 1. 对类的描述 2. 对类之间关系的描述 对类的描述就是 ...
  • 类图-细节简单描述

    2012-09-23 20:52:37
    1.类图显示一种静态结构。 2.类图最基本元素是: 类 接口 3.抽象方法和抽象类:斜体字。 4.静态方法:方法下面有下划线。 5.权限 +:public -:private #:protected 6.类图关系 a.Generalization:...
  • 类图的构成: 描述系统静态部分 类图深入讨论: 可见性:公用public “+” 私有 private “-” 可保护 protected “#” 包 package “~” 范围: 抽象类:不能实例化 多重性: 定义操作: 类图的应用:静态呈现 包图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,734
精华内容 1,893
关键字:

类图的描述