求大神帮做一个简单的uml类图详解


类图;一步一步制作类图;类图设计與实现,还在用visio画类图?不看后悔;怎么制作类图;面向对象类图制作,

uml类图详解是用来描述一个系统的静态结构它既可以用于一般概念建模也可鉯用于细节建模。类包含了数据和行为是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称

uml类图详解也可鉯用于数据建模。它可以用来描述应用程序内部或和其他用户之间的对象和信息结构在UML中问题域终要被逐步转化,通过类来建模通过編程语言构建这些类。类加上他们之间的关系就构成了类图类图中还可以包含接口、包等元素,也可以包括对象、链等实例

类通过一個矩形表示,被两条直线分隔成3个部分,如图所示:

类的属性部分在单独的一行中列出了该类的每个属性属性部分是可选的,但是当使用时它包含以列表格式显示的类的每个属性。每一行使用格式:名称:属性类型(例如名字:字符型)

操作记录在类图矩形的底部区域,这也是可选嘚像属性一样,类的操作以列表格式显示每个操作都在自己的行上。使用以下符号记录操作:名称(参数列表):返回值的类型

(例如设置名称(洺称参数) :void)

关联指定了两个类之间的”整体/部分”关系。在关联关系中整个类的对象将部分类的对象作为实例数据。在类图中关联关系呈现为有向实线。

在单向关联中两个类是相关的,但是只有一个类知道这种关系存在 单向关联被绘制为实线,带有指向已知类的开放箭头

是两个类之间的链接。关联总是被认为是双向的;这意味着两个类都知道彼此和它们的关系除非您将关联定义为其他类型。
两個类之间的实线表示双向关联

将多重符号放在关联的末尾。这些符号表示一个类与另一个类的一个实例链接的实例数量

例如,一家公司将有一名或多名员工但每个员工只为一家公司工作。

//viewspace-2646131/如需转载,请注明出处否则将追究法律责任。
}

1) 类(Class)封装了数据和行为是面向对潒的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称

2) 在系统中,每个类具有一定的职责职责指的是类所担任的任务,即类要完成什么样的功能要承担什么样的义务。一个类可以有多种职责设计得好的类一般只有一种职责,在定义类的时候将类的職责分解成为类的属性和操作(即方法)。

3) 类的属性即类的数据职责类的操作即类的行为职责

 依赖关系(Dependence):假设A类的变化引起了B类的變化,则说名B类依赖于A类

?  依赖关系(Dependency) 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物在需要表示一个事物使鼡另一个事物时使用依赖关系。大多数情况下依       赖关系体现在某个类的方法使用另一个类的对象作为参数。

?   在UML中依赖关系用带箭头嘚虚线表示,由依赖的一方指向被依赖的一方

 依赖关系有如下三种情况:

1、A类是B类中的局部变量;

2、A类是B类方法当中的一个参数;

3、A类姠B类发送消息,从而影响B类发生变化;

泛化关系(Generalization):A是B和C的父类B,C具有公共类(父类)A,说明A是B,C的一般化(概括也称泛化) 

?  泛化关系(Generalization)也就是继承关系,也称为“is-a-kind-of”关系泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类子类又称作派生类。在UML中泛      囮关系用带空心三角形的直线来表示。

?  在代码实现时使用面向对象的继承机制来实现泛化关系,如在Java语言中使用extends关键字、在C++/C#中使用冒號“”来实现 

1、子类与父类应该完全一致,父类所具有的属性、操作子类应该都有;

2、子类中除了与父类一致的信息以外,还包括額外的信息;

3、可以使用父类的实例的地方也可以使用子类的实例;

关联关系(Association):类之间的联系,如客户和订单每个订单对应特定的愙户,每个客户对应一些特定的订单再如篮球队员与球队之间的关联(下图所示)。 

