[图解]静态关系和动态关系

1

00:00:01,060 --> 00:00:04,370

首先我们来看静态关系和动态关系

2

00:00:06,160 --> 00:00:10,040

我们要尽量基于静态关系来建立动态关系

3

00:00:11,740 --> 00:00:13,740

不能够在没有这个的基础上

4

00:00:14,220 --> 00:00:17,370

没有这个的情况下就胡乱建立动态关系

5

00:00:17,650 --> 00:00:19,520

比如说,我们有4个类ABCD

6

00:00:21,530 --> 00:00:22,450

它们之间怎么合作

7

00:00:23,910 --> 00:00:26,480

你可以说A找B,B找C

8

00:00:26,490 --> 00:00:29,110

A找D,也可以说A找B,B找C

9

00:00:29,120 --> 00:00:30,640

C找D,也可以

10

00:00:30,650 --> 00:00:33,850

A找B,B找C,C找D,哪一个合理

11

00:00:35,490 --> 00:00:37,790

你没有静态关系作为依据

12

00:00:38,630 --> 00:00:39,550

你是不知道的

13

00:00:40,640 --> 00:00:42,140

但我们很多人经常是这样的

14

00:00:42,790 --> 00:00:45,140

你跟他说,你给我讲讲你怎么设计的

15

00:00:45,960 --> 00:00:47,840

他就跟你介绍,你看,我是这样

16

00:00:47,850 --> 00:00:50,320

A调用B,B调用C

17

00:00:50,330 --> 00:00:53,450

A调用D,对呀,他代码就这样写的

18

00:00:53,780 --> 00:00:55,950

代码不是摆在那里吗

19

00:00:56,920 --> 00:00:59,260

但是你问他,你为什么要这样做

20

00:01:00,470 --> 00:01:02,150

为什么你觉得这样做是合理的

21

00:01:02,160 --> 00:01:03,600

我不知道

22

00:01:04,190 --> 00:01:06,970

我就觉得这样做合理,那不行

23

00:01:07,910 --> 00:01:09,580

要有这个作为依据的

24

00:01:10,500 --> 00:01:13,880

就像这个,张三和李四是夫妻

25

00:01:13,890 --> 00:01:15,810

这是静态关系

26

00:01:17,820 --> 00:01:21,050

他们在民政局档案里面已经登记在案了

27

00:01:22,400 --> 00:01:24,220

昨天是,今天是,明天也是的

28

00:01:24,750 --> 00:01:28,220

即使当前时间点他们没有在啪啪啪

29

00:01:29,040 --> 00:01:30,350

他们依然是夫妻

30

00:01:33,410 --> 00:01:36,940

这个就和下面这个,张三和李四

31

00:01:36,950 --> 00:01:38,020

昨天下午4点

32

00:01:38,780 --> 00:01:40,860

在某某地方发生了某某交互

33

00:01:43,070 --> 00:01:44,280

这个是动态的

34

00:01:44,680 --> 00:01:49,200

你看他在某一个时间点下面发生的行为

35

00:01:49,530 --> 00:01:52,670

而且是时间很短的

36

00:01:55,880 --> 00:01:56,560

动态的

37

00:01:58,680 --> 00:02:01,030

为什么刚才我们讲这个

38

00:02:01,040 --> 00:02:03,810

意思就是,假设张三

39

00:02:03,820 --> 00:02:05,930

现在想需要某种服务

40

00:02:07,400 --> 00:02:08,560

Ta应该找谁最合适

41

00:02:10,010 --> 00:02:11,360

应该找李四,为什么

42

00:02:11,670 --> 00:02:13,430

因为你和Ta都是夫妻了

43

00:02:14,310 --> 00:02:15,710

你调用Ta一次

44

00:02:16,890 --> 00:02:18,950

整个系统的耦合度有没有上升

45

00:02:19,930 --> 00:02:20,450

没有的

46

00:02:21,910 --> 00:02:24,570

不做白不做,做了也白做

47

00:02:25,750 --> 00:02:27,100

整个系统耦合度没上升

48

00:02:27,110 --> 00:02:31,700

因为这个耦合度比下面这个要强

49

00:02:32,840 --> 00:02:34,590

我们两个是夫妻了

50

00:02:36,250 --> 00:02:37,330

