uml——03类和接口

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

与Java编程语言之间的映射(2)
public class LinkedList{ private Node head = null; private int size = 0; //create LinkedList public LinkedList(){} public void addLast(Node newNode){ -size : Integer=0 } -head : Node[0..1]=null public Node poll(){ return null; «create»+LinkedList() } +addLast(newNode : Node) public Node search(int num){ +poll() : Node return null; +search(num : Integer) : Node {query} } +search(num : Integer, out prev : Node) : Node {query} static class PrevNode{ +remove(del : Node, prev : Node) : Node Node prev; „ } public Node search(int num, PrevNode prev){ return null; } public Node remove(Node del, Node prev){ return null; } ... }
对象图概述
• 表示实例及实例间的链link • 一个对象图是相关类图在特定运行时刻的一 个“快照”snapshot • 对象图中所描述的对象特征应符合相关类的 特征,以及类之间的关系。 • 对于复杂对象的建模,往往始于对象图,多 个对象图的抽象可得到类图。
实例规范
• 一个实例规范表示一个实体的全部或部分特 征,包括: –实体所属的类元classifiers; –实体的种类取决于其所属类元,例如类 的实例是对象,而关联的实例是连接link –实体结构特征的值的规范;
与C++编程语言之间的映射(2)
class LinkedList{ Node * head; int size; public: LinkedList(){ head = NULL; size = 0; } void addLast(Node * newNode); Node * poll(); Node * search(int num) const; Node * search(int num, Node * & prev) const; Node * remove(Node * del, Node * prev); ... }
myList : LInkedList head size : Integer = 2 data : Integer=23 ; Node next data : Integer=45 next : Node = null ; Node
操作概述
• 操作(operation):该类对象可被请求提供 的一项服务。 • 调用操作可改变对象自身的数据或状态,或 可访问对象内部的数据或状态。 • 语义:表示类的特征的动词或动词短语。 • 语法:操作名及形参,首字符小写,后面其 它词的首字符大写。抽象的操作用斜体字表 示。 • 同一个类中每个操作具有唯一基调 (signature):操作名及形参
+Person(id :String, name: String) „ {subset dept} {subset members} +setDept(dept: Department) +getDept(): Department +dept -manager +isManager(): boolean 0..1 0..1 ... AsManager
操作的规范说明_形参方向 • 操作描述中最重要的是基调,即名字及形参 。每个形参可确定一个方向,可选的方向如 下表所示。
方向 in 语义 表示一个输入形参,按值传递,操作中改变它对调用者不起 作用。缺省方向。这隐含着实现方法中只能读取该形参的 值而不能改变。 表示一个输出形参,没有输入值,操作中可改变其值,最终 值对调用者是可用的。 表示一个可改变的输入形参,操作中可改变输入的值,最终 值对调用者是可用的。
第三章 类与接口
• • • • • • • 类元 性质 对象图 操作 接口 约束和注释 类图及其用途
一个类图例子
Department BelongsTo -name: String „ +Department(name:String) „ +getManagwk.baidu.comr(): Person +setManager(p: Person) „ -dept 0..1 +\members -id:String 0..* -name:String ... Person
表示整数值的类型
表示多重性的上界。 单独一个星号表示0到多 个
性质的类型(2)
• 构造类型 –枚举类型也可作为性质的类型。枚举 Enumeration是一种数据类型,包含一组 枚举字面值。枚举的一个实例就是其枚 举字面值中的任意一个。
«enumeration» VisibilityKind public private protected package
LinkedList -size : Integer=0 -head : Node[0..1]=null «create»+LinkedList() +addLast(newNode : Node) +poll() : Node +search(num : Integer) : Node {query} +search(num : Integer, out prev : Node) : Node {query} +remove(del : Node, prev : Node) : Node „
性质的多重性 • 一个性质可持有单个值,也可持有多个值。如果 是多值,就构成一个集聚Collection,就需要进 一步确定各元素是否有序(ordered)、是否唯一 (unique)。
ordered 是否有序 unique 是否唯一 UML集聚种类 Java集聚类型
false true false true
性质的规范说明示例
ClassA name : String shape : Rectangle +size : Integer[0..1] /area : Integer{readOnly} height : Integer=5 width : Integer
ClassB id{redefines name} shape: Square height=7 /width
类元概述(1)
• 类、接口、用例等元素的泛称。 • 每个类元都需要一个名字。 –名词或名词短语,作为类或接口的名称 。类和接口的名字由字符、数字、其它符 号组成的字符串,而且首字符大写。
类元概述(2)
• 一个类元中可说明一组特征。每个特征都要 确定是否是静态static的。 –静态特征是属于类元自身的特征,模型 中用下划线表示 –非静态特征是类元的实例各自持有的特 征(缺省) • 特征可分为 –结构特征, 性质属于结构特征 –行为特征, 操作属于行为特征
性质的类型(1) • 基本类型
基本类型 String Boolean 语义、字面值 字符串,用双引号 标注 布尔型,有两个值 ,true和false 用途 可用于注释、计算语言表 达式、OCL表达式等 表示逻辑表达式的值
Integer
整型,其值为正整 数、0、负整数 Unlimited 无限自然数,其值 Natural 为自然数 (0,1,2,„),无 限大的数表示为 一个星号:*
class Node{ int data; Node *next; public: Node(int a, Node * nextNode){ data = a; next = nextNode; } int getData const(){ return data; } Node * getNext() const{ return next; } void setNext(Node* next){ this->next = next; } };
true true false false
Set OrderedSet Bag Sequence
Set, HashSet SortedSet, TreeSet 无 List, LinkedList, ArrayList
与编程语言之间的映射
class Node{ int data; Node *next; public: ... } class LinkedList{ Node * head; int size; public: LinkedList(){ head = NULL; size = 0; } ... }
Node -data : Integer -next : Node «create»+Node(a : Integer, nextNode : Node) +getData() : Integer {query} +getNext() : Node {query} +setNext(next : Node)
out inout
return 表示一个返回形参,对调用者是可用的。一个操作最多只能 有一个返回形参,其类型和多重性即为操作的类型和多重 性。从语义上看,它与out形参没有区别,只是它的结果 可在内联表达式中直接使用。
课堂练习
• 根据对象图绘制出类图。(提示:创建一个 多边形最少需要多少点?如何表示点是有序 的?)
:Point xCoord=-10 yCoord=10 :Polygon has has :Point xCoord=10 yCoord=10
:Point xCoord=-10 yCoord=-10 has has
:Point xCoord=10 yCoord=-10
与C++编程语言之间的映射(1)
Node -data : Integer -next : Node[0..1] LinkedList -size : Integer=0 -head : Node[0..1]=null
-next
0..1
Node -data : Integer -head 0..1 1
LinkedList -size : Integer=0

• 如何对类命名? 简单名,路径:包名::子包::类名 • 语义:被建模系统的词汇表中提取的名词或 名词短语。 • 语法:字符、数字、其它符号组成的字符串 ,首字符大写。 • 一个类就是一种新的类型。
属性/性质概述
• 属性(UML1.X)/性质(UML2.0)是什么? 属性attribute/性质property:对类中每个 对象所包含的某一种数据或状态的抽象。 • 一个对象在特定时刻在每个属性上都有确定 值。 • 语义:表示类的特征的名词或名词短语。 • 语法:可仅表示属性名,也可详细描述:类 型、缺省值等。 属性名[:类型[ = 缺省值]] 首字符小写,后面其它词的首字符大写。
用引用类型来传递别名,改变引用即改变实际数据,可 输出计算结果。多用于传递对象,可传递指针。
指针传递
引用传递
与Java编程语言之间的映射(1)
public class Node{ private int data; private Node next; public Node(int a, Node nextNode){ data = a; next = nextNode; } public int getData(){ return data; } public Node getNext(){ return next; } public void setNext(Node next){ this.next = next; } }
Node -data : Integer -next : Node «create»+Node(a : Integer, nextNode : Node) +getData() : Integer {query} +getNext() : Node {query} +setNext(next : Node)
与C++编程语言之间的映射(3) • C++的函数调用有三种传递方式:以值传递、指针 传递和引用传递。 • UML没有对象指针的概念,也没有明确规范操作调 用时实参如何传递给形参。
传递方式 以值传递 语义 既不是指针类型,也不是引用类型,实参复制给形参。 函数中修改形参不影响实参。因复制整个对象可能带 来较大负担,只适合基本类型的传递,而不适合传递 对象。 用指针类型来传递地址,本质上是地址值的“以值传递 ”,函数中通过地址可读取或修改实际数据,因此可 输出计算结果。该方式多用于传递数组或对象。
相关文档
最新文档