《设计模型创建设计类图》由会员分享,可在线阅读,更多相关《设计模型创建设计类图(68页珍藏版)》请在金锄头文库上搜索。
1、9 设计模型: 创建设计类图(DCD)目标: 创建设计类图(Design Class Diagrams) 识别DCD中的类、方法和关联.设计类图UML用类图表示类、接口及其关联静 态对象建模常用类图表示法UML 的正式 表示法 ,最上 面的格 式用来 区分包 名和类 名;第 二种非 正式格 式三个常见的 分栏: 1.类元名称 2.属性 3.操作 用关 键字 interf ace表 示接 口interface Runnable run()接口 的实 现和 子类 化依 赖具 有 多 重 性 的 关 联省 略 号 表 示 这 里 具 有 元 素 , 但 是 没 有 显 示 空 分 栏 的 正 式 含
2、 义 是“ 未 知” , 但 也 用 于 表 示“ 没 有”设计类图样例POSTenterItem()Sale Date isComplete:Boolean time makeLineItem()11Captures导航类的定义的三个区域框方法,有参数,但没有制定类型信息领域模型和设计模型中的类比较与领域模型不同的是,设计类图显示出了软件实体的 定义而不是真实世界中的概念。领域模 型概念透 视图设计模 型 DCD;软 件透视 图类元l类元:描述行为和结构特性的模型 元素l它们是对众多UML元素的泛化l最常用的两个类元是常规的类和接口表示UML属性的方式l属性文本,如currentSale:
3、Salel关联线l两者兼有表示UML属性的方式使用属性 文本表示 法使用关联 :这种风 格从视觉 上强调了 类之间的 关联指 名 Re gist er 具 有 对 一 个 Sal e实 例 的 引 用完整和明 确的风格 ,两者兼 有,但略 嫌冗余表示UML属性的方式准则:如果没有给出可见性,则通常假设属性为 私有l导航线箭头:由源对象指向目标对象,表示 Register的一个属性是Sale对象l多重性放置在目标一端(在没有明确指定时为1)l角色名只放置在目标一端,用以表示属性名称导航线(注)l在两个类的导航关系中,如果导航关系的一端 有箭头,则箭头代表了导航的方向。l然而,如果有一个”x”出现
4、在导航箭头的起始点 上则表明这种导航关系可以不发生。如果既没 有箭头,也没有“x”,则表明导航是双向的。UML支持的可见性类型的标志 标志可见性类型 +Public #Protected -Private Package“/”代表可导出(derived)特征何时使用属性文本(关联线)准则:对数据类型对象使用属性文本表 示法,对其他对象使用关联线 应用准则 将属性表 示为属性 文本和关 联线Register 具有三个 属性: 1.id 2.currentS ale 3.location关联端点的UML表示法l关联端点可以附加导航性箭头,也可以包含可 选的角色名(关联端点名)来表示属性名称, 也可
5、以附加多重性,如*或0.1l还可以使用特性字符串(是由若干字符串来表 述的属性特征)l如: ordered 表示集合中的元素是有序的lunique表示一组唯一元素l或ordered, List,其中list是用户定义的关键字特性字符串lreadOnly :只读属性; lunion :表明可导出属性是由其他属性联合的结果; lsubsets :表明属性是一个继承得 到的属性的子集; lredefines :改变一个继承得到的 属性的名字; lordered:某类型的一个有序集合,集合中的元素不 能重复; lbag:集合中的元素可以重复; lseq 或 sequence:集合元素可以重复,并且有序
6、 ; lcomposite:组合属性;关联端点的UML表示法表示集合 属性的两 种方式注 意 在 关 联 的 末 端 也 可 以 有 特 性 字 符 串 , 例 如 or der ed,l ist注释符号:注解、注释、约束和 方法体l注解符号:褶角矩形,并使用虚线连接到要注 解的元素上l注解符号可以表示:lUML注解或注释lUML约束:l方法体:UML操作的实现例:操作和方法语法: visibility name (parameter-list) property-string 还可以加返回类型或特性字符串,包括异常、操 作是否抽象等 如: +getPlayer(name:String):Pl
7、ayerexception IOException public Player getPlayer(name:String) throws IOException如何在类图中表示方法lUML方法是操作的实现,如果定义了约束,则 方法必须满足这些约束l在交互图中,通过消息的细节和顺序来表示l在类图中,使用构造型为method的UML注解 符号methodDCD中的操作问题lcreate操作,交互图中对其的解释为:在Java 和C#等语言中,对new操作符和 构造器的调 用l访问属性的操作,即提取或设置属性的操作, 如getPrice和setPrice,通常不包含在类图中关键字lUML关键字是对模
8、型元素分类的文本修饰关键字含义用法示例 actor类元为参与者置于类元名称之 上 interface 类元为接口置于类元名称之 上 abstract抽象元素;置于类元名称或 操作名称之后 ordered具有强制顺序的一组 对象置于关联的端点或简化为或的形式构造型,简档和标记l构造型也使用符号表示,例如authorshipl构造型表示对现有建模概念的精华,并且定义在UML简 档中l简档是一组相关构造型、标记和约束的集合,其目的是 使用UML专用于特定领域或平台l标记:如果用构造型标记元素,则所有标记都适用 于该元素,并且能够对其赋值构造型,简档和标记声明构造型UML扩展:关系于基 本的UML元模
9、型术语 ElementUML扩展:关系于基 本的UML元模型术语 Element使用构造型 一旦元素用Authorship创建构造型后 ,工具便可能允许弹出(菜单或窗口)以填 写标记的值metaclass Elementstereotype AuthorshipAuthorship Squareauthorship author=“craig” Status=“tested”UML特性和特性字符串l特性:表示元素特征的已命名的值。特性具有 语义影响l特性字符串l如:abstract,visibility=publicl有些特性没有值,例如abstract,这通常表 示布尔类型的特性,是abst
10、ract=true的简写进行类图建模的基本技术和思想l继承技术l关联和依赖技术l聚合和组合技术l为方法建模l为属性建模l在模型中引入接口类建模继承1、继承技术 要注意实现继承 即接口继承 应该能用一个子类的实例去替代父类的实例( Liskov替换原理); 留心多重继承; 父类应该对子类一无所知; 要留心仅以公共数据属性为基础的继承;类建模继承(续)l在类层次结构中,要尽量把分解出的公共部分 放在最高层;l子类应该继承所有内容(纯粹继承),因此也 就继承了父类的所有关系。l纯粹继承使得我们不需要关心子类没有继承什么l纯粹继承的优点在于:在纵深的类层次中如果你 仅需要了解每个类添加了什么,而不用知
11、道其删除 了什么,这会使你轻松得多泛化、抽象类、抽象操作表示l泛化:用由子类到超类的实线和空心三角箭头 表示l抽象类和操作即可以采用abstract标记表示 ,也可以采用斜体名称来表示l终止类和不能够被子类复写的操作以leaf标 记表示类建模关联和依赖l类之间的关联帮助我们定义对象如何和其他对 象交互,使对象之间的协作成为可能。l当两个对象之间不存在持久关联,但是他们又 要进行协作时,两者之间可以建立依赖关系;l多重性一定要显示出来;l关联和依赖能够被继承(关联和依赖是通过属 性和方法来实现的);l关联的以上性质同时适用于组成和聚合;依赖l依赖用从客户到提供者的虚线箭头表示l依赖类型:l拥有提
12、供者类型的属性l向提供者发送消息。对提供者的可见性可能是:属 性、参数变量、局部变量、全局变量或类的可见性l接受提供者类型的参数l提供者是超类或接口l如果已经存在关联线,则不必添加第二条有虚 线箭头的依赖线依赖 Sale具有对ProductDescription 的参数可见性,因此对其也具有某 种依赖依赖l如下代码: public class Foo public void doX() System.runFinalization(); doX方法具有对System类的依赖依赖标签l为表示依赖的类型,或者为代码生成工具提供 帮助,可以给依赖线附加关键字或构造型依赖于对Clock中的操作 的调用
13、callcreateA对象创建B对象而产生依 赖类建模接口l在模型中引入接口l接口是一个或多个操作特征标记,以及零个或多个 属性的定义。在理想状态下,接口定义了一组内聚 的行为;l接口由类或组件实现。要实现某个接口,类或组件 必须包括一些方法;l使用接口有助于增加设计过程的灵活性、可扩展性 和可插拔性(多态,代码只和接口打交道);l接口是多重继承的一种替代方案;类建模接口(续)插座线表 示法 window1 使用 Timer接 口 它持有必 要的接口Window1TimerInterface TimerClock1实 现并提供 Timer接 口依赖线表 示法 Window2 在于 Clock2
14、对 象协作时 ,依赖于 Timer接 口Clock1Clock2棒棒 糖表 示法 指明 Clock 3为客 户实 现并 提供 了 Timer 接口Clock3Timer Window3Window2插座线 表示法 Windo w3在于 Clock3 对象协 作时, 依赖于 Timer接 口类建模聚合和组合l能用单句规则来验证其合理性:“一个对象是 另一个对象的一部分”或者“一个对象被另一个 对象所包含”;l交互的大部分是从整体到部分的;l在适当的时候要使用组合,但是可以忽略聚合l在某一时刻,部分的实例只属于一个组成实例l部分必须总是属于组成l组成要负责创建和删除其部分(如果组成被销毁, 其部分
15、也必须被销毁,或者依附于其他组成)组合表示组合意味着: 在某一时刻 ,部分实例 (square)只能 是一个组合的 一部分 (Board) 组合必须管 理其部分的职 责,尤其是创 建和删除在UML中,用带有实心菱形箭头的关联线 来表示组合,箭头指向其组成类约束lUML约束是对UML元素的限制或条件。用之 间的文本表示显示 UML 约束的 三种方 式限定关联l限定关联具有限定符,限定符用于从规模较大的 相关对象集合中,依据限定符的键选择一个或多 个对象(暗示基于键对事物进行查找)l要注意多重性的变化(多变1)单实例类模版类和接口l模版化类型,也称为模版、参数化类型和泛型l如代码: public
16、class Board private List squares=new ArrayList(); 模版类和接口 参数化 或模版 接口和 类 K是模版 参数ListArrayListBoardArrayListSquare属性类 型可以 用正式 的UML 表示, 例如使 用箭头 的模版 绑定语 法例如 :elemen ts属性是 类型为T 的数组 ,在实 际使用 前要进 行参数 化和绑 定这里存 在某种 可能性 ,即 UML2的 “箭头” 符号可 能最终 被其它 符号代 替,例 如“=”用户自定义的分栏主动类l主动对象运行于自己控制的执行线程之 上interface RunableClock主 动 类类建模为属性建模l把private可见性赋给所有属性;l仅通过set方法更新属性;l仅通过get方法直接访问属性;l始终调用属性的se