Download 13 - Object-oriented programming/004 Interfaces_en.srt from Tan115/java-development-for-beginners-learnit: direct link, hf CLI and curl.
- Browser
- Download file 17.6 kB
-
https://huggingface.co/Tan115/java-development-for-beginners-learnit/resolve/main/13%20-%20Object-oriented%20programming/004%20Interfaces_en.srt
- Command line
-
hf download 'hf://Tan115/java-development-for-beginners-learnit/13 - Object-oriented programming/004 Interfaces_en.srt'
-
curl -L -o '004 Interfaces_en.srt' https://huggingface.co/Tan115/java-development-for-beginners-learnit/resolve/main/13%20-%20Object-oriented%20programming/004%20Interfaces_en.srt
17.6 kB
| 1 | |
| 00:00:05,000 --> 00:00:10,000 | |
| Hello, dear students, in this lesson, we are going to talk with you about interfaces from this lesson, | |
| 2 | |
| 00:00:10,000 --> 00:00:13,000 | |
| you learn what interfaces are and what do they consist of. | |
| 3 | |
| 00:00:13,000 --> 00:00:18,000 | |
| Also, we'll discuss what is the difference between abstract class and interface. | |
| 4 | |
| 00:00:18,000 --> 00:00:23,000 | |
| And at the end of the lesson, I will tell you what is the difference between such terms as interface, | |
| 5 | |
| 00:00:23,000 --> 00:00:24,000 | |
| class and time. | |
| 6 | |
| 00:00:25,000 --> 00:00:30,000 | |
| Let's go as I just start and look at examples to understand what interfaces are. | |
| 7 | |
| 00:00:30,000 --> 00:00:36,000 | |
| First of all, let's come up with a definition of an interface interfaces, an abstraction which defines | |
| 8 | |
| 00:00:36,000 --> 00:00:41,000 | |
| a behavioral contract that must be followed by every class that implements this interface. | |
| 9 | |
| 00:00:42,000 --> 00:00:48,000 | |
| In other words, you specify a set of expected behavior which should be present in each class that implements | |
| 10 | |
| 00:00:48,000 --> 00:00:49,000 | |
| this interface. | |
| 11 | |
| 00:00:49,000 --> 00:00:53,000 | |
| But it don't specify how exactly this behavior will be implemented. | |
| 12 | |
| 00:00:53,000 --> 00:00:56,000 | |
| For example, have interface here for payment processor. | |
| 13 | |
| 00:00:57,000 --> 00:01:03,000 | |
| I need to have some type in my program that will be able to process payment and send information about | |
| 14 | |
| 00:01:03,000 --> 00:01:04,000 | |
| our payment to Payment Gateway. | |
| 15 | |
| 00:01:05,000 --> 00:01:12,000 | |
| That's why I want to declare what method with the name process payment, the text payment data object | |
| 16 | |
| 00:01:12,000 --> 00:01:13,000 | |
| as an argument. | |
| 17 | |
| 00:01:13,000 --> 00:01:20,000 | |
| Payment data is simple project loss that has the payment amount tax amount idea of a user who wants | |
| 18 | |
| 00:01:20,000 --> 00:01:22,000 | |
| to make a payment and currency. | |
| 19 | |
| 00:01:23,000 --> 00:01:25,000 | |
| The rest of the message here I just getters and setters. | |
| 20 | |
| 00:01:26,000 --> 00:01:27,000 | |
| Now let's get back to our interface. | |
| 21 | |
| 00:01:28,000 --> 00:01:32,000 | |
| You see that I declared method without body and without any other modifiers. | |
| 22 | |
| 00:01:33,000 --> 00:01:33,000 | |
| Why? | |
| 23 | |
| 00:01:34,000 --> 00:01:39,000 | |
| Because invisibly, all matters in interface have modifiers, public and abstract. | |
| 24 | |
| 00:01:39,000 --> 00:01:44,000 | |
| So in case I will add here public and abstract modifier, nothing will change. | |
| 25 | |
| 00:01:45,000 --> 00:01:50,000 | |
| But there is no sense in any public abstract modifiers because all methods and interfaces by default | |
| 26 | |
| 00:01:50,000 --> 00:01:52,000 | |
| are public and abstract. | |
| 27 | |
| 00:01:52,000 --> 00:01:58,000 | |
| I can say that this interface said the contract on the process payment behavior by same contract. | |
| 28 | |
| 00:01:58,000 --> 00:02:04,000 | |
| I mean, this interface clearly defines what a return type will be, how method will be called and what | |
| 29 | |
| 00:02:04,000 --> 00:02:06,000 | |
| parameters will be in it, period. | |
| 30 | |
| 00:02:07,000 --> 00:02:11,000 | |
| But this interface doesn't bother about what exact code will be written. | |
| 31 | |
| 00:02:12,000 --> 00:02:17,000 | |
| And now when I have such interface in my program, I can create time that will implement this contract. | |
| 32 | |
| 00:02:17,000 --> 00:02:23,000 | |
| I have changed payment processor and PayPal payment processor both implements payment processor interface. | |
| 33 | |
| 00:02:24,000 --> 00:02:28,000 | |
| That means these classes are obligated to implement process payment methods. | |
| 34 | |
| 00:02:29,000 --> 00:02:35,000 | |
| Since this method is abstract in the interface in our concrete class, we must implement this method. | |
| 35 | |
| 00:02:35,000 --> 00:02:37,000 | |
| If only our class will be abstract. | |
| 36 | |
| 00:02:38,000 --> 00:02:40,000 | |
| There is no need to implement this method. | |
| 37 | |
| 00:02:40,000 --> 00:02:44,000 | |
| Let me call on this method and at absolute keyword before class. | |
| 38 | |
| 00:02:44,000 --> 00:02:47,000 | |
| You see, there is no compilation error. | |
| 39 | |
| 00:02:47,000 --> 00:02:52,000 | |
| But since this class is not abstract, there will be compilation error. | |
| 40 | |
| 00:02:52,000 --> 00:02:58,000 | |
| In case we won't implement this method, you can press control plus one and select and implemented methods | |
| 41 | |
| 00:02:58,000 --> 00:02:59,000 | |
| to generate stop method. | |
| 42 | |
| 00:03:00,000 --> 00:03:02,000 | |
| I will just on existing one. | |
| 43 | |
| 00:03:02,000 --> 00:03:04,000 | |
| This method will work differently. | |
| 44 | |
| 00:03:04,000 --> 00:03:07,000 | |
| For example, chase payment processor. | |
| 45 | |
| 00:03:07,000 --> 00:03:13,000 | |
| Because of the specifics of Payment Gateway, it should obtain security token first for authorization | |
| 46 | |
| 00:03:14,000 --> 00:03:19,000 | |
| and only after that we can initialize payment page with secure token and the amount of money to pay. | |
| 47 | |
| 00:03:20,000 --> 00:03:26,000 | |
| On the other hand, let's pretend that PayPal payment processor needs to request payment for by using | |
| 48 | |
| 00:03:26,000 --> 00:03:27,000 | |
| a specific application key. | |
| 49 | |
| 00:03:27,000 --> 00:03:32,000 | |
| And after that we have to fill out this form of payment details and submit it. | |
| 50 | |
| 00:03:32,000 --> 00:03:36,000 | |
| You can notice that in both cases we have override annotation here. | |
| 51 | |
| 00:03:36,000 --> 00:03:40,000 | |
| This notation exists for the sake of a successful compilation. | |
| 52 | |
| 00:03:40,000 --> 00:03:41,000 | |
| Do not switch the topic. | |
| 53 | |
| 00:03:41,000 --> 00:03:43,000 | |
| Let's keep focus on our interfaces. | |
| 54 | |
| 00:03:43,000 --> 00:03:48,000 | |
| I will tell you more about overwrite annotation in our detailed lesson about polymorphism. | |
| 55 | |
| 00:03:48,000 --> 00:03:50,000 | |
| Do we see these two examples? | |
| 56 | |
| 00:03:51,000 --> 00:03:55,000 | |
| The behavior is the same both classes, protests, payment data. | |
| 57 | |
| 00:03:55,000 --> 00:03:57,000 | |
| But they do this in different ways. | |
| 58 | |
| 00:03:57,000 --> 00:04:00,000 | |
| What do all this look like exactly? | |
| 59 | |
| 00:04:00,000 --> 00:04:06,000 | |
| This look like implementation of polymorphism principle, one of the main or P principle? | |
| 60 | |
| 00:04:06,000 --> 00:04:07,000 | |
| Why else? | |
| 61 | |
| 00:04:07,000 --> 00:04:12,000 | |
| We need interfaces to build our application was dependency on the obstruction types, but not on the | |
| 62 | |
| 00:04:12,000 --> 00:04:13,000 | |
| concrete classes. | |
| 63 | |
| 00:04:14,000 --> 00:04:15,000 | |
| Let me show you this example. | |
| 64 | |
| 00:04:16,000 --> 00:04:18,000 | |
| You mentioned we have some client of our code. | |
| 65 | |
| 00:04:18,000 --> 00:04:22,000 | |
| It could be some other class so-called facade class or controller class. | |
| 66 | |
| 00:04:22,000 --> 00:04:23,000 | |
| That doesn't matter. | |
| 67 | |
| 00:04:24,000 --> 00:04:28,000 | |
| And this class can simply rely on the interface of payment processor type. | |
| 68 | |
| 00:04:29,000 --> 00:04:33,000 | |
| We can say that by default, variable of payment processor reference to PayPal payment processor. | |
| 69 | |
| 00:04:34,000 --> 00:04:38,000 | |
| But in fact, this client doesn't bother with implementation of payment processor. | |
| 70 | |
| 00:04:38,000 --> 00:04:42,000 | |
| We will use PayPal payment processor or chase payment processor. | |
| 71 | |
| 00:04:42,000 --> 00:04:48,000 | |
| Moreover, somebody can use Setar and that is a chase or PayPal payment process during the runtime. | |
| 72 | |
| 00:04:49,000 --> 00:04:55,000 | |
| The good thing about interfaces and they define level of abstraction and we can build our program relying | |
| 73 | |
| 00:04:55,000 --> 00:04:56,000 | |
| on this abstraction. | |
| 74 | |
| 00:04:56,000 --> 00:05:01,000 | |
| They see this method and location and checkout method no matter what implementation of payment. | |
| 75 | |
| 00:05:01,000 --> 00:05:08,000 | |
| Sir, I will have here during Zeron time, I don't need to change this code and also pay attention to | |
| 76 | |
| 00:05:08,000 --> 00:05:09,000 | |
| one more thing here. | |
| 77 | |
| 00:05:09,000 --> 00:05:16,000 | |
| I can initialize variable of interface type with a reference to an object of any other class which implements | |
| 78 | |
| 00:05:16,000 --> 00:05:17,000 | |
| this interface. | |
| 79 | |
| 00:05:18,000 --> 00:05:20,000 | |
| OK, Holmes, this is clear. | |
| 80 | |
| 00:05:20,000 --> 00:05:23,000 | |
| Now, let's take a look what our interface can contain. | |
| 81 | |
| 00:05:23,000 --> 00:05:27,000 | |
| As you already understand, our interface can contain abstract methods. | |
| 82 | |
| 00:05:27,000 --> 00:05:29,000 | |
| It can have as many methods as you wish. | |
| 83 | |
| 00:05:30,000 --> 00:05:34,000 | |
| But later we will learn other object oriented principles and you will understand that it is better to | |
| 84 | |
| 00:05:34,000 --> 00:05:37,000 | |
| have a lot of small interfaces rather than one. | |
| 85 | |
| 00:05:37,000 --> 00:05:42,000 | |
| And besides abstract methods, our interface can contain default methods. | |
| 86 | |
| 00:05:42,000 --> 00:05:48,000 | |
| Default methods are methods that have body so you can treat them like regular methods in concrete glass. | |
| 87 | |
| 00:05:49,000 --> 00:05:54,000 | |
| But the Java syntax wouldn't allow you to declare a method with body and interface without default. | |
| 88 | |
| 00:05:54,000 --> 00:06:02,000 | |
| Keyword in case iRace the default keyword compiler tells me that abstract methods don't have money because | |
| 89 | |
| 00:06:02,000 --> 00:06:04,000 | |
| compiler treats this method as abstract. | |
| 90 | |
| 00:06:05,000 --> 00:06:07,000 | |
| Also, our interface may contain static methods. | |
| 91 | |
| 00:06:07,000 --> 00:06:12,000 | |
| We are going to have a separate lesson about static keywords, but right now you can remember the static | |
| 92 | |
| 00:06:12,000 --> 00:06:15,000 | |
| methods can be called without any object. | |
| 93 | |
| 00:06:15,000 --> 00:06:19,000 | |
| So you don't need to write newcomer's and create objects. | |
| 94 | |
| 00:06:19,000 --> 00:06:23,000 | |
| You can just write type name and column method like I did here. | |
| 95 | |
| 00:06:23,000 --> 00:06:28,000 | |
| For example, I wrote the name of the interface and invoke static method on this interface. | |
| 96 | |
| 00:06:29,000 --> 00:06:32,000 | |
| Notice I didn't use variable of payment processor type. | |
| 97 | |
| 00:06:32,000 --> 00:06:33,000 | |
| I use interface. | |
| 98 | |
| 00:06:34,000 --> 00:06:36,000 | |
| It is not very object oriented approach. | |
| 99 | |
| 00:06:36,000 --> 00:06:40,000 | |
| Why wait for the in the most cited keywords and I will tell you more about it. | |
| 100 | |
| 00:06:41,000 --> 00:06:45,000 | |
| So far, you know that interface can contain abstract default and static methods. | |
| 101 | |
| 00:06:45,000 --> 00:06:48,000 | |
| What else interface can have constants. | |
| 102 | |
| 00:06:49,000 --> 00:06:53,000 | |
| For example, imagine the real life scenario in case our payment failed. | |
| 103 | |
| 00:06:53,000 --> 00:06:55,000 | |
| We need to retrieve a few more times. | |
| 104 | |
| 00:06:55,000 --> 00:07:02,000 | |
| I create variable of type retry attempts and you probably noticed that the clips for months, this variable | |
| 105 | |
| 00:07:02,000 --> 00:07:06,000 | |
| name like a constant I'm in cursive and another color. | |
| 106 | |
| 00:07:06,000 --> 00:07:10,000 | |
| That is because by default, all fields and interfaces have public static. | |
| 107 | |
| 00:07:10,000 --> 00:07:17,000 | |
| Final modifiers like all constants have public so that everyone could access it static because constant | |
| 108 | |
| 00:07:17,000 --> 00:07:22,000 | |
| should exist in a single copy and final so that nobody could override it. | |
| 109 | |
| 00:07:22,000 --> 00:07:25,000 | |
| We will talk more about constants in the lesson about static keywords. | |
| 110 | |
| 00:07:26,000 --> 00:07:30,000 | |
| And even if I would add these modifiers here, nothing will change. | |
| 111 | |
| 00:07:30,000 --> 00:07:33,000 | |
| But usually developers give this modifiers in interfaces. | |
| 112 | |
| 00:07:34,000 --> 00:07:37,000 | |
| Let me also removed important things that we didn't discuss yet. | |
| 113 | |
| 00:07:37,000 --> 00:07:43,000 | |
| If the fact that class can implement multiple interfaces at once, I'm not sure whether you notice that | |
| 114 | |
| 00:07:43,000 --> 00:07:49,000 | |
| our chase payment processor implements two interfaces, the one we discussed already, and another one | |
| 115 | |
| 00:07:49,000 --> 00:07:51,000 | |
| is payment for the data. | |
| 116 | |
| 00:07:51,000 --> 00:07:56,000 | |
| If this class implements payment for the data interface, that means this class should implement validate | |
| 117 | |
| 00:07:56,000 --> 00:08:02,000 | |
| payment methods which will validate payment to be sure that it has all necessary information for payment | |
| 118 | |
| 00:08:02,000 --> 00:08:03,000 | |
| processing. | |
| 119 | |
| 00:08:03,000 --> 00:08:07,000 | |
| In this payment gateway in Java, it is allowed to implement multiple interfaces. | |
| 120 | |
| 00:08:08,000 --> 00:08:11,000 | |
| But in one specific case, this can lead to compilation error. | |
| 121 | |
| 00:08:11,000 --> 00:08:13,000 | |
| And I want you to know this case. | |
| 122 | |
| 00:08:14,000 --> 00:08:15,000 | |
| Let's discuss it. | |
| 123 | |
| 00:08:15,000 --> 00:08:21,000 | |
| For example, in payment processor interface, you have some default method and in payment for the data, | |
| 124 | |
| 00:08:21,000 --> 00:08:24,000 | |
| you also have default method with the same signature. | |
| 125 | |
| 00:08:24,000 --> 00:08:30,000 | |
| Here it this this can lead to compilation error in chase payment processor class, because during the | |
| 126 | |
| 00:08:30,000 --> 00:08:33,000 | |
| runtime it will be unclear which default method should be used. | |
| 127 | |
| 00:08:34,000 --> 00:08:37,000 | |
| The one from payment for the data was the one from payment processor. | |
| 128 | |
| 00:08:38,000 --> 00:08:44,000 | |
| That's why it doesn't allow us to compile this code until we resolve issue was duplicated default methods. | |
| 129 | |
| 00:08:44,000 --> 00:08:47,000 | |
| So now you know really a lot about interfaces. | |
| 130 | |
| 00:08:48,000 --> 00:08:53,000 | |
| It is time to understand how good you learned interfaces and ask you what is the difference between | |
| 131 | |
| 00:08:53,000 --> 00:08:55,000 | |
| abstract classes and interfaces. | |
| 132 | |
| 00:08:55,000 --> 00:08:59,000 | |
| Absolute class we can extend with extensive keyboard interface. | |
| 133 | |
| 00:08:59,000 --> 00:09:02,000 | |
| We can implement using implements, keyboard apps. | |
| 134 | |
| 00:09:03,000 --> 00:09:06,000 | |
| A class can have properties with all possible modifiers. | |
| 135 | |
| 00:09:06,000 --> 00:09:11,000 | |
| On the other hand, all properties interfaces have public static final modifiers. | |
| 136 | |
| 00:09:12,000 --> 00:09:17,000 | |
| You can extend only one class in Java, but you can implement multiple interfaces. | |
| 137 | |
| 00:09:17,000 --> 00:09:23,000 | |
| You remember that example when our PayPal payment processor implemented two interfaces at a time? | |
| 138 | |
| 00:09:23,000 --> 00:09:27,000 | |
| Basically that the most significant difference between abstract classes and interfaces. | |
| 139 | |
| 00:09:28,000 --> 00:09:33,000 | |
| It is also worth to mention that the introduction of default and static methods and interfaces made | |
| 140 | |
| 00:09:33,000 --> 00:09:36,000 | |
| it harder to distinguish interfaces from abstract classes. | |
| 141 | |
| 00:09:37,000 --> 00:09:42,000 | |
| Based on the difference which we discussed, you can select whether you need to use abstract class or | |
| 142 | |
| 00:09:42,000 --> 00:09:43,000 | |
| interface. | |
| 143 | |
| 00:09:43,000 --> 00:09:48,000 | |
| For example, if you know that you need to list properties with private or protected access modifiers | |
| 144 | |
| 00:09:48,000 --> 00:09:53,000 | |
| that are not static, you already know that you need to use abstract class instead of interface. | |
| 145 | |
| 00:09:53,000 --> 00:09:59,000 | |
| And if you need to be able to implement specific interface together with other ones, you know that | |
| 146 | |
| 00:09:59,000 --> 00:10:00,000 | |
| you need to use interfaces. | |
| 147 | |
| 00:10:01,000 --> 00:10:06,000 | |
| Last but not the least question for today and our agenda is to define the difference between such terms | |
| 148 | |
| 00:10:06,000 --> 00:10:11,000 | |
| as class type and interface, you already know what a class is. | |
| 149 | |
| 00:10:11,000 --> 00:10:13,000 | |
| Ensure that class is a template for your future. | |
| 150 | |
| 00:10:13,000 --> 00:10:19,000 | |
| Object's interface is an abstraction which defines application programming interface and contract for | |
| 151 | |
| 00:10:19,000 --> 00:10:20,000 | |
| behavior. | |
| 152 | |
| 00:10:20,000 --> 00:10:27,000 | |
| But what is a type probably you heard during the lessons that I use type word as a synonym when I reference | |
| 153 | |
| 00:10:27,000 --> 00:10:33,000 | |
| to class interface because class is a type interface is also a type. | |
| 154 | |
| 00:10:33,000 --> 00:10:39,000 | |
| That means every type is also is a class and interface and enumeration or an array. | |
| 155 | |
| 00:10:39,000 --> 00:10:43,000 | |
| Also, each object has a time and every expression has a type. | |
| 156 | |
| 00:10:43,000 --> 00:10:50,000 | |
| If during that interview you will be asked what a typist you can answer something like this type summarizes | |
| 157 | |
| 00:10:50,000 --> 00:10:53,000 | |
| the common features of a set of objects with the same characteristics. | |
| 158 | |
| 00:10:54,000 --> 00:11:00,000 | |
| Class is a concrete data structure and group of methods that represents an implementation of the type. | |
| 159 | |
| 00:11:01,000 --> 00:11:04,000 | |
| Let's look at this example one more time attentively. | |
| 160 | |
| 00:11:04,000 --> 00:11:10,000 | |
| Payment processor variable has payment processor type, but this variable reference to the PayPal payment | |
| 161 | |
| 00:11:10,000 --> 00:11:12,000 | |
| processor object. | |
| 162 | |
| 00:11:12,000 --> 00:11:15,000 | |
| So we can say that the object has a payment processor type. | |
| 163 | |
| 00:11:15,000 --> 00:11:22,000 | |
| And you see here in the method parameters, this sector can accept any object of type payment processor. | |
| 164 | |
| 00:11:22,000 --> 00:11:29,000 | |
| That means this method can work with any object that implements this interface doesn't make sense. | |
| 165 | |
| 00:11:29,000 --> 00:11:32,000 | |
| Hope with this examples, things become clearer. | |
| 166 | |
| 00:11:33,000 --> 00:11:35,000 | |
| Let's recap what we have learned today. | |
| 167 | |
| 00:11:35,000 --> 00:11:42,000 | |
| In this lesson, we learned what interfaces are, what interfaces can contain inside, how to implement | |
| 168 | |
| 00:11:42,000 --> 00:11:48,000 | |
| interface, what default methods and interfaces are, what static methods interfaces are. | |
| 169 | |
| 00:11:48,000 --> 00:11:52,000 | |
| Now, you know what the difference between abstract class and interface is. | |
| 170 | |
| 00:11:53,000 --> 00:11:56,000 | |
| And you also learn the difference between type and object. | |
| 171 | |
| 00:11:57,000 --> 00:11:58,000 | |
| That's all what we have for today. | |
| 172 | |
| 00:11:59,000 --> 00:12:02,000 | |
| Thanks a lot for your attention and see you in the next lesson. | |