diff options
Diffstat (limited to 'usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt')
-rw-r--r-- | usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt | 599 |
1 files changed, 0 insertions, 599 deletions
diff --git a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt b/usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt deleted file mode 100644 index 0559c88..0000000 --- a/usth/ICT2.7/P4L5 Software Refactoring Subtitles/15 - Refactoring Demo - lang_en_vs4.srt +++ /dev/null @@ -1,599 +0,0 @@ -1 -00:00:00,090 --> 00:00:03,110 -So now we saw, this set of re-factoring's. They're nice, but - -2 -00:00:03,110 --> 00:00:06,260 -how can we actually perform re-factoring's? In some cases you'll have to - -3 -00:00:06,260 --> 00:00:08,430 -do it by hand. And you'll do it in that case in - -4 -00:00:08,430 --> 00:00:10,880 -small steps, so that you can check at every step that you - -5 -00:00:10,880 --> 00:00:14,180 -didn't introduce any area. But there's also many cases in which at - -6 -00:00:14,180 --> 00:00:17,640 -least for the more standard re-factoring's, you can just apply, you can - -7 -00:00:17,640 --> 00:00:21,530 -just use a tool that actually supports re-factoring. I'm going to show - -8 -00:00:21,530 --> 00:00:24,550 -you how that works, into a specific ID, Eclipse through a demo. - -9 -00:00:26,120 --> 00:00:28,425 -To show you how Eclipse, can help in performing - -10 -00:00:28,425 --> 00:00:31,880 -re-factoring, in an automated way, I just opened the Eclipse - -11 -00:00:31,880 --> 00:00:35,050 -editor and I maximized it. So that we can look - -12 -00:00:35,050 --> 00:00:36,810 -at the code more clearly. And as you can see - -13 -00:00:36,810 --> 00:00:39,551 -here, I have this class. It's called Re-factorable, it's a - -14 -00:00:39,551 --> 00:00:43,550 -pretty indicative name. And what we're going to do, we're going to - -15 -00:00:43,550 --> 00:00:47,840 -try to apply the extract method re-factoring to this class. - -16 -00:00:47,840 --> 00:00:51,060 -And in particular, to parts of this print owing method. - -17 -00:00:51,060 --> 00:00:54,090 -So this is a matter than will print owing's, - -18 -00:00:54,090 --> 00:00:56,160 -as the name says. And it will do several things - -19 -00:00:56,160 --> 00:00:59,180 -such as, for example, printing a banner first, then - -20 -00:00:59,180 --> 00:01:03,650 -calculating the outstanding debts, and then printing some details. So - -21 -00:01:03,650 --> 00:01:06,980 -the starting point for an extract method re-fractoring, is - -22 -00:01:06,980 --> 00:01:10,650 -the identification of some cohesive code fragment. And here, for - -23 -00:01:10,650 --> 00:01:12,970 -instance, we can see that, if we can see there, - -24 -00:01:12,970 --> 00:01:16,350 -these three print statements. They are basically printing some banner, - -25 -00:01:16,350 --> 00:01:18,530 -for the method. And I also put a comment here - -26 -00:01:18,530 --> 00:01:21,160 -just to make that even more explicit. So this is a - -27 -00:01:21,160 --> 00:01:23,970 -perfect case in which we might want to just extract - -28 -00:01:23,970 --> 00:01:27,220 -this part, create an independent method, so that we can make - -29 -00:01:27,220 --> 00:01:31,410 -the code more readable and maintainable. So I select, the - -30 -00:01:31,410 --> 00:01:33,320 -part of the code, that I want to put in my - -31 -00:01:33,320 --> 00:01:37,080 -method. I invoke the contextual menu, and as you can see - -32 -00:01:37,080 --> 00:01:41,287 -there is a re-factor entry here. Here are some re-factoring's [UNKNOWN], - -33 -00:01:41,287 --> 00:01:45,039 -re-factoring's that I can apply, and I'm going to select extract - -34 -00:01:45,039 --> 00:01:48,120 -method. When I do that, Eclipse is going to ask me to - -35 -00:01:48,120 --> 00:01:51,610 -specify a method name. I'll just call this one print - -36 -00:01:51,610 --> 00:01:54,260 -banner. And as you can see, as soon as I do - -37 -00:01:54,260 --> 00:01:57,310 -that, Eclipse will show me the preview, for the method - -38 -00:01:57,310 --> 00:02:01,010 -that will be generated. I'm going to leave the access modifier. To - -39 -00:02:01,010 --> 00:02:03,290 -public and I'm not going to change anything else. So, - -40 -00:02:03,290 --> 00:02:07,760 -now when I click Ok. As you can see Eclipse modified - -41 -00:02:07,760 --> 00:02:10,669 -my code so that now I have the Print Banner method - -42 -00:02:10,669 --> 00:02:14,050 -down here that does exactly what that piece of code was doing - -43 -00:02:14,050 --> 00:02:16,090 -before. And I just have an invocation of the Print Banner - -44 -00:02:16,090 --> 00:02:19,440 -method, up here, where the code was before. And of course, this - -45 -00:02:19,440 --> 00:02:21,830 -is something that we could have done by hand. It's pretty - -46 -00:02:21,830 --> 00:02:25,480 -easy to do, but it's even easier, to do it using Eclipse's - -47 -00:02:25,480 --> 00:02:29,040 -capabilities. And this will become even more apparent, when we consider slightly - -48 -00:02:29,040 --> 00:02:32,866 -more complex case. So here, if we look at this piece of - -49 -00:02:32,866 --> 00:02:35,234 -code for instance, we can that see this code - -50 -00:02:35,234 --> 00:02:38,264 -prints some details, about the always. And the reason - -51 -00:02:38,264 --> 00:02:41,351 -why this case is likely more complicated, is because - -52 -00:02:41,351 --> 00:02:45,210 -this code needs to know about the value of outstanding. - -53 -00:02:45,210 --> 00:02:49,130 -And whereas that underscore name, is a member of - -54 -00:02:49,130 --> 00:02:51,150 -the class, and therefore will be available to the - -55 -00:02:51,150 --> 00:02:55,110 -method. Outstanding is a locker variable, so a method - -56 -00:02:55,110 --> 00:02:58,310 -different from print, oh it wouldn't know anything about outstanding. - -57 -00:02:58,310 --> 00:03:00,070 -So let's see what happens when we try to apply - -58 -00:03:00,070 --> 00:03:03,460 -a re-factoring for this code. So we go again here - -59 -00:03:03,460 --> 00:03:06,410 -to the re-factor menu, we select extract method, we will - -60 -00:03:06,410 --> 00:03:10,080 -pick a name again. So let's call it [SOUND] print details, - -61 -00:03:10,080 --> 00:03:12,660 -since this is what the code does. And as you - -62 -00:03:12,660 --> 00:03:17,270 -can see here, Eclipse was able to figure out, that outstanding - -63 -00:03:17,270 --> 00:03:20,290 -has to be a parameter, of this method. So if - -64 -00:03:20,290 --> 00:03:23,340 -you look at the signature here, this will be very clear. - -65 -00:03:23,340 --> 00:03:26,270 -So outstanding has to be passed to the matter because - -66 -00:03:26,270 --> 00:03:29,230 -it's a locker variable of the print owing method. so - -67 -00:03:29,230 --> 00:03:32,600 -it will not be visible to the other methods otherwise. - -68 -00:03:32,600 --> 00:03:34,990 -So since eclipse figured it out, all I have to do, - -69 -00:03:34,990 --> 00:03:37,630 -is to press Ok. And at this point what I - -70 -00:03:37,630 --> 00:03:41,280 -will have here is my new method, for in details - -71 -00:03:41,280 --> 00:03:45,140 -that takes outstanding as a parameter. And does exactly what - -72 -00:03:45,140 --> 00:03:48,880 -the code was doing before. And here, where the code was, - -73 -00:03:48,880 --> 00:03:51,630 -I will have my print details invocation, with outstanding - -74 -00:03:51,630 --> 00:03:54,930 -as a parameter. So now, let's continue to extract methods. - -75 -00:03:54,930 --> 00:03:58,470 -And let's look at a even more complex case. which - -76 -00:03:58,470 --> 00:04:01,550 -is, the one involving this piece of code. So this - -77 -00:04:01,550 --> 00:04:03,900 -piece of code, as you can see, will calculate - -78 -00:04:03,900 --> 00:04:07,820 -the value of the outstanding debt. Will calculate the owing's, - -79 -00:04:07,820 --> 00:04:09,600 -and the way in which it does that, is by - -80 -00:04:09,600 --> 00:04:14,080 -considering all the orders, that are part of this enumeration. - -81 -00:04:14,080 --> 00:04:16,519 -That is the declared here, and it will - -82 -00:04:16,519 --> 00:04:20,769 -compute for each one, of these orders, the amount, - -83 -00:04:20,769 --> 00:04:23,520 -and then added to outstanding. So what is the - -84 -00:04:23,520 --> 00:04:26,160 -additional complication here? Well, the additional complication here is - -85 -00:04:26,160 --> 00:04:29,520 -that this code needs to know, not only - -86 -00:04:29,520 --> 00:04:33,220 -about outstanding. It also needs to know, about this - -87 -00:04:33,220 --> 00:04:36,160 -enumeration, because this one is also a local variable. - -88 -00:04:36,160 --> 00:04:39,140 -And in addition to that, this code also has - -89 -00:04:39,140 --> 00:04:43,280 -some side effects. So outstanding, is modified as a - -90 -00:04:43,280 --> 00:04:46,600 -consequence of the execution of this code. So how can - -91 -00:04:46,600 --> 00:04:49,120 -we do that in the extracted method? Well lets - -92 -00:04:49,120 --> 00:04:51,000 -see what the clips will do and what the clips - -93 -00:04:51,000 --> 00:04:53,950 -will suggest. It will try to again re-factor this - -94 -00:04:53,950 --> 00:04:58,030 -code and extract the method. In this case as you - -95 -00:04:58,030 --> 00:05:01,160 -can see. The clips does two things. First of all, - -96 -00:05:01,160 --> 00:05:04,180 -it figures out as before, that there are some parameters, - -97 -00:05:04,180 --> 00:05:07,650 -that are needed for this method to operate correctly. The - -98 -00:05:07,650 --> 00:05:11,600 -enumeration e, as we said, and the outstanding variable. In - -99 -00:05:11,600 --> 00:05:14,880 -addition, if you look at the method signature Eclipse will - -100 -00:05:14,880 --> 00:05:17,490 -also figure out that this method has to return, a - -101 -00:05:17,490 --> 00:05:21,530 -double value. So what does this value correspond to? This - -102 -00:05:21,530 --> 00:05:24,700 -value corresponds to a new value of outstanding. So if - -103 -00:05:24,700 --> 00:05:27,490 -we, give a name to this method, so we just - -104 -00:05:27,490 --> 00:05:29,620 -use the name, [SOUND] that I put in the comment - -105 -00:05:29,620 --> 00:05:33,510 -over there. We click Ok, and this will create - -106 -00:05:33,510 --> 00:05:36,560 -a method by extracting the code. And here, where the - -107 -00:05:36,560 --> 00:05:39,100 -method used to be, we will have that the - -108 -00:05:39,100 --> 00:05:43,169 -value of outstanding is updated. Based on the return value - -109 -00:05:43,169 --> 00:05:46,260 -of calculate outstanding. So in the end if we - -110 -00:05:46,260 --> 00:05:48,730 -look at this code, you can see that if we - -111 -00:05:48,730 --> 00:05:51,980 -just focus, on this code it's very easy to - -112 -00:05:51,980 --> 00:05:55,150 -understand what it does. It prints the banner, it calculates - -113 -00:05:55,150 --> 00:05:59,180 -an outstanding value, and then it prints some details. And - -114 -00:05:59,180 --> 00:06:01,520 -in case we don't care, as I said before, about the - -115 -00:06:01,520 --> 00:06:04,840 -details of what these methods do, we're done. And if we - -116 -00:06:04,840 --> 00:06:07,740 -care about the details we can look at each matter individually. - -117 -00:06:07,740 --> 00:06:10,580 -And get exactly the same information that we got before, - -118 -00:06:10,580 --> 00:06:13,650 -in a sort of a separation of concerns kind of way, - -119 -00:06:13,650 --> 00:06:16,420 -by focusing on one problem at a time. So now let - -120 -00:06:16,420 --> 00:06:19,345 -me do one last thing. So let me modify the code, - -121 -00:06:19,345 --> 00:06:23,170 -slightly. So i'm going to go back, to the version of - -122 -00:06:23,170 --> 00:06:25,610 -the code before re-factoring. So this is what we had. - -123 -00:06:25,610 --> 00:06:32,480 -And I'm going to add, an additional variable here, [SOUND] called count, - -124 -00:06:32,480 --> 00:06:38,870 -which I initialize to zero. Here I'm going to increase, [SOUND] - -125 -00:06:38,870 --> 00:06:41,360 -the value of count at every iteration. And - -126 -00:06:41,360 --> 00:06:44,570 -finally, here I'm going to print out the value - -127 -00:06:44,570 --> 00:06:50,130 -of count. Okay, now that I have this code up. So let's imagine that I - -128 -00:06:50,130 --> 00:06:55,665 -want to, again as I did before, extract this matter. So, I'm going to - -129 -00:06:55,665 --> 00:06:58,430 -give you a second. Have a look at this and see, if you see - -130 -00:06:58,430 --> 00:07:02,170 -any problem with that. Feel free to stop the video, if you need more time. - -131 -00:07:07,350 --> 00:07:11,440 -So the problem here is that I have two side effects. - -132 -00:07:11,440 --> 00:07:14,820 -Both outstanding and count are modified. And therefore it's not really - -133 -00:07:14,820 --> 00:07:19,600 -possible to extract this method, and preserve the semantics of this - -134 -00:07:19,600 --> 00:07:23,260 -code. Let's see if Eclipse will be able to figure that out. - -135 -00:07:26,130 --> 00:07:28,950 -And it does. If we try to extract the matter here, - -136 -00:07:28,950 --> 00:07:32,250 -you'll tell us that's an ambiguous return value. The selected block - -137 -00:07:32,250 --> 00:07:35,800 -contains more than one assignment to look at variables. And the - -138 -00:07:35,800 --> 00:07:40,170 -affected variables are outstanding, just a Double and Count which is - -139 -00:07:40,170 --> 00:07:44,780 -an integer. So it will refuse to extract the method. So - -140 -00:07:44,780 --> 00:07:46,470 -at this point if we wanted to do that we have - -141 -00:07:46,470 --> 00:07:48,650 -we'll have to do the re-factoring a different way, but I - -142 -00:07:48,650 --> 00:07:51,110 -don't really want to get there. I want to conclude here, - -143 -00:07:51,110 --> 00:07:53,440 -and I hope this this little demo helped you - -144 -00:07:53,440 --> 00:07:55,310 -realize how useful it can be to use an - -145 -00:07:55,310 --> 00:07:58,270 -id that supports re-factoring that can automate this important - -146 -00:07:58,270 --> 00:08:00,160 -task. And I also encourage you to try to play - -147 -00:08:00,160 --> 00:08:03,170 -with this, and try to use different re-factoring's, on - -148 -00:08:03,170 --> 00:08:05,480 -your code. So as to get familiar with the kind - -149 -00:08:05,480 --> 00:08:08,060 -of re-factoring's that are supported by the ID. And - -150 -00:08:08,060 --> 00:08:10,800 -also with the re-factoring's themselves and how should be used. |