类与类的关系和markdown画UML图
UML类图
1.UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果.
2.UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类,接口,实现,泛化,依赖,组合,聚合等,
3.使用UML来建模,常用的工具有,Rational Rose,也可以使用一些插件来建模.
UML类图包含以下几个常用对象
Note 注释:
对你的UML图进行注释
Anchor to Note :
锚点到注释:
class 类 :
表示类,可以添加属性和方法
Interface:
表示接口
六大关系:
Dependency 依赖,使用
Association 表示关联
Generalization 表示泛化(继承)
Realization 表示实现
Aggregation 表示聚合(注意与组合的区别,setting方法组合一个外部实例化的一个对象.)
Composite (组合,内部实例化的一个对象,成员属性.)
UML图分类,
画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,
1.用例图(use case)
2.静态结构图:类图,对象图,包图,组件图,部署图
3.动态行为图:交互图(时序图与协作图),状态图,活动图 说明:
1.类图是描述类与类之间的关系的,是UML图中最核心的
2.在讲解设计模式时,我们必然会使用类图,为了能够把设计模式学到位,需要先学习类图
类图 Class Diagram
1.用于描述系统中的类(对象)本身的组成(属性和方法)和类(对象)之间的各种静态关系.
2.类之间的关系:依赖,泛化(继承),实现,关联,聚合与组合(六大关系)
3.类里面有属性,操作(方法)
依赖关系
只要是在类中用到了对方,那么他们之间就存在依赖关系,如果没有对方,连编译都通过不了
有 PersonServiceBean用到了PersonDao,Person,IDCard,Department 这几个类.
什么情况算是依赖
1.类中用到了对方,(类里实例化了一个对象,并且用到了,或者其他情况)
2.如果是类的成员属性
3.如果是方法的返回类型
4.是方法接收的参数类型
public class PersonServiceBean {
private PersonDao personDao;// 类
public void save(Person person) {
}
public IDCard getIDCard(Integer personid) {
return null;
}
public void modify() {
Department department = new Department();
}
}
泛化关系(继承)
泛化就是继承
如果A类继承了B类,我们就说A和B存在泛化关系
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends DaoSupport {
}
实现关系(类与接口)
实现关系,实际上就是A类实现了B类,他是依赖关系的特例
public interface PersonService {
public void delete(Integer id);
}
public class PersonServiceBean implements PersonService{
@Override
public void delete(Integer id) {
// TODO Auto-generated method stub
System.out.println("delete..");
}
}
关联关系 Association
联关系是一种强依赖的关系,假设有两个类,类A和类B,类B作为类A的成员变量存在,类A也可为类B的成员变量存在,如果互为成员变量则为双向依赖,否则为单向依赖
关联关系与依赖关系的区别在于,依赖关系是一种临时的关系,依赖关系主要体现在方法参数,当调用方法时才有关系,关联关系是一种长期的关系,主体现在成员变量,无论是否调用方法这种关系都存在。
关联关系实际上就是类与类之间的联系,他是依赖关系的特例
关联具有导航性,即双向导航关系或单向关系,关系具有多重性,如“1”(表示有且仅有一个),"0"(表示0个或多个),“0,1”(表示0个或者一个),"n,m"(表示n到m个都可以),“m...”*表示至少m个
单向一对一关系
public class Person {
private IDCard card;
}
双向一对一关系
public class Person {
private IDCard card;
}
public class IDCard {
private Person person;
}
UML类图,略
聚合关系 Aggregation
聚合关系是一种has-a关系,假设有两个类,类A和类B,类A包含类B,类B是类A的成员变量,聚合关系和关联关系都体现在成员变量,它们的区别在于:关联关系双方是平级的,是个体和个体的关系,聚合关系双方不是平级的,是整体和部分的关系。
聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开,组合不可分开,聚合关系是关联关系的特例,所以他具有的导航性和多重性。
如:一台电脑由键盘,显示器,等,组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形实线来表示。
组合关系
整体与部分的关系,但是整体与部分不可以分开。
组合关系与聚合关系的区别在于:聚合关系中部分离开整体仍可存活,组合关系中部分离开整体没有意义
案例:在程序中,我们定义了实体,Peson,IDCard,Head,那么Head和Person就是组合,IDCard和Person就是聚合
但是如果在程序中Person实体中定义了对IDCard进行级联删除,即删除Person时,连同IDCard一起删除,那么IDCard和Person就是组合了,
UML类图里的可见性
UML中,可见性分为4级
1、public 公用的 :用+ 前缀表示 ,该属性对所有类可见
2、protected 受保护的:用 # 前缀表示,对该类的子孙可见
3、private 私有的:用- 前缀表示,只对该类本身可见
classDiagram
Animal <|-- Duck
Animal <|-- Fish
Animal <|-- Zebra
Animal : +int age
Animal : +String gender
Animal: +isMammal()
Animal: +mate()
class Duck{
+String beakColor
+swim()
+quack()
}
class Fish{
-int sizeInFeet
-canEat()
}
class Zebra{
+bool is_wild
+run()
}
Animal+int age+String gender+isMammal()+mate()Duck+String beakColor+swim()+quack()Fish-int sizeInFeet-canEat()Zebra+bool is_wild+run()
定义返回类型
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawal(amount) int
}
BankAccount+String owner+BigDecimal balance+deposit(amount) : bool+withdrawal(amount) : int
定义泛型
classDiagram
class Square~Shape~{
int id
List~int~ position
setPoints(List~int~ points)
getPoints() List~int~
}
Square : -List~string~ messages
Square : +setMessages(List~string~ messages)
Square : +getMessages() List~string~
Square<Shape>int idList<int> position-List<string> messagessetPoints(List<int> points)getPoints() : List<int>+setMessages(List<string> messages)+getMessages() : List<string>
六大关系表示
| Type | Description | |
|---|---|---|
| < | -- | Inheritance 继承 |
| *-- | Composition 组合 | |
| o-- | Aggregation 聚合 | |
| --> | Association 关联 | |
| -- | Link (Solid) 实线 | |
| ..> | Dependency 依赖 | |
| .. | Realization 实现 | |
| .. | Link (Dashed) 虚线 | |
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
classAclassBclassCclassDclassEclassFclassGclassHclassIclassJclassKclassLclassMclassNclassOclassP
关系上的标签
我们可以用这些标签来描述两个类之间关系的性质。另外,箭头也可以用于相反的方向:
classDiagram
classA --|> classB : Inheritance
classC --* classD : Composition
classE --o classF : Aggregation
classG --> classH : Association
classI -- classJ : Link(Solid)
classK ..> classL : Dependency
classM ..|> classN : Realization
classO .. classP : Link(Dashed)
classAclassBclassCclassDclassEclassFclassGclassHclassIclassJclassKclassLclassMclassNclassOclassPInheritanceCompositionAggregationAssociationLink(Solid)DependencyRealizationLink(Dashed)
双向关系
关系可以有多种方式
关系联型可以是下面一种
| Type | Description | |
|---|---|---|
| < | Inheritance | |
| * | Composition | |
| o | Aggregation | |
| Association | ||
| < | Association | |
| Realization | ||
And Link can be one of:
| Type | Description |
|---|---|
| -- | Solid |
| .. | Dashed |
知识点有点多,详情请看classDiagram
idea显示类图 classDiagram
这一个需要ide旗舰版本才支持,android studio和idea社区版本都不支持