我找你拿100块钱

51

00:02:37,340 --> 00:02:39,170

我从你包里拿100块钱,这算什么

52

00:02:40,780 --> 00:02:42,550

但如果说我跟你本来不认识

53

00:02:43,060 --> 00:02:44,060

我现在需要钱了

54

00:02:44,060 --> 00:02:46,550

我就从你包里拿100块

55

00:02:46,560 --> 00:02:50,050

那不行,那就犯法了

56

00:02:55,660 --> 00:03:00,470

这样来,尽量把动态的调用

57

00:03:00,480 --> 00:03:06,400

建立在有静态关系的对象之间

58

00:03:07,540 --> 00:03:10,140

这样整个系统耦合度才不会

59

00:03:10,850 --> 00:03:12,290

才不会上升得很快

60

00:03:12,460 --> 00:03:17,690

我们知道系统的耦合度或混乱度是上升的

61

00:03:17,700 --> 00:03:19,490

但是我们希望上升是怎么上升

62

00:03:19,580 --> 00:03:20,610

是这样上升

63

00:03:22,360 --> 00:03:25,150

至少上升的程度要缓慢一点

64

00:03:25,560 --> 00:03:26,820

如果你是这样上升

65

00:03:28,720 --> 00:03:32,100

上升还有一个加速度,那还得了

66

00:03:33,060 --> 00:03:35,980

这个就完蛋了

67

00:03:35,990 --> 00:03:37,060

至少要慢点

68

00:03:39,480 --> 00:03:39,830

这样来

69

00:03:41,030 --> 00:03:43,860

如果说你违反这个,你一着急

70

00:03:45,840 --> 00:03:47,780

张三一着急,想要某种服务

71

00:03:47,790 --> 00:03:50,030

Ta随便找个陌生人乱搞

72

00:03:51,130 --> 00:03:52,840

大家都这样的话,很可能怎么样

73

00:03:53,130 --> 00:03:53,620

很快

74

00:03:54,220 --> 00:03:57,320

整个城市,整个系统,所有人都有问题

75

00:03:58,630 --> 00:04:00,240

所有人都有关系

76

00:04:00,250 --> 00:04:03,150

一个地方有问题

77

00:04:03,870 --> 00:04:05,260

张三得了某某病

78

00:04:05,270 --> 00:04:07,390

可能很多人都得了

79

00:04:09,550 --> 00:04:12,980

尽量基于静态关系来建立动态关系

80

00:04:13,110 --> 00:04:14,460

所以我们建模的时候

81

00:04:15,870 --> 00:04:16,950

就按照这个顺序来

82

00:04:17,240 --> 00:04:19,130

先对泛化关联建模

83

00:04:21,030 --> 00:04:24,140

然后在这个基础上

84

00:04:24,750 --> 00:04:26,400

通过画序列图等等

85

00:04:26,410 --> 00:04:30,270

再建模动态的依赖

86

00:04:35,220 --> 00:04:38,130

刚才讲的是静态关系和动态关系

87

00:04:39,050 --> 00:04:43,180

我们来看静态关系两种的区别

88

00:04:43,790 --> 00:04:45,130

泛化和关联的区别

89

00:04:46,840 --> 00:04:49,400

泛化和关联,刚才说了,一个集合关系

90

00:04:49,410 --> 00:04:51,000

一个个体关系

91

00:04:52,010 --> 00:04:53,910

泛化是一种集合关系

92

00:04:55,990 --> 00:05:00,510

B、C泛化到A,意味着什么

93

00:05:01,710 --> 00:05:06,410

A的对象集合包含了BC的对象集合

94

00:05:09,500 --> 00:05:10,970

集合的包含

95

00:05:13,860 --> 00:05:16,320

而A和B、C有关联

96

00:05:17,170 --> 00:05:17,810

意思是什么

97

00:05:18,190 --> 00:05:19,720

A集合里面的个体

98

00:05:19,730 --> 00:05:21,600

跟B、C里面的个体

99

00:05:22,050 --> 00:05:23,310

发生了映射

100

00:05:24,550 --> 00:05:25,550

有对应关系

101

00:05:27,360 --> 00:05:28,760

因为它是个体关系

102

00:05:28,850 --> 00:05:32,040

