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.