All language subtitles for 19. Another Class Example

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:01,440 --> 00:00:03,730 There are a few more things that we need 2 2 00:00:03,730 --> 00:00:05,700 to learn about classes. 3 3 00:00:05,700 --> 00:00:08,943 And so, let's actually create a new class now. 4 4 00:00:10,850 --> 00:00:12,320 And as an example, 5 5 00:00:12,320 --> 00:00:14,123 we are gonna use the bank account 6 6 00:00:14,123 --> 00:00:17,780 that we implemented before, in the Bankist app. 7 7 00:00:17,780 --> 00:00:19,460 Remember that? 8 8 00:00:19,460 --> 00:00:24,450 So, let's say class Account, and then as always, 9 9 00:00:26,770 --> 00:00:29,500 we need the constructor method. 10 10 00:00:29,500 --> 00:00:33,023 And here each account should have the owner name. 11 11 00:00:34,490 --> 00:00:37,840 It should have a defined currency, 12 12 00:00:37,840 --> 00:00:40,733 and also, we want to pass in a pin. 13 13 00:00:42,930 --> 00:00:46,740 And so, let's say this.owner is owner 14 14 00:00:47,640 --> 00:00:50,343 and the same for currency and the pin. 15 15 00:00:53,360 --> 00:00:58,360 So, we already know how to do all of this, right? 16 16 00:00:58,668 --> 00:01:01,423 And so now let's create a new account here. 17 17 00:01:02,440 --> 00:01:07,440 Let's say acc1, and so new account, 18 18 00:01:07,760 --> 00:01:09,430 and let's say that I am the owner. 19 19 00:01:09,430 --> 00:01:14,430 So, Jonas, then the currency is in Euro and the pin, 20 20 00:01:15,130 --> 00:01:16,563 let's say, is this one? 21 21 00:01:19,890 --> 00:01:21,290 All right. 22 22 00:01:21,290 --> 00:01:24,710 So, indeed we have the three values that we passed 23 23 00:01:24,710 --> 00:01:29,020 into the constructor, now inside of the object. 24 24 00:01:29,020 --> 00:01:31,570 But now what about the movements array, 25 25 00:01:31,570 --> 00:01:34,350 and maybe also the local. 26 26 00:01:34,350 --> 00:01:37,100 So, we want to start always with an empty array 27 27 00:01:37,100 --> 00:01:39,230 as the movements and the local, 28 28 00:01:39,230 --> 00:01:43,090 we want to get from the navigator.language. 29 29 00:01:43,090 --> 00:01:45,280 So, how should we do that? 30 30 00:01:45,280 --> 00:01:48,013 Should we add a new parameter, like this? 31 31 00:01:48,930 --> 00:01:53,740 So, movement, and then always pass in an empty array 32 32 00:01:53,740 --> 00:01:55,523 in all the accounts that we create. 33 33 00:01:56,500 --> 00:01:59,110 Well, that would work. 34 34 00:01:59,110 --> 00:02:01,420 So, let's actually see that. 35 35 00:02:01,420 --> 00:02:06,070 So, movement, actually movements should be equal 36 36 00:02:06,070 --> 00:02:08,830 to movements, here as well. 37 37 00:02:08,830 --> 00:02:10,950 And so now, as you see, 38 38 00:02:10,950 --> 00:02:13,790 the movement is now this empty array, 39 39 00:02:13,790 --> 00:02:15,750 however, it doesn't make much sense 40 40 00:02:15,750 --> 00:02:18,110 to pass in this empty array, 41 41 00:02:18,110 --> 00:02:22,260 into all the new accounts that we want to create, right? 42 42 00:02:22,260 --> 00:02:26,883 So, we don't need this, and instead we can simply do this. 43 43 00:02:28,300 --> 00:02:31,520 And so, this is something that we didn't do before, 44 44 00:02:31,520 --> 00:02:34,320 but of course we can create even more properties 45 45 00:02:34,320 --> 00:02:36,950 on any instance and properties 46 46 00:02:36,950 --> 00:02:39,790 that are not based on any inputs. 47 47 00:02:39,790 --> 00:02:43,430 And the same we can now do for the local 48 48 00:02:43,430 --> 00:02:48,430 and set it to navigator.language, right? 49 49 00:02:50,430 --> 00:02:53,193 And so now, all of that appears here as well. 50 50 00:02:55,370 --> 00:02:58,390 And in fact, we can even execute any code 51 51 00:02:58,390 --> 00:03:00,603 here in this constructor that we want. 52 52 00:03:02,510 --> 00:03:07,510 So, let's say, "Thanks for opening an account," 53 53 00:03:13,256 --> 00:03:15,140 and then owner. 54 54 00:03:15,140 --> 00:03:18,370 And so, when Jonas opens a new account, 55 55 00:03:18,370 --> 00:03:21,880 then he's basically greeted with this message here, 56 56 00:03:21,880 --> 00:03:24,620 coming right from the constructor. 57 57 00:03:24,620 --> 00:03:29,620 All right, but now what about the deposits and withdrawals? 58 58 00:03:30,060 --> 00:03:33,230 So, basically what about our movements? 59 59 00:03:33,230 --> 00:03:38,090 Well, we could simply now go ahead and do this. 60 60 00:03:38,090 --> 00:03:41,060 So we can take acc1.movements, 61 61 00:03:41,060 --> 00:03:43,710 and then if we wanted to do a deposit, 62 62 00:03:43,710 --> 00:03:46,200 we could push a value into this. 63 63 00:03:46,200 --> 00:03:51,200 Let's say 250, and then when we want to withdraw something, 64 64 00:03:52,110 --> 00:03:54,443 we would simply push a negative value. 65 65 00:03:55,330 --> 00:03:59,760 And so, if we then take a look at our account here, 66 66 00:03:59,760 --> 00:04:03,550 then of course we would see these movements right here 67 67 00:04:03,550 --> 00:04:04,930 in our array. 68 68 00:04:04,930 --> 00:04:09,070 However, it's not a good idea at all to do this. 69 69 00:04:09,070 --> 00:04:13,350 So, instead of interacting with a property like this, 70 70 00:04:13,350 --> 00:04:15,860 it's a lot better to create methods 71 71 00:04:15,860 --> 00:04:18,540 that interact with these properties. 72 72 00:04:18,540 --> 00:04:22,260 And that is especially true for important properties, 73 73 00:04:22,260 --> 00:04:25,020 such as these movements here. 74 74 00:04:25,020 --> 00:04:27,440 So, this will for sure avoid bugs 75 75 00:04:27,440 --> 00:04:30,400 in the future, as your application grows. 76 76 00:04:30,400 --> 00:04:33,420 So, let's now actually create a deposit 77 77 00:04:33,420 --> 00:04:35,563 and a withdrawal method here. 78 78 00:04:37,440 --> 00:04:42,253 So, deposit and inherit the value that we want to deposit. 79 79 00:04:43,790 --> 00:04:47,503 And then this.movements.push, 80 80 00:04:48,519 --> 00:04:50,093 the value that we pass into. 81 81 00:04:53,130 --> 00:04:55,203 And now the same for withdrawal. 82 82 00:04:58,370 --> 00:04:59,963 So, also a value. 83 83 00:05:00,920 --> 00:05:05,920 And so here, we can now actually call this method 84 84 00:05:05,990 --> 00:05:09,910 because it's actually gonna work basically the same way. 85 85 00:05:09,910 --> 00:05:12,630 So this.deposit. 86 86 00:05:12,630 --> 00:05:14,080 And so, as you can see here, 87 87 00:05:14,080 --> 00:05:16,660 we can actually call other methods 88 88 00:05:16,660 --> 00:05:18,730 inside of a certain method. 89 89 00:05:18,730 --> 00:05:22,340 So, in withdraw, we are calling this.deposit, 90 90 00:05:22,340 --> 00:05:25,270 but of course we still need to use the this keyword 91 91 00:05:25,270 --> 00:05:27,793 to be able to access this other method. 92 92 00:05:29,370 --> 00:05:32,820 And then here, we pass in minus the value 93 93 00:05:32,820 --> 00:05:34,733 that we received in this function. 94 94 00:05:36,220 --> 00:05:38,430 So let's try this now. 95 95 00:05:38,430 --> 00:05:39,973 So instead of doing this, 96 96 00:05:41,160 --> 00:05:43,970 we now can do it in a much nicer way. 97 97 00:05:43,970 --> 00:05:48,970 So acc1.deposit 250, and then acc1.withdraw 140. 98 98 00:05:57,160 --> 00:05:58,400 And so indeed, 99 99 00:05:58,400 --> 00:06:02,670 our movements array looks just the same as before, 100 100 00:06:02,670 --> 00:06:06,440 but now we are actually using this public interface 101 101 00:06:06,440 --> 00:06:09,570 that we built here, right? 102 102 00:06:09,570 --> 00:06:11,760 So, basically these methods here, 103 103 00:06:11,760 --> 00:06:14,560 are the interface to our objects, 104 104 00:06:14,560 --> 00:06:17,970 and we also call this API, remember? 105 105 00:06:17,970 --> 00:06:19,330 So, we talked about this, 106 106 00:06:19,330 --> 00:06:21,483 right at the beginning of the section. 107 107 00:06:22,740 --> 00:06:25,320 So again, let's actually write this here. 108 108 00:06:25,320 --> 00:06:29,750 So this is the public interface of our objects. 109 109 00:06:29,750 --> 00:06:32,660 And so, yeah, this is a lot better 110 110 00:06:32,660 --> 00:06:34,860 than having to manually manipulate 111 111 00:06:34,860 --> 00:06:39,860 these properties outside of the object, as we did here. 112 112 00:06:39,970 --> 00:06:44,750 Also this withdraw method here actually abstracts the fact 113 113 00:06:44,750 --> 00:06:48,880 that a withdrawal is basically a negative movement. 114 114 00:06:48,880 --> 00:06:50,980 So here as we did it manually, 115 115 00:06:50,980 --> 00:06:54,320 we needed to pass in minus 140. 116 116 00:06:54,320 --> 00:06:57,320 But now, as we do a withdrawal, it's of course, 117 117 00:06:57,320 --> 00:06:59,250 a lot more natural to write 118 118 00:06:59,250 --> 00:07:03,670 that simply 140 are gonna be withdrawn. 119 119 00:07:03,670 --> 00:07:06,890 So, what I'm trying to say is that this minus here, 120 120 00:07:06,890 --> 00:07:09,340 is something that the user of this object, 121 121 00:07:09,340 --> 00:07:11,070 shouldn't be caring about. 122 122 00:07:11,070 --> 00:07:14,220 And so now, we actually abstracted that away, 123 123 00:07:14,220 --> 00:07:16,590 right into this object, 124 124 00:07:16,590 --> 00:07:19,693 and in particular into this withdrawal method. 125 125 00:07:20,870 --> 00:07:24,080 So, just a very small obstruction here in this case, 126 126 00:07:24,080 --> 00:07:26,223 but it's still worth to notice. 127 127 00:07:27,150 --> 00:07:31,010 All right, now, of course, 128 128 00:07:31,010 --> 00:07:34,590 still there is nothing stopping someone on our team 129 129 00:07:34,590 --> 00:07:37,900 from interacting with the movements array directly 130 130 00:07:37,900 --> 00:07:42,250 and potentially making mistakes and introducing bugs. 131 131 00:07:42,250 --> 00:07:45,160 So, simply the fact that we have these methods, 132 132 00:07:45,160 --> 00:07:49,000 doesn't make it impossible to still do this. 133 133 00:07:49,000 --> 00:07:51,653 And the same goes, for example, for the pin. 134 134 00:07:52,900 --> 00:07:55,570 So, of course, we can access the pin 135 135 00:07:55,570 --> 00:07:57,713 from outside of the account. 136 136 00:07:59,400 --> 00:08:03,630 So, you see, but probably it shouldn't be accessible 137 137 00:08:03,630 --> 00:08:07,780 from outside of the class, but yeah, 138 138 00:08:07,780 --> 00:08:10,670 of course, right now it is accessible. 139 139 00:08:10,670 --> 00:08:14,990 And this is actually a very real and very important concern. 140 140 00:08:14,990 --> 00:08:17,260 So, it's not just something theoretical 141 141 00:08:17,260 --> 00:08:19,240 that I'm telling you here. 142 142 00:08:19,240 --> 00:08:21,853 And the same, of course, goes for methods. 143 143 00:08:23,940 --> 00:08:28,223 So, let's say we have a requestLoan method here, 144 144 00:08:31,450 --> 00:08:33,100 for some value. 145 145 00:08:33,100 --> 00:08:35,980 And remember that this was also a functionality 146 146 00:08:35,980 --> 00:08:39,150 of the Bankist application. 147 147 00:08:39,150 --> 00:08:42,070 So, we could make the approval of the loan based 148 148 00:08:42,070 --> 00:08:46,610 on some condition, and that condition could come 149 149 00:08:46,610 --> 00:08:50,095 from some other method, let's say, 150 150 00:08:50,095 --> 00:08:54,095 approveLoan, let's pass in a value here as well, 151 151 00:08:57,570 --> 00:09:01,590 and this one will simply always return true. 152 152 00:09:01,590 --> 00:09:05,440 So, I don't want to implement any complex logic here now, 153 153 00:09:05,440 --> 00:09:08,710 but anyway, here we can now call this.approveLoan 154 154 00:09:11,010 --> 00:09:12,113 with the value. 155 155 00:09:13,010 --> 00:09:14,890 And so if the loan is approved, 156 156 00:09:14,890 --> 00:09:19,890 then this.deposit of the value, 157 157 00:09:21,210 --> 00:09:24,420 and we can lock something to the console. 158 158 00:09:24,420 --> 00:09:29,420 So, "Loan approved" or something like that, okay? 159 159 00:09:29,800 --> 00:09:32,340 Now, in the public interface, 160 160 00:09:32,340 --> 00:09:34,793 we basically only want this method here. 161 161 00:09:35,670 --> 00:09:39,928 So, we want to be able to do this here basically, 162 162 00:09:39,928 --> 00:09:44,928 acc1.requestLoan, let's say of 1000. 163 163 00:09:46,960 --> 00:09:49,490 And so, we see that the loan was approved 164 164 00:09:49,490 --> 00:09:52,220 and it was pushed into our array. 165 165 00:09:52,220 --> 00:09:56,420 But, of course, we are also able to do this. 166 166 00:09:56,420 --> 00:09:57,753 So approveLoan. 167 167 00:10:00,250 --> 00:10:03,100 And so this, of course, doesn't do anything, 168 168 00:10:03,100 --> 00:10:04,210 but in the real world, 169 169 00:10:04,210 --> 00:10:07,773 we should not even be allowed to access this kind of method. 170 170 00:10:08,770 --> 00:10:10,910 So this is kind of an internal method 171 171 00:10:10,910 --> 00:10:14,910 that only the requestLoan method should be able to use. 172 172 00:10:14,910 --> 00:10:17,610 And so the reason why I'm telling you all this, 173 173 00:10:17,610 --> 00:10:19,750 is basically just to justify 174 174 00:10:19,750 --> 00:10:24,440 that we really need data encapsulation and data privacy. 175 175 00:10:24,440 --> 00:10:27,880 And we talked about these topics in the introductory lecture 176 176 00:10:27,880 --> 00:10:30,440 of the section, and so as always, 177 177 00:10:30,440 --> 00:10:32,880 you can go ahead and review that, 178 178 00:10:32,880 --> 00:10:34,960 but anyway, in the next video, 179 179 00:10:34,960 --> 00:10:38,150 we will finally start implementing data privacy 180 180 00:10:38,150 --> 00:10:40,180 and data encapsulation. 181 181 00:10:40,180 --> 00:10:42,163 So let's move on there right now. 15636

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.