所以就有1对多、多对多,1对0..1

103

00:05:32,050 --> 00:05:33,160

之类的

104

00:05:33,510 --> 00:05:34,670

只有关联才有的

105

00:05:36,170 --> 00:05:37,180

泛化是没有的

106

00:05:39,850 --> 00:05:41,630

这是本质的区别

107

00:05:42,830 --> 00:05:46,580

你光从人类的自然语言,有时候很难判断的

108

00:05:48,150 --> 00:05:50,580

比如说,人有男人有女人

109

00:05:51,860 --> 00:05:54,290

这个人和男人女人是泛化是关联

110

00:05:55,490 --> 00:05:56,610

是泛化,为什么

111

00:05:56,620 --> 00:06:00,030

因为人有男人有女人

112

00:06:00,040 --> 00:06:03,050

并不是说一个人的个体,像我

113

00:06:03,910 --> 00:06:05,350

然后肚子里面吃了一个男人

114

00:06:05,360 --> 00:06:06,510

一个女人在里面,不是

115

00:06:06,520 --> 00:06:08,400

而是什么

116

00:06:08,410 --> 00:06:09,720

男人的集合

117

00:06:10,170 --> 00:06:12,010

全世界有70多亿

118

00:06:13,010 --> 00:06:14,700

包含了男人的集合

119

00:06:14,710 --> 00:06:15,940

和女人的集合

120

00:06:17,030 --> 00:06:18,700

它是一个集合的包含

121

00:06:22,160 --> 00:06:23,280

所以是泛化关系

122

00:06:24,350 --> 00:06:25,750

而人有手有脚

123

00:06:27,380 --> 00:06:28,380

这个是关联了

124

00:06:29,390 --> 00:06:30,410

人有手有脚

125

00:06:30,420 --> 00:06:32,580

意思并不是说人的集合

126

00:06:32,590 --> 00:06:33,860

包括脚的集合

127

00:06:34,280 --> 00:06:36,850

手的集合,你看桌子也有脚

128

00:06:38,130 --> 00:06:39,320

跟人就没关系

129

00:06:39,700 --> 00:06:41,090

他是说,一个人的个体

130

00:06:42,000 --> 00:06:44,760

由两个手、两个脚组装而成

131

00:06:45,360 --> 00:06:47,800

你看,多重性,两个

132

00:06:48,840 --> 00:06:50,080

个体的组装

133

00:06:50,960 --> 00:06:51,720

所以是关联

134

00:06:52,740 --> 00:06:54,240

你看,都是人有什么什么

135

00:06:54,250 --> 00:06:55,360

一个是泛化

136

00:06:55,690 --> 00:06:57,740

一个是关联

137

00:06:58,910 --> 00:07:01,410

我们来看,人有车有房是什么

138

00:07:02,500 --> 00:07:03,410

这是关联

139

00:07:06,140 --> 00:07:09,540

一个人可能跟某几个车有关联

140

00:07:09,550 --> 00:07:13,170

张三跟那一辆法拉利有关联

141

00:07:13,570 --> 00:07:17,170

李四跟那一辆奥迪有关联

142

00:07:17,180 --> 00:07:19,150

他是个体的

143

00:07:20,930 --> 00:07:22,390

人有高富帅有屌丝呢

144

00:07:23,600 --> 00:07:25,880

这是泛化了,人的集合

145

00:07:26,390 --> 00:07:29,920

包括高富帅的集合和屌丝的集合在里面

146

00:07:31,300 --> 00:07:35,380

集合的包含,泛化,这样来区分

147

00:07:36,410 --> 00:07:41,260

当然,如果说我们比较熟悉的领域

148

00:07:41,930 --> 00:07:43,170

一眼就可以看出来的

149

00:07:43,180 --> 00:07:46,260

那不用去想这么多

150

00:07:46,270 --> 00:07:49,800

像刚才人、男人、女人什么的这种,一看就知道了

151

00:07:49,810 --> 00:07:51,490

不用再想那么多

152

00:07:51,980 --> 00:07:53,340

我们说这个意思就是说

153

00:07:54,160 --> 00:07:57,810

当你对这个概念还不熟悉的时候

154

00:07:59,330 --> 00:08:00,990

面对一个陌生的领域

155

