第4章 系统静态分析与静态模型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:在一个大公司里,公司总裁只认识那些核心职员,不认 (1)关联关系 识所有的普通职员,而所有的职员都认识总裁
(1)关联关系
Class Company { ... } Class Person { ... }
Class Job private private private private private ... } }
•
组合(composition)
2.泛化关系(Generalization) 3.依赖关系(Dependency) 4.实现关系(Realization)
(1)关联关系
关联关系是一种结构关系,指出了一个事物的对象与另 一个事物的对象之间的连接。 描述关联的要素 • 关联名称 • 对象在关联中的角色 • 多重性 • 导航性 代码体现 成员变量
class (3Car{ )依赖关系 public void move(){ System.out.println(" car move"); } } class Drive{ public void drive(){ Car car=new Car();//局部变量 car.move(); } } public class TestDrive { public static void main(String[] args) { Drive d=new Drive(); d.drive(); } }
接口
接口是在没有给出对象的实现和状态的情况下对对象 行为的描述。接口是一种特殊的类,所有接口都是有 构造型<<interface>>的类。在UML中,接口使用一个 带有名称的小圆圈来进行表示,并且可以通过一条 Realize(实现关系)线与实现它的类相连接。
类之间的关系
1.关联关系(Association) • 聚合(aggregation)
类的属性(Attribute)
描述了类在软件系统中代表的事物(即对象)所具备的 特性,这些特性是所有对象所共有的。 类可以有任意数目的属性,也可以没有属性。 在UML中,类属性的语法为: [可见性] 属性名[:类型][=初始值][{属性字符串}]
(1)可见性
属性的可见性描述了该属性是否对于其他类能够可见,从 而是否可以被其他类进行引用。 公有(Public) 允许在类的外部使用或查看该属性 私有(Private) 只有类本身才能访问,外部一概访问不到 受保护(Protected) 经常和继承关系一起使用,允许子类访问父类中受保 护类型的属性
(1)关联关系
public class TestCompnay { public static void main(String[] args) { Company c=new Company("鼎利集团"); c.employee[0]=new Person("张三"); c.employee[1]=new Person("李四"); c.employee[2]=new Person("王五"); } }
当整体类不存在时,部分类将同时被销毁。 代码体现:成员变量
人死了,心脏也停止了跳动
窗口关闭了,这些组件也自然消失了
组合关系(Composition)
Engine的对象是在Car类里创建
关联与聚合(组合)的区别
关联关系所涉及的两个类是处于同一个层次上的。比如 学生和课程就是一种关联关系,因为学生不是有课程组 成的。 聚合关系涉及的两个类处于不平等的层次上,一个代表
(3)依赖关系(Dependency)
依赖关系是一种使用关系 一个类的实现需要另一个类的协助,尽量不使用双向的互相 依赖。 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指 向被依赖的一方。 代码表现:局部变量、方法的参数或者对静态方法的调用
class (3Car{ )依赖关系 public void move(){ System.out.println(" car move"); } } class Drive{ public void drive(Car car){ //方法的参数 car.move(); } } public class TestDrive { public static void main(String[] args) { Drive d=new Drive(); Car c=new Car(); d.drive(c); } }
(3)属性字符串
属性字符串是用来指定关于属性的一些附加信息。 何希望添加在属性定义字符串值但又没有合适地方可以 加入的规则,都可以放在属性字符串里。 如: {ordered}:表示有序 {nonunique}:表示不唯一
类的操作(Operation)
操作是指类所能执行的动作,也是类的一个重要组成部 分,描述了在软件系统中所代表的对象具备的动态部分 的公共特征抽象。 一个类可以有任意数量的操作或者根本没有操作,并且 每个操作只能应用于该类的对象。 属性是描述类的对象特性的值,而操作用于操纵属性的 值进行改变或执行其他动作。 操作有时称作函数或者方法。 在UML中,类操作的语法为: [可见性] 操作名[(参数表)][:返回类型][{属性字符串}]
(4)实现关系(Realization)
是一种类与接口的关系,表示类是接口所有特征和行为的 实现。 带三角箭头的虚线,箭头指向接口。
(4)实现关系(Realization)
}
}
class Person{ private String name; //职工姓名 public Person(String name) { this.name = name; } } class Company { private String name; //公司名称 public Person[] employee=new Person[3]; public Company(String name){ //构造函数 this.name = name; } }
球队解散了,球员百度文库在
毕业了,班级解散了,这些学生还在
(2)聚合关系(Aggregation)
学生的对象不是在班级类里创建
聚合与组合
(2)组合关系(Composition)
是一种特殊形式的聚合,也称为强聚合关系,是“contains-a”关 系,与聚合相比,有两个特点:
一个部分类最多只能属于一个整体类。
class Car{ (3)依赖关系 static void move(){ System.out.println(" car move"); } } class Drive{ public void drive(){ Car.move(); //静态方法 } } public class TestDrive { public static void main(String[] args) { Drive d=new Drive(); d.drive(); } }
整体,一个代表部分。
聚合和组合的区别
(2)泛化关系(Generalization)
泛化关系(Generalization)也就是继承关系,也称为 “is-a-kind-of”关系,泛化关系用于描述父类与子类 之间的关系,父类又称作基类或超类,子类又称作派生 类。在UML中,泛化关系用带空心三角形的直线来表示。 在代码实现时,使用面向对象的继承机制来实现泛化关 系。
(1)关联关系
关联的导航性(Navigability) 一个类能否通过所关联的类实例来调用类的方法。 如果没有指明可导航性,则默认是双方都可导航的。
Class Company { Person p[]; .... void produce(){ p[1].work(); } }
Class Person { void work(){
(1)关联关系
关联名称 多数关联是二元的(即只存在于两个类的实例之间), 在图中表示为连接两个类符号之间的实线。 使用关联名称,应该反映该关系的目的,并且应该是一 个动词词组。 关联名称应该放置在关联路径上或其附近。
(1)关联关系
关联角色(Role) 关联所联系的每一端叫做一个角色。 角色名称应该是一个名词,角色名称紧邻关联线的末端。
在UML软件开发过程中的系统分析与设计阶段,都会涉及到类和对象。 类和对象建模用于描述系统的静态结构。
类图的组成
组成:
类(Class) 接口(Interface) 枚举(Enumeration) 异常(Exception) 关系(Relation) 包(Package)
类
{ Company c; Person p; String description; Date dateHired; double salary;
关联关系举例
1)双向关联:默认情况下,关联是双向的
关联关系举例
2)单向关联
关联关系举例
2)单向关联
关联关系举例
3)自关联
聚合与组合
聚合(聚集)与组合(合成、组成)是两种特殊的关联关系。 (1) 聚合关系(Aggregation) 表示的是整体和部分的关系, 聚合意味着一个类拥有但共享另一个类的对象。 是“has-a”关系。 成员对象是整体对象的一部分,但是成员对象可以脱离整体对象 独立存在。在UML中,聚合关系用带空心菱形的直线表示。 代码体现:成员变量
包括:
名称(Name) 属性(Attribute) 和操作(Operation)
类的名称(Name)
是一个字符串,并且是名词 按照UML约定,类名称首字母大写,如果类名称由两个单 词组成,第二个单词首字母也大写,而且两个词要合并 分为简单名称和路径名称(用类所在的包的名称做前缀)
(1)关联关系
关联的多重性(Multiplicity)
指有多少对象可以参与该关联。 可以表达一个取值范围、特定值、无限定的范围或一组离散值。
多重性 0..1 0..* * 1 1..*
意义 0或1个实例 n..m符号表示有n到m个实例 没有实例个数的限制 只有一个实例 最少一个实例
(1)关联关系
第4章 系统静态分析与静态模型
为什么要进行分析
用例描述的是参与者和系统边界之间的交互操作——系统 本身是一个黑盒子,带有外部才能看到的接口; 为了使得系统更容易开发和理解,用例细节是用自然语言 编写的——用例是不严密的; 需求阶段所得到的用例模型并不能全面描述系统,开发人 员仅通过这些模型也无法全面理解问题。
class Person { protected String name; protected int age; public void move(){ } public void say() { } }
class Student extends Person { private String studentNo; public void study(){ } } class Teacher extends Person{ private String teacherNo; public void tecah(){} }
(1)可见性
可见性 Public Protected Private Rose图注 StarUML图注 + # -
(2)属性名称
属性是类的一部分,每个属性都必须有一个名字以区别 于类中的其他属性。 通常情况下,属性名由描述其所属类的特性的名词或名 词短语构成。 按照UML的约定,属性的名称的第一个字母小写,如果 属性名包含了多个单词,这些单词要合并,并且除了第 一个英文单词外,其余单词的首字母要大写。
关联的导航性(Navigability) 一个类能否通过所关联的类实例来调用类的方法。 如果没有指明可导航性,则默认是双方都可导航的。
• Person对象不需要保存Company对象的应用 • 某个公司可以调用Person的work()方法 • 某个人不能调用Company的produce()方法