java类图 博客分类: javaUML java设计模式uml框架
程序员文章站
2024-03-04 20:18:06
...
一直以来对java的类图关系都不太明白.有时间现在自己来整理下思路.
1.什么是类图
类图(class diagram)描述了模型的静态结构,包括模型中的类的类的内部结构以及于其他类的关系,在结构化设计一个系统的时候类图可以让我们的思路更加清晰。
2.学习类图有什么好处呢?
自我总结:我们从java类图中很清晰看到这个类中的方法,属性,以及实现的接口,继承类,引用其他的对象等等.类图简单 易懂 明了.在查看一些框架源码的时候 因为框架使用很多经典的设计模式 其实对于设计模式本人也不是很懂往往看着看着就在代码中迷失方向了,但是如果我们结合类图可以很快的了解到具体的实现 理清你的思路.
3.类图的种类(大概概念)
一个类与其他的类常见的关系有:
(1).一般化关系:关系表现是与类之间是(IS A)的关系.在我们的java代码中就是继承的关系.父类的引用指向子类的实现.我们的子类可以和父类就是(IS A)关系.比如说我们代码里面经常用到list集合.通常我们的代码这样写:
List list=new ArrayList();
我们的ArrayList和List就可以说是(IS A)关系
(2).关联关系: 关联关系表现为类与类之间的(has a)关系。它使一个类知道另一个类的属性和方法。关联关系表示的是类与类之间的持久关系,这种关系一般是表示一种业务逻辑上的关系,需要保存到数据库中的.
比如说我们的程序中的用户和部门的关系.一般的都是一个用户属于一个部门.
User和 Department.就是象是我们的数据库里面的外键关联一样。我们在user表可以有个departmentid关联到是Department表.关联关系其实在Hibernate中是相对于少的一方对多的一方.
(3).聚合关系:聚合关系是关联的一种,是一种强关联关系。聚合关系还体现了一种整体与个体的关系。一上面的User和Department为列.我们从反方向来说。一个部门下面有多的用户.很多的用户聚合在一起就是一个部门。
(4).组合关系(合成关系):
是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。
(5).依赖关系:
依赖关系是表现为类与类之间的一种(use a)的关系。一个类用到了另一个类,为了完成一特定的操作。但是类与类之间不存在业务逻辑上的关系。依赖关系是针对于程序来说的。依赖关系体现在程序中主要是些局部变量、方法参数、或对一个类方法的调用。比如说:我们UserManager要有addUser(),deleteUser();这两个方法具体实现都需要调用UserDao对象的方法。这个时候 就说UserManager依赖UserDao去实现增加用户,和删除用户的操作。
这个是具体到业务实现来说的
(6).泛化关系:表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系.我们的模版抽象方法就是这种模式.
(7).实现关系:关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
其中,聚合关系合成关系又属于关联关系
4.类图的表示(如果是以图形该怎么表示)
(1)类表示:类图中已长方形表示是对象的蓝图,其中包含3个组成部分。第一个是Java中定义的类名。第二个是属性(attributes)。第三个是该类提供的方法。属性和操作之前可附加一个可见性修饰符。加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图A的“Java”区域所示。
Du: (+)—public<所有,异包类> (#)—protected<仅异包子类> ()—省略<同包> (-)—private<本类>
(2)接口的表示:接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用下面的那个图标来表示(上面一个圆圈符号,圆圈符号下面是接口名,中间是直线,直线下面是方法名),也可由附加了<<interface>>的一个标准类来表示。通常,根据接口在类图上的样子,就能知道与其他类的关系
(3)包:
类图中就是两个叠在以前的长方形表示表示。上面的长方形比下面的小。
包是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,你通常拥有逻辑性的包,它主要用于对你的模型进行组织。你还会拥有物理性的包,它直接转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。
(4)依赖(Dependency):
虚线+箭头指向被调用的类。
实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。
(5)关联关系:
当前类用箭头+实指向被关联的类
(6)聚合关系:
空心菱形+实线+箭头指向部分
(7)合成关系:
实心菱形+实线+箭头指向部分
(8)泛化关系:
由子类开始从实线+箭头指向父类
(9)实现关系:
由父类虚线+箭头指向子类的实现
5.类图在项目中的具体运用(具体实例)
看附件.
6.画出简单的类图(具体引用)
看附件.
附件是直接在网上拷贝的资料.
1.什么是类图
类图(class diagram)描述了模型的静态结构,包括模型中的类的类的内部结构以及于其他类的关系,在结构化设计一个系统的时候类图可以让我们的思路更加清晰。
2.学习类图有什么好处呢?
自我总结:我们从java类图中很清晰看到这个类中的方法,属性,以及实现的接口,继承类,引用其他的对象等等.类图简单 易懂 明了.在查看一些框架源码的时候 因为框架使用很多经典的设计模式 其实对于设计模式本人也不是很懂往往看着看着就在代码中迷失方向了,但是如果我们结合类图可以很快的了解到具体的实现 理清你的思路.
3.类图的种类(大概概念)
一个类与其他的类常见的关系有:
(1).一般化关系:关系表现是与类之间是(IS A)的关系.在我们的java代码中就是继承的关系.父类的引用指向子类的实现.我们的子类可以和父类就是(IS A)关系.比如说我们代码里面经常用到list集合.通常我们的代码这样写:
List list=new ArrayList();
我们的ArrayList和List就可以说是(IS A)关系
(2).关联关系: 关联关系表现为类与类之间的(has a)关系。它使一个类知道另一个类的属性和方法。关联关系表示的是类与类之间的持久关系,这种关系一般是表示一种业务逻辑上的关系,需要保存到数据库中的.
比如说我们的程序中的用户和部门的关系.一般的都是一个用户属于一个部门.
User和 Department.就是象是我们的数据库里面的外键关联一样。我们在user表可以有个departmentid关联到是Department表.关联关系其实在Hibernate中是相对于少的一方对多的一方.
(3).聚合关系:聚合关系是关联的一种,是一种强关联关系。聚合关系还体现了一种整体与个体的关系。一上面的User和Department为列.我们从反方向来说。一个部门下面有多的用户.很多的用户聚合在一起就是一个部门。
(4).组合关系(合成关系):
是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。
(5).依赖关系:
依赖关系是表现为类与类之间的一种(use a)的关系。一个类用到了另一个类,为了完成一特定的操作。但是类与类之间不存在业务逻辑上的关系。依赖关系是针对于程序来说的。依赖关系体现在程序中主要是些局部变量、方法参数、或对一个类方法的调用。比如说:我们UserManager要有addUser(),deleteUser();这两个方法具体实现都需要调用UserDao对象的方法。这个时候 就说UserManager依赖UserDao去实现增加用户,和删除用户的操作。
这个是具体到业务实现来说的
(6).泛化关系:表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系.我们的模版抽象方法就是这种模式.
(7).实现关系:关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。
其中,聚合关系合成关系又属于关联关系
4.类图的表示(如果是以图形该怎么表示)
(1)类表示:类图中已长方形表示是对象的蓝图,其中包含3个组成部分。第一个是Java中定义的类名。第二个是属性(attributes)。第三个是该类提供的方法。属性和操作之前可附加一个可见性修饰符。加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图A的“Java”区域所示。
Du: (+)—public<所有,异包类> (#)—protected<仅异包子类> ()—省略<同包> (-)—private<本类>
(2)接口的表示:接口是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用下面的那个图标来表示(上面一个圆圈符号,圆圈符号下面是接口名,中间是直线,直线下面是方法名),也可由附加了<<interface>>的一个标准类来表示。通常,根据接口在类图上的样子,就能知道与其他类的关系
(3)包:
类图中就是两个叠在以前的长方形表示表示。上面的长方形比下面的小。
包是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,你通常拥有逻辑性的包,它主要用于对你的模型进行组织。你还会拥有物理性的包,它直接转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。
(4)依赖(Dependency):
虚线+箭头指向被调用的类。
实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。
(5)关联关系:
当前类用箭头+实指向被关联的类
(6)聚合关系:
空心菱形+实线+箭头指向部分
(7)合成关系:
实心菱形+实线+箭头指向部分
(8)泛化关系:
由子类开始从实线+箭头指向父类
(9)实现关系:
由父类虚线+箭头指向子类的实现
5.类图在项目中的具体运用(具体实例)
看附件.
6.画出简单的类图(具体引用)
看附件.
附件是直接在网上拷贝的资料.
上一篇: java IO —— IO 概述