- 浏览: 641212 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (105)
- Python (3)
- Oracle (6)
- Tomcat (3)
- Google Chromium (4)
- Java (38)
- CSS (1)
- Eclipse (3)
- 随笔 (0)
- Xml (2)
- scala (2)
- MOVE (1)
- Redis (5)
- activiti (0)
- facebook (0)
- Idea (0)
- Cloud Foundry (3)
- JGoodies (0)
- Ruby (0)
- linux (1)
- Proto.tar.gz (0)
- svg (1)
- d3.js (1)
- javascript (1)
- gradle (1)
- R (1)
- grails (4)
- jenkins (2)
- svn (1)
最新评论
-
qq860067700:
保存以后我怎么模糊查询?怎么批量删除 字节化之前有前缀 pre ...
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) -
zlele:
你好,这个遍历文件的结果是乱序的吗
Python 用 os.walk 遍历目录 -
mdsp25xhm:
使用protobuf吧,解析效率比java序列化性能高许多
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) -
josico:
试试看 这样是不行的 alanland 写道josico 写道 ...
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) -
alanland:
josico 写道redis中 存的是这么一个value,并且 ...
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)
1
当一个操作有参数时,参数被放在操作的括号内;每个参数都使用这样的格式:“参数名:参数类型”。 图 3:Flight类操作参数,包括可选择的“in”标识。 当文档化操作参数时,你可能使用一个可选择的指示器,以显示参数到操作的输入参数、或输出参数。这个可选择的指示器以“in”或“out”出现,如图3中的操作区域所示。一般来说,除非将使用一种早期的程序编程语言,如Fortran ,这些指示器可能会有所帮助,否则它们是不必要的。然而,在 C++和Java中,所有的参数是“in”参数,而且按照UML规范,既然“in”是参数的默认类型,大多数人将会遗漏输入/输出指示器。 继承 在面向对象的设计中一个非常重要的概念,继承
,指的是一个类(子类)继承
另外的一个类(超类)的同一功能,并增加它自己的新功能(一个非技术性的比喻,想象我继承了我母亲的一般的音乐能力,但是在我的家里,我是唯一一个玩电吉他的人)的能力。为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的,单键头(或三角形)的实线指向超类。考虑银行账户的类型:图 4 显示 CheckingAccount 和 SavingsAccount 类如何从 BankAccount 类继承而来。 图 4: 继承通过指向超类的一条闭合的,单箭头的实线表示。 在图 4 中,继承关系由每个超类的单独的线画出,这是在IBM Rational Rose和IBM Rational XDE中使用的方法。然而,有一种称为
树标记
的备选方法可以画出继承关系。当存在两个或更多子类时,如图 4 中所示,除了继承线象树枝一样混在一起外,你可以使用树形记号。图 5 是重绘的与图 4 一样的继承,但是这次使用了树形记号。 图 5: 一个使用树形记号的继承实例 抽象类及操作 细心的读者会注意到,在图 4 和 图5 中的图中,类名BankAccount和withdrawal操作使用斜体。这表示,BankAccount 类是一个抽象类,而withdrawal方法是抽象的操作。换句话说,BankAccount 类使用withdrawal规定抽象操作,并且CheckingAccount 和 SavingsAccount 两个子类都分别地执行它们各自版本的操作。 然而,超类(父类)不一定要是抽象类。标准类作为超类是正常的。 关联 当你系统建模时,特定的对象间将会彼此关联,而且这些关联本身需要被清晰地建模。有五种关联。在这一部分中,我将会讨论它们中的两个 -- 双向的关联和单向的关联,而且我将会在Beyond the basics
部分讨论剩下的三种关联类型。请注意,关于何时该使用每种类型关联的详细讨论,不属于本文的范围。相反的,我将会把重点集中在每种关联的用途,并说明如何在类图上画出关联。 双向(标准)的关联 关联是两个类间的联接。关联总是被假定是双向的;这意味着,两个类彼此知道它们间的联系,除非你限定一些其它类型的关联。回顾一下Flight 的例子,图 6 显示了在Flight类和Plane类之间的一个标准类型的关联。 图 6:在一个Flight类和Plane类之间的双向关联的实例 一个双向关联用两个类间的实线表示。在线的任一端,你放置一个角色名和多重值。图 6 显示Flight与一个特定的Plane相关联,而且Flight类知道这个关联。因为角色名以Plane类表示,所以Plane承担关联中的“assignedPlane”角色。紧接于Plane类后面的多重值描述0...1表示,当一个Flight实体存在时,可以有一个或没有Plane与之关联(也就是,Plane可能还没有被分配)。图 6 也显示Plane知道它与Flight类的关联。在这个关联中,Flight承担“assignedFlights”角色;图 6 的图告诉我们,Plane实体可以不与flight关联(例如,它是一架全新的飞机)或与没有上限的flight(例如,一架已经服役5年的飞机)关联。 由于对那些在关联尾部可能出现的多重值描述感到疑惑,下面的表3列出了一些多重值及它们含义的例子。 表 3: 多重值和它们的表示 单向关联 在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在。图 7 显示单向关联的透支财务报告的一个实例。 图 7: 单向关联一个实例:OverdrawnAccountsReport 类 BankAccount 类,而 BankAccount 类则对关联一无所知。 一个单向的关联,表示为一条带有指向已知类的开放箭头(不关闭的箭头或三角形,用于标志继承)的实线。如同标准关联,单向关联包括一个角色名和一个多重值描述,但是与标准的双向关联不同的时,单向关联只包含已知类的角色名和多重值描述。在图 7 中的例子中,OverdrawnAccountsReport 知道 BankAccount 类,而且知道 BankAccount 类扮演“overdrawnAccounts”的角色。然而,和标准关联不同,BankAccount 类并不知道它与 OverdrawnAccountsReport 相关联。
2
软件包 不可避免,如果你正在为一个大的系统或大的业务领域建模,在你的模型中将会有许多不同的分类器。管理所有的类将是一件令人生畏的任务;所以,UML 提供一个称为
软件包
的组织元素。软件包使建模者能够组织模型分类器到名字空间中,这有些象文件系统中的文件夹。把一个系统分为多个软件包使系统变成容易理解,尤其是在每个软件包都表现系统的一个特定部分时。
3
在图中存在两种方法表示软件包。并没有规则要求使用哪种标记,除了用你个人的判断:哪种更便于阅读你画的类图。两种方法都是由一个较小的长方形(用于定位)嵌套在一个大的长方形中开始的,如图 8 所示。但是建模者必须决定包的成员如何表示,如下: 图 8:在软件包的长方形内显示软件包成员的软件包元素例子 图 9:一个通过连接线表现软件包成员的软件包例子 了解基础重要性 在 UML 2 中,了解类图的基础更为重要。这是因为类图为所有的其他结构图提供基本的构建块。如组件或对象图(仅仅是举了些例子)。 图 10:Professor类和Student类实现Person接口的类图实例 在图 10 中显示的图中,Professor和Student类都实现了Person的接口,但并不从它继承。我们知道这一点是由于下面两个原因:1) Person对象作为接口被定义 -- 它在对象的名字区域中有“interface”文本,而且我们看到由于Professor和Student对象根据画类对象的规则(在它们的名字区域中没有额外的分类器文本)标示,所以它们是
类
对象。 2) 我们知道继承在这里没有被显示,因为与带箭头的线是点线而不是实线。如图 10 所示,一条带有闭合的单向箭头的点
线意味着实现(或实施);正如我们在图 4 中所见到的,一条带有闭合单向箭头的实
线表示继承。 更多的关联 在上面,我讨论了双向关联和单向关联。现在,我将会介绍剩下的三种类型的关联。 关联类 在关联建模中,存在一些情况下,你需要包括其它类,因为它包含了关于关联的有价值的信息。对于这种情况,你会使用
关联类
来绑定你的基本关联。关联类和一般类一样表示。不同的是,主类和关联类之间用一条相交的点线连接。图 11 显示一个航空工业实例的关联类。 图 11:增加关联类 MileageCredit 在图 11 中显示的类图中,在Flight类和 FrequentFlyer 类之间的关联,产生了称为 MileageCredit的关联类。这意味当Flight类的一个实例关联到 FrequentFlyer 类的一个实例时,将会产生 MileageCredit 类的一个实例。 聚合 聚合是一种特别类型的关联,用于描述“总体到局部”的关系。在基本的聚合关系中,
部分类
的生命周期独立于整体类
的生命周期。 举例来说,我们可以想象,车
是一个整体实体,而
车轮
轮胎是整辆车的一部分。轮胎可以在安置到车时的前几个星期被制造,并放置于仓库中。在这个实例中,Wheel类实例清楚地独立地Car类实例而存在。然而,有些情况下,
部分
类的生命周期并
不
独立于
整体
类的生命周期 -- 这称为合成聚合。举例来说,考虑公司与部门的关系。公司和部门
都建模成类,在公司存在之前,部门不能存在。这里Department类的实例依赖于Company类的实例而存在。 让我们更进一步探讨基本聚合和组合聚合。 基本聚合
有聚合关系的关联指出,某个类是另外某个类的一部分。在一个聚合关系中,子类实例可以比父类存在更长的时间。为了表现一个聚合关系,你画一条从父类到部分类的实线,并在父类的关联末端画一个未填充棱形。图 12 显示车和轮胎间的聚合关系的例子。 图 12: 一个聚合关联的例子 组合聚合
组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。在图13中,显示了Company类和Department类之间的组合关系,注意组合关系如聚合关系一样绘制,不过这次菱形是被填充的。 图 13: 一个组合关系的例子 在图 13 中的关系建模中,一个Company类实例至少总有一个Department类实例。因为关系是组合关系,当Company实例被移除/销毁时,Department实例也将自动地被移除/销毁。组合聚合的另一个重要功能是部分类只能与父类的实例相关(举例来说,我们例子中的Company类)。 反射关联 现在我们已经讨论了所有的关联类型。就如你可能注意到的,我们的所有例子已经显示了两个不同类之间的关系。然而,类也可以使用反射关联与它本身相关联。起先,这可能没有意义,但是记住,类是抽象的。图 14 显示一个Employee类如何通过manager / manages角色与它本身相关。当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。 图 14:一个反射关联关系的实例 图 14 描绘的关系说明一个Employee实例可能是另外一个Employee实例的经理。然而,因为“manages”的关系角色有 0..*的多重性描述;一个雇员可能不受任何其他雇员管理。 可见性 在面向对象的设计中,存在属性及操作可见性的记号。UML 识别四种类型的可见性:public,protected,private及package。 UML 规范并不要求属性及操作可见性必须显示在类图上,但是它要求为每个属性及操作定义可见性。为了在类图上的显示可见性,放置可见性标志于属性或操作的名字之前。虽然 UML 指定四种可见性类型,但是实际的编程语言可能增加额外的可见性,或不支持 UML 定义的可见性。表4显示了 UML 支持的可见性类型的不同标志。 表 4:UML 支持的可见性类型的标志 现在,让我们看一个类,以说明属性及操作的可见性类型。在图 15 中,所有的属性及操作都是public,除了 updateBalance 操作。updateBalance 操作是protected。 图 15:一个 BankAccount 类说明它的属性及操作的可见性 1 delayFlight没有返回值,因为我作出了设计决定,不要返回值。有一点可以争论的是,延迟操作应该返回新的到达时间,而且,如果是这种情形,操作属性将显示为 delayFlight(numberOfMinutes : Minutes) : Date。 2可能看起来很奇怪, BankAccount 类不知道 OverdrawnAccountsReport 类。这个建模使报表类可以知道它们报告的业务类,但是业务类不知道它们正在被报告。这解开两个对象的耦合,并因此使系统变得更能适应变化。 3 软件包对于组织你的模型类是庞大的,但是记住重要的一点是,你的类图应该是关于建模系统的容易交流的信息。在你的软件包有许多类的情况下,最好使用多个主题类图,而不是仅仅产生一个大的类图。 4 要理解重要一点,当我说“所有的那些成员”时,我仅仅意味着在当前图中的类将显示出来。显示一个有内容的软件包的图,不需要显示它的所有内容。它可以依照一些准则,显示包含元素的子集,这个准则就是并非所有的软件包分类器都是必需的。 5 当画一个类图时,在 UML 规范中,全部要做的只是把类放入长方形的顶部区域,而你同理处理接口;然而,UML 规范认为,在这个区域放置“class”文本是可选的,如果类没有显示,那么它应该被假设。 -------------------------------------------------------------------- 1
生命线画作一个方格,一条虚线从上而下,通过底部边界的中心(图 3)。生命线名字放置在方格里。 3
变体支持经典的“if then else”逻辑的建模(举例来说,如果 我买三个,然后 我得到 我购买的20% 折扣;否则 我得到我购买的 10% 折扣)。 就如你将会在图 8 中注意到的,一个变体的组合碎片元件使用框架来画。单词“alt”放置在框架的namebox里。然后较大的长方形分为 UML 2 所称的操作元。
4
操作元被虚线分开。每个操作元有一个约束进行测试,而这个约束被放置在生命线顶端的操作元的左上部。
5
如果操作元的约束等于“true”,然后那个操作元是要执行的操作元。 6
被放置在左上角。然后循环的消息序列被放在框架内容区的其余部分中。在一个循环中,除了标准的布尔测试外,一个约束能测试二个特定的条件式。特定的约束条件式是写作“minint = [the number]”(例如,“minint = 1”)的最小循环次数,和写作“maxint = [the number]”(例如,“maxint = 5”)的最大循环次数。通过最小循环检验,循环必须运行至少指定次数,而循环执行次数不能达到约束指定的最大循环次数。 在图 10 中显示的循环运行,直到 reportsEnu 对象的 hasAnotherReport 消息返回false。如果循环序列应该运行,这个序列图的循环使用一个布尔测试确认。为了阅读这个图,你和平常一样,从顶部开始。当你到达循环组合碎片,做一个测试,看看值 hasAnotherReport 是否等于true。如果 hasAnotherReport 值等于true,于是序列进入循环片断。然后你能和正常情况一样,在序列图中跟踪循环的消息。 7
在 UML 2 中开始,引进“交互进行”元件。追加交互进行的可以说是 UML 2 交互建模中的最重要的创新。交互进行增加了功能,把原始的序列图组织成为复杂的序列图。由于这些,你能组合(重用)较简单的序列,生成比较复杂的序列。这意味你能把完整的、可能比较复杂的序列,抽象为一个单一的概念单位。 一个交互进行元件使用一个框架绘制。文字“ref”放置在框架的 namebox 中,引用的序列图名字放置在框架的内容区里,连同序列图的任何参数一起。引用序列图的名字符号如下模式: 序列图名[(参数)] [: 返回值] 两个例子: Retrieve Borrower Credit Report(ssn) : borrowerCreditReport 或者 Process Credit Card(name, number, expirationDate, amount : 100) 在例子 1 中,语法调用叫做Retrieve Borrower Credit Report的序列图,传递给它参数 ssn。序列Retreive Borrower Credit Report返回变量 borrowerCreditReport 。 在实例 2 中,语法调用叫做Process Credit Card的序列图,传递给它参数name,number,expiration date,和 amount。然而,在例子 2 中,amount参数将会是值100。因为例子2没有返回值标签,序列不返回值(假设,建模的序列不需要返回值)。 序列图是一个用来记录系统需求,和整理系统设计的好图。序列图是如此好用的理由是,因为它按照交互发生的时间顺序,显示了系统中对象间的交互逻辑。 原文:http://blog.163.com/chen_lovtime/blog/static/100098749200952571312277/
可能的多重值描述
表示
含义
0..1
0个或1个
1
只能1个
0..*
0个或多个
*
0个或多个
1..*
1个或我个
3
只能3个
0..5
0到5个
5..15
5到15个
标志
可见性类型
+
Public
#
Protected
-
Private
~
Package
1.
2.
发表评论
-
jdk7透明异形窗体
2014-04-10 20:42 2126在jdk6中设置透明异形窗体的方法与jdk7方法的比较 ... -
Linux 浏览器运行applet相关
2013-09-10 09:18 1352首先 有这样一个页面地址可以检测你浏览器当前 java 的环 ... -
joda-time 简介
2013-06-27 13:16 1250基于java的项目,最大 ... -
Joda-Time 简介
2013-06-27 11:00 1764在编写企业应用程序 ... -
JetBrains开源其Kotlin语言,基于JVM的新编程语言
2012-08-22 08:33 1919JetBrains开源其Kotlin语言,基于JVM的 ... -
Linux 下 Tomcat 远程调试的问题
2012-08-07 10:15 1509之前远程调试一直是写一个debug的脚本,如下 #!/ ... -
如何编写jnlp文件
2010-06-27 13:29 5241jnlp就是Java Network Launch Proto ... -
出色的 “清洁工具” —— 理解 IBM Java 垃圾收集器,第 2 部分: 垃圾收集
2010-06-22 16:16 1054出色的 “清洁工具” —— 理解 IBM Java 垃圾 ... -
不要忘记内存
2010-06-22 16:15 1238不要忘记内存 如何监控 Java 应用程序的 Windo ... -
Java 理论和实践: 安全构造技术
2010-06-22 16:15 1255Java 理论和实践: 安全构造技术 在构造期 ... -
Java 技术,IBM 风格: 垃圾收集策略,第 2 部分
2010-06-22 16:14 1127Java 技术,IBM 风格: 垃圾收集策略,第 ... -
关注性能: 谈论垃圾
2010-06-22 16:14 1121关注性能: 谈论垃圾 您知道垃圾收集器在干什么 ... -
垃圾收集器与Java编程
2010-06-22 16:13 1031垃圾收集器与Java编程 ... -
Java 2 引用类使用指南
2010-06-22 16:13 1202Java 2 引用类使用指南 学习如何有效地使用 Sof ... -
优化 Java 垃圾收集的性能
2010-06-22 16:12 1169优化 Java 垃圾收集的性能 如何利用 IBM Jav ... -
Java 理论和实践: 用软引用阻止内存泄漏
2010-06-22 16:11 1032Java 理论和实践: 用软引用阻止内存泄漏 ... -
Java 理论与实践: 用弱引用堵住内存泄漏
2010-06-22 16:11 1316Java 理论与实践: 用弱引用堵住内存泄漏 ... -
Java 理论与实践: 用弱引用堵住内存泄漏
2010-06-22 16:10 1160Java 理论与实践: 用弱引用堵住内存泄漏 ... -
跨越边界: Java 模型以外的类型策略
2010-06-22 16:09 1286跨越边界: Java 模型以外的类型策略 ... -
Java 类的热替换 —— 概念、设计与实现
2010-06-22 16:09 1408Java 类的热替换 —— 概念、设计与实现 ...
相关推荐
《UML之类图详解》 在软件开发领域,UML(Unified Modeling Language,统一建模语言)是一种标准化的建模语言,用于可视化、构建和文档化软件系统的设计。类图是UML中的一种核心图,它清晰地表示了系统的静态结构,...
时序图(SequenceDiagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、...
本文将深入探讨一个基于UML设计的智能停车场系统,主要关注时序图、用例图和类图,这些都是UML中的关键元素。 首先,时序图(Sequence Diagram)展示了对象间的交互顺序,它强调时间轴,描述了事件发生的顺序。在...
**类图(Class Diagram)**是UML中最重要的图之一,它描述了系统中的类、接口、继承关系和关联。在留言板系统中,类图可能包括“留言类”,“用户类”,“管理员类”等,同时定义它们的属性和操作,以及它们之间的...
### UML时序图知识点详解 #### 一、UML时序图概述 **时序图**(Sequence Diagram)是UML(Unified Modeling Language,统一建模语言)中的一种交互图,主要用于展示系统中对象之间的交互关系及其发生的顺序。通过...
时序图,又称序列图,是UML的动态行为图之一,着重描绘对象间的交互,尤其是消息传递的时间顺序。在软件开发中,时序图用于描述系统中对象如何协作完成特定用例。使用OmniGraffle的时序图模板,设计师可以轻松地构建...
eclipse中AmaterasUML工具,Eclipse绘制UML图的插件之一,支持类图、时序图等的绘制。支持UMLactivity图,class图,sequence图,usecase图等;支持与Java class/interface之间的相互导入导出。
时序图展示了不同对象在特定场景下的交互顺序。顾客购买商品时,顾客先挑选商品,然后付款,输入商品条形码,收银系统反馈信息,找零,并存储销售信息。退货时,顾客提交退货单,输入条形码,收银员处理退款,存储...
在本文中,我们将深入探讨UML中的两类重要图表——类图和时序图。 首先,类图是UML中用于表示类和类之间关系的静态结构图。类图主要包含以下几个关键元素: 1. 泛化关系(Generalization):这是一种继承关系,用...
UML提供了多种模型图,例如用例图、类图、时序图、协作图、状态图、活动图等。 2.1 用例图 用例图是一种描述系统的功能需求的模型图。它由参与者、用例和关系组成。参与者是系统的用户或其他外部实体,例如游客、...
系统需求是网上商城UML图的核心组件之一。它描述了网上商城的功能需求和非功能需求。功能需求包括网上商城的业务功能,如浏览商品、下订单、付款等,而非功能需求则包括网上商城的性能、安全性、可扩展性等方面。 ...
UML的时序图就是其中一种非常重要的图表,主要用于描述对象之间如何随时间交互以完成特定任务。尽管UML在提高软件设计的可理解性方面非常有用,但它在逻辑严密性上存在一定的不足,这在面对复杂系统时尤其明显。因此...
它主要展示了系统中的类、类的属性、操作以及类与类之间的关系。 - **类的表示**:在类图中,一个类通常由三个部分组成: - 第一层:类名,如果是抽象类则字体通常为斜体。 - 第二层:类的属性(即数据成员),...
- 随着社会的发展和生活水平的提高,看电影成为了人们休闲娱乐的主要方式之一。传统的购票方式已不能满足现代人的需求,因此需要一个自动化、人性化的售票系统。 - 系统的目标是在发布后的6个月内,使电影院的收入...
在本文中,我们将深入探讨StarUML的核心功能、如何使用它来创建类图和时序图,以及与之相关的文件。 1. **类图(Class Diagram)**: 类图是UML中用来表示系统静态结构的图形,包括类、接口、协作等元素。在...
UML是一种标准化的建模语言,用于软件设计和系统分析,包括类图、序列图、用例图等多种图表类型。类图是UML中的一种,它显示了类、接口以及它们之间的关系,是理解和组织代码结构的有效方式。 在Eclipse中,通过...
### UML2.x之序列图详解 #### 一、序列图概述 **序列图**是UML(统一建模语言)的重要组成部分之一,主要用于描述系统中对象间如何交互以及交互发生的顺序。相比于之前的版本UML1.x,UML2.x在语言定义上更加精确,...
UML基本模型是UML建模的核心部分,包括用例图、时序图、协作图、状态图、活动图等。 用例图是UML的一种静态模型,用于描述系统的功能需求。系统的参与者主要有三类:读者(也可称为借阅者)、图书馆管理员、图书馆...