about summary refs log tree commit diff
path: root/usth/ICT2.7/P3L1 Software Architecture Subtitles/13 - Final Example - lang_en_vs4.srt
blob: 4fab0c61e8e22d95ccd49d511beebf6d511ebe3d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
1
00:00:00,220 --> 00:00:02,130
I'm going to conclude this set of examples with

2
00:00:02,130 --> 00:00:04,750
a system that you might also know, Bash. And in

3
00:00:04,750 --> 00:00:08,000
case you don't, Bash is a Unix shell written as

4
00:00:08,000 --> 00:00:11,000
a free software replacement for the traditional Bourne shell, also

5
00:00:11,000 --> 00:00:13,690
called sh. So what I'm showing here is the

6
00:00:13,690 --> 00:00:17,950
descriptive architecture of the command component of Bash. So, is

7
00:00:17,950 --> 00:00:22,170
the architecture, as implemented, of the command component of Bash.

8
00:00:22,170 --> 00:00:25,390
And the component is the one here sort of highlighted

9
00:00:25,390 --> 00:00:28,120
in gray. And what you can see here, these names are

10
00:00:28,120 --> 00:00:31,640
the sub components of the command component. And if we look at

11
00:00:31,640 --> 00:00:35,000
this architecture, two design problems of the component can kind of jump

12
00:00:35,000 --> 00:00:37,870
at us. The first one is the lack of cohesion within the

13
00:00:37,870 --> 00:00:40,830
component. So, if you look here, you can see that only

14
00:00:40,830 --> 00:00:44,820
a few connections exist between the sub-components. And having a low cohesion

15
00:00:44,820 --> 00:00:47,430
is normally not a good thing for a design. The second thing

16
00:00:47,430 --> 00:00:50,860
that we can note is the high coupling. The component has tons

17
00:00:50,860 --> 00:00:54,200
of connections with other components. They're, these edges that are

18
00:00:54,200 --> 00:00:57,890
leaving the components and going towards other parts of the system.

19
00:00:57,890 --> 00:01:01,190
So basically, this component has low cohesion and high coupling, which

20
00:01:01,190 --> 00:01:04,730
is exactly the opposite of how a good design should be.

21
00:01:04,730 --> 00:01:07,410
Given the structure, it is clear that anytime you change

22
00:01:07,410 --> 00:01:09,970
this component you might need to change a bunch of other

23
00:01:09,970 --> 00:01:13,440
components in the system. And of course, when changing other components

24
00:01:13,440 --> 00:01:15,910
in the system, you might also need to chance the command

25
00:01:15,910 --> 00:01:19,060
component as well. And along similar lines, to understand this

26
00:01:19,060 --> 00:01:21,890
component you probably need to look at many other parts of

27
00:01:21,890 --> 00:01:24,690
the system, which is also less than ideal. And one

28
00:01:24,690 --> 00:01:27,580
important point here is that with all these examples, I'm not

29
00:01:27,580 --> 00:01:30,500
really trying to criticize any specific system, what I'm trying

30
00:01:30,500 --> 00:01:34,380
to show instead, is how complex software architectures can be, and

31
00:01:34,380 --> 00:01:37,040
how much they can degrade over time. And this is true

32
00:01:37,040 --> 00:01:39,660
for most systems, not just the ones that I showed you.