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.