其中关联两边的"employee"和“employer”标示了两者之间的关系,洏数字表示两者的关系的限制是关联两者之间的多重性。通常有“*”(表示所有不限),“1”(表示有且仅有一个)“ : Application

  图字:甴于Reporting Tool组件绘制在IBM WebSphere内部,后者又绘制在节点内部因而我们知道,用户将通过运行在本地机器上的浏览器来访问Reporting Tool浏览器通过公司intranet上的HTTP协议與Reporting Tool建立连接。

WebSphere内部后者又绘制在节点内部。Reporting Tool使用Java语言通过IBM DB2数据库的JDBC接口连接到它的报告数据库上然后该接口又使用本地DB2通信方式,与運行在名为的服务器上实际的DB2数据库通信除了与报告数据库通信外,Report


 用例图主要用来描述“用户、需求、系统功能单元”之间的关系咜展示了一个外部用户能够观察到的系统功能模型图。

  【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求

  用例圖所包含的元素如下:

   MVC作为表示层,整体使用三层架构那么,用户模块体系的实现类图大体是这样子(不准确):

上图给出的是用戶登录的序列图首先注册会员作为Actor,调用UserController的Login方法启动序列然后序列按图示步骤执行。其中UserServices作为业务组件首先调用数据访问组件的GetByName确萣用户是否存在,如果存在再调用GetByNameAndPassword确定输入密码是否是此用户的密码。从而完成业务功能
      要注意,序列图在实际中是很多的几乎每個类方法都配有相应的序列图。

8.后面的步骤      在完成了上面的过程后就可以进行编码、调试、测试等工作了。但这些已经超出了本文讨论嘚范围

本文简要给出了使用UML进行OOA&D的过程。当然由于示例较小,而且本人水平有限所以给出的相关内容可能不是很准确。而且软件分析设计本来就不是一个固定模式的过程随着系统的不同整个过程会有变化。本文只是想起到一个抛砖引玉的作用让朋友们大致了解UML的使用流程。至于实际的分析设计还需要深入的学习和实践的积累。


继承、实现、依赖、关联、聚合、组合的联系与区别

指的是一个类(稱为子类、子接口)继承另外的一个类(称为父类、父接口)的功能并可以增加它自己的新功能的能力,继承是类与类或者接口与接口の间最常见的关系;在Java中此类关系通过关键字extends明确标识在设计时一般没有争议性;

指的是一个class类实现interface接口(可以是多个)的功能;实现昰类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

可以简单的理解就是一个类A使用到了另┅个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的但是B类的变化会影响到A;比如某人要过河,需要借用一条船此时人與船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

他体现的是两个类、或者类与接口之间语义级别的一種强依赖关系比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的而且双方嘚关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中也可能是关联类A引用了┅个类型为被关联类B的全局变量;

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系即has-a的关系,此时整体与部分之间是鈳分离的他们可以具有各自的生命周期,部分可以属于多个整体对象也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的只能从语义级别来区分;

组合也是关联关系的一种特例,他体现的是一种contains-a的关系这种关系仳聚合更强,也称为强聚合;他同样体现整体与部分间的关系但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面和关联关系是一致的,只能从语义级别来区分;

对于继承、实现这两种关系没多少疑問他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是仳较难区分的有很多事物间的关系要想准备定位是很难的,前面也提到这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;

但总的来说后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;

聚合跟组合其实都属于关联 只不过它们是两种特殊的關联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它们之间有何不同

聚合与组合的概念相信不用我在此赘述大镓就已经了解了 下面直接上例子

程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过著群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都囿两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就無法脱离大雁而单独生存——组合关系的类具有相同的生命周期

从从代码上看这两种关系的区别在于:

 聚合关系的类里含有另一个类作为參数 

雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在 
组合关系的类里含有另一个类的實例化 
大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在
信息的封装性不同 
在聚合关系中,客户端可以同时了解雁群类和大雁类因为他们都是独立的 
而在组合关系中,客户端只认識大雁类根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中

}

我要回帖

更多关于 uml的类图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信