00:08:01,000 --> 00:08:04,750

不像人男女手脚这么简单的

156

00:08:05,760 --> 00:08:07,360

那么这个可以帮助我们思考

157

00:08:07,870 --> 00:08:09,390

追溯到集合、个体

158

00:08:09,830 --> 00:08:12,690

可以帮助我们来确定什么关系更合适

159

00:08:16,300 --> 00:08:18,510

刚才讲了泛化和关联的区别

160

00:08:18,720 --> 00:08:24,190

我们来看看,怎么来识别泛化关系

161

00:08:26,130 --> 00:08:26,570

泛化的识别怎么找

162

00:08:27,370 --> 00:08:29,600

第一个寻找的思路,就是直接形成

163

00:08:30,080 --> 00:08:32,900

我们两个类两个类的看

164

00:08:33,440 --> 00:08:34,510

A和B这样看

165

00:08:35,910 --> 00:08:38,110

看看这两个有没有泛化关系

166

00:08:38,620 --> 00:08:40,930

我们可以问,A是一种B吗

167

00:08:41,780 --> 00:08:42,960

或者B是一种A吗

168

00:08:42,970 --> 00:08:43,440

169

00:08:44,070 --> 00:08:45,140

两个两个这样看

170

00:08:45,880 --> 00:08:46,480

这是一种

171

00:08:48,540 --> 00:08:51,260

第二种,有没有自下而上的

172

00:08:53,780 --> 00:08:55,840

就看两个类有没有共性

173

00:08:56,660 --> 00:08:58,010

把共性提炼上去

174

00:08:59,640 --> 00:09:00,760

提炼出一个超类来

175

00:09:00,930 --> 00:09:01,560

自下而上

176

00:09:01,570 --> 00:09:10,370

或者说,从特殊到一般,第三个,自上而下的

177

00:09:10,830 --> 00:09:13,620

这个就是刚才我们审查类和属性的时候说的

178

00:09:15,010 --> 00:09:17,780

本来我只有一个C,后来发现什么

179

00:09:17,790 --> 00:09:23,700

C里面有些特征只有一部分对象有

180

00:09:24,620 --> 00:09:25,390

说明什么

181

00:09:25,730 --> 00:09:28,640

这些特征很可能不是属于C这个类的

182

00:09:28,650 --> 00:09:30,870

而是属于它里面的一个子类

183

00:09:32,740 --> 00:09:35,840

说明C发生分裂,分裂出AB来

184

00:09:36,670 --> 00:09:38,580

就像刚才讲那个人一样的

185

00:09:39,030 --> 00:09:40,050

人有卵巢

186

00:09:41,020 --> 00:09:43,470

人有喉结,对吗

187

00:09:43,950 --> 00:09:44,610

好像对

188

00:09:45,250 --> 00:09:46,920

但是我们细细看

189

00:09:47,440 --> 00:09:50,080

喉结、卵巢它不属于所有人的

190

00:09:50,750 --> 00:09:52,950

只有一部分人有,意味着什么

191

00:09:53,310 --> 00:09:54,620

人发生了分裂

192

00:09:54,890 --> 00:09:56,280

分裂成男人和女人

193

00:09:57,520 --> 00:09:58,770

喉结是男人的

194

00:09:59,380 --> 00:10:06,020

卵巢是女人的,三种,这是泛化关系的识别

相关推荐
FreakStudio2 小时前
全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码
python·嵌入式·面向对象·电子diy
职创未来官方3 天前
大话C++:第12篇 构造函数与析构函数
c++·物联网·面向对象·嵌入式开发·构造函数·析构函数
边城仔3 天前
【设计模式】UML类图
设计模式·uml
职创未来官方6 天前
大话C++:第11篇 类的定义与封装
c++·面向对象·封装··嵌入式物联网·访问修饰符
FreakStudio8 天前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
怀九日9 天前
C++(学习)2024.9.18
开发语言·c++·学习·面向对象·引用·
GoppViper9 天前
golang学习笔记28——golang中实现多态与面向对象
笔记·后端·学习·golang·多态·面向对象
严文文-Chris11 天前
【面向对象】
面向对象
J老熊12 天前
Java设计模式之责任链模式详细讲解和案例示范
java·设计模式·面试·系统架构·责任链模式·uml