一:类
概念:对现实世界中事物的抽象,描述系统的静态部分
(静态成员:在类图中加下划线表示静态成员,编码时用static关键字定义)
种类:抽象类、接口、关联类、模板类、主动类、嵌套类、
种 类
说明
抽 象 类
在进行设计时,如果有些类具有相同方法和属性,可把这些方法或属性从具体类抽取出来,把它们封装在一个抽象类中,
通过扩展抽象类,重新定义这些具体类。抽象类不能被直接实例化,斜体表示。编码时用abstract关键字定义
接 口
类似抽象类,接口的方法都是抽象方法
关 联 类
两个类之间有多对多关系,且有的属性不属于关联两端的任何属性
模 板 类
模板是根据参数类型生成函数和类的机制(有时称为“参数决定类型”),通过使用模板,可以只设计一个类来处理多种类型的数据,而不必为每一种类型分别创建类。
例如,我们需要一些能够处理整型、浮点型、字符串的数组,普通的做法是为他们个创造一个类,这三个类除了数据类型不同之外,其他的都是相同,但是仍然要定义三次。模板就是用来解决这个问题,可以根据占位符或者参数来定义类,而不用说明属性、方法返回值和方法参数的实际类型。通过实际值代替占位符即可创建新类
主 动 类
从运行的角度来看,还有一种特殊的类—主动类。主动类的实例称为主动对象,一个主动对象拥有一个控制线程并且能够控制线程的活动,具有独特的控制权。
嵌 套 类
在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。
属性:类名、属性(静态信息)、操作(动态行为)
注意:其中属性和方法可以没有,也可以隐藏
图符:3个矩形
表示(5种):
1 2 3 4 5
都有 操作隐藏 属性隐藏 都隐藏 没有属性和操作
注意:没有和隐藏的图不同,当然概念也不同
4种:
A.关联associate:普通关联
1.图符:——
2.关联的修饰:关联名,角色名,多重性
3.关联的对象两个类中可以有多个关联
一个类可以和多个类关联
自身关联4.关联的分类聚合:整体与部分,生命不依赖,可独立存在组合:整体与部分,生命依赖;强调先有A,后有B比较:
编码区别():
聚合
组合
图符
空心
实心
多重性
0或多 对 1或多
1 对 0或多
聚合:import java.util.Vector,
class Boookeshelf{
public Bookshelf(){}
private Vector the Books; //没有先后顺序,没强制制约
}
class Book{
private Bookshelf the Bookshelf;
public Book(){}
}
组合:import java.util.Vector
class Book{
public book(){}
private Vector the pages=new Vector(); //强调先有书,后有页,强制制约
}
class Page{
public Page(){}
private Book the Book;
}
5.关联类:两个对象之间的连接可以看作一个类的实例时,称该类为关联类
6.关联说明
指两个类之间的联系,是一个类知道另一个类的属性和操作
可以是单向关联(单向箭头),也可以是双向关联(双向箭头)
B.依赖dependency:使用关系
1.图符:
2.依赖对象:类与类、包与包、构建与构件都可以是依赖关系3.使用关系:
可以是方法使用到另一个类
class Professor{
public void teach(){Course c=new Course();}
}
也可以是参数使用到另一个类
class Professor(
public void teach(Course c){...}
}
4.分类:
分类
包括
使用依赖:
客户使用提供者提供的服务
以实现它的行为
使用:声明一个类需要使用已存在的另一个·类
调用:声明一个类需要要到其它类的操作方法
参数:声明一个操作和它的参数之间的关系
发送:声明信号发送者和接受者之间的关系
实例化:声明用一个类的方法创建另一个类的实例
抽象依赖:
客户与提供者 用不同的方法
表示同样的概念,
一个概念抽像,一个具体
跟踪:声明不同模型中的元素之间存在一些连接但不如映射精确
精华:声明语句两个不同语义层次上的元素之间的映射
派生:声明一个实例可以从另一个实例导出
授权依赖:
提供者为客户提供某种权限
以访问期内容
访问:允许一个包访问另一包的内容
导入:允许一个包访问另一包的内容并为被访问包的组成部分增加别名
友元:允许一个元素访问另一个元素,不管被访问元素是否可见
绑定依赖:
绑定模板以创建新的模板元 素
绑定:为模板参数指定值,以生成一个新的模型元素
C.泛化generalize:即所谓的继承,父类与子类的继承,is—a—kind—of
1.图符:
2.好处:软件复用、代码复用3.分类:
单重继承:子类有且只有一个父类
多重继承:子类有两个或多个父类
问题:a.易出现歧义 b. c++允许有多个父类,但用关键字定义,而java不允许有多个父类,用接口实现
4.继承的权限
子类(Leaf)不是继承父类(Root)所有的变量和方法,public和protect成员可继承,private成员不可继承
继承 对象
权限
子类
继承
父类
的变 量
1.能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
2.对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3.对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用子类
继承
父类
的方 法
1.能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
2.对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3.对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则会发生覆盖现象,即子类的成员变量会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用
5.编码:
java:class Employee{
class Manager extends employee{...};
}
c++:class Employee{
class Manager :public Employee{...};
}
D.实现realiza:是类元之间的语义关系,在该关系中一个类元描述了另一个类元保证实现的契约
(语义关系:隐藏在句法结构后面由该词语的语义范畴所建立的联系)
1.分类
类实现接口
包实现接口
构件实现接口
用例实现接口
说明:接口: ,编码时用interface关键字定义
类实现接口编码时:先定义接口,再定义类
interface Shape{
public void draw();
}
class Circle Implements Shape{
public void draw()
}
2.图符:
关键字:implement定义实现关系
强弱关系:依赖 < 关联 < 实现 = 泛化
三:构成:类、接口、协作、关系、包、子系统等
四:类图的应用
五:产生阶段及使用人员怎样画类图:
1.分析用例图
2.画类图(类名即找系统中的名词)
3.写类的属性和方法(静态状态,动作行为)
4.找类之间的关系
5.修饰关系(多重性、角色名
产生阶段:系统概要、详细设计阶段,是系统分析、设计、实现、确认阶段的重要依据,存在于概要设计文档、详细设计文档
使用人员:系统分析员、设计人员、开发人员、测试人员
六:图例(以机房收费系统为例)