跬步致远——Ai92

物换心不移,一生微笑同看雨过天晴。

用户操作
[即时聊天] [发私信] [加为好友]
苑永凯ID:ai92
181273次访问,排名412好友0人,关注者1
ai92的文章
原创 73 篇
翻译 1 篇
转载 2 篇
评论 259 篇
Ai92的公告
虚心、慎独
宽厚、吃亏
寡言、不嗔
不说人过
不文己过
不覆己过
闻谤不辨
最近评论
michael:朋友,我是一位刚接触模式的新手,但我对java设计模式十分感兴趣,还希望兄台,指点一二呀! 是否可以给我你的QQ,邮箱;
hu200298:看不到图片
hu200298:看不到图片
jacyxu:怎么总是找不到TestCase类啊 环境变量怎么配置的啊
SDF:wow gold
runescape gold
crm
收藏
    相册
    留念济南
    点击排行榜
    1-杀毒手记:遭遇Infostealer
    2-JUnit入门
    3-设计已死?
    4-深入浅出工厂模式
    5-UML类图介绍
    6-JUnit测试建议
    7-Use Case编写建议
    8-JUnit源码分析(一)
    朋友的博客
    a lonely bug's words(RSS)
    CharlesYY的专栏(RSS)
    chinakite的blog(RSS)
    liuxb的blog(RSS)
    shuyaji的专栏(RSS)
    梦想风暴(RSS)
    笑看人生的专栏(RSS)
    雪之舞的专栏(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 UML 类图介绍收藏

    新一篇: Validation framework经验谈 | 旧一篇: Tomcat初次使用问题手记

    UML 类图介绍

    一、UML简介

    UMLUnified Modeling Language)即统一建模语言,是OMGObject Management Group)发表的图标式软件设计语言。

    UML的功能:

    可视化:使用图表的形式来表现业务关系或者物理关系,可以促进对问题的理解和解决。

    说明:UML提供了一种通用的、精通的、没有歧义的通信机制进行。

    建造:UML通过自己的语法规则使得可以通过使用建模工具软件将设计模式映射到一种语言上。

    建文档:使用UML进行设计可以同时产生系统设计文档。

    UML包括:

                  用例图(Use case diagrams

                  类图(Class diagrams

                  序列图(Sequence diagrams

                  合作图(Collaboration diagrams

                  状态图(Statechart diagrams

                  活动图(Activity diagrams

                  构件图(Component diagrams

                  部署图(Deployment diagrams

    (蓝色为较重要并且常用的图)

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

    类图最基本的元素是类或者接口。

     

    二、类图

     

    1. 类(Class

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

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

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

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

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

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

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

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

    1

           public class TaxCalculator

    {   

          private long  taxRate ;

          private int  salary  ;

         

          public TaxCalculator(long taxRate)

          {

               this.taxRate = taxRate ;

          }

              

          public long countTax()

          {   

               return taxRate*salary; 

          }

         

          public int getSalary()

          {

               return salary;

          }

         

          public void setSalary(int salary)

          {

               this.salary = salary;

          }

    }

    TaxCalculator

    -taxRate:long

    +TaxCalculator(a:long)

    +countTax():long

    salary:long

         
    2.
    包(Package

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

    例:

     

     


    3.
    接口(Interface

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

    例:

    public interface TaxCalculator

    {

          public long countTax();

          public int getSalary();

          public void setSalary(int salary);

    }

    画法一:

          画法二:

    画法二:

          画法二:

         

    Interface

    TaxCalculator

    +countTax():long

    +getSalary():int

    +setSalary()

     

     

    4. 关系

    常见的关系有:一般化关系、实现关系、聚合关系、合成关系和依赖关系。请注意不同关系在图中连线表示的不同。     

    4.1一般化关系(Generalization

    在有的书籍和资料中也叫做“泛化关系”。

          一般化关系表示类与类、接口与接口之间的继承关系。关系中的箭头由子类指向父类。在Java中,用extends关键字来直接表示这种关系。

          例:

    public abstract class Employee{

    }

    public class Programmer extends Employee{

    }

     

     

     

     

    4.2实现(Realization

    实例关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。关系中的箭头由实现接口的类指向被实现的接口。在Java中,实现关系可直接用implements关键字来表示。

    例:

    public interface CollegePerson{

    }

    public class Professor implements CollegePerson{

    }

    表示方法一:(在Rose2003 下实现如下,连接线没有箭头,因为方向显而易见)

    表示方法二:

    表示方法二:

     

     

    4.3关联(Association

    表示类与类之间的连接。它使一个类的可见属性和方法被另一个类使用。关联可以是双向或者单向的。双向的关联箭头是可选的,单向的箭头指向遍历或者查询的方向。在Java中,关联使用实例变量来实现。在关联关系中可以使用附加的基数来说明类之间对应的个数。

     

    基数

    含义

    0..1

    零个或者一个实例

    0..*或者*

    没有限制,任意

    1

    有且只能一个实例

    1..*

    至少有一个实例

    常见的基数

     

    例:以权限中的用户组、用户角色为例,一个用户角色可以属于一个或者多个用户组,一个用户组则可以包含多个用户角色。如果用户组采用下面的方法来获得用户角色的权限

          public class UserGroup{

    private UserRole uRole ;

                ......

    }

    public class UserRole{

    }

    则表现在图中为:(注意箭头的画法)


    注意:一个关联关系往往是聚合关系或者是合成关系。


    注意:一个关联关系往往是聚合关系或者是合成关系。

     

    4.4聚合(Aggregation

    聚合是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。在Java中,聚合也是使用实例变量来实现的。
    关联和聚合的区别纯粹是概念上的,在Java语法上分辨不出来的。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。

    例:汽车与轮胎的关系可以很好的说问题。

    public class Car{

          private Tyres tyres;

    }

    public class Tyres{

    }

     

     

    4.5合成(Composition

    合成是聚合的一种特殊形式,暗示局部整体内部的生存期职责。合成关系是不能共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

          例:人和他的腿就是一个好的例子。

    public class Man{

          private Legs legs;

    }

    public class Legs{

    }

     

     

     

    4.6依赖(Dependency

    依赖也是类与类之间的连接,并且依赖总是单向的。实体之间一个使用关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例。更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用依赖来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的各个类之间的关系,表示出包和包的关系。

    例:给一个雇员计算薪水的时候,要使用计算器的例子

    public class Employee{

          public void calcSalary(Calculator cSalary)

          {

          }

    }

     

     

     


    三、小结

          在这里主要介绍了在阅读、设计类图中可能遇到的细节。希望能对大家有所帮助。由于个人水平有限,对UML认识不深,所以在正文中可能存在一些问题和不足,希望大家指正。

    发表于 @ 2004年12月02日 22:23:00|评论(loading...)|编辑

    新一篇: Validation framework经验谈 | 旧一篇: Tomcat初次使用问题手记

    评论

    #penpen 发表于2004-12-03 11:53:00  IP: 222.217.27.*
    怎么图片都不能显示?
    #Ai92 发表于2004-12-03 13:31:00  IP: 202.118.4.*
    不是吧??我这里可以的阿
    #somebody 发表于2004-12-03 14:43:00  IP: 222.187.124.*
    file:///C:/Documents%20and%20Settings/AI92/My%20Documents/My%20Pictures/UML/7.bmp
    图片就没有上传我们怎么看啊。
    #Richard Stevens 发表于2004-12-04 19:35:00  IP: 218.18.39.*
    图片怎么显示不出来,没有上传,大概只能本机看了。

    #Ai92 发表于2004-12-08 18:00:00  IP: 202.118.4.*
    图片终于传了上来了.给大家带来的不便,请见谅:)
    #辉 发表于2004-12-10 19:44:00  IP: 211.87.207.*
    写的不错,顶
    #maomao 发表于2005-01-10 16:17:00  IP: 222.64.100.*
    这个很8错,我喜欢,保存了,谢谢,省得我自己总结了:)
    #Ai92 发表于2005-01-10 16:43:00  IP: 202.118.4.*
    其实讲的还是比较基础,还有一些没有讲到,这篇文章主要目的是为了去除看设计模式文章的障碍。有空了我会尝试写的深一些的。
    #maomao 发表于2005-01-11 18:48:00  IP: 222.64.100.*
    为什么文件保存下来总缺图!!!!!离线下载也不行。不是要 我自己编辑把!!
    #Bill 发表于2005-02-23 17:56:00  IP: 61.49.223.*
    疯了啊,图片用了中文的文件名
    #Bill 发表于2005-02-23 18:00:00  IP: 61.49.223.*
    又疯了。回复了一下图片就显示了。
    #showerXP 发表于2005-03-23 16:51:00  IP: 220.176.31.*
    “其实讲的还是比较基础,还有一些没有讲到,这篇文章主要目的是为了去除看设计模式文章的障碍。有空了我会尝试写的深一些的。”

    可以考虑写一些XP,UP。这些东西更吸引人,特别是基于实际项目应用就特别好。
    #Ai92 发表于2005-03-24 17:16:00  IP: 202.118.4.*
    TO:showerXp
    谢谢你的建议:)
    #Ai92 发表于2005-10-28 10:23:00  IP: 211.100.21.*
    我彻底服了csdn blog 的编辑功能了
    修改后变成了这个样子,改了两次了!还是不行
    算了,大家凑合着看吧
    #jh 发表于2006-08-28 14:06:00  IP: 220.163.6.*
    写的好啊,有没有好的软件设计师考试方面的UML方面的资料,如有请给出一些,谢谢.
    #jh 发表于2006-08-28 14:09:00  IP: 220.163.6.*
    写的好啊,有没有好的软件设计师考试方面的UML方面的资料,如有请给出一些,谢谢.
    #jh 发表于2006-08-28 14:14:00  IP: 220.163.6.*
    写的好啊,有没有好的软件设计师考试方面的UML方面的资料,如有请给出一些,谢谢.
    #jh 发表于2006-08-28 14:14:00  IP: 220.163.6.*
    写的好啊,有没有好的软件设计师考试方面的UML方面的资料,如有请给出一些,谢谢.
    #jh 发表于2006-08-28 14:14:00  IP: 220.163.6.*
    写的好啊,有没有好的软件设计师考试方面的UML方面的资料,如有请给出一些,谢谢.
    #Ai92 发表于2006-08-28 19:32:00  IP: 59.81.135.*
    jh,谢谢夸奖……
    软件设计师,我考过,不过我没有看过什么资料。就是按照考试大纲,过滤了一遍知识点。并把朋友给的,老的历年题集翻了翻。
    UML方面,如果要买书的话,精粹、用户指南、参考手册大概可以选择其一吧:)
    #jh 发表于2006-08-28 14:28:00  IP: 220.163.6.*
    不好意思,网速不好,发多了.
    #wang 发表于2006-09-07 11:17:00  IP: 218.28.192.*
    写的非常好 我正在学UML 和设计模式 看了这些很好懂 很好理解
    #zythy 发表于2007-07-16 08:52:21  IP: 58.49.81.*
    看不到图片啊
    #gudumuyu 发表于2007-07-21 14:09:50  IP: 222.243.161.*
    我也看不到图片
    #matri 发表于2007-08-17 18:03:48  IP: 60.240.91.*
    很好懂,谢谢。
    #ztan 发表于2007-08-31 14:36:18  IP: 210.51.173.*
    我这里看不到图片
    #dearredapple 发表于2007-09-02 23:06:43  IP: 221.201.210.*
    我这里看不到图片
    #疯狂者 发表于2007-09-12 12:53:10  IP: 219.134.64.*
    提取图片
    #winson 发表于2007-09-21 11:41:34  IP: 192.193.160.*
    hf
    #aa 发表于2007-10-29 11:16:48  IP: 61.174.151.*
    aa
    #455 发表于2007-11-02 16:33:05  IP: 202.110.224.*
    445
    #Apan0206 发表于2007-11-04 20:46:47  IP: 60.63.146.*
    好呀
    #hadesmile 发表于2007-12-04 19:23:38  IP: 218.106.180.*
    看不了图啊
    #loafer 发表于2007-12-14 23:08:10  IP: 59.81.41.*
    看不了图啊
    #风中叶 发表于2007-12-16 01:04:31  IP: 222.35.150.*
    好啊
    #风中叶 发表于2007-12-16 01:06:58  IP: 222.35.150.*
    好啊
    #springdog 发表于2008-03-04 00:35:35  IP: 58.62.99.*
    看不到图片
    #fdsfsaf 发表于2008-04-08 01:09:10  IP: 219.143.148.*
    kankan
    #hu200298 发表于2008-09-25 11:32:30  IP: 211.65.234.*
    看不到图片
    #hu200298 发表于2008-09-25 11:32:54  IP: 211.65.234.*
    看不到图片
    发表评论