diff --git a/.gitattributes b/.gitattributes
index 50eb38be42997014b77f2953d6ace62a92dba999..5ee72732914ac505884aa14827a849908dd827fe 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -52,3 +52,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/004[[:space:]]Type[[:space:]]of[[:space:]]the[[:space:]]expression[[:space:]]in[[:space:]]Java.mp4 filter=lfs diff=lfs merge=lfs -text
05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/001[[:space:]]Operators[[:space:]]in[[:space:]]Java.mp4 filter=lfs diff=lfs merge=lfs -text
05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/006[[:space:]]Read[[:space:]]user[[:space:]]input[[:space:]]from[[:space:]]console.mp4 filter=lfs diff=lfs merge=lfs -text
+05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/005[[:space:]]Compare[[:space:]]primitive[[:space:]]and[[:space:]]reference[[:space:]]types[[:space:]]&[[:space:]]Java[[:space:]]Memory[[:space:]]Model.mp4 filter=lfs diff=lfs merge=lfs -text
+05[[:space:]]-[[:space:]]Operators[[:space:]]and[[:space:]]Operations[[:space:]]with[[:space:]]primitive[[:space:]]types/010[[:space:]]Homework[[:space:]]review[[:space:]]Operators[[:space:]]and[[:space:]]Operations.mp4 filter=lfs diff=lfs merge=lfs -text
+06[[:space:]]-[[:space:]]Strings[[:space:]]in[[:space:]]Java/001[[:space:]]String[[:space:]]object[[:space:]]creation[[:space:]]and[[:space:]]main[[:space:]]methods[[:space:]]overview.mp4 filter=lfs diff=lfs merge=lfs -text
+06[[:space:]]-[[:space:]]Strings[[:space:]]in[[:space:]]Java/002[[:space:]]String[[:space:]]comparison[[:space:]][[:space:]]How[[:space:]]to[[:space:]]compare[[:space:]]Strings[[:space:]]and[[:space:]]what[[:space:]]is[[:space:]]String[[:space:]]Pool.mp4 filter=lfs diff=lfs merge=lfs -text
+06[[:space:]]-[[:space:]]Strings[[:space:]]in[[:space:]]Java/003[[:space:]]Escape[[:space:]]Sequences[[:space:]]in[[:space:]]Java.mp4 filter=lfs diff=lfs merge=lfs -text
diff --git a/05 - Operators and Operations with primitive types/005 Compare primitive and reference types & Java Memory Model.mp4 b/05 - Operators and Operations with primitive types/005 Compare primitive and reference types & Java Memory Model.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..e7d663636b851914297864ad81ad1e36fc5bbcfd
--- /dev/null
+++ b/05 - Operators and Operations with primitive types/005 Compare primitive and reference types & Java Memory Model.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa65814a0105381b8efd2e0754d45865f0cba944d1c84f5f900c366f9fa4950a
+size 182856283
diff --git a/05 - Operators and Operations with primitive types/010 Homework review Operators and Operations.mp4 b/05 - Operators and Operations with primitive types/010 Homework review Operators and Operations.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..045a5593edb9e5399dac9c23f5d33029b3a9f23b
--- /dev/null
+++ b/05 - Operators and Operations with primitive types/010 Homework review Operators and Operations.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6113b981b8c9003eb4c3d4f46010c7bb6b48364f57b6afa30046ed2502f565f9
+size 207450063
diff --git a/06 - Strings in Java/001 String object creation and main methods overview.mp4 b/06 - Strings in Java/001 String object creation and main methods overview.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..75b941818d1f96d037cdf0cb15d94aa51f10ee17
--- /dev/null
+++ b/06 - Strings in Java/001 String object creation and main methods overview.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b15ae7711f85af21a92bc9f098a73bb122ec2c99181df74a9b929846944008a0
+size 52079039
diff --git a/06 - Strings in Java/002 String comparison How to compare Strings and what is String Pool.mp4 b/06 - Strings in Java/002 String comparison How to compare Strings and what is String Pool.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..5a3776f8fee69cf4b7eba1a2ffa71fdc01ed6d80
--- /dev/null
+++ b/06 - Strings in Java/002 String comparison How to compare Strings and what is String Pool.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0382fc777a8b147d88218daf2590a8f1824d3feb332f77b80882436bff9b35e3
+size 50592934
diff --git a/06 - Strings in Java/003 Escape Sequences in Java.mp4 b/06 - Strings in Java/003 Escape Sequences in Java.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..eef136c7dc88927fce18127a7a4a9ae567455677
--- /dev/null
+++ b/06 - Strings in Java/003 Escape Sequences in Java.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e03bf9b9c615acfa82054ac6fe95d1f244912ea5bc42dca16c10236cf7c2027c
+size 15472125
diff --git a/13 - Object-oriented programming/002 Classes & Objects_en.srt b/13 - Object-oriented programming/002 Classes & Objects_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..5ab58539311bfcd21472722b14039636460b6ae8
--- /dev/null
+++ b/13 - Object-oriented programming/002 Classes & Objects_en.srt
@@ -0,0 +1,856 @@
+1
+00:00:05,000 --> 00:00:06,000
+Hello, Jim.
+
+2
+00:00:06,000 --> 00:00:08,000
+So they were going to run with you with the glasses.
+
+3
+00:00:09,000 --> 00:00:12,000
+We'll talk about what glass can contain on good examples.
+
+4
+00:00:12,000 --> 00:00:17,000
+We learn what our fields and utilization logs, constructors methods and nested classes.
+
+5
+00:00:17,000 --> 00:00:21,000
+I'm going to explain to you what getters and setters are and how we can use them.
+
+6
+00:00:21,000 --> 00:00:26,000
+We are going to create our own class and we'll create object of our custom class together.
+
+7
+00:00:26,000 --> 00:00:28,000
+Let's start from the previous lesson.
+
+8
+00:00:28,000 --> 00:00:33,000
+You already know that class is our template for objects, but what does it consist of?
+
+9
+00:00:33,000 --> 00:00:41,000
+Glass can contain constructors, fields, methods and utilization blocks and nested classes to understand
+
+10
+00:00:41,000 --> 00:00:41,000
+and better.
+
+11
+00:00:41,000 --> 00:00:43,000
+Let's jump to example.
+
+12
+00:00:43,000 --> 00:00:48,000
+Let's imagine we are implementing online store and we need to implement our virtual card for shopping.
+
+13
+00:00:49,000 --> 00:00:53,000
+You already know OPIS and you know that everything is an object.
+
+14
+00:00:53,000 --> 00:00:56,000
+Take into account we expect multiple users on our website.
+
+15
+00:00:56,000 --> 00:00:58,000
+We are going to have a lot of cards.
+
+16
+00:00:58,000 --> 00:01:01,000
+We need to have a template for card object.
+
+17
+00:01:01,000 --> 00:01:04,000
+That's why we need to create card class.
+
+18
+00:01:04,000 --> 00:01:05,000
+Here's card class.
+
+19
+00:01:05,000 --> 00:01:09,000
+I created it beforehand to save time during this video lesson.
+
+20
+00:01:09,000 --> 00:01:11,000
+I will walk you through it line by line.
+
+21
+00:01:12,000 --> 00:01:14,000
+Our goal now to understand what class can contain.
+
+22
+00:01:15,000 --> 00:01:17,000
+First of all, class can contain fields.
+
+23
+00:01:18,000 --> 00:01:19,000
+Often fields are called properties.
+
+24
+00:01:20,000 --> 00:01:25,000
+With the help of the fields we can express state of specific object fields can have different modifiers.
+
+25
+00:01:26,000 --> 00:01:30,000
+For example, fields can be static and non static, final and non final.
+
+26
+00:01:30,000 --> 00:01:35,000
+We are going to have separate lesson about static keyword and static elements in Java and we'll discuss
+
+27
+00:01:35,000 --> 00:01:36,000
+final keywords.
+
+28
+00:01:36,000 --> 00:01:40,000
+Also in separate lesson, this lesson only about classes.
+
+29
+00:01:40,000 --> 00:01:43,000
+So this is all fields which we have in our class.
+
+30
+00:01:43,000 --> 00:01:45,000
+Class also can contain initialization blocks.
+
+31
+00:01:46,000 --> 00:01:49,000
+We may have static and on static initialization blocks.
+
+32
+00:01:49,000 --> 00:01:50,000
+Why do we need them?
+
+33
+00:01:50,000 --> 00:01:55,000
+For example, I have some fields which I want to be initialized with values by default.
+
+34
+00:01:56,000 --> 00:01:59,000
+In this case, every timecards object will be created.
+
+35
+00:01:59,000 --> 00:02:05,000
+Card counter will be incremented in case cards will be created without user i.e. I know that I need
+
+36
+00:02:05,000 --> 00:02:07,000
+to sign this card to some user.
+
+37
+00:02:08,000 --> 00:02:13,000
+Let it be special user with ID one and one of the properties has tax time.
+
+38
+00:02:13,000 --> 00:02:16,000
+This is also custom type described by us.
+
+39
+00:02:16,000 --> 00:02:18,000
+I will show it to you later in this lesson.
+
+40
+00:02:19,000 --> 00:02:24,000
+But now imagine that you have this field and you don't want to leave it, not initialized.
+
+41
+00:02:24,000 --> 00:02:27,000
+What default value has all reference types of data?
+
+42
+00:02:27,000 --> 00:02:28,000
+No.
+
+43
+00:02:28,000 --> 00:02:34,000
+And according to logic that I implemented, I know that tax should not be known to avoid no pointer
+
+44
+00:02:34,000 --> 00:02:40,000
+exception because I use this variable in court below and b what stands for null pointer exception,
+
+45
+00:02:40,000 --> 00:02:44,000
+one of the most widespread exception which happens when you call method or new value.
+
+46
+00:02:45,000 --> 00:02:47,000
+That's why it's called no pointer exception.
+
+47
+00:02:48,000 --> 00:02:50,000
+We'll learn more about exceptions in separate section.
+
+48
+00:02:50,000 --> 00:02:54,000
+For now, I want at least some default value should be assigned to this variable.
+
+49
+00:02:55,000 --> 00:02:57,000
+That is exactly what I'm doing here.
+
+50
+00:02:57,000 --> 00:03:02,000
+I using this civilization look to initialize this field, the similar situation with our discount object.
+
+51
+00:03:02,000 --> 00:03:09,000
+I initialize this field to make sure it won't be no talking about starting blocks, it is worth to mention
+
+52
+00:03:09,000 --> 00:03:13,000
+that they are very narrow application domain Whiskas class example.
+
+53
+00:03:13,000 --> 00:03:16,000
+It was hard for me to come up with the example of static initialization block.
+
+54
+00:03:17,000 --> 00:03:22,000
+This block will be executed only once one class will be uploaded into GBM.
+
+55
+00:03:22,000 --> 00:03:25,000
+In this case we just write text to console.
+
+56
+00:03:25,000 --> 00:03:29,000
+Good example of static Blokland civilization usage is driver classis.
+
+57
+00:03:29,000 --> 00:03:35,000
+You always need to register driver in the system so it would be comfortable to use static initialization
+
+58
+00:03:35,000 --> 00:03:36,000
+work for this.
+
+59
+00:03:36,000 --> 00:03:41,000
+For example, once driver class is uploaded into GBM, we can register it in some services.
+
+60
+00:03:42,000 --> 00:03:45,000
+This is a real life example which we will see later in this course.
+
+61
+00:03:45,000 --> 00:03:50,000
+But now you at least understand how potentially we can use static in civilization.
+
+62
+00:03:50,000 --> 00:03:52,000
+Bloks problems it again.
+
+63
+00:03:52,000 --> 00:03:59,000
+Universalization looks let's move on may contain constructor's constructor is a special method which
+
+64
+00:03:59,000 --> 00:04:01,000
+should be called to instantiate object.
+
+65
+00:04:01,000 --> 00:04:06,000
+Important things to mention about the constructor constructor name should always be the same as class
+
+66
+00:04:06,000 --> 00:04:07,000
+name.
+
+67
+00:04:07,000 --> 00:04:12,000
+If your class name is called, then constructor is also called rule about writing.
+
+68
+00:04:12,000 --> 00:04:15,000
+Method starting from lowercase is not applied to constructors.
+
+69
+00:04:15,000 --> 00:04:17,000
+It doesn't have return type.
+
+70
+00:04:17,000 --> 00:04:21,000
+You remember that all method should have return type in constructor.
+
+71
+00:04:21,000 --> 00:04:27,000
+You should not specify return time because constructors always by default return reference to the object
+
+72
+00:04:27,000 --> 00:04:27,000
+and keep memory.
+
+73
+00:04:28,000 --> 00:04:30,000
+You always have constructor by default.
+
+74
+00:04:30,000 --> 00:04:31,000
+Let me show you this.
+
+75
+00:04:32,000 --> 00:04:36,000
+Even if I wouldn't have this constructors, I would still have default one.
+
+76
+00:04:36,000 --> 00:04:41,000
+Let me comment on this court and now let's jump to the demo file and create card object.
+
+77
+00:04:42,000 --> 00:04:45,000
+Let me declare a variable of type card and assign cards.
+
+78
+00:04:45,000 --> 00:04:46,000
+Object to it.
+
+79
+00:04:46,000 --> 00:04:48,000
+The great object I write new keyword.
+
+80
+00:04:49,000 --> 00:04:55,000
+This is a common to Java to allocate memory for object in here and after that I call constructor and
+
+81
+00:04:55,000 --> 00:04:56,000
+print cards object to cancel.
+
+82
+00:04:57,000 --> 00:04:58,000
+Let's run this program.
+
+83
+00:04:59,000 --> 00:05:05,000
+And here we are, you see that quote from Start, a conservation blog executed first, and here's our
+
+84
+00:05:05,000 --> 00:05:06,000
+character object printed to console.
+
+85
+00:05:07,000 --> 00:05:09,000
+Now let me create custom constructor.
+
+86
+00:05:09,000 --> 00:05:13,000
+Let's pretend I want to create card with specified cartridges and user aguy.
+
+87
+00:05:14,000 --> 00:05:18,000
+And when I created custom constructor, there is no default constructor anymore.
+
+88
+00:05:18,000 --> 00:05:20,000
+And here is see compilation error.
+
+89
+00:05:20,000 --> 00:05:22,000
+The constructor card is undefined.
+
+90
+00:05:23,000 --> 00:05:27,000
+That's why if you want to declare a custom constructor and keep constructor by default, you should
+
+91
+00:05:27,000 --> 00:05:32,000
+specified explicitly when I am Corman's, this constructor compilation error is gone.
+
+92
+00:05:33,000 --> 00:05:36,000
+Let's take a look how we can use custom constructor.
+
+93
+00:05:36,000 --> 00:05:42,000
+We know that our constructor can take two integers as arguments and you see that the first parameter
+
+94
+00:05:42,000 --> 00:05:48,000
+will be assigned to a property of this object in the second parameter will be assigned to user the property
+
+95
+00:05:48,000 --> 00:05:49,000
+of the current object.
+
+96
+00:05:50,000 --> 00:05:56,000
+You can see that I use this keyword to reference current object because this idea, if this property
+
+97
+00:05:56,000 --> 00:06:03,000
+in card object and ID is just a local variable of the constructor, that that makes sense.
+
+98
+00:06:03,000 --> 00:06:09,000
+So inside the class you have keywords which always reference to the specific object.
+
+99
+00:06:10,000 --> 00:06:16,000
+Now you can call your custom constructor like this new card and parse constructor arguments when we
+
+100
+00:06:16,000 --> 00:06:17,000
+bring second car token.
+
+101
+00:06:17,000 --> 00:06:22,000
+So you can see that IJI and user idea of this class is different from the first class object.
+
+102
+00:06:23,000 --> 00:06:28,000
+Now, when you know what the constructor's, you might be wondering why do we need initialization blocks
+
+103
+00:06:28,000 --> 00:06:33,000
+if they have constructor's on this example, you can see that no matter which constructor will be called
+
+104
+00:06:33,000 --> 00:06:35,000
+utilisation, LOC will be executed.
+
+105
+00:06:35,000 --> 00:06:36,000
+In both cases.
+
+106
+00:06:36,000 --> 00:06:42,000
+Knowing this, you can use initialization blocks to put their code, which you want to execute no matter
+
+107
+00:06:42,000 --> 00:06:43,000
+what constructor will be called.
+
+108
+00:06:43,000 --> 00:06:47,000
+Is it clear now what else our class can have?
+
+109
+00:06:47,000 --> 00:06:49,000
+Our class can have methods.
+
+110
+00:06:49,000 --> 00:06:51,000
+That is behavior of our object.
+
+111
+00:06:51,000 --> 00:06:54,000
+For example, our cars can add new product to the cart.
+
+112
+00:06:55,000 --> 00:06:57,000
+Let's not get deep dive into the logic here.
+
+113
+00:06:57,000 --> 00:07:03,000
+I will share with you source code of this lesson and you will be able to take a look miserably at implementation.
+
+114
+00:07:03,000 --> 00:07:09,000
+But now let's understand that methods are behavior of our object and can change state of our object.
+
+115
+00:07:10,000 --> 00:07:13,000
+And now you can understand the difference between method and function.
+
+116
+00:07:14,000 --> 00:07:17,000
+Function can exist without object independently.
+
+117
+00:07:17,000 --> 00:07:19,000
+Method is the behavior of the object.
+
+118
+00:07:20,000 --> 00:07:26,000
+That's why in Olby we call specific box of code, which can be invoked by their names methods but not
+
+119
+00:07:26,000 --> 00:07:28,000
+functions methods.
+
+120
+00:07:28,000 --> 00:07:31,000
+This is something that is always associated with an object.
+
+121
+00:07:31,000 --> 00:07:37,000
+In this particular example, our card contains an array of products and we can add product to this card,
+
+122
+00:07:37,000 --> 00:07:39,000
+namely to this array of products.
+
+123
+00:07:40,000 --> 00:07:42,000
+That is exactly what this method does.
+
+124
+00:07:42,000 --> 00:07:46,000
+It adds new product and change the state of our cart.
+
+125
+00:07:46,000 --> 00:07:51,000
+Notice that each time new product is added to the cart, other methods are called to calculate total
+
+126
+00:07:51,000 --> 00:07:53,000
+net price and total gross price.
+
+127
+00:07:54,000 --> 00:07:55,000
+These are two private methods.
+
+128
+00:07:56,000 --> 00:08:00,000
+That means nobody outside this class can call these methods.
+
+129
+00:08:00,000 --> 00:08:02,000
+I can call these methods from this class.
+
+130
+00:08:02,000 --> 00:08:07,000
+Only X modifiers will be covered in detail in encapsulation.
+
+131
+00:08:07,000 --> 00:08:10,000
+Lesson in your code method and location might look like this.
+
+132
+00:08:11,000 --> 00:08:16,000
+You created car to object and after that use its behavior to add product to the cart products is also
+
+133
+00:08:16,000 --> 00:08:17,000
+our custom class.
+
+134
+00:08:17,000 --> 00:08:22,000
+By the way, here it is, just two properties for the sake of our example.
+
+135
+00:08:23,000 --> 00:08:29,000
+And he seemed concerned that after we added two products, total net price, total gross price and total
+
+136
+00:08:29,000 --> 00:08:30,000
+tax have been changed.
+
+137
+00:08:31,000 --> 00:08:37,000
+After these methods, I have other methods that are called getters and setters, why do we need them?
+
+138
+00:08:38,000 --> 00:08:40,000
+You see that all properties of cart objects are private.
+
+139
+00:08:41,000 --> 00:08:46,000
+That is because I want to have full control over how people can interact with my object and how they
+
+140
+00:08:46,000 --> 00:08:47,000
+can change.
+
+141
+00:08:47,000 --> 00:08:51,000
+State of object was usually used to rid properties of objects.
+
+142
+00:08:51,000 --> 00:08:57,000
+You can be 100 if we are making our properties private so nobody could access them and change them,
+
+143
+00:08:57,000 --> 00:08:59,000
+then why do we need to create better sensors?
+
+144
+00:09:00,000 --> 00:09:02,000
+Let me explain you on this example.
+
+145
+00:09:02,000 --> 00:09:08,000
+You can create together and return your products array, but this means that everybody who has links
+
+146
+00:09:08,000 --> 00:09:10,000
+to your products array can change state of disarray.
+
+147
+00:09:10,000 --> 00:09:16,000
+Just using this reference, for example, having reference to products, every object I can add to more
+
+148
+00:09:16,000 --> 00:09:20,000
+products in it and state of the card will be different.
+
+149
+00:09:20,000 --> 00:09:26,000
+In this case, there would be two more products in CART, but now when you can write code of your car,
+
+150
+00:09:26,000 --> 00:09:29,000
+you can say that you want to give reference to this array.
+
+151
+00:09:30,000 --> 00:09:35,000
+Everyone who wants to investigate state of products are we can do this and you can return a copy of
+
+152
+00:09:35,000 --> 00:09:37,000
+the script by doing this.
+
+153
+00:09:37,000 --> 00:09:42,000
+You can be sure that even if in some other places reference to products that will be obtained, they
+
+154
+00:09:42,000 --> 00:09:48,000
+will get reference to the copy of your and won't be able to change state of our regional products away
+
+155
+00:09:48,000 --> 00:09:49,000
+from your car.
+
+156
+00:09:49,000 --> 00:09:54,000
+This is critical for us because based on the products from this array, we calculate total net and total
+
+157
+00:09:54,000 --> 00:09:55,000
+gross price.
+
+158
+00:09:56,000 --> 00:10:01,000
+Imagine that somebody would take the reference to products are a few more products to it without recalculate
+
+159
+00:10:01,000 --> 00:10:05,000
+total net and gross price and would just proceed to checkout with this car.
+
+160
+00:10:06,000 --> 00:10:12,000
+Customers would be happy that they got more items for free, but our management definitely won't be
+
+161
+00:10:12,000 --> 00:10:12,000
+happy.
+
+162
+00:10:13,000 --> 00:10:18,000
+And if I don't want that somebody said a completely new array of products in my car, I just don't create
+
+163
+00:10:18,000 --> 00:10:19,000
+Setar.
+
+164
+00:10:19,000 --> 00:10:19,000
+That's it.
+
+165
+00:10:20,000 --> 00:10:24,000
+But if you have Setar, you can verify arguments to make sure that they are valid.
+
+166
+00:10:24,000 --> 00:10:30,000
+According to our business logic, for example, everyone can, said Cartledge here, but nobody can
+
+167
+00:10:30,000 --> 00:10:37,000
+set a value less than zero because I wrote the code to verify this in case I'd is less than zero.
+
+168
+00:10:37,000 --> 00:10:43,000
+Just exit from this method and you can see that Rejon keyword is also used to exit method in both methods.
+
+169
+00:10:44,000 --> 00:10:50,000
+Even when you don't have intention to return some value from method or like here, for example, anybody
+
+170
+00:10:50,000 --> 00:10:51,000
+can add product to the cart.
+
+171
+00:10:51,000 --> 00:10:57,000
+But in case somebody is trying to add no into my array, I don't allow to do this and exit from method.
+
+172
+00:10:57,000 --> 00:11:03,000
+Remember that validation of all arguments which were passed to the method if the rule which you always
+
+173
+00:11:03,000 --> 00:11:04,000
+must follow.
+
+174
+00:11:04,000 --> 00:11:12,000
+By the way, if you want easily generated getters and setters, use next hotkey old shift s and select
+
+175
+00:11:12,000 --> 00:11:13,000
+generate getters and setters.
+
+176
+00:11:14,000 --> 00:11:17,000
+You can select fields for which you need getters and setters or only getters.
+
+177
+00:11:17,000 --> 00:11:23,000
+For example, if you don't want the grade setters and vice versa, press generate to generate code.
+
+178
+00:11:23,000 --> 00:11:25,000
+I already have all necessary getters and setters.
+
+179
+00:11:25,000 --> 00:11:27,000
+That is why I wouldn't press this button.
+
+180
+00:11:27,000 --> 00:11:30,000
+Now, in case you forgot hotkeys press mouse right.
+
+181
+00:11:30,000 --> 00:11:33,000
+Click select source and then generate getters and setters.
+
+182
+00:11:34,000 --> 00:11:40,000
+We have to string method here, we are going to talk about this method in details in the lesson about
+
+183
+00:11:40,000 --> 00:11:40,000
+object class.
+
+184
+00:11:41,000 --> 00:11:46,000
+But in the meantime, let me explain you what this method is about in a few words in Arkansas here we
+
+185
+00:11:46,000 --> 00:11:49,000
+see text representation of our the object.
+
+186
+00:11:49,000 --> 00:11:52,000
+That is because to string method is overridden here.
+
+187
+00:11:52,000 --> 00:11:59,000
+And you can see how the string is created from combination of fields from our car object when we pass
+
+188
+00:11:59,000 --> 00:12:04,000
+reference type to Winterland, method to string method call is invisible for us and when to string method
+
+189
+00:12:04,000 --> 00:12:08,000
+is called this code is executed and this string is returned.
+
+190
+00:12:09,000 --> 00:12:15,000
+That's why we see rideable representation of our card object to generate to string method use the same
+
+191
+00:12:15,000 --> 00:12:19,000
+hotkey as we discussed earlier, all shifts and select generate to string.
+
+192
+00:12:20,000 --> 00:12:26,000
+It says that I already have two string but still I want to show you details you can select which fields
+
+193
+00:12:26,000 --> 00:12:30,000
+methods you would like to use to create string which will be returned after the string method call.
+
+194
+00:12:32,000 --> 00:12:37,000
+Besides what we have already discussed, glasses can also contain nested glasses, nested glasses can
+
+195
+00:12:37,000 --> 00:12:44,000
+be static and non static, static nested glasses, usually called just nested static glasses and nested,
+
+196
+00:12:44,000 --> 00:12:47,000
+not static glasses, usually called inner glasses.
+
+197
+00:12:48,000 --> 00:12:53,000
+And here you see discount untax glasses we use for both of these types in our cars glass.
+
+198
+00:12:54,000 --> 00:12:59,000
+And I believe you remember the beginning reinitialize variables of these types with default values in
+
+199
+00:12:59,000 --> 00:13:03,000
+our initialization lock to not overwhelm you with information.
+
+200
+00:13:03,000 --> 00:13:07,000
+In this lesson, let's agree to learn types of classes in the separate lesson.
+
+201
+00:13:07,000 --> 00:13:09,000
+For now, let's repeat one more time.
+
+202
+00:13:09,000 --> 00:13:16,000
+One glass can contain glass, can contain fildes, initialization blocks, constructors methods, nested
+
+203
+00:13:16,000 --> 00:13:17,000
+classes.
+
+204
+00:13:17,000 --> 00:13:22,000
+And we know that nested classes could be nested static classes and in their classes.
+
+205
+00:13:22,000 --> 00:13:27,000
+I will share with you links to the source code in attachments to this lesson so you can review it one
+
+206
+00:13:27,000 --> 00:13:27,000
+more time.
+
+207
+00:13:28,000 --> 00:13:30,000
+Method classes will be discussed in the separate lesson.
+
+208
+00:13:31,000 --> 00:13:33,000
+And now let's review what we have learned today.
+
+209
+00:13:34,000 --> 00:13:38,000
+Today we learned what class can contain and how to create our custom objects.
+
+210
+00:13:38,000 --> 00:13:43,000
+Now you know the difference between a method and a function, really, of the concept of getters and
+
+211
+00:13:43,000 --> 00:13:46,000
+setters and how to generate them easily in eclipse.
+
+212
+00:13:47,000 --> 00:13:51,000
+Take a look one more time in the source code of examples which we reviewed during the lesson and be
+
+213
+00:13:51,000 --> 00:13:53,000
+prepared for the next lesson.
+
+214
+00:13:53,000 --> 00:13:56,000
+Thank you for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/002 Source-code-Cart-class.url b/13 - Object-oriented programming/002 Source-code-Cart-class.url
new file mode 100644
index 0000000000000000000000000000000000000000..b4a1833ea175add96078cd147d5072e8f5bbc44b
--- /dev/null
+++ b/13 - Object-oriented programming/002 Source-code-Cart-class.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Cart.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/002 Source-code-Demo-class.url b/13 - Object-oriented programming/002 Source-code-Demo-class.url
new file mode 100644
index 0000000000000000000000000000000000000000..33104e273022a874a4b0ee2c549ab0c17eda4904
--- /dev/null
+++ b/13 - Object-oriented programming/002 Source-code-Demo-class.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Demo.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/002 Source-code-Product-class.url b/13 - Object-oriented programming/002 Source-code-Product-class.url
new file mode 100644
index 0000000000000000000000000000000000000000..a752f40720922f88464ba6a3543754cbc03cc4ac
--- /dev/null
+++ b/13 - Object-oriented programming/002 Source-code-Product-class.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Product.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/003 Different types of Classes, Abstract keyword and Abstract classes_en.srt b/13 - Object-oriented programming/003 Different types of Classes, Abstract keyword and Abstract classes_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..fe8fb8668b8379bebcc75787afdf146ff40ef4c3
--- /dev/null
+++ b/13 - Object-oriented programming/003 Different types of Classes, Abstract keyword and Abstract classes_en.srt
@@ -0,0 +1,584 @@
+1
+00:00:05,000 --> 00:00:07,000
+Hello, yes, students today.
+
+2
+00:00:07,000 --> 00:00:08,000
+We'll talk more about.
+
+3
+00:00:08,000 --> 00:00:11,000
+I'm going to tell you what types of classes we have in Java.
+
+4
+00:00:12,000 --> 00:00:18,000
+We'll talk about all types of classes can create inner nested final classes, Bodger classes, Absaroka
+
+5
+00:00:18,000 --> 00:00:19,000
+and Anonymous.
+
+6
+00:00:20,000 --> 00:00:24,000
+During the lesson, you are going to learn what is APSA key word and how you can use it with classes
+
+7
+00:00:24,000 --> 00:00:28,000
+and methods to learn this topic, it is better to start from examples.
+
+8
+00:00:29,000 --> 00:00:34,000
+Before this lesson, I created a concrete class to show you why it's called concrete because this class
+
+9
+00:00:34,000 --> 00:00:37,000
+has an implementation for all of its methods.
+
+10
+00:00:37,000 --> 00:00:40,000
+Concrete classes can have any and implemented methods.
+
+11
+00:00:41,000 --> 00:00:45,000
+Let's imagine we're implementing the e-commerce platform and we have user in it.
+
+12
+00:00:45,000 --> 00:00:52,000
+User has its own properties like Unique ID, first name, last name, email, and an array of products
+
+13
+00:00:52,000 --> 00:00:58,000
+which user bought in our online shop user can calculate personal discount based on the total amount
+
+14
+00:00:58,000 --> 00:01:03,000
+of money he or she spent in our shop in case he spent more than one thousand dollars.
+
+15
+00:01:04,000 --> 00:01:06,000
+User gets five percent discount.
+
+16
+00:01:06,000 --> 00:01:11,000
+The rest of the methods are getters and setters and you can see that all methods have implementation.
+
+17
+00:01:12,000 --> 00:01:14,000
+To create an object of a concrete class.
+
+18
+00:01:14,000 --> 00:01:16,000
+You just need to call the constructor of this type.
+
+19
+00:01:20,000 --> 00:01:26,000
+Now, let's take a look what nested classes are you already know that we can have nested static classes
+
+20
+00:01:26,000 --> 00:01:29,000
+and inner classes to explain what the nested class is?
+
+21
+00:01:29,000 --> 00:01:31,000
+Let's consider the next case.
+
+22
+00:01:31,000 --> 00:01:37,000
+Imagine we have Kaat object and we need to declare a specific class which will represent the tax.
+
+23
+00:01:37,000 --> 00:01:42,000
+But logically, we understand that tax can exist without Kaat.
+
+24
+00:01:42,000 --> 00:01:48,000
+But there is no sense to have tax without cards because if the cart is empty, then the tax for this
+
+25
+00:01:48,000 --> 00:01:50,000
+order also will be absent.
+
+26
+00:01:51,000 --> 00:01:56,000
+Then there is no reason to have this tax, but still it can exist.
+
+27
+00:01:56,000 --> 00:02:02,000
+Agree, taking into account the fact that tax is tightly coupled with the cart object, we declare a
+
+28
+00:02:02,000 --> 00:02:07,000
+new class inside cart here you see that I add Statik static modifier before class.
+
+29
+00:02:07,000 --> 00:02:10,000
+But beside that this class can contain everything.
+
+30
+00:02:10,000 --> 00:02:12,000
+What a concrete class can contain.
+
+31
+00:02:13,000 --> 00:02:17,000
+To create an instance of a tax object, you need to call constructor of tax type.
+
+32
+00:02:17,000 --> 00:02:25,000
+But with the help of car type, you have to write new laws and specify the class dot name of the nested
+
+33
+00:02:25,000 --> 00:02:27,000
+class and call a constructor.
+
+34
+00:02:27,000 --> 00:02:32,000
+You might be wondering what is the sense and declare an asset class if we can create object of nested
+
+35
+00:02:32,000 --> 00:02:35,000
+class when we need without object of court class.
+
+36
+00:02:36,000 --> 00:02:37,000
+And you will be right.
+
+37
+00:02:37,000 --> 00:02:42,000
+As we keep learning object oriented programming, you will see different examples from JDK and you will
+
+38
+00:02:42,000 --> 00:02:49,000
+feel when you need to create nested classes and very often nested classes have private modifier so that
+
+39
+00:02:49,000 --> 00:02:54,000
+you wouldn't be able to create an instance of nested class outside of the order class because of their
+
+40
+00:02:54,000 --> 00:03:00,000
+close relation in this particular case with that client of our code to create an object without cards.
+
+41
+00:03:00,000 --> 00:03:03,000
+But we are seen with our architecture here.
+
+42
+00:03:03,000 --> 00:03:05,000
+That tax is closely connected with class object.
+
+43
+00:03:06,000 --> 00:03:08,000
+On the other hand, you have inner classes.
+
+44
+00:03:08,000 --> 00:03:13,000
+They are also declared inside of classes, but they do not have static modifier.
+
+45
+00:03:13,000 --> 00:03:19,000
+Imagine that we have card and you need to describe discounts that can be applied to the card and in
+
+46
+00:03:19,000 --> 00:03:22,000
+your program, discount can't exist without a card.
+
+47
+00:03:22,000 --> 00:03:25,000
+In this case, we need to create an inner class and here it is.
+
+48
+00:03:26,000 --> 00:03:30,000
+You can create methods and fields and everything else inside the inner class.
+
+49
+00:03:31,000 --> 00:03:37,000
+Now let's take a look how we can create objects of inner class to instantiate objects of inner class.
+
+50
+00:03:37,000 --> 00:03:40,000
+You need to have a reference to the object of auto class.
+
+51
+00:03:40,000 --> 00:03:45,000
+Does that mean you can't create object of inner class without having an object of auto class?
+
+52
+00:03:46,000 --> 00:03:49,000
+That's why here a great object of the car type first.
+
+53
+00:03:49,000 --> 00:03:54,000
+And after that I create the object of the discount type and call the constructor.
+
+54
+00:03:54,000 --> 00:04:00,000
+Now I can assign reference to this object to this variable, the feel, the difference between inner
+
+55
+00:04:00,000 --> 00:04:01,000
+and nested classes.
+
+56
+00:04:02,000 --> 00:04:06,000
+Hobbs's specific examples help you to understand the difference better.
+
+57
+00:04:06,000 --> 00:04:09,000
+As always, you have the opportunity to look at the source code.
+
+58
+00:04:09,000 --> 00:04:12,000
+I will leave links to these files in the attachments to this lesson.
+
+59
+00:04:13,000 --> 00:04:16,000
+Now let's talk about what the final classes are.
+
+60
+00:04:16,000 --> 00:04:19,000
+We can make our user class final just like this.
+
+61
+00:04:19,000 --> 00:04:22,000
+Just add final keyword before class.
+
+62
+00:04:22,000 --> 00:04:23,000
+What does it mean?
+
+63
+00:04:23,000 --> 00:04:30,000
+You remember I told you about inheritance as a basic or principle when you wrote final keyword here.
+
+64
+00:04:30,000 --> 00:04:33,000
+That means you are not able to describe new classes.
+
+65
+00:04:33,000 --> 00:04:39,000
+And based on this one, that means you are not able to extend this class and add new behavior to this
+
+66
+00:04:39,000 --> 00:04:39,000
+type.
+
+67
+00:04:40,000 --> 00:04:42,000
+For example, string is also final class.
+
+68
+00:04:43,000 --> 00:04:47,000
+And let's imagine I want to extend user from Streambed for some reasons.
+
+69
+00:04:50,000 --> 00:04:57,000
+I can write extends here and string the type user cannot be a subclass of the final clustering.
+
+70
+00:04:58,000 --> 00:05:00,000
+We'll talk more about inheritance in a separate lesson.
+
+71
+00:05:01,000 --> 00:05:06,000
+But right now, I want you to understand that when we are talking about final classes, first of all,
+
+72
+00:05:06,000 --> 00:05:08,000
+women classes that we can't extend.
+
+73
+00:05:09,000 --> 00:05:15,000
+Project classes will be easy for you to understand, Bodger stands for plain old Jawa Object.
+
+74
+00:05:16,000 --> 00:05:18,000
+These are just simple Java classes.
+
+75
+00:05:19,000 --> 00:05:24,000
+For example, project classes shouldn't, first of all, extend to any other classes.
+
+76
+00:05:24,000 --> 00:05:32,000
+Secondly, implement interfaces and contain prespecified annotations like antiquing or Odos.
+
+77
+00:05:32,000 --> 00:05:38,000
+Usually people call simple classes with just getters and setters and default constructor your classes.
+
+78
+00:05:38,000 --> 00:05:42,000
+For example, this product class can be called project class.
+
+79
+00:05:42,000 --> 00:05:44,000
+So now you know the terminology.
+
+80
+00:05:44,000 --> 00:05:46,000
+As you can see, that was easy.
+
+81
+00:05:47,000 --> 00:05:53,000
+APSA classes, APSA classes exist to put their common code for the specific Iraqi.
+
+82
+00:05:53,000 --> 00:05:58,000
+For example, let's pretend that in our e-commerce solution we have product class.
+
+83
+00:05:58,000 --> 00:06:05,000
+It will be abstract, it will have such fields as an idea, name, minimum amount of order quantity
+
+84
+00:06:05,000 --> 00:06:10,000
+will also have here Flaxton in the five, whether the product is available for delivery.
+
+85
+00:06:10,000 --> 00:06:13,000
+We don't want to make product class concrete.
+
+86
+00:06:13,000 --> 00:06:18,000
+We want to keep it abstract y because in our program we don't need to instantiate product types.
+
+87
+00:06:19,000 --> 00:06:20,000
+What do we need?
+
+88
+00:06:20,000 --> 00:06:24,000
+Instead, we need to instantiate master product and waron product.
+
+89
+00:06:24,000 --> 00:06:28,000
+These are specific types of products which will be used in our online shop.
+
+90
+00:06:29,000 --> 00:06:35,000
+Kivi can be master product, Boutte's will be Verant product because we can have different sizes of
+
+91
+00:06:35,000 --> 00:06:39,000
+the same goods and different sizes of boots as in most master products.
+
+92
+00:06:40,000 --> 00:06:46,000
+Master and Vuuren products will extend abasic product type and just few properties will be added to
+
+93
+00:06:46,000 --> 00:06:47,000
+these types.
+
+94
+00:06:47,000 --> 00:06:53,000
+For example, array of master products will be added to via product because let's pretend we want to
+
+95
+00:06:53,000 --> 00:06:55,000
+sell goods, goods, a variant.
+
+96
+00:06:55,000 --> 00:06:57,000
+You can have boots of different sizes.
+
+97
+00:06:58,000 --> 00:07:03,000
+Master Product also has another property which is different from abstract product type will have boolean
+
+98
+00:07:03,000 --> 00:07:08,000
+property is available for lease to identify whether this product is available for lease.
+
+99
+00:07:09,000 --> 00:07:11,000
+Now let's try to create objects.
+
+100
+00:07:11,000 --> 00:07:17,000
+We can't create an object from an abstract class, but we can create objects of concrete glass that
+
+101
+00:07:17,000 --> 00:07:19,000
+extends our abstract class.
+
+102
+00:07:19,000 --> 00:07:21,000
+And I want to pay your attention here.
+
+103
+00:07:21,000 --> 00:07:24,000
+Take into account master product and and product.
+
+104
+00:07:24,000 --> 00:07:26,000
+Class extends product.
+
+105
+00:07:26,000 --> 00:07:30,000
+We have the same methods which we have in product class.
+
+106
+00:07:31,000 --> 00:07:38,000
+So you can understand that code which is placed here in product class is common for all child classes.
+
+107
+00:07:39,000 --> 00:07:40,000
+Does it make sense?
+
+108
+00:07:40,000 --> 00:07:43,000
+Can you see why do you need to have abstract classes?
+
+109
+00:07:43,000 --> 00:07:49,000
+For example, we'll talk more in details regarding inheritance and extends keyword in separate lesson.
+
+110
+00:07:49,000 --> 00:07:55,000
+But I decided to show you this example because it will be hard to explain the necessity of having abstract
+
+111
+00:07:55,000 --> 00:07:56,000
+classes in your program.
+
+112
+00:07:57,000 --> 00:08:01,000
+And that's a reason to have an abstract class is in case you know that your object should have some
+
+113
+00:08:01,000 --> 00:08:07,000
+specific behavior, but you don't know the exact implementation of this behavior for all child classes.
+
+114
+00:08:07,000 --> 00:08:12,000
+Let me show you this on the example, your products will be able to check whether it's available in
+
+115
+00:08:12,000 --> 00:08:18,000
+stock, but you have different implementations for this behavior in master environ product classes.
+
+116
+00:08:19,000 --> 00:08:22,000
+That's why I graded abstract methods in product class.
+
+117
+00:08:22,000 --> 00:08:25,000
+Abstract method is a method without body.
+
+118
+00:08:25,000 --> 00:08:30,000
+You see that I added abstract keyword and there is no body in this method.
+
+119
+00:08:30,000 --> 00:08:32,000
+It is just the method declaration.
+
+120
+00:08:33,000 --> 00:08:36,000
+And this method should be implemented in child classes.
+
+121
+00:08:36,000 --> 00:08:39,000
+For example, in multiproduct you will just check remaining amount.
+
+122
+00:08:40,000 --> 00:08:43,000
+If it's not zero, then you have this product in stock.
+
+123
+00:08:43,000 --> 00:08:48,000
+Yet the remaining amount and stock method is the method which will check the amount of this product
+
+124
+00:08:48,000 --> 00:08:49,000
+in stock, in database.
+
+125
+00:08:50,000 --> 00:08:56,000
+For the sake of example, I made a stop here to focus your attention on the other concept invariant
+
+126
+00:08:56,000 --> 00:08:56,000
+product.
+
+127
+00:08:56,000 --> 00:08:59,000
+You have to iterate over each variant and encase case.
+
+128
+00:08:59,000 --> 00:09:02,000
+At least one variant of the product is in stock.
+
+129
+00:09:02,000 --> 00:09:06,000
+Let's indicate to our user that this product is in stock and let's return.
+
+130
+00:09:06,000 --> 00:09:10,000
+True, and only if NIESR variance is in stock.
+
+131
+00:09:10,000 --> 00:09:11,000
+Let's return false.
+
+132
+00:09:12,000 --> 00:09:15,000
+I hope now you get clarity on what abstract classes are.
+
+133
+00:09:16,000 --> 00:09:19,000
+And last but not least for today, is anonymous class.
+
+134
+00:09:19,000 --> 00:09:24,000
+You already know that I can't create an instant of the abstract class product, but I can create an
+
+135
+00:09:24,000 --> 00:09:27,000
+instance of anonymous class that extends class product.
+
+136
+00:09:28,000 --> 00:09:34,000
+For example, here are wrote new product, curly bracket and now I can implement abstract method.
+
+137
+00:09:35,000 --> 00:09:41,000
+This definition is called abstract class because this is a definition of a new class that has no name.
+
+138
+00:09:42,000 --> 00:09:47,000
+Usually you declare anonymous class and instantiate object at the same moment of time.
+
+139
+00:09:47,000 --> 00:09:48,000
+That's it.
+
+140
+00:09:48,000 --> 00:09:51,000
+Now you know all types of classes that can exist in Java.
+
+141
+00:09:52,000 --> 00:09:54,000
+Now let's recap what we have learned today.
+
+142
+00:09:55,000 --> 00:09:59,000
+We learned what can create static nested in our final bodger.
+
+143
+00:09:59,000 --> 00:10:03,000
+Abstract and anonymous classes are after today's lesson.
+
+144
+00:10:03,000 --> 00:10:08,000
+You also know what abstract methods are and how you can use abstract modifier with classes and methods.
+
+145
+00:10:10,000 --> 00:10:11,000
+That's all what I have for you for today.
+
+146
+00:10:12,000 --> 00:10:15,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/003 Source-code-Abstract-Product.url b/13 - Object-oriented programming/003 Source-code-Abstract-Product.url
new file mode 100644
index 0000000000000000000000000000000000000000..f8f9d2543d32ddce84e0793b35f66f90b3831d80
--- /dev/null
+++ b/13 - Object-oriented programming/003 Source-code-Abstract-Product.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/Product.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/003 Source-code-Cart-with-Tax-and-Discount.url b/13 - Object-oriented programming/003 Source-code-Cart-with-Tax-and-Discount.url
new file mode 100644
index 0000000000000000000000000000000000000000..b4a1833ea175add96078cd147d5072e8f5bbc44b
--- /dev/null
+++ b/13 - Object-oriented programming/003 Source-code-Cart-with-Tax-and-Discount.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Cart.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/003 Source-code-Demo-class.url b/13 - Object-oriented programming/003 Source-code-Demo-class.url
new file mode 100644
index 0000000000000000000000000000000000000000..f0d44e218aee9460c9c1b53f229e9bf3bf5e9f01
--- /dev/null
+++ b/13 - Object-oriented programming/003 Source-code-Demo-class.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/Demo.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/003 Source-code-Master-Product.url b/13 - Object-oriented programming/003 Source-code-Master-Product.url
new file mode 100644
index 0000000000000000000000000000000000000000..a0c5820d527b5ba72329d725e5045f4a55308343
--- /dev/null
+++ b/13 - Object-oriented programming/003 Source-code-Master-Product.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/MasterProduct.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/003 Source-code-POJO-Product.url b/13 - Object-oriented programming/003 Source-code-POJO-Product.url
new file mode 100644
index 0000000000000000000000000000000000000000..a752f40720922f88464ba6a3543754cbc03cc4ac
--- /dev/null
+++ b/13 - Object-oriented programming/003 Source-code-POJO-Product.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Product.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/003 Source-code-User-class.url b/13 - Object-oriented programming/003 Source-code-User-class.url
new file mode 100644
index 0000000000000000000000000000000000000000..375ba7620c6808488ec6e587de6e865a0008cd9d
--- /dev/null
+++ b/13 - Object-oriented programming/003 Source-code-User-class.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/User.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/003 Source-code-Variant-product.url b/13 - Object-oriented programming/003 Source-code-Variant-product.url
new file mode 100644
index 0000000000000000000000000000000000000000..1ea120e8b31906acd15d08fd39feaf32ea6466f7
--- /dev/null
+++ b/13 - Object-oriented programming/003 Source-code-Variant-product.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/VariantProduct.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/004 Interfaces_en.srt b/13 - Object-oriented programming/004 Interfaces_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..766e563f0c044de019ee56149b041d3126490d97
--- /dev/null
+++ b/13 - Object-oriented programming/004 Interfaces_en.srt
@@ -0,0 +1,688 @@
+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.
+
diff --git a/13 - Object-oriented programming/004 Source-code-ChasePaymentProcessor.url b/13 - Object-oriented programming/004 Source-code-ChasePaymentProcessor.url
new file mode 100644
index 0000000000000000000000000000000000000000..ff2e994ce9500e76782c44d4c0426b1c0336d42d
--- /dev/null
+++ b/13 - Object-oriented programming/004 Source-code-ChasePaymentProcessor.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/ChasePaymentProcessor.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/004 Source-code-Client-class.url b/13 - Object-oriented programming/004 Source-code-Client-class.url
new file mode 100644
index 0000000000000000000000000000000000000000..4b94fa16aa7cb7d8aba605e6b5ad2d1effcb6738
--- /dev/null
+++ b/13 - Object-oriented programming/004 Source-code-Client-class.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/Client.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/004 Source-code-PayPalPaymentProcessor.url b/13 - Object-oriented programming/004 Source-code-PayPalPaymentProcessor.url
new file mode 100644
index 0000000000000000000000000000000000000000..9d1d6ea118b3c3c3dfcb4f600f878ff50b2ae7a0
--- /dev/null
+++ b/13 - Object-oriented programming/004 Source-code-PayPalPaymentProcessor.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PayPalPaymentProcessor.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/004 Source-code-PaymentData.url b/13 - Object-oriented programming/004 Source-code-PaymentData.url
new file mode 100644
index 0000000000000000000000000000000000000000..545e4d19ee1938afbb190e1e4df169170cebb626
--- /dev/null
+++ b/13 - Object-oriented programming/004 Source-code-PaymentData.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PaymentData.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/004 Source-code-PaymentProcessor-interface.url b/13 - Object-oriented programming/004 Source-code-PaymentProcessor-interface.url
new file mode 100644
index 0000000000000000000000000000000000000000..1092c91b379add3cdc5c36ccb2eaa4a89c0bb767
--- /dev/null
+++ b/13 - Object-oriented programming/004 Source-code-PaymentProcessor-interface.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PaymentProcessor.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/004 Source-code-PaymentValidator.url b/13 - Object-oriented programming/004 Source-code-PaymentValidator.url
new file mode 100644
index 0000000000000000000000000000000000000000..fd505eb16b5865e3c9b5ebcf206ced40119f33f3
--- /dev/null
+++ b/13 - Object-oriented programming/004 Source-code-PaymentValidator.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PaymentValidator.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/005 Inheritance_en.srt b/13 - Object-oriented programming/005 Inheritance_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..43af71c6f593e777cfe6f07a9d8c343a5e4673a1
--- /dev/null
+++ b/13 - Object-oriented programming/005 Inheritance_en.srt
@@ -0,0 +1,636 @@
+1
+00:00:05,000 --> 00:00:06,000
+Hello, Jim.
+
+2
+00:00:06,000 --> 00:00:11,000
+In this lesson, we are going to learn more about one of the key principles of the object oriented programming
+
+3
+00:00:11,000 --> 00:00:12,000
+approach.
+
+4
+00:00:12,000 --> 00:00:13,000
+I'm talking about inheritance.
+
+5
+00:00:14,000 --> 00:00:16,000
+And they will talk not only about inheritance.
+
+6
+00:00:16,000 --> 00:00:23,000
+Well, on super keyword and you operator instance of I will show you how we can extend classes and what
+
+7
+00:00:23,000 --> 00:00:25,000
+rules should be followed during inheritance.
+
+8
+00:00:25,000 --> 00:00:27,000
+So let's start.
+
+9
+00:00:27,000 --> 00:00:32,000
+I believe you remember theoretical part which we discussed in lesson about inheritance.
+
+10
+00:00:32,000 --> 00:00:37,000
+So now it is time for practical code examples demo to understand this topic better.
+
+11
+00:00:38,000 --> 00:00:42,000
+I always try to create real life example for you so that you could understand how this works for real
+
+12
+00:00:43,000 --> 00:00:44,000
+in this lesson.
+
+13
+00:00:44,000 --> 00:00:46,000
+Imagine that you have product type in your program.
+
+14
+00:00:46,000 --> 00:00:50,000
+I didn't create too many fields to not distract attention from inheritance topic.
+
+15
+00:00:51,000 --> 00:00:54,000
+Just imagine that product can have multiple fields and methods.
+
+16
+00:00:55,000 --> 00:00:56,000
+And we also have the phone type.
+
+17
+00:00:57,000 --> 00:00:59,000
+Phone is also a product in our online shop.
+
+18
+00:01:00,000 --> 00:01:03,000
+It will have similar fields and behavior as product has.
+
+19
+00:01:03,000 --> 00:01:09,000
+But besides that, it has also some phone specific behavior like ring method, for example.
+
+20
+00:01:10,000 --> 00:01:15,000
+Now let's create phone object I a product variable and initialize it with foreign object.
+
+21
+00:01:15,000 --> 00:01:22,000
+Take into account for an object is also a type product and you can see that our product variable has
+
+22
+00:01:22,000 --> 00:01:24,000
+own methods that are declared in product type.
+
+23
+00:01:25,000 --> 00:01:31,000
+I have said gather and calculate remaining amount method which is not declared in phone but declared
+
+24
+00:01:31,000 --> 00:01:32,000
+in product.
+
+25
+00:01:32,000 --> 00:01:39,000
+So the idea of inheritance is to describe new types based on existing one from technical side.
+
+26
+00:01:39,000 --> 00:01:46,000
+This allows us to reuse already written code, which is also pretty cool because let's imagine you need
+
+27
+00:01:46,000 --> 00:01:49,000
+to change the logic how remaining amount in stock is calculated.
+
+28
+00:01:50,000 --> 00:01:56,000
+Instead of changing this method in all classes where this method is used, I can just do change in one
+
+29
+00:01:56,000 --> 00:02:01,000
+place in product class and behaviour will become different in old child classes.
+
+30
+00:02:01,000 --> 00:02:07,000
+And you also see that foreign object doesn't have name field, but somehow I can set the value for name
+
+31
+00:02:07,000 --> 00:02:09,000
+property of the form.
+
+32
+00:02:09,000 --> 00:02:12,000
+That is because inheritance of this field from product object.
+
+33
+00:02:13,000 --> 00:02:15,000
+OK, but let's try to ring right now.
+
+34
+00:02:16,000 --> 00:02:21,000
+Unfortunately, we have compilation error because Renk method is not defined for the type product,
+
+35
+00:02:21,000 --> 00:02:26,000
+but we see here that we created for an object and we still don't have that Renk method available.
+
+36
+00:02:27,000 --> 00:02:27,000
+Why?
+
+37
+00:02:28,000 --> 00:02:30,000
+Because Java is not mahzarin.
+
+38
+00:02:30,000 --> 00:02:33,000
+What object will be here in this line during the runtime?
+
+39
+00:02:34,000 --> 00:02:40,000
+You can initialize the variable with any object of this type and Java doesn't want to guess what object
+
+40
+00:02:40,000 --> 00:02:41,000
+is there for real.
+
+41
+00:02:41,000 --> 00:02:47,000
+What Java knows that in case code is compiler, that means object which was assigned to this variable
+
+42
+00:02:47,000 --> 00:02:50,000
+has the same interface as this type for sure.
+
+43
+00:02:50,000 --> 00:02:56,000
+That's why we don't see any matters from form type here, because we have variable of type product.
+
+44
+00:02:57,000 --> 00:03:03,000
+When I create variable or form that I can invoke Renk method without compilation error.
+
+45
+00:03:03,000 --> 00:03:08,000
+But what if my class or method works with product type and I want to call Remarque method?
+
+46
+00:03:09,000 --> 00:03:12,000
+I will be able to do that only in case during the runtime.
+
+47
+00:03:12,000 --> 00:03:14,000
+I have phone object here.
+
+48
+00:03:15,000 --> 00:03:21,000
+But how I can understand this now I will show you a new keyword and operator which you will be able
+
+49
+00:03:21,000 --> 00:03:23,000
+to use in your programs.
+
+50
+00:03:23,000 --> 00:03:25,000
+Here is an instance of operator.
+
+51
+00:03:26,000 --> 00:03:29,000
+It allows you to check the type consistency with the object.
+
+52
+00:03:30,000 --> 00:03:33,000
+It is a binary operator which works with two operands.
+
+53
+00:03:34,000 --> 00:03:38,000
+Let me show you how you can use it if object behind the product variable.
+
+54
+00:03:38,000 --> 00:03:41,000
+This one is instance of phone type.
+
+55
+00:03:41,000 --> 00:03:44,000
+The result will be true in terms of returns.
+
+56
+00:03:44,000 --> 00:03:51,000
+Is a true or false and if instance of returns true, I can cast this variable to type the remember how
+
+57
+00:03:51,000 --> 00:03:53,000
+Wikus primitive types.
+
+58
+00:03:53,000 --> 00:03:56,000
+We can just reference types in a similar way.
+
+59
+00:03:56,000 --> 00:03:57,000
+Right.
+
+60
+00:03:57,000 --> 00:03:59,000
+Phone and variable name.
+
+61
+00:03:59,000 --> 00:04:04,000
+Now put the type name in parentheses and name of the variable you want to cast.
+
+62
+00:04:05,000 --> 00:04:11,000
+Now you can invoke Renk method instance of the return false in case variable reference to object is
+
+63
+00:04:11,000 --> 00:04:15,000
+incompatible with the type you specified as a second operand.
+
+64
+00:04:16,000 --> 00:04:20,000
+OK, you know what is instance of and when you can use it.
+
+65
+00:04:20,000 --> 00:04:24,000
+Let's proceed with inheritance topic in your child class.
+
+66
+00:04:24,000 --> 00:04:26,000
+You always have a reference to a parent class.
+
+67
+00:04:27,000 --> 00:04:32,000
+You might want to have the reference to the parent class, for example, to call some parent methods.
+
+68
+00:04:32,000 --> 00:04:33,000
+Let's take a look here.
+
+69
+00:04:34,000 --> 00:04:40,000
+Product Class has a message that returns the least of all variant products associated with the current
+
+70
+00:04:40,000 --> 00:04:40,000
+product.
+
+71
+00:04:40,000 --> 00:04:46,000
+And our phone object overrides this behavior and throws and supports the separation exception.
+
+72
+00:04:46,000 --> 00:04:51,000
+This exception indicates that this behavior is not supported in this class.
+
+73
+00:04:52,000 --> 00:04:57,000
+Later in this course, we will learn that this implementation violates one of the design principles
+
+74
+00:04:57,000 --> 00:04:59,000
+in the object oriented programming.
+
+75
+00:04:59,000 --> 00:05:02,000
+But you would face with similar cases many in.
+
+76
+00:05:02,000 --> 00:05:09,000
+Times, believe me, and now what will happen if in another method calculate the amount of variance
+
+77
+00:05:09,000 --> 00:05:17,000
+I will call least variance method of this object will be called and program will stop execution because
+
+78
+00:05:17,000 --> 00:05:18,000
+of the exception?
+
+79
+00:05:18,000 --> 00:05:20,000
+Let me run this program to show you this.
+
+80
+00:05:21,000 --> 00:05:22,000
+What do you have to do right now?
+
+81
+00:05:22,000 --> 00:05:27,000
+You already know that in each class you have reference to a parent class who is super keyword.
+
+82
+00:05:28,000 --> 00:05:34,000
+So let's call math at least reference not from this class, but let's call method list variants of the
+
+83
+00:05:34,000 --> 00:05:34,000
+parent class.
+
+84
+00:05:35,000 --> 00:05:38,000
+This one just right super.
+
+85
+00:05:38,000 --> 00:05:43,000
+This is a reference to the parent type Dorte and invoke the same method.
+
+86
+00:05:43,000 --> 00:05:47,000
+What we have now left me around this program one more time.
+
+87
+00:05:47,000 --> 00:05:54,000
+We won't have any error because this method was called you can always use super keyword to reference
+
+88
+00:05:54,000 --> 00:05:56,000
+methods or properties of a parent class.
+
+89
+00:05:57,000 --> 00:05:59,000
+Now imagine the next scenario.
+
+90
+00:05:59,000 --> 00:06:04,000
+Imagine you don't have the full constructor in your parent object because you can create products only
+
+91
+00:06:04,000 --> 00:06:05,000
+with names.
+
+92
+00:06:06,000 --> 00:06:10,000
+How this will impact your phone that you're going to have compilation error.
+
+93
+00:06:10,000 --> 00:06:11,000
+Why?
+
+94
+00:06:11,000 --> 00:06:20,000
+Because the grade child object GBM invokes constructor of all parent classes and now you can call constructor
+
+95
+00:06:20,000 --> 00:06:23,000
+of parent classes because it doesn't know what should be passed.
+
+96
+00:06:23,000 --> 00:06:28,000
+As a constructor argument, the full constructor often looks like this.
+
+97
+00:06:29,000 --> 00:06:35,000
+So what we need to do to remove this compilation error, we need to explicitly call constructor of parent
+
+98
+00:06:35,000 --> 00:06:42,000
+class and pass a string parameter to it that's type super parentheses and pass some string argument
+
+99
+00:06:42,000 --> 00:06:43,000
+to it.
+
+100
+00:06:43,000 --> 00:06:48,000
+Here we call parent constructor and you see that now compilation error is gone.
+
+101
+00:06:49,000 --> 00:06:56,000
+Now Joram will be able to create an object of the form type one more important common here call of the
+
+102
+00:06:56,000 --> 00:06:59,000
+parent constructor always should go first in child constructor.
+
+103
+00:07:00,000 --> 00:07:03,000
+I mean you can't call any other methods before super.
+
+104
+00:07:03,000 --> 00:07:05,000
+Here, let me show you.
+
+105
+00:07:06,000 --> 00:07:10,000
+If I write here some code, it doesn't matter what exactly are right here.
+
+106
+00:07:11,000 --> 00:07:11,000
+Let me cancel.
+
+107
+00:07:11,000 --> 00:07:14,000
+Output will have again compilation error.
+
+108
+00:07:14,000 --> 00:07:20,000
+You need to remember that invocation of Ben constructor and using of super keyword should always go
+
+109
+00:07:20,000 --> 00:07:22,000
+first in shall constructor.
+
+110
+00:07:22,000 --> 00:07:23,000
+I will make a post now.
+
+111
+00:07:24,000 --> 00:07:27,000
+Is it clear if this is clear, let's move on.
+
+112
+00:07:28,000 --> 00:07:30,000
+I told you that OP is fun.
+
+113
+00:07:31,000 --> 00:07:37,000
+Now you know that to create a child's object constructor of a parent type is called what else happens
+
+114
+00:07:37,000 --> 00:07:39,000
+during child object initialization.
+
+115
+00:07:39,000 --> 00:07:44,000
+Here is a quick exercise for you that will help you to remember for the rest of your lives what happens
+
+116
+00:07:44,000 --> 00:07:46,000
+during child object construction.
+
+117
+00:07:47,000 --> 00:07:49,000
+Here is the code of our exercise.
+
+118
+00:07:49,000 --> 00:07:50,000
+So let's start.
+
+119
+00:07:51,000 --> 00:07:53,000
+We have parent type here.
+
+120
+00:07:53,000 --> 00:07:57,000
+You can see static initialization lock installation, lock constructor.
+
+121
+00:07:58,000 --> 00:08:03,000
+We have console output everywhere here and it's clearly specified that this output belongs to the parent
+
+122
+00:08:03,000 --> 00:08:07,000
+type and we have child types that extends parent class.
+
+123
+00:08:08,000 --> 00:08:14,000
+The child class has the same things that parent has static, initialization block, initialization lock
+
+124
+00:08:14,000 --> 00:08:15,000
+and constructor.
+
+125
+00:08:16,000 --> 00:08:19,000
+And you see the text and console output is different.
+
+126
+00:08:19,000 --> 00:08:24,000
+The question is what will be printed to console when I will create child object?
+
+127
+00:08:25,000 --> 00:08:30,000
+And another question, what will be printed to console when I will create child object the second time?
+
+128
+00:08:31,000 --> 00:08:34,000
+Press pause and try to answer this question.
+
+129
+00:08:35,000 --> 00:08:36,000
+OK, let me answer this.
+
+130
+00:08:37,000 --> 00:08:42,000
+I will run the program and we will investigate console output and let's see what we have here.
+
+131
+00:08:43,000 --> 00:08:49,000
+Static initialization block of the parent is executed and after that static installation lock of the
+
+132
+00:08:49,000 --> 00:08:51,000
+child type is executed.
+
+133
+00:08:51,000 --> 00:08:59,000
+Why static blocks are executed when classes uploaded into GBM parent class was uploaded first and after
+
+134
+00:08:59,000 --> 00:09:05,000
+that child class was uploaded after the JVM wants to initialize parent fields first.
+
+135
+00:09:05,000 --> 00:09:08,000
+That's why it executes parent installation block.
+
+136
+00:09:08,000 --> 00:09:15,000
+And after that parent constructor and only after that JVM starts to create child object and executes
+
+137
+00:09:15,000 --> 00:09:19,000
+child and installation work and child constructor home.
+
+138
+00:09:19,000 --> 00:09:20,000
+This example is clear.
+
+139
+00:09:20,000 --> 00:09:24,000
+What happens when I try to create child objects a second time?
+
+140
+00:09:24,000 --> 00:09:28,000
+Everything the same beside the execution of static initialization locks.
+
+141
+00:09:29,000 --> 00:09:29,000
+Why?
+
+142
+00:09:30,000 --> 00:09:35,000
+Because everything what is followed by static keyword, including initialization blocks, is associated
+
+143
+00:09:35,000 --> 00:09:39,000
+not with the object of this class, but with the class itself.
+
+144
+00:09:39,000 --> 00:09:44,000
+So when classes are uploaded into GBM, these blocks are executed.
+
+145
+00:09:44,000 --> 00:09:48,000
+They won't be executed two times in a row home.
+
+146
+00:09:48,000 --> 00:09:54,000
+Now with this example, it has become clearer what is initialization order during the construction of
+
+147
+00:09:54,000 --> 00:09:55,000
+a giant object.
+
+148
+00:09:55,000 --> 00:10:01,000
+The last thing you need to know about inheritance is that in Java, multiple inheritance is not supported
+
+149
+00:10:01,000 --> 00:10:02,000
+that.
+
+150
+00:10:02,000 --> 00:10:08,000
+Means you can't define new type on the basis of two or more opposite types after extensive keyword.
+
+151
+00:10:08,000 --> 00:10:14,000
+You can specify only one class, but in some other languages, multiple inheritance is supported.
+
+152
+00:10:15,000 --> 00:10:17,000
+That's all what we have in our agenda for today.
+
+153
+00:10:18,000 --> 00:10:20,000
+Let's recap what we have learned today.
+
+154
+00:10:20,000 --> 00:10:24,000
+We learned what inheritance is and how we can extend the time.
+
+155
+00:10:24,000 --> 00:10:31,000
+Now, you know, two more key words, super and instance of you learn some specific constraints while
+
+156
+00:10:31,000 --> 00:10:32,000
+extending classes.
+
+157
+00:10:33,000 --> 00:10:39,000
+And today you learned what initialization order is of new objects that is extended from another class.
+
+158
+00:10:39,000 --> 00:10:40,000
+That's all.
+
+159
+00:10:41,000 --> 00:10:44,000
+Thank you for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/005 Source-code-Demo.url b/13 - Object-oriented programming/005 Source-code-Demo.url
new file mode 100644
index 0000000000000000000000000000000000000000..7afcd75b69a9f106ae27032c3d115891a4d5997e
--- /dev/null
+++ b/13 - Object-oriented programming/005 Source-code-Demo.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/Demo.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/005 Source-code-Object-initialization-order.url b/13 - Object-oriented programming/005 Source-code-Object-initialization-order.url
new file mode 100644
index 0000000000000000000000000000000000000000..c93b2906efe240f40b46ad6006774dbd1a964027
--- /dev/null
+++ b/13 - Object-oriented programming/005 Source-code-Object-initialization-order.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/ObjectInitializationOrder.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/005 Source-code-Phone.url b/13 - Object-oriented programming/005 Source-code-Phone.url
new file mode 100644
index 0000000000000000000000000000000000000000..8a884cd11729b6fc89403d41e15c3de86934c163
--- /dev/null
+++ b/13 - Object-oriented programming/005 Source-code-Phone.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/Phone.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/005 Source-code-Product.url b/13 - Object-oriented programming/005 Source-code-Product.url
new file mode 100644
index 0000000000000000000000000000000000000000..8dd098ab636db77ea6e4c1d478b0f71875548472
--- /dev/null
+++ b/13 - Object-oriented programming/005 Source-code-Product.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/Product.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Polymorphism and 'final' keyword_en.srt b/13 - Object-oriented programming/006 Polymorphism and 'final' keyword_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..ac8c645fa7a03298f425f717e5a257898dca1eea
--- /dev/null
+++ b/13 - Object-oriented programming/006 Polymorphism and 'final' keyword_en.srt
@@ -0,0 +1,556 @@
+1
+00:00:05,000 --> 00:00:06,000
+Hello, Jim.
+
+2
+00:00:06,000 --> 00:00:11,000
+In this lesson, we'll discuss principle of the object oriented programming approach polymorphism,
+
+3
+00:00:11,000 --> 00:00:14,000
+they will talk about what polymorphism is.
+
+4
+00:00:14,000 --> 00:00:16,000
+I will tell you what method of writing this.
+
+5
+00:00:17,000 --> 00:00:21,000
+You will learn what is the difference between method of writing and method of reloading hope.
+
+6
+00:00:21,000 --> 00:00:25,000
+After this lesson, you will understand what dynamic Bindon is.
+
+7
+00:00:25,000 --> 00:00:31,000
+Also on different examples, I will show you how final key words works and what does it mean.
+
+8
+00:00:31,000 --> 00:00:32,000
+So let's start.
+
+9
+00:00:33,000 --> 00:00:35,000
+We have a lot of things to learn today.
+
+10
+00:00:35,000 --> 00:00:38,000
+Polymorphism literally means many forms.
+
+11
+00:00:38,000 --> 00:00:39,000
+Many forms of what?
+
+12
+00:00:40,000 --> 00:00:41,000
+Many forms of behavior.
+
+13
+00:00:42,000 --> 00:00:47,000
+Often we can see how polymorphism works when we extend any class or implement any interface.
+
+14
+00:00:47,000 --> 00:00:48,000
+Let me show you one example.
+
+15
+00:00:49,000 --> 00:00:54,000
+Imagine that we have abstract class user and we have content manager and admin user classes.
+
+16
+00:00:54,000 --> 00:00:59,000
+Both extensive user user has methods named validate access rights.
+
+17
+00:01:00,000 --> 00:01:04,000
+This method should check permissions of the user to perform some actions in our system.
+
+18
+00:01:04,000 --> 00:01:10,000
+You can see that in user class we have default console output where it is set that there are no specific
+
+19
+00:01:10,000 --> 00:01:12,000
+permissions in content.
+
+20
+00:01:12,000 --> 00:01:15,000
+Manager with the console output was indication of the permissions.
+
+21
+00:01:15,000 --> 00:01:21,000
+Content manager can't withdraw money and for admin user we see a completely different message.
+
+22
+00:01:22,000 --> 00:01:26,000
+Now let me declare two variables of type user and create two objects.
+
+23
+00:01:26,000 --> 00:01:30,000
+Object of content manager type an object of admin user type.
+
+24
+00:01:30,000 --> 00:01:35,000
+After that I want to invoke validate access rights methods on these objects.
+
+25
+00:01:35,000 --> 00:01:42,000
+What will be printed to cancel text from user class, from content manager class or from admin user
+
+26
+00:01:42,000 --> 00:01:42,000
+class.
+
+27
+00:01:43,000 --> 00:01:45,000
+Take a few seconds to think about this.
+
+28
+00:01:45,000 --> 00:01:51,000
+Let me run this program and we use it for content manager object method from content manager class was
+
+29
+00:01:51,000 --> 00:01:55,000
+invoked and for admin user method from admin user class was invoked.
+
+30
+00:01:56,000 --> 00:02:02,000
+This is polymorphism user type has the one behavior, the data user access rights.
+
+31
+00:02:02,000 --> 00:02:05,000
+But there are different forms of this behavior.
+
+32
+00:02:06,000 --> 00:02:08,000
+Type of the reference can't be changed.
+
+33
+00:02:08,000 --> 00:02:15,000
+The object of the reference can be of different type, but object type should be compatible with type
+
+34
+00:02:15,000 --> 00:02:16,000
+of the reference.
+
+35
+00:02:16,000 --> 00:02:22,000
+And in the runtime, Java identifies what methods should be called based on the object here during the
+
+36
+00:02:22,000 --> 00:02:23,000
+runtime.
+
+37
+00:02:23,000 --> 00:02:27,000
+That's why we see that methods of specific objects are called.
+
+38
+00:02:28,000 --> 00:02:35,000
+This is called dynamic binding method that should be invoked is identified during the runtime and as
+
+39
+00:02:35,000 --> 00:02:36,000
+a real life example.
+
+40
+00:02:36,000 --> 00:02:40,000
+Imagine we have interface to describe type that can archive files.
+
+41
+00:02:40,000 --> 00:02:47,000
+We can name it archive and says a contract for one method archive files which takes variable argument
+
+42
+00:02:47,000 --> 00:02:52,000
+parameter of type file, will run this type a little bit later in our course.
+
+43
+00:02:52,000 --> 00:02:55,000
+And we have different implementations of this interface.
+
+44
+00:02:55,000 --> 00:03:02,000
+Zakharova and RA archive and again during the runtime, Java will identify the object which stands behind
+
+45
+00:03:02,000 --> 00:03:05,000
+the reference and we'll call method of this exact object.
+
+46
+00:03:10,000 --> 00:03:17,000
+You can notice this override annotation, this is just the information for a compiler, your code will
+
+47
+00:03:17,000 --> 00:03:19,000
+work just awesome without this annotation.
+
+48
+00:03:19,000 --> 00:03:22,000
+Let's remove it and run program one more time.
+
+49
+00:03:22,000 --> 00:03:23,000
+There you see this.
+
+50
+00:03:24,000 --> 00:03:25,000
+Everything is the same.
+
+51
+00:03:25,000 --> 00:03:27,000
+Then why do we need it at all?
+
+52
+00:03:27,000 --> 00:03:32,000
+Imagine that either by mistake or your colleague just added the method parameter here.
+
+53
+00:03:32,000 --> 00:03:36,000
+You want to have compilation error, but what would you see in console?
+
+54
+00:03:37,000 --> 00:03:40,000
+You're going to see a console output from the parent class.
+
+55
+00:03:41,000 --> 00:03:41,000
+Why?
+
+56
+00:03:42,000 --> 00:03:48,000
+Because you are calling validate access rights method but not validate access rights within the parameter.
+
+57
+00:03:49,000 --> 00:03:51,000
+Do you remember topic about methods?
+
+58
+00:03:51,000 --> 00:03:54,000
+These two methods have different signature.
+
+59
+00:03:54,000 --> 00:03:58,000
+Jeff, I didn't know that you want to override behavior of this method.
+
+60
+00:03:59,000 --> 00:04:03,000
+To tell the compiler that you want to override method just adds the sanitation.
+
+61
+00:04:04,000 --> 00:04:08,000
+We'll talk about annotations and how to create them in the separate lesson about annotations.
+
+62
+00:04:09,000 --> 00:04:15,000
+So now you can see that I have the compilation error because now I told the compiler that I want to
+
+63
+00:04:15,000 --> 00:04:17,000
+override this method.
+
+64
+00:04:17,000 --> 00:04:22,000
+And that tells me that if I want to override this method with new behavior, I need to have the same
+
+65
+00:04:22,000 --> 00:04:25,000
+signature of the method as parent class has.
+
+66
+00:04:25,000 --> 00:04:28,000
+And also my return type has to be compatible.
+
+67
+00:04:29,000 --> 00:04:30,000
+Let's take a look at another example.
+
+68
+00:04:30,000 --> 00:04:35,000
+Imagine we have abstract method in our user class to retrieve profile information.
+
+69
+00:04:35,000 --> 00:04:39,000
+And when I will override this method in admin user class, I will return the instance of an account
+
+70
+00:04:39,000 --> 00:04:40,000
+information.
+
+71
+00:04:41,000 --> 00:04:42,000
+Will I have compilation error?
+
+72
+00:04:43,000 --> 00:04:48,000
+No, because I build my application relying on abstractions, profile information.
+
+73
+00:04:48,000 --> 00:04:55,000
+It is an interface, my abstraction, and I can return any object which is compatible with profile information
+
+74
+00:04:55,000 --> 00:04:58,000
+that that will not violate any Java rules.
+
+75
+00:04:58,000 --> 00:04:59,000
+One more thing.
+
+76
+00:04:59,000 --> 00:05:06,000
+Imagine that according to interface get profile information accepts parameter of profile type during
+
+77
+00:05:06,000 --> 00:05:08,000
+the method and location you can pass in the method.
+
+78
+00:05:08,000 --> 00:05:15,000
+Any object of type profile, for example, user profile type is compatible with profile type because
+
+79
+00:05:15,000 --> 00:05:21,000
+profile is an interface and user profile is a concrete class that implements this interface.
+
+80
+00:05:21,000 --> 00:05:27,000
+Here you can see that I can call the method was instance of user profile class and there are no errors.
+
+81
+00:05:27,000 --> 00:05:33,000
+So what you need to remember is that when you overwrite method, behavior, return type and method arguments
+
+82
+00:05:33,000 --> 00:05:38,000
+that you pass to the method during invocation should be compatible with Stipe's declared in parent class
+
+83
+00:05:39,000 --> 00:05:39,000
+hope.
+
+84
+00:05:39,000 --> 00:05:42,000
+Now you understand how you can override methods.
+
+85
+00:05:42,000 --> 00:05:45,000
+One more item which I wanted to discuss with you.
+
+86
+00:05:45,000 --> 00:05:49,000
+General developers often mix up to germ's override and overload.
+
+87
+00:05:50,000 --> 00:05:52,000
+We already know what this method override means.
+
+88
+00:05:53,000 --> 00:05:57,000
+Overload it is when you have masses with the same name, but with different signature.
+
+89
+00:05:58,000 --> 00:06:03,000
+For example, in Zipper Kiva archive files, Masset is overridden and overloaded.
+
+90
+00:06:03,000 --> 00:06:06,000
+Shit is overridden and here it is overloaded.
+
+91
+00:06:06,000 --> 00:06:08,000
+As you can see, overloaded.
+
+92
+00:06:08,000 --> 00:06:12,000
+Macit has the same name but the different method signature.
+
+93
+00:06:12,000 --> 00:06:16,000
+Now you know the difference between Macit override and overloading.
+
+94
+00:06:16,000 --> 00:06:17,000
+Let's move on.
+
+95
+00:06:17,000 --> 00:06:21,000
+And last but not the least topic for today is a final keyword final.
+
+96
+00:06:21,000 --> 00:06:24,000
+Kimura's can have different meaning based on the context.
+
+97
+00:06:25,000 --> 00:06:29,000
+It can be used with classes, methods, variables and parameters.
+
+98
+00:06:29,000 --> 00:06:31,000
+Let's look at final class first.
+
+99
+00:06:32,000 --> 00:06:37,000
+If the class is final like string class, for example, you can't extend new types from it.
+
+100
+00:06:38,000 --> 00:06:40,000
+Let me try to extend my user class from string.
+
+101
+00:06:45,000 --> 00:06:51,000
+And you see, I have the compilation error, so if you want to close your tab for extension, just add
+
+102
+00:06:51,000 --> 00:06:57,000
+final keywords and you already understand that in case, I forbid, client of my code to extend my type
+
+103
+00:06:57,000 --> 00:07:00,000
+in some degree, this violates polymorphism principle.
+
+104
+00:07:01,000 --> 00:07:08,000
+Final verbals can't be initialized with any value after they were declared here in admin user class,
+
+105
+00:07:08,000 --> 00:07:11,000
+a final variable user group of type string.
+
+106
+00:07:11,000 --> 00:07:17,000
+If I have final variable, I can't assign any other value to it after its declaration.
+
+107
+00:07:17,000 --> 00:07:22,000
+For example, if I would try to change value of this variable in the scope of this method, I will get
+
+108
+00:07:22,000 --> 00:07:23,000
+compilation error.
+
+109
+00:07:23,000 --> 00:07:27,000
+And we see here that the clips tells us about compilation error.
+
+110
+00:07:28,000 --> 00:07:34,000
+Final feels should be initialised is instantly after declaration like I have here or in constructor
+
+111
+00:07:34,000 --> 00:07:35,000
+or in installation.
+
+112
+00:07:35,000 --> 00:07:43,000
+Look, if you want initialize final variable with any value, there will be compilation error like this.
+
+113
+00:07:44,000 --> 00:07:46,000
+Similar behavior was final parameters.
+
+114
+00:07:47,000 --> 00:07:50,000
+Usually it is a rule of thumb to make parameters final.
+
+115
+00:07:50,000 --> 00:07:53,000
+That means you can't reassign this argument.
+
+116
+00:07:53,000 --> 00:07:56,000
+What is helpful, in my opinion, you want to use that.
+
+117
+00:07:56,000 --> 00:08:01,000
+People very often declare local variables of methods with final modifier.
+
+118
+00:08:01,000 --> 00:08:03,000
+But this is considered to be a good practice.
+
+119
+00:08:04,000 --> 00:08:07,000
+Final key word can be used with a method in a case.
+
+120
+00:08:07,000 --> 00:08:08,000
+Method is final.
+
+121
+00:08:08,000 --> 00:08:10,000
+It is can't be overridden.
+
+122
+00:08:10,000 --> 00:08:16,000
+For example, in case I will add final modifier to validate access rights method in user class, I will
+
+123
+00:08:16,000 --> 00:08:19,000
+receive compilation error in my admin user class.
+
+124
+00:08:19,000 --> 00:08:20,000
+Let's check.
+
+125
+00:08:21,000 --> 00:08:27,000
+Here's our compilation error, so if you don't want to give opportunity for anyone to override behavior
+
+126
+00:08:27,000 --> 00:08:29,000
+of your method, you can make it final.
+
+127
+00:08:30,000 --> 00:08:35,000
+But again, it doesn't look like object oriented approach because this violates polymorphism principle.
+
+128
+00:08:36,000 --> 00:08:41,000
+And probably you already understand that you can't use final and observe keywords together because they
+
+129
+00:08:41,000 --> 00:08:43,000
+can't exist simultaneously.
+
+130
+00:08:44,000 --> 00:08:47,000
+It looks like that's all what we have in our agenda for today.
+
+131
+00:08:47,000 --> 00:08:50,000
+Let's recap one more time what we have learned today.
+
+132
+00:08:50,000 --> 00:08:56,000
+Today, we have learned with you what polymorphism is now you know, how you can override behavior and
+
+133
+00:08:56,000 --> 00:08:59,000
+what rules we have to follow when we overwrite methods.
+
+134
+00:08:59,000 --> 00:09:02,000
+Also, you learned what dynamic Bindon is.
+
+135
+00:09:02,000 --> 00:09:06,000
+We discussed what is the difference between method overload and mycetoma.
+
+136
+00:09:06,000 --> 00:09:06,000
+Right.
+
+137
+00:09:06,000 --> 00:09:12,000
+And now you know how to use final keywords, which properties, classes, methods and method arguments.
+
+138
+00:09:12,000 --> 00:09:13,000
+That's it.
+
+139
+00:09:14,000 --> 00:09:16,000
+Thank you for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/006 Source-code-Account-Information.url b/13 - Object-oriented programming/006 Source-code-Account-Information.url
new file mode 100644
index 0000000000000000000000000000000000000000..f702ee8b886a9a1bb49ab3b6927aee713e001053
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Account-Information.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/AccountInformation.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Admin-User.url b/13 - Object-oriented programming/006 Source-code-Admin-User.url
new file mode 100644
index 0000000000000000000000000000000000000000..1dc25ca7144ae9f0ce9af39ce9ca5e8aa634e7c7
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Admin-User.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/AdminUser.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Archiver.url b/13 - Object-oriented programming/006 Source-code-Archiver.url
new file mode 100644
index 0000000000000000000000000000000000000000..f1d56516258c7a618122afe08b74cabafecafae7
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Archiver.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/Archiver.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Content-Manager.url b/13 - Object-oriented programming/006 Source-code-Content-Manager.url
new file mode 100644
index 0000000000000000000000000000000000000000..ffc14296d26cdf005cba84ce9c77d08bdaab172d
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Content-Manager.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/ContentManager.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Demo.url b/13 - Object-oriented programming/006 Source-code-Demo.url
new file mode 100644
index 0000000000000000000000000000000000000000..9fd2925093b1b6282a3665e97a202721d944d6aa
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Demo.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/Demo.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Profile-Information-Data.url b/13 - Object-oriented programming/006 Source-code-Profile-Information-Data.url
new file mode 100644
index 0000000000000000000000000000000000000000..aca7c80d1ab4f9a0e8f594093a5d9026dd60e0a7
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Profile-Information-Data.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/ProfileInformationData.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Profile.url b/13 - Object-oriented programming/006 Source-code-Profile.url
new file mode 100644
index 0000000000000000000000000000000000000000..0e284877bfed364adeba1f60468e4a1bedbd6458
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Profile.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/Profile.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Rar-Archiver.url b/13 - Object-oriented programming/006 Source-code-Rar-Archiver.url
new file mode 100644
index 0000000000000000000000000000000000000000..0bc65d364ade704ff12a4fce460894e8e1e7eaa3
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Rar-Archiver.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/RarArchiver.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-User-Profile.url b/13 - Object-oriented programming/006 Source-code-User-Profile.url
new file mode 100644
index 0000000000000000000000000000000000000000..5aa23dc3474c44e4f40fe3352d64fa633d1480d0
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-User-Profile.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/UserProfile.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-User.url b/13 - Object-oriented programming/006 Source-code-User.url
new file mode 100644
index 0000000000000000000000000000000000000000..7337e0bc9d00bcfc0c8ad57ee6ae964c9ac44cb2
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-User.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/User.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/006 Source-code-Zip-Archiver.url b/13 - Object-oriented programming/006 Source-code-Zip-Archiver.url
new file mode 100644
index 0000000000000000000000000000000000000000..2c1a579046e19e896711af4b9589bd44d3948b5e
--- /dev/null
+++ b/13 - Object-oriented programming/006 Source-code-Zip-Archiver.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/ZipArchiver.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/007 'static' keyword_en.srt b/13 - Object-oriented programming/007 'static' keyword_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..8517143125eafdd2230e33c4c1f9864e71b5be7e
--- /dev/null
+++ b/13 - Object-oriented programming/007 'static' keyword_en.srt
@@ -0,0 +1,440 @@
+1
+00:00:05,000 --> 00:00:06,000
+Hello.
+
+2
+00:00:06,000 --> 00:00:09,000
+Students, in this lesson, we'll learn what is a static key word.
+
+3
+00:00:09,000 --> 00:00:12,000
+We'll talk about where we can you start a keyboard.
+
+4
+00:00:12,000 --> 00:00:15,000
+I will explain how we can use static methods, static fields.
+
+5
+00:00:15,000 --> 00:00:20,000
+In this lesson, you are going to learn what a static impulse and what is the difference between static
+
+6
+00:00:20,000 --> 00:00:22,000
+and dynamic binding.
+
+7
+00:00:22,000 --> 00:00:23,000
+Let's start.
+
+8
+00:00:23,000 --> 00:00:25,000
+I truly believe that this topic matter.
+
+9
+00:00:25,000 --> 00:00:27,000
+We can jump to the examples.
+
+10
+00:00:27,000 --> 00:00:32,000
+So first of all, where you can use static keyboard, you already saw in previous lessons that you can
+
+11
+00:00:32,000 --> 00:00:38,000
+use static a keyboard during class declaration with initialization locks, with methods and with properties.
+
+12
+00:00:38,000 --> 00:00:41,000
+Static keyword controls, variable lifetime.
+
+13
+00:00:41,000 --> 00:00:46,000
+I believe you remember static nested classes and we even discussed how to create object of static nested
+
+14
+00:00:46,000 --> 00:00:47,000
+classes.
+
+15
+00:00:47,000 --> 00:00:50,000
+Let's understand what static is on this simple example.
+
+16
+00:00:50,000 --> 00:00:52,000
+You have the user class.
+
+17
+00:00:52,000 --> 00:01:00,000
+It has such properties as and name and one property has static modifier counter field is static during
+
+18
+00:01:00,000 --> 00:01:03,000
+the utilization of each new object and command counter.
+
+19
+00:01:04,000 --> 00:01:09,000
+Now let's try to create two objects of user type and investigate what will be the value of counter energy
+
+20
+00:01:09,000 --> 00:01:10,000
+fields.
+
+21
+00:01:10,000 --> 00:01:16,000
+Here you see a created user number one and user number two and get user aguy and counter value from
+
+22
+00:01:16,000 --> 00:01:18,000
+the first and the second user.
+
+23
+00:01:18,000 --> 00:01:21,000
+Let me run this program and we will investigate with you.
+
+24
+00:01:21,000 --> 00:01:21,000
+Console output.
+
+25
+00:01:22,000 --> 00:01:29,000
+You see that most users have IJI with zero value because zero is the default value for int variable.
+
+26
+00:01:29,000 --> 00:01:32,000
+But counter is not the same as the beginning.
+
+27
+00:01:32,000 --> 00:01:33,000
+Counter is equal to one.
+
+28
+00:01:34,000 --> 00:01:36,000
+And after we see that counter is equal to two.
+
+29
+00:01:37,000 --> 00:01:43,000
+And even more interesting things, if I would call get counter message on the user one object I will
+
+30
+00:01:43,000 --> 00:01:51,000
+get two Y because static variable exists in the single copy and it belongs not to the object but to
+
+31
+00:01:51,000 --> 00:01:52,000
+the whole class.
+
+32
+00:01:52,000 --> 00:01:59,000
+Each time new object is created, this counter variable is incremented and take into account that it
+
+33
+00:01:59,000 --> 00:02:00,000
+exists in single copy.
+
+34
+00:02:00,000 --> 00:02:04,000
+Each time the object is created, the value become more and more.
+
+35
+00:02:04,000 --> 00:02:10,000
+You know that class is a template for future object and each new object will have a new ID property.
+
+36
+00:02:10,000 --> 00:02:13,000
+But static fields are not connected with objects.
+
+37
+00:02:14,000 --> 00:02:15,000
+They are connected with the class.
+
+38
+00:02:16,000 --> 00:02:21,000
+That's why each object knows about class properties and when I call, get the counter method for the
+
+39
+00:02:21,000 --> 00:02:24,000
+second user and get counter message for the first user.
+
+40
+00:02:24,000 --> 00:02:26,000
+I receive the value of the same variable.
+
+41
+00:02:27,000 --> 00:02:27,000
+That's more.
+
+42
+00:02:28,000 --> 00:02:34,000
+Imagine that our user has a child class employee, both user and employee have static method with the
+
+43
+00:02:34,000 --> 00:02:37,000
+same name do any static action.
+
+44
+00:02:37,000 --> 00:02:41,000
+The only difference is that console output is different here.
+
+45
+00:02:41,000 --> 00:02:45,000
+Print the user class name to console and here print the employee.
+
+46
+00:02:45,000 --> 00:02:52,000
+Now let's create object of employee type and let's call the static method what will be printed to console.
+
+47
+00:02:52,000 --> 00:02:58,000
+If you answer in that user class name will be printed to console then you are right why it works this
+
+48
+00:02:58,000 --> 00:02:58,000
+way.
+
+49
+00:02:58,000 --> 00:03:00,000
+This is called static binding.
+
+50
+00:03:00,000 --> 00:03:04,000
+The method which will be called is already known during the compilation time.
+
+51
+00:03:05,000 --> 00:03:11,000
+It is known because I call static method something what belongs to the class but not to the object.
+
+52
+00:03:11,000 --> 00:03:18,000
+That's why if I have a variable of type user here, static method of the type user will be invoked and
+
+53
+00:03:18,000 --> 00:03:23,000
+you see that the clips highlights for us, this method quote, it tells me that static methods shouldn't
+
+54
+00:03:23,000 --> 00:03:30,000
+be accessed in a different way in which we in different usually to access any static entities you use
+
+55
+00:03:30,000 --> 00:03:31,000
+class name.
+
+56
+00:03:31,000 --> 00:03:36,000
+I like this user class and after that you call any static method you wish.
+
+57
+00:03:36,000 --> 00:03:40,000
+Let's call static method of user type and employee type.
+
+58
+00:03:40,000 --> 00:03:46,000
+The example which we discussed in polymorphism when we have tried some method called Dynamic Bindon,
+
+59
+00:03:46,000 --> 00:03:52,000
+because the method which should be executed will be identified during the runtime based on the object
+
+60
+00:03:52,000 --> 00:03:54,000
+that will be behind the reference.
+
+61
+00:03:54,000 --> 00:03:59,000
+And I believe now you understood the dynamic binding is not possible with static methods.
+
+62
+00:03:59,000 --> 00:04:06,000
+You can't override static methods, static, often considered as a bad thing and object oriented programming
+
+63
+00:04:06,000 --> 00:04:13,000
+y because it violates such basic or p principle as polymorphism, it doesn't allow to override behavior,
+
+64
+00:04:13,000 --> 00:04:15,000
+which is the key for orby.
+
+65
+00:04:15,000 --> 00:04:21,000
+Also, during building of a class Iraqi, it is not recommended to have static methods and fields do
+
+66
+00:04:21,000 --> 00:04:28,000
+not get confused that multiple objects share in similar properties, also sometimes static behaviour
+
+67
+00:04:28,000 --> 00:04:30,000
+and static state harder to test.
+
+68
+00:04:30,000 --> 00:04:35,000
+But you will understand this later when we will learn how to write integration and unit tests.
+
+69
+00:04:35,000 --> 00:04:41,000
+Obviously you can use static methods in your code and you can find in the case that static methods are
+
+70
+00:04:41,000 --> 00:04:42,000
+pretty widespread thing.
+
+71
+00:04:43,000 --> 00:04:49,000
+But be prepared that when you will be on your workplace, your team won't be happy to see all static
+
+72
+00:04:49,000 --> 00:04:50,000
+methods in your code.
+
+73
+00:04:50,000 --> 00:04:56,000
+During this course, I will share with you architecture and design approach, which relies on the or
+
+74
+00:04:56,000 --> 00:04:59,000
+principles where static entities are not used.
+
+75
+00:05:00,000 --> 00:05:01,000
+But now you know what?
+
+76
+00:05:01,000 --> 00:05:02,000
+Static keywords.
+
+77
+00:05:02,000 --> 00:05:08,000
+Means knowing this, you can understand why constants have modified static and final, that is because
+
+78
+00:05:08,000 --> 00:05:14,000
+static means that this field exists in a single copy and final means that nobody can change the value
+
+79
+00:05:14,000 --> 00:05:17,000
+of this variable after this variable was declared.
+
+80
+00:05:17,000 --> 00:05:23,000
+So here you can see that I have the compilation error when I try to assign new value to the final variable.
+
+81
+00:05:24,000 --> 00:05:28,000
+I believe you remember a lot about final keywords from the lesson about polymorphism.
+
+82
+00:05:29,000 --> 00:05:32,000
+For now, you already understand why constants have static.
+
+83
+00:05:32,000 --> 00:05:38,000
+Final modifier will not discuss static initialization blocks in this lesson because we discussing the
+
+84
+00:05:38,000 --> 00:05:39,000
+inheritance topic.
+
+85
+00:05:39,000 --> 00:05:43,000
+When I showed you example of all the initialization of an object.
+
+86
+00:05:43,000 --> 00:05:44,000
+Feel free to check that lesson.
+
+87
+00:05:44,000 --> 00:05:50,000
+If you want to recall information about static initialization, luks the last but not the least thing
+
+88
+00:05:50,000 --> 00:05:50,000
+for today.
+
+89
+00:05:50,000 --> 00:05:53,000
+What I wanted to discuss with you is a static Kimber's.
+
+90
+00:05:53,000 --> 00:05:55,000
+It is pretty simple.
+
+91
+00:05:55,000 --> 00:05:57,000
+For example, do you remember our class?
+
+92
+00:05:57,000 --> 00:06:03,000
+It contains only static methods and to call any static method you need to write our race class name
+
+93
+00:06:03,000 --> 00:06:05,000
+and then call any method you would like.
+
+94
+00:06:06,000 --> 00:06:12,000
+But what if you don't want to write arrays every time you can import all static entities from a race
+
+95
+00:06:12,000 --> 00:06:12,000
+class?
+
+96
+00:06:13,000 --> 00:06:15,000
+How to do that on the top of your file?
+
+97
+00:06:15,000 --> 00:06:15,000
+Right.
+
+98
+00:06:15,000 --> 00:06:22,000
+This inpart, static java, which you are, is not an asterisk.
+
+99
+00:06:22,000 --> 00:06:29,000
+This symbol means that you want to import all static entities that exist in this class by saying all
+
+100
+00:06:29,000 --> 00:06:30,000
+I mean methods, fields.
+
+101
+00:06:30,000 --> 00:06:32,000
+That is what you will use.
+
+102
+00:06:32,000 --> 00:06:37,000
+And now you can call, for example, source method without writing our class name.
+
+103
+00:06:38,000 --> 00:06:40,000
+It looks like that it according to our agenda.
+
+104
+00:06:40,000 --> 00:06:42,000
+Let's recap what we have learned today.
+
+105
+00:06:43,000 --> 00:06:47,000
+Today we learned how static keyboard works with fields and methods.
+
+106
+00:06:47,000 --> 00:06:50,000
+We discuss what is static and dynamic binding.
+
+107
+00:06:50,000 --> 00:06:56,000
+And now you know why static considered to be a bad thing in or B hope you understood how to declare
+
+108
+00:06:56,000 --> 00:06:57,000
+your own constants variables.
+
+109
+00:06:58,000 --> 00:07:01,000
+Also, you learned how to improve static in your Java file.
+
+110
+00:07:02,000 --> 00:07:06,000
+That's said thank you for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/007 Source-code-Demo.url b/13 - Object-oriented programming/007 Source-code-Demo.url
new file mode 100644
index 0000000000000000000000000000000000000000..1487931c980bbaeaf28b1f1d0ea749c0961c0cd3
--- /dev/null
+++ b/13 - Object-oriented programming/007 Source-code-Demo.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/staticdemo/Demo.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/007 Source-code-Employee.url b/13 - Object-oriented programming/007 Source-code-Employee.url
new file mode 100644
index 0000000000000000000000000000000000000000..160f2c5ba808d9e8558c7f52d54ba28f86f9f4bd
--- /dev/null
+++ b/13 - Object-oriented programming/007 Source-code-Employee.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/staticdemo/Employee.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/007 Source-code-User.url b/13 - Object-oriented programming/007 Source-code-User.url
new file mode 100644
index 0000000000000000000000000000000000000000..3f8a2e9ac238ea7f72b7dcef93a88604b59003b2
--- /dev/null
+++ b/13 - Object-oriented programming/007 Source-code-User.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/staticdemo/User.java
\ No newline at end of file
diff --git a/13 - Object-oriented programming/008 Encapsulation_en.srt b/13 - Object-oriented programming/008 Encapsulation_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..bacd3d301b5b307036ab632d4a2094bfebdaaf74
--- /dev/null
+++ b/13 - Object-oriented programming/008 Encapsulation_en.srt
@@ -0,0 +1,384 @@
+1
+00:00:05,000 --> 00:00:11,000
+Hello, dear students, in this lesson, we'll talk about encapsulation and we'll learn what is the
+
+2
+00:00:11,000 --> 00:00:15,000
+role of encapsulation principle in the object oriented programming.
+
+3
+00:00:15,000 --> 00:00:17,000
+In this lesson, we'll talk with you.
+
+4
+00:00:17,000 --> 00:00:22,000
+Why do we need encapsulation and how we can implement encapsulation in our programs?
+
+5
+00:00:22,000 --> 00:00:28,000
+We'll learn with your access modifiers and on real court examples, I will show you how you can use
+
+6
+00:00:28,000 --> 00:00:28,000
+them.
+
+7
+00:00:28,000 --> 00:00:34,000
+I will share with you my practical experience when to use which modifier and will learn the rules which
+
+8
+00:00:34,000 --> 00:00:36,000
+we need to follow during overwriting.
+
+9
+00:00:36,000 --> 00:00:40,000
+So let's jump to examples to understand this topic better.
+
+10
+00:00:41,000 --> 00:00:42,000
+What is an observation?
+
+11
+00:00:43,000 --> 00:00:48,000
+Encapsulation is a principle that teaches us to group data and behavior those our fields and methods
+
+12
+00:00:49,000 --> 00:00:49,000
+together.
+
+13
+00:00:49,000 --> 00:00:56,000
+As a single unit, we can control access to interfaces, classes, fields, methods to control access.
+
+14
+00:00:56,000 --> 00:00:58,000
+We have four main access modifiers.
+
+15
+00:00:59,000 --> 00:01:04,000
+They are public protected package, private or default private.
+
+16
+00:01:05,000 --> 00:01:10,000
+Let's start one by one to understand the difference on the specific examples, to not show you how access
+
+17
+00:01:10,000 --> 00:01:13,000
+modifiers work with classes, fields and methods.
+
+18
+00:01:13,000 --> 00:01:19,000
+Separately, I will show you how Access Modifier works with methods, because these modifiers control
+
+19
+00:01:19,000 --> 00:01:25,000
+access to elements and the way how they work are similar, no matter whether you're trying to get access
+
+20
+00:01:25,000 --> 00:01:26,000
+for field or method.
+
+21
+00:01:27,000 --> 00:01:34,000
+OK, so imagine we have some class, let's call it Class A. And inside this class we have the method
+
+22
+00:01:34,000 --> 00:01:35,000
+with public access modifier.
+
+23
+00:01:36,000 --> 00:01:39,000
+That means you can access it from any point of your program.
+
+24
+00:01:39,000 --> 00:01:44,000
+For example, here you can see them a class which is outside of our package.
+
+25
+00:01:44,000 --> 00:01:44,000
+No.
+
+26
+00:01:44,000 --> 00:01:49,000
+One, I can create the instance of Class A and call the public method on it.
+
+27
+00:01:50,000 --> 00:01:53,000
+Now imagine I have protected MassArt.
+
+28
+00:01:53,000 --> 00:01:57,000
+Do something to will I be able to call it from them a class?
+
+29
+00:01:57,000 --> 00:02:04,000
+Unfortunately, no way, because I can get access to protected entities only inside the same package
+
+30
+00:02:04,000 --> 00:02:06,000
+or in a child class.
+
+31
+00:02:06,000 --> 00:02:12,000
+If only I had them a class inside the package, no one I would be able to call method to do something
+
+32
+00:02:12,000 --> 00:02:14,000
+to see here.
+
+33
+00:02:15,000 --> 00:02:19,000
+I can call this method when demo class is in the same package with class A.
+
+34
+00:02:20,000 --> 00:02:28,000
+Also here I have a class of the class A, package number two and inside the do something class B I can
+
+35
+00:02:28,000 --> 00:02:29,000
+call protective measures.
+
+36
+00:02:29,000 --> 00:02:30,000
+Do something too.
+
+37
+00:02:30,000 --> 00:02:37,000
+So now you understand that I can access protected entities in case they're in the same package or in
+
+38
+00:02:37,000 --> 00:02:38,000
+child classes.
+
+39
+00:02:39,000 --> 00:02:41,000
+Our next modifier is package private.
+
+40
+00:02:42,000 --> 00:02:43,000
+You can see that do something.
+
+41
+00:02:43,000 --> 00:02:47,000
+Class B doesn't have any access modifier specified.
+
+42
+00:02:47,000 --> 00:02:48,000
+That is not true.
+
+43
+00:02:49,000 --> 00:02:54,000
+When we don't specify access modifiers, that means that access to this entity is a default.
+
+44
+00:02:55,000 --> 00:02:58,000
+So usually absence of any keywords are associated with access.
+
+45
+00:02:58,000 --> 00:03:02,000
+Modifier is called package primary or just default access.
+
+46
+00:03:02,000 --> 00:03:04,000
+So let me get back to them.
+
+47
+00:03:04,000 --> 00:03:10,000
+A class and package number one in scope of this package, I will create the object of the Class B type.
+
+48
+00:03:10,000 --> 00:03:17,000
+And on this object I call do something Class B method and you see that I have a compilation error.
+
+49
+00:03:17,000 --> 00:03:24,000
+But if I create object of Class B type inside the package number two and call the same method, it is
+
+50
+00:03:24,000 --> 00:03:28,000
+possible because default access is only within the same package.
+
+51
+00:03:29,000 --> 00:03:33,000
+Take into account this demo class and Class B in the same package.
+
+52
+00:03:33,000 --> 00:03:39,000
+We don't have compilation error and last but not least, modifier is private modifier.
+
+53
+00:03:39,000 --> 00:03:41,000
+Everything is easy here.
+
+54
+00:03:41,000 --> 00:03:44,000
+You can access private entities only in scope.
+
+55
+00:03:44,000 --> 00:03:49,000
+When it was declared, for example, I have private method declared in this class and I can call this
+
+56
+00:03:49,000 --> 00:03:56,000
+private method wherever I want in this class, but I can't call this method outside of the class, even
+
+57
+00:03:56,000 --> 00:03:58,000
+in the same package.
+
+58
+00:03:58,000 --> 00:04:01,000
+If I will try to do so, I see compilation error.
+
+59
+00:04:02,000 --> 00:04:05,000
+So now you understand the difference between modifiers.
+
+60
+00:04:05,000 --> 00:04:11,000
+I believe you understood that encapsulation in all AP language can be implemented with the help of access
+
+61
+00:04:11,000 --> 00:04:14,000
+modifiers and you know how they work.
+
+62
+00:04:15,000 --> 00:04:19,000
+Knowing this during the planning of architecture, you can choose access modifier, which works the
+
+63
+00:04:19,000 --> 00:04:20,000
+best for you.
+
+64
+00:04:21,000 --> 00:04:27,000
+I want to share with you, which modifies you will use most of the times in 99 percent of cases you
+
+65
+00:04:27,000 --> 00:04:29,000
+will use is a private or public.
+
+66
+00:04:29,000 --> 00:04:35,000
+This is because you may have very few business cases when you want to keep something visible only in
+
+67
+00:04:35,000 --> 00:04:39,000
+scope of the package or only in scope of the package and child class.
+
+68
+00:04:40,000 --> 00:04:44,000
+Most likely you will implement interfaces and would like to keep the behavior public.
+
+69
+00:04:45,000 --> 00:04:50,000
+Sometimes you will have methods which are needed only for this class and you will keep them private.
+
+70
+00:04:50,000 --> 00:04:56,000
+Usually all fields have the private access modifier because you want to control interaction with your
+
+71
+00:04:56,000 --> 00:04:57,000
+object.
+
+72
+00:04:57,000 --> 00:05:03,000
+So now you understand that default and protected modifiers are not used very often.
+
+73
+00:05:04,000 --> 00:05:09,000
+And last thing for the day, which I wanted to discuss with you, is the rules for access modifiers
+
+74
+00:05:09,000 --> 00:05:09,000
+during that method.
+
+75
+00:05:09,000 --> 00:05:12,000
+Overriding the rule is simple.
+
+76
+00:05:12,000 --> 00:05:17,000
+When you override the method, you can't reduce the visibility of the inherited method.
+
+77
+00:05:17,000 --> 00:05:21,000
+For example, in class a way of do something method.
+
+78
+00:05:21,000 --> 00:05:27,000
+Class B extends class A and class C extends class B, is that clear?
+
+79
+00:05:27,000 --> 00:05:35,000
+And now I want to do something method and I override it was protected to modify it just to recall it
+
+80
+00:05:35,000 --> 00:05:37,000
+was public and parent class.
+
+81
+00:05:37,000 --> 00:05:43,000
+And I have a compilation error here because we can't narrow access.
+
+82
+00:05:43,000 --> 00:05:46,000
+On the other hand, in Class B, do something.
+
+83
+00:05:46,000 --> 00:05:49,000
+Class B method has default access modifier.
+
+84
+00:05:49,000 --> 00:05:50,000
+I can increase access level.
+
+85
+00:05:53,000 --> 00:05:59,000
+And you can see here that I overwrite my head with public modifier and there is no compilation error
+
+86
+00:05:59,000 --> 00:06:03,000
+because you can extend access now, that's it.
+
+87
+00:06:04,000 --> 00:06:06,000
+Now, let's recall what we have learned today.
+
+88
+00:06:07,000 --> 00:06:09,000
+Today, we learned what an encapsulation is.
+
+89
+00:06:09,000 --> 00:06:13,000
+We know that access modifiers can help us to implement encapsulation.
+
+90
+00:06:13,000 --> 00:06:20,000
+Principle in our code also will learn the difference between public protected default and private access
+
+91
+00:06:20,000 --> 00:06:21,000
+modifiers.
+
+92
+00:06:21,000 --> 00:06:27,000
+We discussed which modifiers developers use more often, and we saw specific rules which we need to
+
+93
+00:06:27,000 --> 00:06:29,000
+follow during override.
+
+94
+00:06:29,000 --> 00:06:32,000
+And that's all what I had in my agenda for today.
+
+95
+00:06:32,000 --> 00:06:34,000
+Thanks a lot for your attention.
+
+96
+00:06:34,000 --> 00:06:35,000
+And see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/008 Source-code-All-examples-from-the-lecture.url b/13 - Object-oriented programming/008 Source-code-All-examples-from-the-lecture.url
new file mode 100644
index 0000000000000000000000000000000000000000..2041716b7d9bebf02e9f6c2025ae0347fec5c1b2
--- /dev/null
+++ b/13 - Object-oriented programming/008 Source-code-All-examples-from-the-lecture.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/encapsulation
\ No newline at end of file
diff --git a/13 - Object-oriented programming/009 Object, JNI and Object class overview_en.srt b/13 - Object-oriented programming/009 Object, JNI and Object class overview_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..12cf79179c8788c3fedd32d3a622b8f66fae94a7
--- /dev/null
+++ b/13 - Object-oriented programming/009 Object, JNI and Object class overview_en.srt
@@ -0,0 +1,532 @@
+1
+00:00:06,000 --> 00:00:11,000
+Hello, dissidents, today we have a very important topic that they will discuss with you what object
+
+2
+00:00:11,000 --> 00:00:13,000
+this will review object class.
+
+3
+00:00:13,000 --> 00:00:19,000
+We are going to discuss what methods object class has this really important for us because each class
+
+4
+00:00:19,000 --> 00:00:21,000
+in Java implicitly extends object.
+
+5
+00:00:21,000 --> 00:00:23,000
+Class will join with you today.
+
+6
+00:00:23,000 --> 00:00:26,000
+What is Jeani and Nucleate Native?
+
+7
+00:00:26,000 --> 00:00:28,000
+So let's us look at the source code.
+
+8
+00:00:28,000 --> 00:00:32,000
+Learn the source code is the best way to learn any programming language.
+
+9
+00:00:33,000 --> 00:00:36,000
+So you already know that everything in Java is an object.
+
+10
+00:00:36,000 --> 00:00:43,000
+Object is a virtual entity that has its own behavior and state which can distinguish it from other objects.
+
+11
+00:00:43,000 --> 00:00:47,000
+That means each object will inherit methods of object class.
+
+12
+00:00:47,000 --> 00:00:54,000
+Our goal in this lesson to review these methods and to understand what therefore you can press control
+
+13
+00:00:54,000 --> 00:01:00,000
+plus shift pastie to search for any specific type, I'd like to open source code of the object class.
+
+14
+00:01:00,000 --> 00:01:06,000
+Now this class is from Java Lank package and you remember the Java land packages interested in each
+
+15
+00:01:06,000 --> 00:01:08,000
+Java file by default.
+
+16
+00:01:08,000 --> 00:01:13,000
+So you never have to import object class into Java files.
+
+17
+00:01:13,000 --> 00:01:18,000
+First of all, you can find a new keyword native to understand what is it?
+
+18
+00:01:18,000 --> 00:01:21,000
+Let's discuss with you what Jeani stands for.
+
+19
+00:01:21,000 --> 00:01:28,000
+Java Native Interface is a foreign function interface programming framework that enables Java code running
+
+20
+00:01:28,000 --> 00:01:34,000
+in Java Virtual Machine to call and be called by native applications and libraries written in other
+
+21
+00:01:34,000 --> 00:01:37,000
+languages such as C or C++.
+
+22
+00:01:38,000 --> 00:01:45,000
+To simplify this, you can see native keyword with the methods that are written on C or C++ language.
+
+23
+00:01:45,000 --> 00:01:48,000
+Native keyword can be used only with methods.
+
+24
+00:01:48,000 --> 00:01:51,000
+Sure, you see native method registered natives.
+
+25
+00:01:52,000 --> 00:01:55,000
+You need to register all native functions.
+
+26
+00:01:55,000 --> 00:02:01,000
+You see that you have static in your blog, which executes only once during your program execution.
+
+27
+00:02:01,000 --> 00:02:05,000
+This static unit block calls register native method.
+
+28
+00:02:05,000 --> 00:02:09,000
+This method has a private modifier so you will never use it.
+
+29
+00:02:09,000 --> 00:02:13,000
+Let's focus our attention on the public interface of that class object.
+
+30
+00:02:14,000 --> 00:02:16,000
+Here is the default constructor.
+
+31
+00:02:16,000 --> 00:02:17,000
+Nothing special.
+
+32
+00:02:17,000 --> 00:02:25,000
+Here's a good class method and you can notice that it also native so each object can return us its class.
+
+33
+00:02:26,000 --> 00:02:30,000
+Class is a separate type which will learn in detail during the lesson about reflection.
+
+34
+00:02:31,000 --> 00:02:38,000
+In short, this is Stack which describes objects of a class type, so each class during the runtime
+
+35
+00:02:38,000 --> 00:02:45,000
+has an object associated with it and the class object knows all about fields, methods, annotations,
+
+36
+00:02:45,000 --> 00:02:47,000
+constructors, everything.
+
+37
+00:02:47,000 --> 00:02:51,000
+You can invoke methods on objects using getters.
+
+38
+00:02:51,000 --> 00:02:53,000
+You can get whatever you need.
+
+39
+00:02:53,000 --> 00:02:58,000
+For example, here's a getter that returns array of fields declared in the class.
+
+40
+00:02:58,000 --> 00:02:59,000
+But let's not switch.
+
+41
+00:02:59,000 --> 00:03:04,000
+The topic will return this class in detail later in our course.
+
+42
+00:03:04,000 --> 00:03:08,000
+What else do we have in our object class Hedgcock method?
+
+43
+00:03:09,000 --> 00:03:14,000
+A hash code is an integer value that is associated with each object in Java.
+
+44
+00:03:14,000 --> 00:03:20,000
+Its main purpose is to facilitate hash in hash tables, which are used by data structures like hash
+
+45
+00:03:20,000 --> 00:03:26,000
+map really learn how to override this method and how to use it when done with your Java collections
+
+46
+00:03:26,000 --> 00:03:27,000
+framework.
+
+47
+00:03:27,000 --> 00:03:34,000
+Because as I already mentioned, we can benefit from this method when we use collections equals method
+
+48
+00:03:34,000 --> 00:03:40,000
+will tell you if the current object is equal to another object or no, it returns only true or false.
+
+49
+00:03:41,000 --> 00:03:43,000
+And you see that by the fall, this matter.
+
+50
+00:03:43,000 --> 00:03:44,000
+Check the references.
+
+51
+00:03:45,000 --> 00:03:52,000
+So in case we need to be able to check equality of our objects in our classes, we have to override
+
+52
+00:03:52,000 --> 00:03:52,000
+this method.
+
+53
+00:03:53,000 --> 00:03:58,000
+When we will override this method, will check the state of each field to make sure that this is not
+
+54
+00:03:58,000 --> 00:04:01,000
+the same object like we do when we compare references.
+
+55
+00:04:02,000 --> 00:04:06,000
+But to say that this object is logically equal to the one in method argument.
+
+56
+00:04:07,000 --> 00:04:14,000
+For example, you have Mercedes s class and your friend has Mercedes has class, most of them have the
+
+57
+00:04:14,000 --> 00:04:19,000
+same color, the same engine displacement, the same color of laser.
+
+58
+00:04:19,000 --> 00:04:20,000
+Inside the car.
+
+59
+00:04:20,000 --> 00:04:28,000
+You have two cars, but do they equal they're still two separate cars, but they are logically equal
+
+60
+00:04:28,000 --> 00:04:29,000
+to each other.
+
+61
+00:04:29,000 --> 00:04:34,000
+That's why sometimes we need to override the equals method in our court.
+
+62
+00:04:35,000 --> 00:04:38,000
+How to override the equals method will be covered in the separate lesson.
+
+63
+00:04:39,000 --> 00:04:42,000
+Now let's briefly discuss Klown method.
+
+64
+00:04:42,000 --> 00:04:47,000
+The goal of this method is to create new object on the basis of already existed one.
+
+65
+00:04:47,000 --> 00:04:54,000
+But what you need to remember is that there is a deep and shallow cloning clone method by default,
+
+66
+00:04:54,000 --> 00:04:55,000
+thus shallow cloning.
+
+67
+00:04:55,000 --> 00:04:56,000
+What does that mean?
+
+68
+00:04:57,000 --> 00:05:00,000
+That means that all references are copied.
+
+69
+00:05:00,000 --> 00:05:04,000
+It doesn't cause a problem when we clone fields of primitive types.
+
+70
+00:05:04,000 --> 00:05:11,000
+But this does cause problems when we are cloning reference types because only references are cloned
+
+71
+00:05:11,000 --> 00:05:18,000
+by the true objects behind those references are not cloned to clones at all fields of the objects we
+
+72
+00:05:18,000 --> 00:05:22,000
+need to override clone method and to implement deep cloning.
+
+73
+00:05:22,000 --> 00:05:28,000
+What I would recommend us to do right now is to keep overview of the object methods and we'll have separate
+
+74
+00:05:28,000 --> 00:05:32,000
+lessons to learn how to overwrite clone method to support the cloning.
+
+75
+00:05:33,000 --> 00:05:37,000
+Also, pay attention to this method has protected access modifier.
+
+76
+00:05:37,000 --> 00:05:40,000
+I believe you are already aware how the string method works.
+
+77
+00:05:40,000 --> 00:05:43,000
+This method returns string representation of the object.
+
+78
+00:05:43,000 --> 00:05:46,000
+Probably in your production code.
+
+79
+00:05:46,000 --> 00:05:51,000
+You want to use this method very often, but you are going to use it very often during your learning
+
+80
+00:05:51,000 --> 00:05:53,000
+process for debugging purposes.
+
+81
+00:05:53,000 --> 00:05:58,000
+Often you would like to print the object, to consult, to check its state, or to interact with your
+
+82
+00:05:58,000 --> 00:06:02,000
+user in console applications by default.
+
+83
+00:06:02,000 --> 00:06:08,000
+To string method creates a string which comprises of class name at sine and hexadecimal representation
+
+84
+00:06:08,000 --> 00:06:09,000
+of the hash code.
+
+85
+00:06:09,000 --> 00:06:13,000
+We already understand that we can easily override this method in our classes.
+
+86
+00:06:14,000 --> 00:06:17,000
+Usually we want to bring state of the object in the console.
+
+87
+00:06:18,000 --> 00:06:24,000
+Probably you remember that in one of our lessons we review source code of the card class and the string
+
+88
+00:06:24,000 --> 00:06:26,000
+method was overridden there.
+
+89
+00:06:27,000 --> 00:06:33,000
+You can see here that we used the fields to bring their values to console, to not override this method
+
+90
+00:06:33,000 --> 00:06:34,000
+by yourself.
+
+91
+00:06:34,000 --> 00:06:36,000
+You can ask Leap's to generate this method for you.
+
+92
+00:06:37,000 --> 00:06:41,000
+Just press old plus shift plus s and select generate the string method.
+
+93
+00:06:42,000 --> 00:06:46,000
+You will be able to specify fields which you want to use in your to string method.
+
+94
+00:06:47,000 --> 00:06:54,000
+The next method, identifying the all over overloaded wait method and methods to control interaction
+
+95
+00:06:54,000 --> 00:06:54,000
+with objects.
+
+96
+00:06:54,000 --> 00:06:59,000
+Monitor this topic is closely connected with multi topic.
+
+97
+00:06:59,000 --> 00:07:05,000
+To explain how this method works, I need to explain first what Monteith's readiness and how synchronization
+
+98
+00:07:05,000 --> 00:07:07,000
+of multiple threads happens.
+
+99
+00:07:07,000 --> 00:07:10,000
+That's why I suggest to park this question.
+
+100
+00:07:10,000 --> 00:07:15,000
+Promise you to give details overview of these methods during mulches writing topic.
+
+101
+00:07:15,000 --> 00:07:21,000
+For now, you can learn that each object in Java has special methods to control interaction with objects.
+
+102
+00:07:21,000 --> 00:07:21,000
+Monitor.
+
+103
+00:07:22,000 --> 00:07:27,000
+And the last method, which I would like to mention today, is finalized, originally this method was
+
+104
+00:07:27,000 --> 00:07:33,000
+created to serve as a distracter method, special message, which always will be invoked during the
+
+105
+00:07:33,000 --> 00:07:35,000
+object destruction in Java.
+
+106
+00:07:35,000 --> 00:07:41,000
+We have automated memory management and one of the tools which ensure efficient memory management is
+
+107
+00:07:41,000 --> 00:07:42,000
+the garbage collector.
+
+108
+00:07:43,000 --> 00:07:48,000
+We are going to have separate lessons regarding garbage collector, but in short, this tool removes
+
+109
+00:07:48,000 --> 00:07:52,000
+from heap objects that don't have strong references in the program anymore.
+
+110
+00:07:53,000 --> 00:07:59,000
+You know that objects are stored in the heat of memory and it is not endless, that means that time
+
+111
+00:07:59,000 --> 00:08:01,000
+to time we have to remove objects.
+
+112
+00:08:01,000 --> 00:08:08,000
+And when a garbage collector removes objects from the memory, finalized method is invoked that was
+
+113
+00:08:08,000 --> 00:08:14,000
+needed to perform critical and important actions like resource closure or something else before objects
+
+114
+00:08:14,000 --> 00:08:15,000
+will be completely destroyed.
+
+115
+00:08:16,000 --> 00:08:20,000
+It also has to modifier and can be overridden in the class.
+
+116
+00:08:20,000 --> 00:08:25,000
+But another important thing you need to know about this method is that it is deprecated.
+
+117
+00:08:26,000 --> 00:08:32,000
+It is marked as deprecated because finalization mechanism is problematic and in some specific cases
+
+118
+00:08:32,000 --> 00:08:34,000
+can lead to memory leaks and deadlocks.
+
+119
+00:08:35,000 --> 00:08:38,000
+That's why it is not recommended to use this method anymore.
+
+120
+00:08:39,000 --> 00:08:45,000
+In Java, a lot of deprecated methods are not removed just to ensure a backwards compatibility to make
+
+121
+00:08:45,000 --> 00:08:50,000
+sure that application, which was written with Java version first, will be successfully executed on
+
+122
+00:08:50,000 --> 00:08:52,000
+Java version 14 and later.
+
+123
+00:08:53,000 --> 00:08:57,000
+But this annotation means that this method should no longer be used.
+
+124
+00:08:57,000 --> 00:09:00,000
+It looks like we reviewed all methods from the object class.
+
+125
+00:09:01,000 --> 00:09:03,000
+Let's recall what we have learned today.
+
+126
+00:09:04,000 --> 00:09:04,000
+Today, billions.
+
+127
+00:09:04,000 --> 00:09:07,000
+What is the object and what is the object class with it?
+
+128
+00:09:07,000 --> 00:09:12,000
+Overview of all methods which exist in the object class and which are present in each object.
+
+129
+00:09:13,000 --> 00:09:20,000
+You learn new keyword, native keyword and you know what it is for today we discussed what Jeani is
+
+130
+00:09:21,000 --> 00:09:24,000
+really one that we can easily overwrite methods in our class.
+
+131
+00:09:25,000 --> 00:09:28,000
+Also, we discussed what does deprecated annotation mean.
+
+132
+00:09:29,000 --> 00:09:31,000
+That's all what I have for you for today.
+
+133
+00:09:31,000 --> 00:09:34,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/010 Quiz Object-oriented programming - Check yourself.html b/13 - Object-oriented programming/010 Quiz Object-oriented programming - Check yourself.html
new file mode 100644
index 0000000000000000000000000000000000000000..03ed58217e75be37c18ccab8da003bbe24a1fce0
--- /dev/null
+++ b/13 - Object-oriented programming/010 Quiz Object-oriented programming - Check yourself.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+ Quiz Object-oriented programming - Check yourself
+
+
+
+
+
+
+
Quiz Object-oriented programming - Check yourself
+
Quiz Link: https://forms.gle/NZmCGDrFk2hfCQLs5
The quiz doesn’t require you to log in or submit any personal information. Your data privacy is my priority.
The Quiz covers content from the following lessons:
Object-Oriented Programming: Basics
Classes & Objects
Different types of Classes, Abstract keyword and Abstract classes
Interfaces
Inheritance
Polymorphism
Static in Java - ‘static’ keyword
Encapsulation
Object, JNI and Object class overview
Quiz Instructions:
This quiz is designed to help you check your understanding of the content from the previous lessons. All questions are based only on material covered in the lessons you've already watched, so there’s no need to worry about unfamiliar topics.
Each question has one correct answer. Select the best answer and click "Submit" when you're ready.
After submitting, you'll see your score. For each question, you earn 1 point.
Click "View Results" to see the explanations for each correct answer. Reviewing these explanations can help reinforce your understanding.
If you score below 70%, I recommend revisiting the previous lessons. However, if the explanations make sense and you’re confident in your understanding, feel free to move on.
If any explanations are unclear, please don’t hesitate to post questions in the Q&A section—I’m here to help!
+
+
+
+
diff --git a/13 - Object-oriented programming/011 SOLID principles overview & Single Responsibility Principle_en.srt b/13 - Object-oriented programming/011 SOLID principles overview & Single Responsibility Principle_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..00a02d9c6c8d84e1d1ea6c5c1297c94e9f5b6e59
--- /dev/null
+++ b/13 - Object-oriented programming/011 SOLID principles overview & Single Responsibility Principle_en.srt
@@ -0,0 +1,428 @@
+1
+00:00:05,000 --> 00:00:11,000
+Hello, dear students, in this lesson, will reviews use a court design principles for object oriented
+
+2
+00:00:11,000 --> 00:00:12,000
+programming?
+
+3
+00:00:12,000 --> 00:00:15,000
+Today, we'll talk with you what solid principles are about.
+
+4
+00:00:15,000 --> 00:00:20,000
+I will tell you why they're so important for object oriented programming.
+
+5
+00:00:20,000 --> 00:00:24,000
+And also in this lesson, we'll discuss with you the first principal?
+
+6
+00:00:24,000 --> 00:00:27,000
+S single responsibility principle.
+
+7
+00:00:27,000 --> 00:00:31,000
+Let's start, first of all, let's understand what Soulet is.
+
+8
+00:00:32,000 --> 00:00:37,000
+So it is a mnemonic acronym for five design principles, which are widely used in the object oriented
+
+9
+00:00:37,000 --> 00:00:38,000
+programming.
+
+10
+00:00:39,000 --> 00:00:45,000
+The Theory of Solid Principles was introduced by Robert Martin in paper design principles and design
+
+11
+00:00:45,000 --> 00:00:45,000
+patterns.
+
+12
+00:00:46,000 --> 00:00:52,000
+You will hear a lot about Robert Martin, who is also known as Uncle Bob, his outstanding contribution
+
+13
+00:00:52,000 --> 00:00:56,000
+to the software, architecture and design principles is hard to ignore.
+
+14
+00:00:56,000 --> 00:01:00,000
+Secondly, let's understand why do we need to follow these principles?
+
+15
+00:01:00,000 --> 00:01:01,000
+What we can benefit from them?
+
+16
+00:01:02,000 --> 00:01:07,000
+These principles intended to make software design more understandable, flexible, maintainable and
+
+17
+00:01:07,000 --> 00:01:08,000
+scalable.
+
+18
+00:01:09,000 --> 00:01:14,000
+Following the simple rules, you will create better code that is easy to maintain and support.
+
+19
+00:01:14,000 --> 00:01:21,000
+Now let's understand what principles are included in solid s stands for single responsibility principle.
+
+20
+00:01:21,000 --> 00:01:23,000
+This is the one we are going to discuss today.
+
+21
+00:01:24,000 --> 00:01:27,000
+O stands for open closed principle.
+
+22
+00:01:27,000 --> 00:01:30,000
+L is about risk of substitution principle.
+
+23
+00:01:31,000 --> 00:01:37,000
+I is for interface aggregation principle and G stands for dependency on Russian principle.
+
+24
+00:01:38,000 --> 00:01:42,000
+These are key principles which we are going to learn with real code examples.
+
+25
+00:01:42,000 --> 00:01:46,000
+You can apply solid principles in any object oriented programming language.
+
+26
+00:01:46,000 --> 00:01:48,000
+So let's start from the first one.
+
+27
+00:01:48,000 --> 00:01:50,000
+Single responsibility principle.
+
+28
+00:01:51,000 --> 00:01:56,000
+Single Responsibility Principle claims that it is only one reason to change class.
+
+29
+00:01:56,000 --> 00:02:02,000
+That means in case you have at least two reasons to change for class, we have to split the existing
+
+30
+00:02:02,000 --> 00:02:05,000
+functionality of current class into two classes.
+
+31
+00:02:06,000 --> 00:02:12,000
+Each class is designed to serve the one single goal, and in case we want to adjust the way how it works
+
+32
+00:02:12,000 --> 00:02:18,000
+will adjust one single class in case our class has multiple responsibilities.
+
+33
+00:02:18,000 --> 00:02:23,000
+One change can impact the way how other functionality is working within the same class.
+
+34
+00:02:23,000 --> 00:02:24,000
+Why do we need this?
+
+35
+00:02:25,000 --> 00:02:27,000
+The idea behind this principle is simple.
+
+36
+00:02:27,000 --> 00:02:31,000
+Focusing on a single concern makes class more robust.
+
+37
+00:02:31,000 --> 00:02:36,000
+Let's get a deep dive in the principal before we'll take a look at the source code.
+
+38
+00:02:36,000 --> 00:02:38,000
+Let's answer first simple question.
+
+39
+00:02:38,000 --> 00:02:40,000
+What size of the class is optimal?
+
+40
+00:02:41,000 --> 00:02:46,000
+The answer is that the class has to be small, the same as all functions.
+
+41
+00:02:47,000 --> 00:02:50,000
+Imagine you have to describe behavior of the class in one sentence.
+
+42
+00:02:51,000 --> 00:02:53,000
+That is how small class should be.
+
+43
+00:02:53,000 --> 00:02:59,000
+So one of the key words and single responsibility principle is responsibility.
+
+44
+00:03:00,000 --> 00:03:00,000
+What does it mean?
+
+45
+00:03:01,000 --> 00:03:04,000
+We discussed that according to words of unkillable.
+
+46
+00:03:04,000 --> 00:03:07,000
+That means that the class should have only one reason for change.
+
+47
+00:03:08,000 --> 00:03:12,000
+OK, but what is the reason for change?
+
+48
+00:03:12,000 --> 00:03:18,000
+Imagine that we need to adjust the logic of discount calculation in our system, and to change this
+
+49
+00:03:18,000 --> 00:03:23,000
+we need to adjust three classes, discount service, cart and order.
+
+50
+00:03:23,000 --> 00:03:28,000
+And now we understand that we also need to adjust the logic of how tax is calculated.
+
+51
+00:03:29,000 --> 00:03:32,000
+And to adjust this logic, we need to change cart and user classes.
+
+52
+00:03:33,000 --> 00:03:36,000
+Here's violation of the single responsibility principle.
+
+53
+00:03:36,000 --> 00:03:42,000
+We are going to change cart when we want to adjust the logic of discount calculation and logic of tax
+
+54
+00:03:42,000 --> 00:03:43,000
+calculation.
+
+55
+00:03:43,000 --> 00:03:45,000
+That is a sign of principle violation.
+
+56
+00:03:46,000 --> 00:03:53,000
+That means car class should be split probably when a tax service class learn.
+
+57
+00:03:53,000 --> 00:03:57,000
+In this example, let's try to describe what responsibility is.
+
+58
+00:03:57,000 --> 00:04:01,000
+Responsibility is a group of actions that serves a particular goal.
+
+59
+00:04:02,000 --> 00:04:08,000
+Now let's take a look at a very simplified quote, example to understand single responsibility principle,
+
+60
+00:04:08,000 --> 00:04:11,000
+better imagine that we have a mailbox set in service.
+
+61
+00:04:11,000 --> 00:04:15,000
+The goal of this class to provide an interface to change mailbox settings.
+
+62
+00:04:16,000 --> 00:04:20,000
+One of the methods helps to change secondary mail in user's mailbox.
+
+63
+00:04:21,000 --> 00:04:22,000
+Here's our client code.
+
+64
+00:04:22,000 --> 00:04:26,000
+I have instance of the user, an instance of the mailbox set in service.
+
+65
+00:04:27,000 --> 00:04:33,000
+I can call change secondary mail and pass to this method user and use secondary mail as method arguments.
+
+66
+00:04:34,000 --> 00:04:35,000
+And that's fine.
+
+67
+00:04:36,000 --> 00:04:37,000
+Inside change.
+
+68
+00:04:37,000 --> 00:04:44,000
+Secondary mail method I call has access method to verify if user has enough access and rights to change
+
+69
+00:04:44,000 --> 00:04:45,000
+secondary email.
+
+70
+00:04:45,000 --> 00:04:49,000
+If user has role admin, then this method returns.
+
+71
+00:04:49,000 --> 00:04:51,000
+True, and we can proceed with change in email.
+
+72
+00:04:52,000 --> 00:04:53,000
+This is not OK.
+
+73
+00:04:53,000 --> 00:04:54,000
+Why?
+
+74
+00:04:54,000 --> 00:04:58,000
+Because I declare it public interface for access verification.
+
+75
+00:04:58,000 --> 00:04:59,000
+That means that everyone.
+
+76
+00:05:00,000 --> 00:05:06,000
+And use mailbox service for user rights verification, for example, like you see here, people may
+
+77
+00:05:06,000 --> 00:05:10,000
+start to use this method to provide necessary access for money transfer.
+
+78
+00:05:11,000 --> 00:05:17,000
+If a user has access to account, then we can allow him to send money, can see that our mailbox set
+
+79
+00:05:17,000 --> 00:05:19,000
+in service has two responsibilities.
+
+80
+00:05:20,000 --> 00:05:25,000
+One is for settings manipulation and other responsibility for access verification.
+
+81
+00:05:25,000 --> 00:05:31,000
+If you still don't believe that this cost structure will lead us to pain in the future, consider the
+
+82
+00:05:31,000 --> 00:05:32,000
+next real life scenario.
+
+83
+00:05:33,000 --> 00:05:39,000
+Imagine that the mailbox sitting service I don't need has access method anymore and they simply remove
+
+84
+00:05:39,000 --> 00:05:39,000
+it.
+
+85
+00:05:40,000 --> 00:05:47,000
+Or for now I will verify not the role, but is a user has his cell phone number set in their account.
+
+86
+00:05:48,000 --> 00:05:49,000
+What does this mean?
+
+87
+00:05:49,000 --> 00:05:56,000
+This means that all places in our program where we used the mailbox hedging service to verify user access
+
+88
+00:05:56,000 --> 00:06:00,000
+will be either broken or work, not the way they expect it to work.
+
+89
+00:06:01,000 --> 00:06:05,000
+Now you see where the pain is done with this case in the nearest future.
+
+90
+00:06:05,000 --> 00:06:09,000
+I'd like to clearly separate concerns between different classes.
+
+91
+00:06:09,000 --> 00:06:16,000
+Let's take a look at solution right now in the solution with split responsibilities from mailbox having
+
+92
+00:06:16,000 --> 00:06:23,000
+service in the two different classes from now on, Mailbox and service is in charge of only setting
+
+93
+00:06:23,000 --> 00:06:29,000
+manipulation and security service will be in charge of all security related questions, including access.
+
+94
+00:06:30,000 --> 00:06:36,000
+Now I can use security service inside my mailbox getting service, and I know that this is class which
+
+95
+00:06:36,000 --> 00:06:38,000
+has its own goal.
+
+96
+00:06:38,000 --> 00:06:45,000
+I shouldn't change its methods because this class is used globally in my program and I can clearly understand
+
+97
+00:06:45,000 --> 00:06:47,000
+that other classes may depend on it.
+
+98
+00:06:48,000 --> 00:06:51,000
+So do you see how we grouped responsibilities here?
+
+99
+00:06:52,000 --> 00:06:57,000
+Now, in case I want to transfer money, I will call methods of the security service.
+
+100
+00:06:57,000 --> 00:07:01,000
+Now I can say that we follow our single responsibility principle.
+
+101
+00:07:02,000 --> 00:07:03,000
+Hope this is clear now.
+
+102
+00:07:04,000 --> 00:07:06,000
+Now let's recap what we have learned today.
+
+103
+00:07:07,000 --> 00:07:11,000
+Today we learned what solid principles are and what do we need them for.
+
+104
+00:07:12,000 --> 00:07:14,000
+You know what these five principles are.
+
+105
+00:07:15,000 --> 00:07:20,000
+And on the real examples today, we learned how we can apply single responsibility principle.
+
+106
+00:07:20,000 --> 00:07:22,000
+That's all what I have for you for today.
+
+107
+00:07:23,000 --> 00:07:26,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/011 Source-code-All-examples-from-the-lecture.url b/13 - Object-oriented programming/011 Source-code-All-examples-from-the-lecture.url
new file mode 100644
index 0000000000000000000000000000000000000000..51667929a067def0f30fecadb3177848c3b6e567
--- /dev/null
+++ b/13 - Object-oriented programming/011 Source-code-All-examples-from-the-lecture.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/s
\ No newline at end of file
diff --git a/13 - Object-oriented programming/012 Open Closed Principle_en.srt b/13 - Object-oriented programming/012 Open Closed Principle_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..0c64d13449d9a9f17e67727972fc00d14cc0fb1c
--- /dev/null
+++ b/13 - Object-oriented programming/012 Open Closed Principle_en.srt
@@ -0,0 +1,424 @@
+1
+00:00:05,000 --> 00:00:12,000
+And law students today will discuss with you next solid principle of open, closed principle during
+
+2
+00:00:12,000 --> 00:00:17,000
+this lesson, I will tell you why we need open closed principle on real court examples.
+
+3
+00:00:17,000 --> 00:00:23,000
+We'll discuss with you what problems this principle solves and we'll discuss how we can apply this principle
+
+4
+00:00:23,000 --> 00:00:24,000
+to solve particular issues.
+
+5
+00:00:25,000 --> 00:00:32,000
+The principle states that software entities, classes, modules, functions, etc. should be open for
+
+6
+00:00:32,000 --> 00:00:36,000
+extension but closed for modification versions.
+
+7
+00:00:36,000 --> 00:00:42,000
+Mayer is considered the one who is the first mentioned term open closed principle, which appeared in
+
+8
+00:00:42,000 --> 00:00:45,000
+his book Object Oriented Software Construction.
+
+9
+00:00:45,000 --> 00:00:51,000
+The first part of the principle is easy to understand and explain, and module will be set to be open
+
+10
+00:00:51,000 --> 00:00:53,000
+if it is still available for extension.
+
+11
+00:00:53,000 --> 00:01:00,000
+For example, you should avoid of declaring final classes, final methods, static fields and methods
+
+12
+00:01:00,000 --> 00:01:01,000
+also violate this principle.
+
+13
+00:01:01,000 --> 00:01:06,000
+In some degree, your programming entities should be available for extension.
+
+14
+00:01:06,000 --> 00:01:11,000
+To understand the second part of the principle, we need to elaborate on what does close for modification
+
+15
+00:01:11,000 --> 00:01:12,000
+mean?
+
+16
+00:01:12,000 --> 00:01:17,000
+Because you want to be able to prevent people to open your class and modify it if they want.
+
+17
+00:01:18,000 --> 00:01:25,000
+So close for modification doesn't mean this close for modification means that class is defined with
+
+18
+00:01:25,000 --> 00:01:30,000
+enough level of abstraction to extend it and create new types on the basis of it.
+
+19
+00:01:30,000 --> 00:01:37,000
+That means that interface is created in the way there is no need to modify it and it is easy to extend
+
+20
+00:01:37,000 --> 00:01:38,000
+it to achieve the goal.
+
+21
+00:01:38,000 --> 00:01:40,000
+The interface should have stable description.
+
+22
+00:01:41,000 --> 00:01:47,000
+Closed for modification also means that extending the behavior of a module doesn't result in changes
+
+23
+00:01:47,000 --> 00:01:49,000
+to the source code of the module.
+
+24
+00:01:49,000 --> 00:01:53,000
+Thus it can be easily packaged as a separate library.
+
+25
+00:01:54,000 --> 00:01:57,000
+How to achieve this abstraction will help us here.
+
+26
+00:01:57,000 --> 00:02:02,000
+It is worse to make the right architecture decision to define proper level of abstraction.
+
+27
+00:02:02,000 --> 00:02:06,000
+To make more, you'll meet the requirements of open, closed principle.
+
+28
+00:02:06,000 --> 00:02:10,000
+To understand this principle better, let's look at sars-cov-2 examples.
+
+29
+00:02:10,000 --> 00:02:12,000
+Let me start from the problem description.
+
+30
+00:02:13,000 --> 00:02:19,000
+Imagine that you have specific type to approve loans and this type can improve personal loans for users.
+
+31
+00:02:19,000 --> 00:02:21,000
+It also can approve mortgages.
+
+32
+00:02:22,000 --> 00:02:29,000
+And our loan handler aggregates two types of validators special data to validate personal loans and
+
+33
+00:02:29,000 --> 00:02:31,000
+special validator to approve mortgages.
+
+34
+00:02:31,000 --> 00:02:33,000
+And it seems to be OK.
+
+35
+00:02:33,000 --> 00:02:35,000
+Probably at the first glance.
+
+36
+00:02:35,000 --> 00:02:40,000
+You even can't imagine what can go wrong and where is violation of open, closed principle.
+
+37
+00:02:40,000 --> 00:02:42,000
+Here, let me explain.
+
+38
+00:02:42,000 --> 00:02:46,000
+Imagine that your program has to approve current loans.
+
+39
+00:02:46,000 --> 00:02:47,000
+What would you do?
+
+40
+00:02:47,000 --> 00:02:52,000
+First of all, you can add one more method here and add one more validator.
+
+41
+00:02:52,000 --> 00:02:59,000
+OK, now you have three different methods, so you need to open a loan handler and to change there.
+
+42
+00:02:59,000 --> 00:03:02,000
+That means this unit is not closed.
+
+43
+00:03:02,000 --> 00:03:10,000
+You can't package it as a library and just to extend thus it is not open to because in case you would
+
+44
+00:03:10,000 --> 00:03:12,000
+like to extend it, what will you do?
+
+45
+00:03:13,000 --> 00:03:19,000
+You will outright approve personal loan method so it would approve car loans or you would extend it
+
+46
+00:03:19,000 --> 00:03:21,000
+and will name class car loan handler.
+
+47
+00:03:21,000 --> 00:03:22,000
+Good try.
+
+48
+00:03:22,000 --> 00:03:28,000
+But in this case, car on Handler would also have behavior to approve mortgages and personal loans.
+
+49
+00:03:28,000 --> 00:03:34,000
+And this will be super confusing and believe now you see that this class is not open for extension and
+
+50
+00:03:34,000 --> 00:03:36,000
+is not closed for modification.
+
+51
+00:03:36,000 --> 00:03:40,000
+But you might think what the harm of modification is of this class.
+
+52
+00:03:40,000 --> 00:03:46,000
+Probably in this particular case there is no become but Java applications often a bit more complex.
+
+53
+00:03:47,000 --> 00:03:53,000
+For example, making changes in this class means you need to retest all scenarios carefully where this
+
+54
+00:03:53,000 --> 00:03:57,000
+class works to make sure you didn't break anything accidentally.
+
+55
+00:03:57,000 --> 00:04:03,000
+Changing something in this class means you can't release it separately because you need to keep it for
+
+56
+00:04:03,000 --> 00:04:04,000
+further adjustments.
+
+57
+00:04:05,000 --> 00:04:08,000
+You can use this class as an independent library in your program.
+
+58
+00:04:09,000 --> 00:04:11,000
+So what would be our solution in this case?
+
+59
+00:04:12,000 --> 00:04:14,000
+We just need to apply open closed principle.
+
+60
+00:04:15,000 --> 00:04:19,000
+Sounds good, but I guess you're interested what we need to do.
+
+61
+00:04:19,000 --> 00:04:23,000
+First of all, let's come up with some abstraction that is needed in our case.
+
+62
+00:04:24,000 --> 00:04:30,000
+It looks like we need some type that can approve loans, but loans will be different and we have different
+
+63
+00:04:30,000 --> 00:04:34,000
+business logic of user validation for each type of loan.
+
+64
+00:04:34,000 --> 00:04:37,000
+OK, then let's create a simple interface.
+
+65
+00:04:37,000 --> 00:04:38,000
+One handler.
+
+66
+00:04:39,000 --> 00:04:45,000
+This interface will declare contract only for one method approve loan, which takes user as a method
+
+67
+00:04:45,000 --> 00:04:50,000
+argument that this is a first difference and is not so specific.
+
+68
+00:04:50,000 --> 00:04:52,000
+Like in our problem statement.
+
+69
+00:04:52,000 --> 00:04:57,000
+I don't specify details about mortgage or personal loan in the method name.
+
+70
+00:04:57,000 --> 00:05:02,000
+Simply approve loan and it takes user of the argument.
+
+71
+00:05:02,000 --> 00:05:08,000
+So now it will be easier to extend this type in this particular case, I have two implementations of
+
+72
+00:05:08,000 --> 00:05:12,000
+this interface personal on Hender and mortgage loan handler.
+
+73
+00:05:12,000 --> 00:05:15,000
+They simply implement the required method.
+
+74
+00:05:15,000 --> 00:05:16,000
+What is good about this?
+
+75
+00:05:17,000 --> 00:05:20,000
+You can release any loan handler separately any time you wish.
+
+76
+00:05:21,000 --> 00:05:23,000
+You can test Hannelore separately.
+
+77
+00:05:23,000 --> 00:05:25,000
+Korda's encapsulated.
+
+78
+00:05:25,000 --> 00:05:30,000
+You can easily create as much loan henders as you wish without impact on the already written code.
+
+79
+00:05:31,000 --> 00:05:38,000
+So the risk of breaking mortgage loan hender while creating absolutely separate class car loan hender
+
+80
+00:05:38,000 --> 00:05:39,000
+is minimal.
+
+81
+00:05:39,000 --> 00:05:44,000
+Moreover, in these handlers you can see that we also introduced validator type.
+
+82
+00:05:45,000 --> 00:05:46,000
+This is the interface.
+
+83
+00:05:46,000 --> 00:05:50,000
+It declare contract for simple behavior is valid.
+
+84
+00:05:50,000 --> 00:05:51,000
+That's it.
+
+85
+00:05:51,000 --> 00:05:56,000
+This declaration is also open for extension and closed for modification.
+
+86
+00:05:56,000 --> 00:05:59,000
+I have two implementations of this interface.
+
+87
+00:05:59,000 --> 00:06:03,000
+They are personal loan value data and mortgage loan, all the data.
+
+88
+00:06:04,000 --> 00:06:09,000
+And you can see that I have constructor's in the implementation of the loan hender and this allows me
+
+89
+00:06:09,000 --> 00:06:14,000
+to set any other data I wish during the runtime, but not on the specific one.
+
+90
+00:06:14,000 --> 00:06:21,000
+This architecture also respects open closed principle because I can easily extend all the data type
+
+91
+00:06:21,000 --> 00:06:27,000
+and there is no need for me to make changes in personal loan handler in case I don't want to use specific
+
+92
+00:06:28,000 --> 00:06:29,000
+data anymore.
+
+93
+00:06:29,000 --> 00:06:32,000
+This type is closed for modification.
+
+94
+00:06:32,000 --> 00:06:33,000
+What I can do right now.
+
+95
+00:06:33,000 --> 00:06:39,000
+Instead, I can implement all the data and create whatever the data I want and set it into the personal
+
+96
+00:06:39,000 --> 00:06:43,000
+loan handler during the runtime without changing the code of loan handler.
+
+97
+00:06:44,000 --> 00:06:50,000
+I believe you can notice that we have more classes and interfaces right now, but that's fine.
+
+98
+00:06:50,000 --> 00:06:56,000
+The most important thing that this architecture allows us to scale our application easily.
+
+99
+00:06:56,000 --> 00:07:00,000
+Also changing and supporting of such a system is much easier.
+
+100
+00:07:01,000 --> 00:07:05,000
+Now you know how you can apply open closed principle in real life.
+
+101
+00:07:05,000 --> 00:07:08,000
+Let's recap what we have learned today.
+
+102
+00:07:08,000 --> 00:07:12,000
+In this lesson, we discussed all regions of open, closed principle.
+
+103
+00:07:12,000 --> 00:07:18,000
+We learned what actually open for extension and close for modification means on the railcard example,
+
+104
+00:07:18,000 --> 00:07:21,000
+you saw how you can apply this principle.
+
+105
+00:07:21,000 --> 00:07:23,000
+That's all what we have in our agenda for today.
+
+106
+00:07:24,000 --> 00:07:27,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/012 Source-code-All-examples-from-the-lecture.url b/13 - Object-oriented programming/012 Source-code-All-examples-from-the-lecture.url
new file mode 100644
index 0000000000000000000000000000000000000000..85942946f7f1b48a7f8bbd466fb7b7b06e3d0fde
--- /dev/null
+++ b/13 - Object-oriented programming/012 Source-code-All-examples-from-the-lecture.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/o
\ No newline at end of file
diff --git a/13 - Object-oriented programming/013 Liskov Substitution Principle_en.srt b/13 - Object-oriented programming/013 Liskov Substitution Principle_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..5a1e7f01677f5c71b1551cce01557ab86f80b0d5
--- /dev/null
+++ b/13 - Object-oriented programming/013 Liskov Substitution Principle_en.srt
@@ -0,0 +1,260 @@
+1
+00:00:05,000 --> 00:00:11,000
+Hello, students, today I'd like to pursue to a deep dive and solid principles in this lesson, we'll
+
+2
+00:00:11,000 --> 00:00:14,000
+learn with you, at least give substitution principles in this lesson.
+
+3
+00:00:14,000 --> 00:00:17,000
+I will tell you more about this principle.
+
+4
+00:00:17,000 --> 00:00:20,000
+We'll talk about why it's important and then real good examples.
+
+5
+00:00:20,000 --> 00:00:23,000
+I will show you how you can apply this principle.
+
+6
+00:00:23,000 --> 00:00:29,000
+Let's start to start with I would like to tell you what risk of substitution principle is all about.
+
+7
+00:00:29,000 --> 00:00:35,000
+This principle is named for Barbara Lee Pskov, who first described this principle in nineteen eighty
+
+8
+00:00:35,000 --> 00:00:35,000
+eight.
+
+9
+00:00:36,000 --> 00:00:42,000
+Objects in the program should be replaceable with instances of this types without altering the correctness
+
+10
+00:00:42,000 --> 00:00:43,000
+of that program.
+
+11
+00:00:44,000 --> 00:00:51,000
+And I want to draw attention to the second part of this sentence, namely without altering correctness
+
+12
+00:00:51,000 --> 00:00:52,000
+of that program.
+
+13
+00:00:52,000 --> 00:00:57,000
+Because this principle is not about following compilation rules and doesn't break out of the program
+
+14
+00:00:57,000 --> 00:01:04,000
+with incompatible types of principle, focuses attention on types that violate polymorphism principle.
+
+15
+00:01:05,000 --> 00:01:10,000
+To make sure that we can replace one object with another, we need to check the derived classes, just
+
+16
+00:01:10,000 --> 00:01:15,000
+extend based classes without replacement functionality of parent classes.
+
+17
+00:01:15,000 --> 00:01:20,000
+We want to avoid cases when new classes produce undesired effects.
+
+18
+00:01:20,000 --> 00:01:24,000
+Now, I will visualize to you what principle is about.
+
+19
+00:01:24,000 --> 00:01:32,000
+If S is a subtype of T is an object of type, T may be replaced with objects of type S.
+
+20
+00:01:32,000 --> 00:01:40,000
+That also means an object of type T may be substituted with any object of some type S without altering
+
+21
+00:01:40,000 --> 00:01:45,000
+any of the desirable properties of key like correctness hope.
+
+22
+00:01:45,000 --> 00:01:48,000
+Now you understand what this principle is about in theory.
+
+23
+00:01:49,000 --> 00:01:52,000
+Let's look at code examples to understand this principle better.
+
+24
+00:01:52,000 --> 00:01:55,000
+This time we'll use Burts for our example.
+
+25
+00:01:55,000 --> 00:01:56,000
+As usual.
+
+26
+00:01:56,000 --> 00:01:58,000
+Let me start from the problem statement.
+
+27
+00:01:58,000 --> 00:02:06,000
+Imagine that you have Tiberg and each bird should be able to fly and eat and we start implementing birds.
+
+28
+00:02:07,000 --> 00:02:11,000
+Sparrow can fly and it crow can fly and eat.
+
+29
+00:02:11,000 --> 00:02:14,000
+The ostrich can eat but can't fly.
+
+30
+00:02:14,000 --> 00:02:18,000
+And when flying method is called for ostrich, the program stops.
+
+31
+00:02:18,000 --> 00:02:22,000
+Execution was throwing unsupported separation exception.
+
+32
+00:02:22,000 --> 00:02:28,000
+Basically this line of code means that Java program has to stop execution because exceptional case happened.
+
+33
+00:02:29,000 --> 00:02:32,000
+I will teach you exception in the separate lessons.
+
+34
+00:02:32,000 --> 00:02:35,000
+Now let's focus on the substitution principle.
+
+35
+00:02:36,000 --> 00:02:38,000
+But ostrich is a bird.
+
+36
+00:02:38,000 --> 00:02:40,000
+It just can't fly.
+
+37
+00:02:40,000 --> 00:02:41,000
+What should I do?
+
+38
+00:02:42,000 --> 00:02:45,000
+This is the most obvious violation of risk of substitution principle.
+
+39
+00:02:46,000 --> 00:02:52,000
+Imagine now that somewhere in the program you have an array of birds and in disarray you are going to
+
+40
+00:02:52,000 --> 00:02:56,000
+have all types of birds, grouse, sparrow and ostrich.
+
+41
+00:02:57,000 --> 00:03:01,000
+And at some point you will call flying methods for all birds.
+
+42
+00:03:01,000 --> 00:03:09,000
+We assume that each element of bird has a method fly because interface states so and I invoke fly method.
+
+43
+00:03:09,000 --> 00:03:10,000
+What happens?
+
+44
+00:03:11,000 --> 00:03:15,000
+Let me run the program I get and support unsupported operation exception.
+
+45
+00:03:16,000 --> 00:03:20,000
+The error is thrown when flying method is invoked on ostrich object.
+
+46
+00:03:21,000 --> 00:03:27,000
+I violate at least give substitution principle because even despite the fact that ostrich implements
+
+47
+00:03:27,000 --> 00:03:32,000
+bird interface, I can't use ostrich in my program instead of any bird.
+
+48
+00:03:32,000 --> 00:03:37,000
+I can do so because this will impact on correctness of program execution.
+
+49
+00:03:37,000 --> 00:03:41,000
+And you already see this how I have to fix this.
+
+50
+00:03:41,000 --> 00:03:47,000
+I need thought here at risk of substitution principle and create type Iraqi which meets the requirements
+
+51
+00:03:47,000 --> 00:03:54,000
+of the principle I can still have in interface, but this time Bird is going to have on the IT method.
+
+52
+00:03:54,000 --> 00:04:00,000
+I also introduced flying bird type that extends birds is a new type will create the contract for fly
+
+53
+00:04:00,000 --> 00:04:01,000
+method.
+
+54
+00:04:02,000 --> 00:04:10,000
+This time Sparrow and Crüe implements fly and birds interface and ostrich just implement bird interface.
+
+55
+00:04:11,000 --> 00:04:18,000
+Now in my program I can create an array of flying birds and I can be sure that all birds in this area
+
+56
+00:04:18,000 --> 00:04:23,000
+will be able to fly and I can use bird type wherever I have to.
+
+57
+00:04:24,000 --> 00:04:32,000
+Now I can use any type Crüe sparrow, ostrich instead of bird without warning the program will be broken.
+
+58
+00:04:32,000 --> 00:04:36,000
+But bird that has only its method can.
+
+59
+00:04:36,000 --> 00:04:42,000
+You can see how we apply the risk of substitution principle and reduce the probability of runtime errors
+
+60
+00:04:42,000 --> 00:04:45,000
+or incorrect execution of our program.
+
+61
+00:04:45,000 --> 00:04:46,000
+Let's recap.
+
+62
+00:04:46,000 --> 00:04:53,000
+What we have learned to date in this lesson are regions of risk of substitution principle, brilliant
+
+63
+00:04:53,000 --> 00:04:59,000
+theory and understood why we need to use this principle on the simple good example we learned how to.
+
+64
+00:05:00,000 --> 00:05:03,000
+This principle, so that's it for this lesson.
+
+65
+00:05:04,000 --> 00:05:07,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/13 - Object-oriented programming/013 Source-code-All-examples-from-the-lecture.url b/13 - Object-oriented programming/013 Source-code-All-examples-from-the-lecture.url
new file mode 100644
index 0000000000000000000000000000000000000000..bbec578974f8761daf041980bfc159a1ffd04e16
--- /dev/null
+++ b/13 - Object-oriented programming/013 Source-code-All-examples-from-the-lecture.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/l
\ No newline at end of file
diff --git a/13 - Object-oriented programming/014 Interface Segregation Principle_en.srt b/13 - Object-oriented programming/014 Interface Segregation Principle_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..bc8cad3d4c47e44a52179fd34bd075bf78a1ec08
--- /dev/null
+++ b/13 - Object-oriented programming/014 Interface Segregation Principle_en.srt
@@ -0,0 +1,276 @@
+1
+00:00:06,000 --> 00:00:13,000
+Hello, colleagues, this lesson is dedicated to the next solid principle I interface segregation principle.
+
+2
+00:00:13,000 --> 00:00:18,000
+We'll talk more about the principle will on why do we need to follow it?
+
+3
+00:00:18,000 --> 00:00:19,000
+And then real good examples.
+
+4
+00:00:19,000 --> 00:00:21,000
+I will demo how to apply the principle.
+
+5
+00:00:22,000 --> 00:00:23,000
+As usual.
+
+6
+00:00:23,000 --> 00:00:25,000
+Let's start from the principle definition.
+
+7
+00:00:25,000 --> 00:00:31,000
+The interface segregation principle states that clients should not be forced to depend on methods that
+
+8
+00:00:31,000 --> 00:00:32,000
+they don't use.
+
+9
+00:00:33,000 --> 00:00:38,000
+Being software engineers, we should focus on creation of seeing interfaces instead of creation that
+
+10
+00:00:38,000 --> 00:00:44,000
+interfaces instead of declaring an interface which can solve all problems and set the contract.
+
+11
+00:00:44,000 --> 00:00:49,000
+For the most of business logic in your program, you should create small and specific interfaces.
+
+12
+00:00:49,000 --> 00:00:53,000
+Probably impact of interfaces is not obvious right now.
+
+13
+00:00:53,000 --> 00:00:55,000
+Let me explain what potentially can go wrong.
+
+14
+00:00:55,000 --> 00:01:01,000
+If you will force your clients to implement methods they don't need by creating further interfaces will
+
+15
+00:01:01,000 --> 00:01:08,000
+bring complexity to our program and we can't guarantee that expected behavior will be supported in all
+
+16
+00:01:08,000 --> 00:01:08,000
+successes.
+
+17
+00:01:09,000 --> 00:01:14,000
+It is easier to implement multiple small interfaces rather than give implementation tools and behaviors.
+
+18
+00:01:14,000 --> 00:01:20,000
+And you don't need small interfaces, easy to maintain support and scale.
+
+19
+00:01:20,000 --> 00:01:26,000
+But in the meantime, you should avoid of create an interface for one method every time, because this
+
+20
+00:01:26,000 --> 00:01:30,000
+approach will lead you to having thousands of small interfaces with one single method.
+
+21
+00:01:31,000 --> 00:01:33,000
+Each interface should have clearly defined behavior.
+
+22
+00:01:34,000 --> 00:01:36,000
+Perfect case interface should be cohesive.
+
+23
+00:01:36,000 --> 00:01:41,000
+That means interface should contain group of operations that logically connected.
+
+24
+00:01:42,000 --> 00:01:46,000
+We also need to keep our code in line with risk of substitution principle.
+
+25
+00:01:46,000 --> 00:01:47,000
+Enough talks.
+
+26
+00:01:47,000 --> 00:01:49,000
+Let's code now.
+
+27
+00:01:49,000 --> 00:01:54,000
+I'm going to share with you the examples so that you could understand how we can apply interface aggregation
+
+28
+00:01:54,000 --> 00:01:56,000
+principle in real life.
+
+29
+00:01:56,000 --> 00:01:58,000
+Let's start from the problem statement.
+
+30
+00:01:58,000 --> 00:02:05,000
+Imagine that we developed a video game, for example, GTA San Andreas, and we need to declare some
+
+31
+00:02:05,000 --> 00:02:07,000
+type to represent all vehicles.
+
+32
+00:02:07,000 --> 00:02:11,000
+I have a vehicle interface which sets contracts for different behavior.
+
+33
+00:02:11,000 --> 00:02:13,000
+Drive, fly and sail.
+
+34
+00:02:14,000 --> 00:02:18,000
+Now I can have concrete types car, plane and board.
+
+35
+00:02:19,000 --> 00:02:20,000
+All of them are vehicles.
+
+36
+00:02:20,000 --> 00:02:22,000
+So logically everything is correct.
+
+37
+00:02:22,000 --> 00:02:25,000
+But car doesn't need fly and sail methods.
+
+38
+00:02:26,000 --> 00:02:27,000
+Plane doesn't need sail.
+
+39
+00:02:27,000 --> 00:02:31,000
+Method Board doesn't need to drive and fly method.
+
+40
+00:02:32,000 --> 00:02:38,000
+So you see that clients of our type vehicle must give implementation to methods which they don't need.
+
+41
+00:02:38,000 --> 00:02:40,000
+How I have to implement fly method for both.
+
+42
+00:02:41,000 --> 00:02:47,000
+But by the time you understand this, a lot of other classes already use vehicle type as a main abstraction
+
+43
+00:02:47,000 --> 00:02:49,000
+to interact with this group of objects.
+
+44
+00:02:49,000 --> 00:02:52,000
+This is a violation of interface segregation principle.
+
+45
+00:02:53,000 --> 00:02:55,000
+What is the recommended way to fix this?
+
+46
+00:02:55,000 --> 00:02:57,000
+Let's have three theme interfaces.
+
+47
+00:02:58,000 --> 00:03:05,000
+For example, driveable, saleable flyball and I will separate behavior between these types.
+
+48
+00:03:05,000 --> 00:03:12,000
+Car and motorcycle will implement driveable interface because both of these types should have drive
+
+49
+00:03:12,000 --> 00:03:12,000
+methods.
+
+50
+00:03:13,000 --> 00:03:19,000
+In this case, each concrete type will implement only such interface, which it actually needed.
+
+51
+00:03:19,000 --> 00:03:25,000
+And now clients of our interfaces are not forced to implement methods they don't need.
+
+52
+00:03:25,000 --> 00:03:30,000
+The good thing is that in Java it is allowed to implement multiple interfaces.
+
+53
+00:03:31,000 --> 00:03:34,000
+For example, each plane can drive and fly.
+
+54
+00:03:35,000 --> 00:03:40,000
+Let me implement driveable and flyable interface in plane class.
+
+55
+00:03:41,000 --> 00:03:46,000
+Or imagine that now we want to implement Vertex from GTA San Andreas.
+
+56
+00:03:46,000 --> 00:03:53,000
+For those who don't remember what Vertex is from San Andreas, I will remind Vertex is a vehicle that
+
+57
+00:03:53,000 --> 00:03:56,000
+can drive and sail from the video game GTA.
+
+58
+00:03:57,000 --> 00:04:04,000
+So here is the vortex that implements driveable unsalable interface and I can leave implementation to
+
+59
+00:04:04,000 --> 00:04:04,000
+this behavior.
+
+60
+00:04:05,000 --> 00:04:11,000
+Now, when I follow interface aggregation principle, I have multiple small interfaces and my chances
+
+61
+00:04:11,000 --> 00:04:13,000
+to catch runtime exception are lower.
+
+62
+00:04:14,000 --> 00:04:20,000
+Moreover, now I have more flexibility in scaling of my application and other entities.
+
+63
+00:04:21,000 --> 00:04:27,000
+Let's recap what we have learned today, today, we learned what interface segregation principle is,
+
+64
+00:04:27,000 --> 00:04:33,000
+we discussed why we need to follow it and what negative consequences may appear in case we ignore this
+
+65
+00:04:33,000 --> 00:04:34,000
+principle.
+
+66
+00:04:34,000 --> 00:04:39,000
+On real court examples, we learned how to apply the principle for specific type Iraqi.
+
+67
+00:04:40,000 --> 00:04:42,000
+That's it for this lesson.
+
+68
+00:04:42,000 --> 00:04:44,000
+Thanks a lot for your attention.
+
+69
+00:04:44,000 --> 00:04:46,000
+See you in the next lesson.
+
diff --git a/13 - Object-oriented programming/014 Source-code-All-examples-from-the-lecture.url b/13 - Object-oriented programming/014 Source-code-All-examples-from-the-lecture.url
new file mode 100644
index 0000000000000000000000000000000000000000..7a5c5d7e559f112997800a46946edaabb4fdc1b5
--- /dev/null
+++ b/13 - Object-oriented programming/014 Source-code-All-examples-from-the-lecture.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/i
\ No newline at end of file
diff --git a/13 - Object-oriented programming/015 Dependency Inversion Principle_en.srt b/13 - Object-oriented programming/015 Dependency Inversion Principle_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..4c3d5d9c4473933d71f1b9c9451573fb1eb65ed5
--- /dev/null
+++ b/13 - Object-oriented programming/015 Dependency Inversion Principle_en.srt
@@ -0,0 +1,332 @@
+1
+00:00:06,000 --> 00:00:11,000
+Hello, my friends, and this lesson will learn one of the most important solid principles, in my opinion.
+
+2
+00:00:11,000 --> 00:00:14,000
+Today, we're going to talk about dependency, inversion principle.
+
+3
+00:00:15,000 --> 00:00:18,000
+As usual, we are going to review all regions of the principal.
+
+4
+00:00:18,000 --> 00:00:20,000
+I will explain to you why we need to follow it.
+
+5
+00:00:20,000 --> 00:00:22,000
+And and real good examples.
+
+6
+00:00:22,000 --> 00:00:25,000
+We will see how to apply the principle to start with.
+
+7
+00:00:25,000 --> 00:00:28,000
+Let's learn first what this principle is about.
+
+8
+00:00:28,000 --> 00:00:31,000
+This principle consists of two major statements.
+
+9
+00:00:31,000 --> 00:00:36,000
+The first one, high level modules should not depend on low level modules.
+
+10
+00:00:36,000 --> 00:00:39,000
+Both should depend on abstractions.
+
+11
+00:00:39,000 --> 00:00:43,000
+And the second one, abstractions should not depend on details.
+
+12
+00:00:43,000 --> 00:00:45,000
+Details should depend on abstractions.
+
+13
+00:00:46,000 --> 00:00:49,000
+Probably it's not obvious where innovation happens.
+
+14
+00:00:49,000 --> 00:00:50,000
+Let me explain.
+
+15
+00:00:51,000 --> 00:00:53,000
+It will be hard to explain with words.
+
+16
+00:00:53,000 --> 00:00:58,000
+So let's look at the code examples and I will show you how dependency inversion happens.
+
+17
+00:00:59,000 --> 00:01:05,000
+Imagine that we are implementing where aggregator and our aggregator will use temperature values from
+
+18
+00:01:05,000 --> 00:01:08,000
+different sides and we'll tell our users average temperature.
+
+19
+00:01:09,000 --> 00:01:12,000
+Right now we have two external weather apps.
+
+20
+00:01:12,000 --> 00:01:16,000
+The first one is actually Vasseur and the second one is B, B, C.
+
+21
+00:01:16,000 --> 00:01:23,000
+Whether the specific of these two types is return value accuracy, it returns temperature in Celsius,
+
+22
+00:01:23,000 --> 00:01:27,000
+but BBC weather returns temperature in Fahrenheit.
+
+23
+00:01:27,000 --> 00:01:34,000
+And to return average temperature in Celsius, we need to convert Fahrenheit to Celsius in our get temperature
+
+24
+00:01:34,000 --> 00:01:38,000
+methods in our weather aggregator, everything looks good.
+
+25
+00:01:38,000 --> 00:01:39,000
+What do you think?
+
+26
+00:01:40,000 --> 00:01:46,000
+Now, let's imagine that I want to integrate new weather API into my program, for example, I want
+
+27
+00:01:46,000 --> 00:01:52,000
+to implement World, an API and world where the API returns temperature in Kelman's.
+
+28
+00:01:53,000 --> 00:01:54,000
+And what should I do?
+
+29
+00:01:55,000 --> 00:01:59,000
+I have to implement another method here that will convert Kelvin to Celsius.
+
+30
+00:01:59,000 --> 00:02:04,000
+And after that I just get temperature mass and retest this unit one more time.
+
+31
+00:02:04,000 --> 00:02:05,000
+Sorry.
+
+32
+00:02:05,000 --> 00:02:11,000
+And here we can see that our weather aggregator class depends on the different weather at the applies
+
+33
+00:02:12,000 --> 00:02:17,000
+because each change in their API should lead to changes in my weather aggregator.
+
+34
+00:02:17,000 --> 00:02:22,000
+Imagine that return time become different or simply method name is changed.
+
+35
+00:02:22,000 --> 00:02:28,000
+All changes in lower modules will impact our high level module where we have weather aggregator.
+
+36
+00:02:28,000 --> 00:02:31,000
+This is dependancy, which we have to invert.
+
+37
+00:02:31,000 --> 00:02:36,000
+So how I can make my code easy to maintain, easy to support and to scale.
+
+38
+00:02:37,000 --> 00:02:39,000
+We need to apply dependancy inversion principle.
+
+39
+00:02:40,000 --> 00:02:46,000
+Let's recall the first two high level modules should not depend on low level modules.
+
+40
+00:02:46,000 --> 00:02:48,000
+Both should depend on abstractions.
+
+41
+00:02:49,000 --> 00:02:53,000
+That means I have to create some abstraction and all asset classes.
+
+42
+00:02:54,000 --> 00:03:00,000
+VARs aggregator Accu, whether API, BBC, whether API will depend on the substraction.
+
+43
+00:03:01,000 --> 00:03:07,000
+Let me create the interface where the source this interface declares contract for one single method
+
+44
+00:03:07,000 --> 00:03:09,000
+get temperature Celsius.
+
+45
+00:03:09,000 --> 00:03:10,000
+That's it.
+
+46
+00:03:10,000 --> 00:03:11,000
+Why only this method.
+
+47
+00:03:12,000 --> 00:03:18,000
+Why I wouldn't create methods that allow us to get temperature in Fahrenheit and Kelvin because this
+
+48
+00:03:18,000 --> 00:03:24,000
+is not what is needed for my program and our weather aggregator now also depends on the abstraction
+
+49
+00:03:25,000 --> 00:03:25,000
+here.
+
+50
+00:03:25,000 --> 00:03:32,000
+I write code which relies on the interface of otherwise aggregator I can create where aggregator with
+
+51
+00:03:32,000 --> 00:03:33,000
+an array of objects.
+
+52
+00:03:33,000 --> 00:03:36,000
+WIPO, as a source in mind, get temperature measured.
+
+53
+00:03:36,000 --> 00:03:42,000
+I can rely on the weather source interface and assume that each object will be able to return temperature
+
+54
+00:03:42,000 --> 00:03:43,000
+in Celsius.
+
+55
+00:03:44,000 --> 00:03:46,000
+This is method reference here and stream API.
+
+56
+00:03:46,000 --> 00:03:49,000
+Don't worry, I will explain this in separate lessons.
+
+57
+00:03:50,000 --> 00:03:57,000
+What you can understand is that I can easily get average value from multiple weather apps and in case
+
+58
+00:03:57,000 --> 00:04:04,000
+I ever need to add new words API to my program, I can add it to this array and make sure it's implemented
+
+59
+00:04:04,000 --> 00:04:10,000
+where the source interface and you see that we are also in line with open closed principle.
+
+60
+00:04:10,000 --> 00:04:17,000
+I don't need to modify this class anymore because my level of abstraction allows me to do so.
+
+61
+00:04:17,000 --> 00:04:21,000
+Now you can see that our high level module depends on the abstraction.
+
+62
+00:04:22,000 --> 00:04:26,000
+And now it's time to recall the second rule of dependency on Russian principle.
+
+63
+00:04:26,000 --> 00:04:29,000
+Abstractions should not depend on details.
+
+64
+00:04:29,000 --> 00:04:31,000
+Details should depend on abstractions.
+
+65
+00:04:32,000 --> 00:04:37,000
+That means I don't care whether API, which I'm going to integrate with, will return temperature in
+
+66
+00:04:37,000 --> 00:04:41,000
+Celsius or Fahrenheit and temperature in Celsius period.
+
+67
+00:04:42,000 --> 00:04:46,000
+And my abstraction doesn't depend on the details of implementation.
+
+68
+00:04:46,000 --> 00:04:50,000
+My glasses, which will implement this interface, will depend on it.
+
+69
+00:04:51,000 --> 00:04:53,000
+Zazz depend on the abstraction.
+
+70
+00:04:54,000 --> 00:05:00,000
+For example, VBAC, whether API that returns temperature in Fahrenheit, the Massett which converts
+
+71
+00:05:00,000 --> 00:05:03,000
+Fahrenheit to Celsius, is located here now.
+
+72
+00:05:03,000 --> 00:05:11,000
+Now you see the full picture and noticed that both high level class and low level classes depend on
+
+73
+00:05:11,000 --> 00:05:12,000
+the abstraction by the source.
+
+74
+00:05:12,000 --> 00:05:17,000
+And we inverted dependency from weather aggregators to concrete API classes.
+
+75
+00:05:18,000 --> 00:05:23,000
+Now concrete API classes depend on the abstraction hope.
+
+76
+00:05:23,000 --> 00:05:25,000
+With this example, things become clearer.
+
+77
+00:05:26,000 --> 00:05:28,000
+Let's recap what we have learned today.
+
+78
+00:05:29,000 --> 00:05:32,000
+They've learned what is dependency inversion principle.
+
+79
+00:05:32,000 --> 00:05:38,000
+We learned the rules of the principle on the real good example use of how we convert dependency.
+
+80
+00:05:38,000 --> 00:05:43,000
+We discussed how this principle can help us make our code easier to support and to scale.
+
+81
+00:05:44,000 --> 00:05:46,000
+That's all what I have in my plans to discuss with you.
+
+82
+00:05:47,000 --> 00:05:49,000
+Thanks a lot for your attention.
+
+83
+00:05:49,000 --> 00:05:50,000
+See you in the next lesson.
+
diff --git a/13 - Object-oriented programming/015 Source-code-All-examples-from-the-lecture.url b/13 - Object-oriented programming/015 Source-code-All-examples-from-the-lecture.url
new file mode 100644
index 0000000000000000000000000000000000000000..9325f61b62ce26825844aacebec84d639789e9c1
--- /dev/null
+++ b/13 - Object-oriented programming/015 Source-code-All-examples-from-the-lecture.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/d
\ No newline at end of file
diff --git a/13 - Object-oriented programming/016 Quiz SOLID Principles - Check yourself.html b/13 - Object-oriented programming/016 Quiz SOLID Principles - Check yourself.html
new file mode 100644
index 0000000000000000000000000000000000000000..69feb9ade82252d25d215f9d8726e46cf71dfcea
--- /dev/null
+++ b/13 - Object-oriented programming/016 Quiz SOLID Principles - Check yourself.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+ Quiz SOLID Principles - Check yourself
+
+
+
+
+
+
+
Quiz SOLID Principles - Check yourself
+
Quiz Link: https://forms.gle/7z2vDq7yCyeJJZnU6
The quiz doesn’t require you to log in or submit any personal information. Your data privacy is my priority.
The Quiz covers content from the following lessons:
SOLID principles overview & Single Responsibility Principle
Open / Closed principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
Quiz Instructions:
This quiz is designed to help you check your understanding of the content from the previous lessons. All questions are based only on material covered in the lessons you've already watched, so there’s no need to worry about unfamiliar topics.
Each question has one correct answer. Select the best answer and click "Submit" when you're ready.
After submitting, you'll see your score. For each question, you earn 1 point.
Click "View Results" to see the explanations for each correct answer. Reviewing these explanations can help reinforce your understanding.
If you score below 70%, I recommend revisiting the previous lessons. However, if the explanations make sense and you’re confident in your understanding, feel free to move on.
If any explanations are unclear, please don’t hesitate to post questions in the Q&A section—I’m here to help!
+
+
+
+
diff --git a/13 - Object-oriented programming/external-links.txt b/13 - Object-oriented programming/external-links.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e7b6fd5b454214e99f2a4dd7d85c48732175d5a5
--- /dev/null
+++ b/13 - Object-oriented programming/external-links.txt
@@ -0,0 +1,120 @@
+
+002 Source-code-Cart-class
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Cart.java
+
+002 Source-code-Product-class
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Product.java
+
+002 Source-code-Demo-class
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Demo.java
+
+003 Source-code-Demo-class
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/Demo.java
+
+003 Source-code-Abstract-Product
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/Product.java
+
+003 Source-code-Master-Product
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/MasterProduct.java
+
+003 Source-code-Variant-product
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/VariantProduct.java
+
+003 Source-code-User-class
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/typesofclasses/User.java
+
+003 Source-code-POJO-Product
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Product.java
+
+003 Source-code-Cart-with-Tax-and-Discount
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/classes/Cart.java
+
+004 Source-code-Client-class
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/Client.java
+
+004 Source-code-PaymentProcessor-interface
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PaymentProcessor.java
+
+004 Source-code-PayPalPaymentProcessor
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PayPalPaymentProcessor.java
+
+004 Source-code-ChasePaymentProcessor
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/ChasePaymentProcessor.java
+
+004 Source-code-PaymentValidator
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PaymentValidator.java
+
+004 Source-code-PaymentData
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/interfaces/PaymentData.java
+
+005 Source-code-Demo
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/Demo.java
+
+005 Source-code-Object-initialization-order
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/ObjectInitializationOrder.java
+
+005 Source-code-Product
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/Product.java
+
+005 Source-code-Phone
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/inheritance/Phone.java
+
+006 Source-code-Account-Information
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/AccountInformation.java
+
+006 Source-code-Admin-User
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/AdminUser.java
+
+006 Source-code-Archiver
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/Archiver.java
+
+006 Source-code-Content-Manager
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/ContentManager.java
+
+006 Source-code-Demo
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/Demo.java
+
+006 Source-code-Profile
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/Profile.java
+
+006 Source-code-Profile-Information-Data
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/ProfileInformationData.java
+
+006 Source-code-Rar-Archiver
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/RarArchiver.java
+
+006 Source-code-User
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/User.java
+
+006 Source-code-User-Profile
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/UserProfile.java
+
+006 Source-code-Zip-Archiver
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/polymorphism/ZipArchiver.java
+
+007 Source-code-Demo
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/staticdemo/Demo.java
+
+007 Source-code-Employee
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/staticdemo/Employee.java
+
+007 Source-code-User
+https://github.com/AndriiPiatakha/learnit_java_core/blob/master/src/com/itbulls/learnit/javacore/oop/staticdemo/User.java
+
+008 Source-code-All-examples-from-the-lecture
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/encapsulation
+
+011 Source-code-All-examples-from-the-lecture
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/s
+
+012 Source-code-All-examples-from-the-lecture
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/o
+
+013 Source-code-All-examples-from-the-lecture
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/l
+
+014 Source-code-All-examples-from-the-lecture
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/i
+
+015 Source-code-All-examples-from-the-lecture
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/solid/d
diff --git a/15 - ===== OOP Interview Preparation =====/001 How to be prepared for the interview.html b/15 - ===== OOP Interview Preparation =====/001 How to be prepared for the interview.html
new file mode 100644
index 0000000000000000000000000000000000000000..fde224481bd44c585e823ab8fe0342300204d467
--- /dev/null
+++ b/15 - ===== OOP Interview Preparation =====/001 How to be prepared for the interview.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+ How to be prepared for the interview
+
+
+
+
+
+
+
How to be prepared for the interview
+
I gathered for you the most popular questions during the Java Interview in OOP topic. How you can be prepared for the interview?
Just read the question first. Try to answer the question by yourself. After that, compare your answer with the answer provided. Remember, that this is just a reference to the answer. Because sometimes the topic is big, and you can go really deep with your answer. In case you feel like you don’t understand what the answer is about - feel free to get back in the course and review the relevant section, and relevant lesson one more time.
Also, you are always welcome to ask your questions and I will be happy to answer. I’m sure that these questions will help you to be prepared for the OOP interview. You need to be ready to answer perfectly on these questions.
In case there are questions that you don't know the answers to, please, feel free to check my full and the most complete course "Java From Zero to First Job".
+
+
+
+
diff --git a/15 - ===== OOP Interview Preparation =====/002 Part 1 OOP Interview - Questions and Answers.html b/15 - ===== OOP Interview Preparation =====/002 Part 1 OOP Interview - Questions and Answers.html
new file mode 100644
index 0000000000000000000000000000000000000000..405d0551601499668103a7a0b806e86b7bb22e3c
--- /dev/null
+++ b/15 - ===== OOP Interview Preparation =====/002 Part 1 OOP Interview - Questions and Answers.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+ Part 1 OOP Interview - Questions and Answers
+
+
+
+
+
+
+
Part 1 OOP Interview - Questions and Answers
+
OOP is a programming methodology based on the representation of a software product as a collection of objects, each of which is an instance of a particular class. Object takes the main place in this software design approach. Object can be described as data structure (some state) plus some behavior to modify and interact with this data (state). OOP uses the interaction of objects as its basic elements.
An object is a named model of a real entity that has specific property values and manifests its behavior. Object has a set of data (fields and properties of an object) taht is physically located in the computer's memory. Also, object has methods that have access to the data (fields and properties). An object is a concrete instance of a class.
It is generally accepted that object-oriented programming is based on 4 basic principles (there were only 3 before). These principles are:
(Abstraction)
Encapsulation
Inheritance
Polymorphism
Inheritance is the process by which you can describe one type based on the other type. Also, during the inheritance, one object can acquire the properties of another object (inheritance of all the properties of one object by another)
and add features characteristic only of himselfю
class Dog extends Animal
{...}
Superclass -> Subclass
Parent -> Child
Polymorphism (from the Greek polymorphos) is a property that allows the same name to be used to solve two or more similar but technically different tasks. The goal of polymorphism, as applied to object-oriented programming, is to use a single name to define common actions for a class. The execution of each specific action will be determined by the data type.
More generally, the concept of polymorphism is the idea of "one interface, many methods". This means that you can create a common interface for a group of similar actions.
For example, you have an acceleration pedal on an electric car and on a car with a gasoline engine. In both cases, pressing the acceleration pedal would bring us the same result - the car will go faster. But the way how exactly acceleration will be implemented in electric and non-electric cars - will be different because of the different car construction.
Encapsulation (encapsulation) - this is hiding the implementation of a class and separating its internal representation from the external (interface), this is a property that allows you to close access to the fields and methods of the class to other classes, and provide them with access only through the external interface (methods). When using an object-oriented approach, it is not ok to directly access the properties of a class from the methods of other classes. To access the properties of a class, usually you need to use special methods of this class to get and change its properties.
1. Modularity for easier troubleshooting
When working with object-oriented programming languages, you know exactly where to look when something goes wrong. “Oh, the car object broke down? The problem must be in the Car class!” You don’t have to go line-by-line through all your code.
That’s the beauty of encapsulation. Objects are self-contained, and each bit of functionality does its own thing while leaving the other bits alone. Also, this modularity allows an IT team to work on multiple objects simultaneously while minimizing the chance that one person might duplicate someone else’s functionality.
2. Reuse of code through inheritance
Suppose that in addition to your Car object, one colleague needs a RaceCar object, and another needs a Limousine object. Everyone builds their objects separately but discover commonalities between them. In fact, each object is just a different kind of Car. This is where the inheritance technique saves time: Create one generic class (Car), and then define the subclasses (RaceCar and Limousine) that are to inherit the generic class’s traits.
Of course, Limousine and RaceCar still have their unique attributes and functions. If the RaceCar object needs a method to “fireAfterBurners” and the Limousine object requires a Chauffeur, each class could implement separate functions just for itself. However, because both classes inherit key aspects from the Car class, for example the “drive” or “fillUpGas” methods, your inheriting classes can simply reuse existing code instead of writing these functions all over again.
What if you want to make a change to all Car objects, regardless of type? This is another advantage of the OOP approach. Make a change to your Car class, and all car objects will simply inherit the new code.
3. Flexibility through polymorphism
Riffing on this example, you now need just a few drivers, or functions, like “driveCar,” driveRaceCar” and “DriveLimousine.” RaceCarDrivers share some traits with LimousineDrivers, but other things, like RaceHelmets and BeverageSponsorships, are unique.
This is where object-oriented programming’s polymorphism comes into play. Because a single function can shape-shift to adapt to whichever class it’s in, you could create one function in the parent Car class called “drive” — not “driveCar” or “driveRaceCar,” but just “drive.” This one function would work with the RaceCarDriver, LimousineDriver and so on. In fact, you could even have “raceCar.drive(myRaceCarDriver)” or “limo.drive(myChauffeur).”
4. Effective problem solving
Many people avoid learning OOP because the learning curve seems steeper than that for top-down programming. But take the time to master OOP and you’ll find it’s the easier, more intuitive approach for developing big projects.
Object-oriented programming is ultimately about taking a huge problem and breaking it down to solvable chunks. For each mini-problem, you write a class that does what you require. And then — best of all — you can reuse those classes, which makes it even quicker to solve the next problem.
This isn’t to say that OOP is the only way to write software. But there’s a reason that languages like C++, C# and Java are the go-to options for serious software development.
Steep expectation to learn and adapt: The perspective engaged with object-situated programming may not be normal for certain individuals, and it can invest in some opportunity to become accustomed to it. It is complex to make programs in view of the cooperation of articles. A portion of the key programming procedures, like inheritance and polymorphism, can be tested to appreciate at first.
Bigger program size: Object-arranged programs commonly include more lines of code than procedural projects.
More slow projects: Object-arranged programs are normally slower than procedure-based programs, as they ordinarily require more guidelines to be executed.
Programmers need to have brilliant designing skill and programming skill along with proper planning because using OOP is little bit tricky.
"is" - inheritance
"has" - composition
As an example, let's say we have the classes Building, House, and Bathroom. So the House is a building, which cannot be said about Bath, which is not a house. But the House has \ includes a Bath. If you want to reuse code, then you don't have to use inheritance. If there is no "is" relationship, then it's better to use composition to reuse code.
Don't use inheritance to get polymorphism if there is no "is" key dependency. Use interfaces for polymorphism.
From the specification, you can see that
An association denotes a relationship between objects.
Aggregation and composition are special cases of association.
Aggregation assumes that objects are related in a "part-of" relationship.
Composition is a more rigorous variant of aggregation. In addition to the part-of requirement, a condition is imposed that a "part" cannot belong to different "owners" at the same time, and ends its existence together with the owner.
For example:
motorcycle -> luggage bag - association. The relation "has".
motorcycle -> wheel - composition.
interest group -> person - aggregation. a person is part of a group, but may belong to several different groups.
Polymorphism refers to the ability of a variable of a given type to refer to objects of different types by calling a method that is specific to the particular type of object reference.
What is the advantage of polymorphism? It allows you to add new derived object classes without breaking the calling code. The use of polymorphism is also called dynamic object binding.
Consider an example of polymorphism:
There are classes: Shape, circle and triangle.
The circle and triangle are inherited from the shape, respectively. Each class has a "draw" method. In circle and triangle, this method is overridden.
So, we create an object with the "Shape" type and assign it a reference to an object of the "Circle" type and call the "draw" method on this object. As a result, the method of the class "Circle" is called, and not the class "Shape" as expected.
Figure f = new Circle();
f.draw();
Also, instead of the "Shape" parent class, for example, you can use the "Shape" interface, defining the draw method there. We implement this interface in the "Circle" and "Triangle" classes. Next, we create an object on the interface and assign it a reference to an object of some of the classes that implement this interface.
We can say that we encapsulate behavior of drawShape() method.
This is convenient, for example, if we have a certain method:
public void drawShape(Shape f){
f.draw();
}
Please note that we are passing a parameter with the interface type to the method, i.e. we do not know what type of object will be there, but there is will be the implementation of such behavior behind the object. Further, we can simply create another class, for example, "Trapezoid", implement the "Shape" interface and simply pass an instance of the class to the method without changing anything in the implementation and call.
Definition of which exactly method will be invoked during the runtime, depending on which object will stand behind the reference - that is called dynamic binding.
+
+
+
+
diff --git a/15 - ===== OOP Interview Preparation =====/003 Part 2 OOP Interview - Questions and Answers.html b/15 - ===== OOP Interview Preparation =====/003 Part 2 OOP Interview - Questions and Answers.html
new file mode 100644
index 0000000000000000000000000000000000000000..61eccc3c698f3d1300dc923925bb2c6ce4856d87
--- /dev/null
+++ b/15 - ===== OOP Interview Preparation =====/003 Part 2 OOP Interview - Questions and Answers.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+ Part 2 OOP Interview - Questions and Answers
+
+
+
+
+
+
+
Part 2 OOP Interview - Questions and Answers
+
Java has the following access modifiers:
private: (used in constructors, inner classes, methods and class fields) - Access is allowed only in the current class.
default (package-private): (used in classes, constructors, interfaces, inner classes, methods and class fields) - Package level access. If the class is declared like this, it will only be available within the package.
protected: (used in constructors, inner classes, methods, and class fields) An access modifier at the package level and in the inheritance hierarchy.
public: (used in classes, constructors, interfaces, inner classes, methods and class fields) - Public access modifier, available to everyone.
The sequence of modifiers in descending order of privacy level: private, default ,protected, public).
An abstract class is a class that is marked "abstract" and may or may not contain abstract methods. An instance of an abstract class cannot be instantiated. A class that inherits from an abstract class may or may not implement abstract methods. In case child class doesn’t implement all abstract methods, then it must also be abstract. Also, if the inheritor class overrides the method implemented in the abstract parent class, it can be overridden with the abstract modifier! That is, to abandon the implementation. Accordingly, this class must also be abstract as well.
As for the interface, it contains only abstract methods and constants, this was the case before the release of Java 8. Starting with Java 8, in addition to abstract methods, we can also use standard methods (default methods) and static methods (static methods) in interfaces.
A Default method in an interface is a method in an interface with default logic that is not required to be defined in the implementation of that interface.
Static methods in an interface are essentially the same as static methods in an abstract class.
When implementing an interface, a class must implement all methods of the interface. Otherwise, the class must be marked as abstract. An interface can also contain inner classes. And no abstract methods in them.
Also, always remember that you can extend only one class in Java, but you can implement multiple interfaces.
What to use: Interface or Abstract class?
An abstract class is used when we need some kind of default implementation. An interface is used when a class needs to specify specific behavior. Often an interface and an abstract class are combined, i.e. implement an interface in an abstract class to specify the default behavior and implementation.
In general, a private class variable can only be accessed within the class in which it is declared. Private variables can also be accessed through the Java Reflection API.
Static methods can be overloaded by non-static methods and vice versa - without restrictions. But there is no point in overriding a static method.
An inner class is a class that exists within a class or interface. In doing so, it gains access to all fields and methods of its outer class.
What can it be used for? For example, to provide some additional class logic and encapsulate it. Although the use of inner classes complicates the program, it is recommended to avoid their use.
Static variables are initialized when the class is loaded by the classloader, and do not depend on the object. An instance variable is initialized when the class is created.
Example: For example, we need a global variable for all objects of a class, such as the number of visits by users of a particular article on the Internet. Each time an article is visited, a new object is created and the visits variable is incremented. The visits variable is a static variable that remains the same for all instances of the same class.
Type casting is setting the type of a variable or object to something other than the current type. There are two types of cast in jew:
Automatic happens for example in such cases:
byte->short->int->long->float->double
that is, if we extend the type, then no explicit conversion is required, the cast happens automatically. If we are narrowing, then it is necessary to explicitly specify the type conversion.
In the case of objects, we can automatically cast from the child type to the parent, but not vice versa, then a ClassCastException will be thrown.
A static class can only be an nested class (a class definition is placed inside another class). An object of an ordinary inner class holds a reference to an object of the outer class. There is no such reference inside a static inner class.
That is: An object of an outer class is not needed to create an object of a static inner class. From an object of a static nested class, you cannot directly access the non-static members of the outer class. Also, ordinary inner classes cannot contain static methods and members.
Why do we need nested classes at all? Each inner class is able to independently inherit a specific implementation. Thus, the nested class is not restricted from being inherited in situations where the outer class already inherits the implementation. That is, it is like a solution to the problem of multiple inheritance.
Nested classes exist within other classes. A normal class is a full member of a package. Nested classes, which have been available since Java 1.1, can be of four types:
static nested classes
non-static inner classes
local classes
anonymous classes
Static nested classes - like any other static method, it has access to any static methods of its outer class, including private ones. It cannot access non-static fields and methods of the enclosing class directly. It can only use them through a reference to an instance of the parent's class.
Non-static inner classes - classes that are declared inside other class and that are have access to the non-static properties of the outer parent class.
Local classes are classes that are defined in a block, which is a group of zero or more statements between balanced braces. You typically find local classes defined in the body of a method.
Anonymous Classes - These class types do not have a name and are only visible inside the block.
Yes, if you expand (package -> protected -> public)
Yes, if Downcasting is performed (downcasting, conversion down the hierarchy), that is, the return type in the overridden method of the heir class must NOT be wider than in the parent class (Object -> Number -> Integer)
No, in this case, Overload occurs
Yes
It is possible to change the order. It is possible to remove the throws section from the method altogether, since it is already defined. It is also possible to add new exceptions that inherit from declared or runtime exceptions.
Method overriding is valid when classes are inherited, i.e. a method with the same signature is declared in the descendant class as in the parent class. This means that this method has overridden the method of its superclass.
A few points about this:
The access modifier in the method of the descendant class must be NOT narrower than in the parent class, otherwise there will be a compilation error.
The description of the exception in the overridden method of the descendant class must NOT be wider than in the parent class, otherwise a compilation error will appear.
A method declared as "private" in a parent class cannot be overridden!
In Java, if there are no explicitly defined constructors in a class, then the compiler uses an implicitly defined default constructor, which is similar to a "pure" default constructor. The default constructor is a fairly simple construct, which boils down to creating a constructor for a type with no parameters. So, for example, if a user-defined constructor is not declared when declaring a non-static class (it doesn’t matter if it has parameters or without them), then the compiler will independently generate a constructor without parameters. Some programmers explicitly set a default constructor out of habit so they don't forget later, but this is not necessary.
In Java, if the derived class does not explicitly call the base class constructor (in Java, using super() in the first line), then the default constructor is implicitly called. If the base class does not have a default constructor, then this is considered an error.
+
+
+
+
diff --git a/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 EXAM-task-and-OOP-Homework.url b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 EXAM-task-and-OOP-Homework.url
new file mode 100644
index 0000000000000000000000000000000000000000..950e4673480d48a1fc65ce642a83ff95fb1ad1f2
--- /dev/null
+++ b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 EXAM-task-and-OOP-Homework.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://docs.google.com/document/d/1_j1MAEahsHMk7MpnGXGZLNyW6UPiVKfDhWLaHl47eg8/edit?usp=sharing
\ No newline at end of file
diff --git a/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Exam and homework for OOP topic_en.srt b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Exam and homework for OOP topic_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..38647ae37fd35a059c2457334eda552c0704bfa5
--- /dev/null
+++ b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Exam and homework for OOP topic_en.srt
@@ -0,0 +1,532 @@
+1
+00:00:05,000 --> 00:00:11,000
+Hello, dear students, in this lesson, we'll discuss task for your exam, I will show you the requirements
+
+2
+00:00:11,000 --> 00:00:12,000
+for your exam task.
+
+3
+00:00:12,000 --> 00:00:19,000
+Now you have enough knowledge to implement back and part of the online shop will use this code and will
+
+4
+00:00:19,000 --> 00:00:20,000
+develop it more as we go.
+
+5
+00:00:21,000 --> 00:00:26,000
+For example, after we learn new topics will modify current application, and this will end up with
+
+6
+00:00:26,000 --> 00:00:30,000
+implementation of real e-commerce web application.
+
+7
+00:00:30,000 --> 00:00:35,000
+Today will briefly discuss what is BGT approach to describe requirements.
+
+8
+00:00:35,000 --> 00:00:38,000
+And I will show you how your exam solution has to work.
+
+9
+00:00:38,000 --> 00:00:44,000
+I will not show you the solution in this lesson, but I will show you what I expect you to implement.
+
+10
+00:00:44,000 --> 00:00:49,000
+Also in attachments to this lesson, I will share with you source code of template for your exam task
+
+11
+00:00:49,000 --> 00:00:54,000
+and source code of the solution of exam task so that you could investigate it later.
+
+12
+00:00:55,000 --> 00:01:00,000
+But first, I would like briefly to discuss with you a few tasks for object oriented programming topic
+
+13
+00:01:00,000 --> 00:01:04,000
+which will help you to get practical skills before you start work on the exam task.
+
+14
+00:01:05,000 --> 00:01:06,000
+OK, so let's start.
+
+15
+00:01:07,000 --> 00:01:10,000
+I will leave this link with task description in attachment to this lesson.
+
+16
+00:01:11,000 --> 00:01:12,000
+First task.
+
+17
+00:01:12,000 --> 00:01:19,000
+In short, you have to create a few classes that will describe book author, publisher and cover type.
+
+18
+00:01:19,000 --> 00:01:22,000
+You should organize quote in object oriented manner.
+
+19
+00:01:23,000 --> 00:01:26,000
+After that, you should implement filtering behavior for book service.
+
+20
+00:01:27,000 --> 00:01:33,000
+Also here you can find method declarations that you have to implement an example of books array, which
+
+21
+00:01:33,000 --> 00:01:36,000
+you can use for testing purposes just to save your time.
+
+22
+00:01:37,000 --> 00:01:41,000
+The second task is about practicing of inheritance and polymorphous principle.
+
+23
+00:01:42,000 --> 00:01:48,000
+You have to implement the Iraqi of sweets and you should create a present class which will have behavior
+
+24
+00:01:48,000 --> 00:01:54,000
+that will allow clients of your code to interact with a group of sweets here method declarations that
+
+25
+00:01:54,000 --> 00:01:57,000
+have to be implemented in scope of this task.
+
+26
+00:01:57,000 --> 00:02:00,000
+The program has to be able to add sweets to present.
+
+27
+00:02:00,000 --> 00:02:06,000
+After that, we can filter sweets by sugar and we can calculate total weight of a present.
+
+28
+00:02:06,000 --> 00:02:12,000
+I hope you will be able to implement this task because we discussed multiple similar examples during
+
+29
+00:02:12,000 --> 00:02:14,000
+the lessons about Olby.
+
+30
+00:02:15,000 --> 00:02:18,000
+The third task is to give you opportunity to practice your skills.
+
+31
+00:02:18,000 --> 00:02:19,000
+In writing nested classes.
+
+32
+00:02:20,000 --> 00:02:25,000
+You have to implement programs that will be able to track transactions from one account to another.
+
+33
+00:02:26,000 --> 00:02:31,000
+And all logic related to this process here, you will find detailed acceptance criteria that will help
+
+34
+00:02:31,000 --> 00:02:33,000
+you to implement this task.
+
+35
+00:02:33,000 --> 00:02:36,000
+And finally, here are requirements for your exam.
+
+36
+00:02:37,000 --> 00:02:39,000
+You have to implement it back and forth and line shop.
+
+37
+00:02:40,000 --> 00:02:47,000
+The system should support such basic operations as user registration user sign in and sign out product
+
+38
+00:02:47,000 --> 00:02:55,000
+catalog navigation in product to a cart, submitting an order, checkout user management and others.
+
+39
+00:02:55,000 --> 00:03:02,000
+This will be used in further education and next topics and will end up with creating your web e-commerce
+
+40
+00:03:02,000 --> 00:03:03,000
+application.
+
+41
+00:03:03,000 --> 00:03:10,000
+All requirements are split in different sections here, like menu, sign up, sign in and sign out product
+
+42
+00:03:10,000 --> 00:03:11,000
+catalog.
+
+43
+00:03:11,000 --> 00:03:14,000
+Check out my orders, settings and customer lists.
+
+44
+00:03:15,000 --> 00:03:17,000
+This is not a lesson about BD.
+
+45
+00:03:18,000 --> 00:03:25,000
+We are going to have lesson about BDD later, but initiate this user scenarist which you see here are
+
+46
+00:03:25,000 --> 00:03:27,000
+written in BGT format.
+
+47
+00:03:27,000 --> 00:03:30,000
+BTG stands for Behavior Driven Development.
+
+48
+00:03:30,000 --> 00:03:36,000
+It is about describing requirements so that they would be clear and understandable for product owners,
+
+49
+00:03:37,000 --> 00:03:39,000
+developers and quality assurance engineers.
+
+50
+00:03:40,000 --> 00:03:46,000
+In other words, goal of this approach is to make sure that technical and non-technical people are on
+
+51
+00:03:46,000 --> 00:03:49,000
+the same page regarding how systems should behave.
+
+52
+00:03:50,000 --> 00:03:52,000
+The scenarios will be easy to understand for you.
+
+53
+00:03:53,000 --> 00:03:59,000
+Each scenario has a precondition or description of the initial state description of the behavior and
+
+54
+00:03:59,000 --> 00:04:01,000
+description of expected result.
+
+55
+00:04:01,000 --> 00:04:04,000
+For example, let's read the first scenario here.
+
+56
+00:04:04,000 --> 00:04:11,000
+Given I am an app user when I ran the program, then I see the main menu.
+
+57
+00:04:11,000 --> 00:04:13,000
+Is it clear how system should behave?
+
+58
+00:04:14,000 --> 00:04:15,000
+I believe more than enough.
+
+59
+00:04:16,000 --> 00:04:19,000
+Sometimes you will find technical notes to the behavior scenario.
+
+60
+00:04:20,000 --> 00:04:28,000
+Like here, for example, menu consists of the next items that so the next scenarios are written pretty
+
+61
+00:04:28,000 --> 00:04:29,000
+in similar manner.
+
+62
+00:04:29,000 --> 00:04:31,000
+I hope you will understand all of them.
+
+63
+00:04:32,000 --> 00:04:37,000
+After scenarios, you have a description of the interfaces and classes that you have to implement.
+
+64
+00:04:37,000 --> 00:04:44,000
+My advice to you try to implement this program by yourself first because it is very important to think
+
+65
+00:04:44,000 --> 00:04:46,000
+about the requirements.
+
+66
+00:04:46,000 --> 00:04:49,000
+You will be able to apply your knowledge, which you learned recently.
+
+67
+00:04:50,000 --> 00:04:54,000
+This is the part of your education to think how you can apply your knowledge.
+
+68
+00:04:55,000 --> 00:05:02,000
+There is no very complicated logic in this application, but it is really hard to implement this application
+
+69
+00:05:02,000 --> 00:05:03,000
+in object.
+
+70
+00:05:03,000 --> 00:05:10,000
+Oriented manner, so it would be easier to support and extend in the future once you try to implement
+
+71
+00:05:10,000 --> 00:05:12,000
+this app by yourself after that.
+
+72
+00:05:12,000 --> 00:05:20,000
+Take a look at the suggested structure of interfaces, try to implement these interfaces and only after
+
+73
+00:05:20,000 --> 00:05:22,000
+that, look at my solution source code.
+
+74
+00:05:23,000 --> 00:05:26,000
+You can find links to the solution source code right here.
+
+75
+00:05:26,000 --> 00:05:29,000
+Also, you can find template projects here.
+
+76
+00:05:29,000 --> 00:05:35,000
+Hope all this information will help you to understand the task and to learn practical aspects of OPIS.
+
+77
+00:05:36,000 --> 00:05:39,000
+Now, let me show you the way how this application should work.
+
+78
+00:05:40,000 --> 00:05:43,000
+I ran the program and expand console.
+
+79
+00:05:43,000 --> 00:05:45,000
+You can also do this way with double left.
+
+80
+00:05:45,000 --> 00:05:47,000
+Click on the console.
+
+81
+00:05:47,000 --> 00:05:53,000
+You I will demo probably not all but major behaviors and there those that you could understand how your
+
+82
+00:05:53,000 --> 00:05:55,000
+end program should look like.
+
+83
+00:05:55,000 --> 00:06:00,000
+Right after I ran the program, I choose the main menu of the application.
+
+84
+00:06:00,000 --> 00:06:02,000
+Let me check settings.
+
+85
+00:06:03,000 --> 00:06:03,000
+Oops.
+
+86
+00:06:03,000 --> 00:06:08,000
+And you see, I can't access some menus while I am not logged in.
+
+87
+00:06:09,000 --> 00:06:14,000
+That means we need to implement some storage for my session in web applications.
+
+88
+00:06:14,000 --> 00:06:16,000
+That will be HTP session.
+
+89
+00:06:16,000 --> 00:06:17,000
+I don't have accounts.
+
+90
+00:06:17,000 --> 00:06:19,000
+Registered user.
+
+91
+00:06:19,000 --> 00:06:20,000
+Let me sign up.
+
+92
+00:06:21,000 --> 00:06:25,000
+I am asked to provide my first name, last name, password and email.
+
+93
+00:06:25,000 --> 00:06:28,000
+I will feel it with my information.
+
+94
+00:06:28,000 --> 00:06:30,000
+Give me a few seconds please.
+
+95
+00:06:34,000 --> 00:06:42,000
+OK, now user is created and I'm logged in and do you see this sign in is changed to sign out, let
+
+96
+00:06:42,000 --> 00:06:46,000
+me sign out to make sure that my credentials are valid.
+
+97
+00:06:46,000 --> 00:06:49,000
+I enter to and I am signed out.
+
+98
+00:06:49,000 --> 00:06:51,000
+Now let me sign in.
+
+99
+00:06:52,000 --> 00:06:58,000
+I enter option two and now I am asked to provide my email and password.
+
+100
+00:06:58,000 --> 00:07:00,000
+OK, one second.
+
+101
+00:07:03,000 --> 00:07:04,000
+Let me end wrong passwords.
+
+102
+00:07:05,000 --> 00:07:10,000
+Oops, I see the error message, let me enter the right password.
+
+103
+00:07:10,000 --> 00:07:10,000
+Now.
+
+104
+00:07:13,000 --> 00:07:21,000
+Now, everything is OK now when I logged in, let me buy something, I can navigate the product catalog
+
+105
+00:07:22,000 --> 00:07:22,000
+here.
+
+106
+00:07:22,000 --> 00:07:23,000
+We have a lot of products.
+
+107
+00:07:24,000 --> 00:07:27,000
+Let me enter idea of products that I want to buy.
+
+108
+00:07:28,000 --> 00:07:31,000
+OK, now this product is added to the card.
+
+109
+00:07:32,000 --> 00:07:34,000
+Let me add one more product.
+
+110
+00:07:34,000 --> 00:07:37,000
+Now I want to go to checkout.
+
+111
+00:07:37,000 --> 00:07:44,000
+I enter checkout and I navigate it to checkout menu where I asked to enter my credit card number.
+
+112
+00:07:45,000 --> 00:07:46,000
+Here it is.
+
+113
+00:07:46,000 --> 00:07:51,000
+It should have 16 digits, I press, enter and purchase has done.
+
+114
+00:07:52,000 --> 00:07:54,000
+Let me check my audience.
+
+115
+00:07:55,000 --> 00:08:04,000
+Here's my purchase, awesome and so on in settings menu, I can change my email address and once I changed
+
+116
+00:08:04,000 --> 00:08:09,000
+my email address, the existing functionality should work as previously shown.
+
+117
+00:08:09,000 --> 00:08:15,000
+Talking in specific, I would like to draw attention to login functionality and fetching orders for
+
+118
+00:08:15,000 --> 00:08:16,000
+specific user.
+
+119
+00:08:16,000 --> 00:08:18,000
+So this is it.
+
+120
+00:08:18,000 --> 00:08:21,000
+That is how applications should look like.
+
+121
+00:08:21,000 --> 00:08:25,000
+They're much more scenarios that you have to implement and scope of the exam.
+
+122
+00:08:25,000 --> 00:08:31,000
+But now you can at least understand how end user will be able to interact with your application.
+
+123
+00:08:31,000 --> 00:08:37,000
+As I mentioned before, you will be able to find a solution for this exam in attachments to the lesson.
+
+124
+00:08:38,000 --> 00:08:45,000
+This solution includes only things that you have learned OPIS arrays, methods and nothing about that.
+
+125
+00:08:45,000 --> 00:08:52,000
+And definitely the code might be improved, but we will improve it together and we will add more use
+
+126
+00:08:52,000 --> 00:08:56,000
+cases during our learning process and you will learn of new topics.
+
+127
+00:08:57,000 --> 00:09:00,000
+It looks like that it follows the steps I described.
+
+128
+00:09:01,000 --> 00:09:06,000
+And in case, even after you will investigate solution of the exam, you wouldn't understand something.
+
+129
+00:09:06,000 --> 00:09:09,000
+Feel free to ask any questions that are not clear.
+
+130
+00:09:10,000 --> 00:09:16,000
+I worked a lot to make sure that solution doesn't contain pieces you didn't learn yet in this course,
+
+131
+00:09:17,000 --> 00:09:21,000
+but in case additional clarifications will be required, I'm here to help.
+
+132
+00:09:22,000 --> 00:09:24,000
+Thanks a lot for your attention.
+
+133
+00:09:24,000 --> 00:09:26,000
+See you in the next lesson.
+
diff --git a/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Solution-of-OOP-hometasks.url b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Solution-of-OOP-hometasks.url
new file mode 100644
index 0000000000000000000000000000000000000000..99070f7ca0dbe0064cb8b9d7f1bb28785bac2e3d
--- /dev/null
+++ b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Solution-of-OOP-hometasks.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/hw
\ No newline at end of file
diff --git a/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Solution-of-exam-task.url b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Solution-of-exam-task.url
new file mode 100644
index 0000000000000000000000000000000000000000..ef773c79ee74884ea16c05378c339cbefedb1a01
--- /dev/null
+++ b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Solution-of-exam-task.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/exam/onlineshop
\ No newline at end of file
diff --git a/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Template-of-exam-task.url b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Template-of-exam-task.url
new file mode 100644
index 0000000000000000000000000000000000000000..cbb0bd5802ece20ff060d772a10bb190b9ac753c
--- /dev/null
+++ b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/001 Template-of-exam-task.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/exam/templates/onlineshop
\ No newline at end of file
diff --git a/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/external-links.txt b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/external-links.txt
new file mode 100644
index 0000000000000000000000000000000000000000..52e415c8671d2e5248bfcb05ad6df1d21025027e
--- /dev/null
+++ b/16 - === EXAM OOP & Object Oriented e-Commerce console applications ===/external-links.txt
@@ -0,0 +1,12 @@
+
+001 EXAM-task-and-OOP-Homework
+https://docs.google.com/document/d/1_j1MAEahsHMk7MpnGXGZLNyW6UPiVKfDhWLaHl47eg8/edit?usp=sharing
+
+001 Template-of-exam-task
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/exam/templates/onlineshop
+
+001 Solution-of-exam-task
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/exam/onlineshop
+
+001 Solution-of-OOP-hometasks
+https://github.com/AndriiPiatakha/learnit_java_core/tree/master/src/com/itbulls/learnit/javacore/oop/hw
diff --git a/17 - GIT/001 Version Control Systems & Git - Overview_en.srt b/17 - GIT/001 Version Control Systems & Git - Overview_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..b3af9b47d67d6a245ac6b7038c0da418b7a70f90
--- /dev/null
+++ b/17 - GIT/001 Version Control Systems & Git - Overview_en.srt
@@ -0,0 +1,368 @@
+1
+00:00:06,000 --> 00:00:12,000
+Hello, yes, students in this lesson will talk about version control systems, we are going to discuss
+
+2
+00:00:12,000 --> 00:00:13,000
+why do we need them?
+
+3
+00:00:13,000 --> 00:00:16,000
+I will give you the list of the most popular version, control systems.
+
+4
+00:00:16,000 --> 00:00:21,000
+And we will focus our attention on get why we have to learn it.
+
+5
+00:00:21,000 --> 00:00:27,000
+And at the end of this lesson, I will give you a short overview of good features and how it operates.
+
+6
+00:00:27,000 --> 00:00:33,000
+First of all, get the same as ours and mission control systems is not a programming language.
+
+7
+00:00:34,000 --> 00:00:36,000
+You might be wondering then why do we need to learn it?
+
+8
+00:00:37,000 --> 00:00:44,000
+It is pretty common that multiple software engineers work on the same program simultaneously or different
+
+9
+00:00:44,000 --> 00:00:47,000
+versions of a program are deployed on different environments.
+
+10
+00:00:47,000 --> 00:00:54,000
+Thus, GM needs to have some tools that will allow them to track changes in the source code, configuration
+
+11
+00:00:54,000 --> 00:00:57,000
+files and time documentation.
+
+12
+00:00:57,000 --> 00:01:03,000
+For example, each engineer may have archive was the source code and after that key members have to
+
+13
+00:01:03,000 --> 00:01:04,000
+merge got somehow together.
+
+14
+00:01:05,000 --> 00:01:11,000
+While this approach might work, it is extremely inefficient and doesn't allow to track changes closely
+
+15
+00:01:11,000 --> 00:01:16,000
+also for the purpose of finding localising and fixing the defect in the code.
+
+16
+00:01:16,000 --> 00:01:22,000
+It is critically important to compare different versions of the code to identify where exactly back
+
+17
+00:01:22,000 --> 00:01:24,000
+appeared to fix it.
+
+18
+00:01:24,000 --> 00:01:29,000
+That's why we are, as a programmers should know how to use version control systems.
+
+19
+00:01:30,000 --> 00:01:34,000
+Let's quickly discuss what is the most popular version control systems are.
+
+20
+00:01:34,000 --> 00:01:45,000
+They are Baza CBS Marcorelle Subversion Get and according to this survey, get this used by almost millions
+
+21
+00:01:45,000 --> 00:01:47,000
+of people who took part in this survey.
+
+22
+00:01:48,000 --> 00:01:53,000
+Definitely get the most powerful and popular version control system nowadays.
+
+23
+00:01:53,000 --> 00:01:56,000
+That is the first reason why we are going to learn it.
+
+24
+00:01:56,000 --> 00:02:02,000
+The second reason is the fact that knowing how it works, it would be like piece of cake for you to
+
+25
+00:02:02,000 --> 00:02:05,000
+understand how, as a controlled version, systems work.
+
+26
+00:02:05,000 --> 00:02:12,000
+Every job description for software engineer require from your knowledge of it because of its popularity.
+
+27
+00:02:12,000 --> 00:02:18,000
+As you might already understand, it is a program which is used to track changes in the source code
+
+28
+00:02:18,000 --> 00:02:22,000
+during the development, but it can be used with any type of files.
+
+29
+00:02:23,000 --> 00:02:26,000
+Right now we'll do high level overview of the gate.
+
+30
+00:02:26,000 --> 00:02:30,000
+I will tell you key features and basic principles of how it operates.
+
+31
+00:02:31,000 --> 00:02:37,000
+The key difference between the gate and other version control systems is that it doesn't store differences
+
+32
+00:02:37,000 --> 00:02:37,000
+in files.
+
+33
+00:02:38,000 --> 00:02:44,000
+It stores links to the snapshot of changed files in case file wasn't changed.
+
+34
+00:02:44,000 --> 00:02:46,000
+Get doesn't store this file again.
+
+35
+00:02:47,000 --> 00:02:52,000
+Instead, it stores just a link to the previous identical files that was already stored.
+
+36
+00:02:52,000 --> 00:02:59,000
+So each time you can make changes, it takes a picture of what all files look like at the moment and
+
+37
+00:02:59,000 --> 00:03:01,000
+stores a reference to that snapshot.
+
+38
+00:03:02,000 --> 00:03:06,000
+This is important distinction between GIT and other version control systems.
+
+39
+00:03:07,000 --> 00:03:13,000
+And another important get feature is the fact that you can't do anything without knowing this before
+
+40
+00:03:13,000 --> 00:03:21,000
+snapshot of your file system is created, everything is check samed and hashas created afterwards.
+
+41
+00:03:21,000 --> 00:03:26,000
+You can use this checksum to refer to this exact state of the files.
+
+42
+00:03:26,000 --> 00:03:33,000
+That means it is impossible to change the contents of any file or directory without knowing about it.
+
+43
+00:03:33,000 --> 00:03:41,000
+So each your command has 40 characters string composed of hexadecimal characters and calculated based
+
+44
+00:03:41,000 --> 00:03:45,000
+on the contents of a file or directories structure.
+
+45
+00:03:45,000 --> 00:03:52,000
+Hash looks like this and you can use this hash string to navigate between different versions of your
+
+46
+00:03:52,000 --> 00:03:53,000
+code version.
+
+47
+00:03:53,000 --> 00:03:58,000
+Control systems might be centralized and distributed in centralized.
+
+48
+00:03:58,000 --> 00:04:04,000
+All engineers are connected to the main server and all people collaborate through that server.
+
+49
+00:04:04,000 --> 00:04:12,000
+The biggest drawback here is the fact that when central server is down, you can't collaborate in distributed
+
+50
+00:04:12,000 --> 00:04:14,000
+version control systems.
+
+51
+00:04:14,000 --> 00:04:21,000
+Each engineer has a copy of the whole project and can easily restore it if needed or in case there is
+
+52
+00:04:21,000 --> 00:04:28,000
+no network get is a distributed version control system to perform most of operations.
+
+53
+00:04:28,000 --> 00:04:31,000
+And yet you don't need information from another computer.
+
+54
+00:04:32,000 --> 00:04:34,000
+That's why there is no latency overhead.
+
+55
+00:04:34,000 --> 00:04:41,000
+When you work with Target, you have entire history of your repository of all changes right on your
+
+56
+00:04:41,000 --> 00:04:42,000
+local computer.
+
+57
+00:04:42,000 --> 00:04:50,000
+You have hidden dot gate folder that contains all information about the repository and you don't necessarily
+
+58
+00:04:50,000 --> 00:04:56,000
+need Internet connection to perform some operations was get if you are in airplane and you want to do
+
+59
+00:04:56,000 --> 00:05:01,000
+some coding, you can do that and successfully save all your changes.
+
+60
+00:05:01,000 --> 00:05:03,000
+You can also navigate the.
+
+61
+00:05:03,000 --> 00:05:09,000
+In the repository of your project and navigate to different versions of your code while being offline,
+
+62
+00:05:09,000 --> 00:05:16,000
+for example, in simple version and CVS, you can edit files, but you can't save changes to database
+
+63
+00:05:16,000 --> 00:05:18,000
+just because you are offline.
+
+64
+00:05:18,000 --> 00:05:24,000
+It doesn't seem to be a huge problem, though, but probably in the real world you want love this.
+
+65
+00:05:25,000 --> 00:05:31,000
+Having all repository history on your local computer gives you instant access for all changes.
+
+66
+00:05:31,000 --> 00:05:34,000
+That also means much better performance.
+
+67
+00:05:35,000 --> 00:05:41,000
+Before we get deeper to get program and get comments, I want you to understand basic principle of interaction
+
+68
+00:05:41,000 --> 00:05:45,000
+with Get This will help you to understand our next lessons.
+
+69
+00:05:46,000 --> 00:05:50,000
+All your files, according to it, can be in three different states.
+
+70
+00:05:50,000 --> 00:05:51,000
+Modify it.
+
+71
+00:05:52,000 --> 00:05:56,000
+That means you modified the file, but you have not committed your changes yet.
+
+72
+00:05:57,000 --> 00:05:58,000
+Staged.
+
+73
+00:05:58,000 --> 00:06:04,000
+This means you have marked a modified file to be present in the next snapshot of your file system.
+
+74
+00:06:04,000 --> 00:06:08,000
+Information about such changes is placed in the file with name index.
+
+75
+00:06:09,000 --> 00:06:16,000
+That's why during the course, sometimes I'm going to say at file to stage or at the index, and you
+
+76
+00:06:16,000 --> 00:06:23,000
+will understand that this means the same across all files from staging area that are marked to be present
+
+77
+00:06:23,000 --> 00:06:27,000
+in the next snapshot are reflected in index file.
+
+78
+00:06:27,000 --> 00:06:28,000
+Does it make sense?
+
+79
+00:06:29,000 --> 00:06:31,000
+And the state is committed.
+
+80
+00:06:31,000 --> 00:06:35,000
+This means that data is safely stored in your local database.
+
+81
+00:06:36,000 --> 00:06:43,000
+We can say that you have working directly that a set of files you work with the staging area is the
+
+82
+00:06:43,000 --> 00:06:51,000
+index file and Hidden doGet folder is a folder where it stores all data about your project, including
+
+83
+00:06:51,000 --> 00:06:52,000
+database for your project.
+
+84
+00:06:53,000 --> 00:06:56,000
+So your basic interactions with GIT are going to look like this.
+
+85
+00:06:57,000 --> 00:07:00,000
+You changes do file or to a set of files.
+
+86
+00:07:00,000 --> 00:07:06,000
+You add those files to index, you can make the changes and you create a snapshot of your files.
+
+87
+00:07:07,000 --> 00:07:11,000
+That said, let's recap what we have learned today.
+
+88
+00:07:12,000 --> 00:07:15,000
+Today we learned why we need version control systems.
+
+89
+00:07:15,000 --> 00:07:18,000
+Now, you know, the most popular version, control systems.
+
+90
+00:07:18,000 --> 00:07:25,000
+And you know, that git is the most popular v.c as you learn the key features of the kit and understood
+
+91
+00:07:25,000 --> 00:07:30,000
+how it operates, I believe now we are ready to proceed with our next lesson.
+
+92
+00:07:31,000 --> 00:07:34,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/17 - GIT/002 Git-download-Web-site.url b/17 - GIT/002 Git-download-Web-site.url
new file mode 100644
index 0000000000000000000000000000000000000000..197103599ea311362f3382077adbda4772a81a70
--- /dev/null
+++ b/17 - GIT/002 Git-download-Web-site.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://git-scm.com/downloads
\ No newline at end of file
diff --git a/17 - GIT/002 How to Install Git and Basic Git Configuration_en.srt b/17 - GIT/002 How to Install Git and Basic Git Configuration_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..ceacefca4293e6b943aff227e132297ef6774a68
--- /dev/null
+++ b/17 - GIT/002 How to Install Git and Basic Git Configuration_en.srt
@@ -0,0 +1,508 @@
+1
+00:00:05,000 --> 00:00:10,000
+And know the students today will install with you, get on your computers, I'll show you where you
+
+2
+00:00:10,000 --> 00:00:16,000
+can download and how you can install it on your computer after installation, I'm going to show you
+
+3
+00:00:16,000 --> 00:00:20,000
+basic configuration so that you will be ready for the next lesson.
+
+4
+00:00:20,000 --> 00:00:25,000
+Today, you will understand what repository is also in this lesson.
+
+5
+00:00:25,000 --> 00:00:27,000
+You will learn what is good bash.
+
+6
+00:00:27,000 --> 00:00:34,000
+And we let let's start open your web browser and type get download into the search.
+
+7
+00:00:35,000 --> 00:00:36,000
+Here's the website that we need.
+
+8
+00:00:37,000 --> 00:00:42,000
+Just in case, I will leave links to the website in attachments to this lesson.
+
+9
+00:00:42,000 --> 00:00:47,000
+So when you navigate it here, select your operating system and download the archive.
+
+10
+00:00:48,000 --> 00:00:53,000
+For Apple, the simple instructions how to install gate four windows.
+
+11
+00:00:53,000 --> 00:00:56,000
+We have download special guides installer.
+
+12
+00:00:56,000 --> 00:00:58,000
+Let me walk you through it.
+
+13
+00:00:58,000 --> 00:01:00,000
+Nable left clicks.
+
+14
+00:01:00,000 --> 00:01:02,000
+I agree with public license.
+
+15
+00:01:03,000 --> 00:01:07,000
+It is free for commercial use too, so don't worry about using it.
+
+16
+00:01:07,000 --> 00:01:13,000
+In commercial projects you have to select components that are needed to be installed.
+
+17
+00:01:13,000 --> 00:01:14,000
+You can keep the false selection.
+
+18
+00:01:15,000 --> 00:01:16,000
+Just a few words here.
+
+19
+00:01:16,000 --> 00:01:20,000
+Here is very convenient explorer integration for Windows.
+
+20
+00:01:20,000 --> 00:01:23,000
+In any place of your file system you can press right.
+
+21
+00:01:23,000 --> 00:01:24,000
+Click and open.
+
+22
+00:01:24,000 --> 00:01:26,000
+Get back or get gui get.
+
+23
+00:01:26,000 --> 00:01:32,000
+Bush is a special application for Microsoft Windows, which provides possibility to use good command
+
+24
+00:01:32,000 --> 00:01:32,000
+line.
+
+25
+00:01:33,000 --> 00:01:36,000
+Bush is a popular shell on Linux and Mac OS.
+
+26
+00:01:37,000 --> 00:01:42,000
+A Shell is a terminal application used to interface with an operating system.
+
+27
+00:01:42,000 --> 00:01:48,000
+In other words, Get Basche is a convenient way to have Linux like terminals that supports majority
+
+28
+00:01:48,000 --> 00:01:55,000
+of Linux Shell comments like file creation, copy of the file and lots of other things to interact with.
+
+29
+00:01:55,000 --> 00:02:01,000
+Git program get go as a separate program that provides user with graphical user interface to create
+
+30
+00:02:01,000 --> 00:02:09,000
+new repositories, clone repositories at to stage, commit and do other operations in more interactive
+
+31
+00:02:09,000 --> 00:02:12,000
+and intuitive manner rather than in git command line.
+
+32
+00:02:13,000 --> 00:02:18,000
+Later in the course we are going to run different apps that will help you to interact with get in more
+
+33
+00:02:18,000 --> 00:02:19,000
+intuitive way.
+
+34
+00:02:20,000 --> 00:02:26,000
+Almost all code EDS for different programming languages supports basic buttons that allows you to work
+
+35
+00:02:26,000 --> 00:02:27,000
+with GIT.
+
+36
+00:02:28,000 --> 00:02:33,000
+But I strongly believe that each developer should learn how to work with git bash because with the help
+
+37
+00:02:33,000 --> 00:02:40,000
+of fancy GUI application where often you can't perform all operations that you want to perform because
+
+38
+00:02:40,000 --> 00:02:42,000
+there is no exactly that button that you need.
+
+39
+00:02:43,000 --> 00:02:49,000
+And moreover, before you will press different button in desktop, get applications, you have to know
+
+40
+00:02:49,000 --> 00:02:55,000
+what this button for and the best way to learn it is to work with it was help to get back for a while.
+
+41
+00:02:56,000 --> 00:02:59,000
+Get large file storage is a pretty cool thing.
+
+42
+00:02:59,000 --> 00:03:05,000
+This is an extension that reduces the impact of large files in your repository by downloading the relevant
+
+43
+00:03:05,000 --> 00:03:06,000
+versions of them.
+
+44
+00:03:06,000 --> 00:03:13,000
+Lezley, that means it will download extremely huge files only when you will need them.
+
+45
+00:03:13,000 --> 00:03:20,000
+Let's keep this selected and another to checkboxes here is to associate good configuration files.
+
+46
+00:03:20,000 --> 00:03:28,000
+Was a default text editor and associate as H files to be run with bosz files with extension S.H. Ashwell
+
+47
+00:03:28,000 --> 00:03:33,000
+scripts that are used in many variations of Unix like operating systems.
+
+48
+00:03:33,000 --> 00:03:35,000
+I believe now we can click next.
+
+49
+00:03:36,000 --> 00:03:39,000
+At least now you know what you have selected here.
+
+50
+00:03:39,000 --> 00:03:41,000
+You have to choose the full text editor.
+
+51
+00:03:42,000 --> 00:03:45,000
+I have notepad plus plus installed on my computer.
+
+52
+00:03:45,000 --> 00:03:48,000
+That's why I didn't suggest it.
+
+53
+00:03:48,000 --> 00:03:51,000
+But you can choose any other text editor.
+
+54
+00:03:51,000 --> 00:03:57,000
+You're going to need a text editor in some rare cases when you want to use special comments to leave
+
+55
+00:03:57,000 --> 00:04:02,000
+content message with the help of command line or during the comments manipulation.
+
+56
+00:04:02,000 --> 00:04:07,000
+Anyway, I will show you how to change the full text editor whenever you want.
+
+57
+00:04:07,000 --> 00:04:10,000
+So don't worry about this and press next.
+
+58
+00:04:11,000 --> 00:04:13,000
+Keep this radio button selected.
+
+59
+00:04:13,000 --> 00:04:19,000
+It tells you that it will adjust your pass variable so that you can use it in your standard Windows
+
+60
+00:04:19,000 --> 00:04:23,000
+Command prompt use open SSL library and click next.
+
+61
+00:04:24,000 --> 00:04:31,000
+This configuration asks you whether you want to convert line endings and you probably already know Newline
+
+62
+00:04:31,000 --> 00:04:35,000
+character is different in Windows and Linux based systems.
+
+63
+00:04:36,000 --> 00:04:42,000
+Windows often still use carriage return and line in text files to start a your line.
+
+64
+00:04:42,000 --> 00:04:47,000
+That's what C RLF stands for in Unix based systems.
+
+65
+00:04:47,000 --> 00:04:50,000
+Mostly used only Lindfield character.
+
+66
+00:04:50,000 --> 00:04:56,000
+You can change it if you wish, but for the cross platform development, when team members use different
+
+67
+00:04:56,000 --> 00:04:59,000
+operating systems, the first radio button is recommended.
+
+68
+00:05:00,000 --> 00:05:01,000
+Click next.
+
+69
+00:05:01,000 --> 00:05:03,000
+Here, we need to select the.
+
+70
+00:05:03,000 --> 00:05:10,000
+Emulator for terminal, I recommend Torleif mean w why can you need to choose a default behavior of
+
+71
+00:05:10,000 --> 00:05:10,000
+gatepost?
+
+72
+00:05:11,000 --> 00:05:12,000
+What is getable?
+
+73
+00:05:12,000 --> 00:05:14,000
+Fastforward Mirch and rebate's.
+
+74
+00:05:14,000 --> 00:05:16,000
+We are going to learn on the next lessons.
+
+75
+00:05:17,000 --> 00:05:20,000
+This configuration also possible to change after installation.
+
+76
+00:05:21,000 --> 00:05:27,000
+Leave default here and click next to store your credentials and manage them in an efficient manner.
+
+77
+00:05:27,000 --> 00:05:29,000
+You can use git credential manager.
+
+78
+00:05:29,000 --> 00:05:37,000
+I recommend keeping this radio button selected and able filesystem Cashen that should increase performance
+
+79
+00:05:37,000 --> 00:05:37,000
+of the gate.
+
+80
+00:05:38,000 --> 00:05:45,000
+You can skip this one and live it unchecked and now just press install button that said.
+
+81
+00:05:46,000 --> 00:05:52,000
+Now, when you install the gate open file explorer in any place, click mouse, right, click.
+
+82
+00:05:53,000 --> 00:05:58,000
+You're going to see bushier option, click on it, and here is your kid Bash.
+
+83
+00:05:58,000 --> 00:05:59,000
+Congratulations.
+
+84
+00:06:00,000 --> 00:06:04,000
+Now, the first thing we need to do is to target who we are.
+
+85
+00:06:05,000 --> 00:06:11,000
+Every snapshot of the file system contains information about the author of The Snapshot.
+
+86
+00:06:11,000 --> 00:06:18,000
+Probably this was done to easily identify who broke system or who created the defect in the application.
+
+87
+00:06:18,000 --> 00:06:25,000
+But nevertheless, without telling you who you are, you won't be able to commit changes yet allows
+
+88
+00:06:25,000 --> 00:06:31,000
+you to set configuration on three different levels, system configurations that will be applied to all
+
+89
+00:06:31,000 --> 00:06:38,000
+users on your computer and all their repositories, global conflicts that will be applied to all the
+
+90
+00:06:38,000 --> 00:06:45,000
+repositories on your computer for the current user and local conflicts that will be applied only to
+
+91
+00:06:45,000 --> 00:06:47,000
+the current repository.
+
+92
+00:06:47,000 --> 00:06:53,000
+What you need to remember is that values on the lower level overrides values of the upper level.
+
+93
+00:06:54,000 --> 00:07:00,000
+For example, values that are set in local conflicts will override values from system conflicts because
+
+94
+00:07:00,000 --> 00:07:04,000
+they are more specific TSAs more important, probably.
+
+95
+00:07:04,000 --> 00:07:09,000
+You're interested what a repository is because we are using such term.
+
+96
+00:07:09,000 --> 00:07:10,000
+But I didn't explain.
+
+97
+00:07:11,000 --> 00:07:12,000
+What does it mean?
+
+98
+00:07:12,000 --> 00:07:16,000
+I get Repository is a get folder inside the project.
+
+99
+00:07:17,000 --> 00:07:23,000
+The repository contains multiple files with configuration and current project history to track all changes
+
+100
+00:07:23,000 --> 00:07:28,000
+made to files in project how to create a good repository.
+
+101
+00:07:28,000 --> 00:07:33,000
+We are going to learn in the next lesson, but now you understand what this term means.
+
+102
+00:07:33,000 --> 00:07:36,000
+Right now I suggest proceeding with git installation.
+
+103
+00:07:37,000 --> 00:07:41,000
+To tell you who you are, you need to perform the following commands.
+
+104
+00:07:41,000 --> 00:07:43,000
+Get config.
+
+105
+00:07:44,000 --> 00:07:49,000
+Global username and repetoire.
+
+106
+00:07:50,000 --> 00:07:52,000
+Here I said username.
+
+107
+00:07:52,000 --> 00:07:56,000
+And one more comment yet, config.
+
+108
+00:07:57,000 --> 00:08:09,000
+Global user email and repetoire at example, dot com, I recommend you use global FLAC here to set settings
+
+109
+00:08:09,000 --> 00:08:10,000
+for all repositories.
+
+110
+00:08:10,000 --> 00:08:13,000
+These conflicts will be applied on a global level.
+
+111
+00:08:14,000 --> 00:08:20,000
+That is awesome to check the value of the specific property you can use to get config command.
+
+112
+00:08:20,000 --> 00:08:26,000
+For example, to check username, I need to type next gate config.
+
+113
+00:08:26,000 --> 00:08:27,000
+User name.
+
+114
+00:08:29,000 --> 00:08:36,000
+To list all properties with values, I have to type the following gate config list.
+
+115
+00:08:37,000 --> 00:08:44,000
+And in this lesson, I promised you to show how you can change the default text editor to change it.
+
+116
+00:08:44,000 --> 00:08:45,000
+You need to type the following.
+
+117
+00:08:46,000 --> 00:08:51,000
+Get config lomo core editor.
+
+118
+00:08:53,000 --> 00:08:59,000
+C program files not paid, plus, plus not paid, plus, plus extra.
+
+119
+00:09:01,000 --> 00:09:06,000
+Instead of this text in quotes, you have to type the pass to your text editor.
+
+120
+00:09:08,000 --> 00:09:14,000
+Let's recap what we have learned today, today, we learned how to install, yet you also learned the
+
+121
+00:09:14,000 --> 00:09:16,000
+basic configuration.
+
+122
+00:09:16,000 --> 00:09:19,000
+Now you know what is good, Barsh and get gooey.
+
+123
+00:09:20,000 --> 00:09:27,000
+Now you understand how you can check and said get can fix on different levels, system, global and
+
+124
+00:09:27,000 --> 00:09:27,000
+local.
+
+125
+00:09:28,000 --> 00:09:31,000
+Also, you learned what a good repository is.
+
+126
+00:09:32,000 --> 00:09:35,000
+I believe now we can proceed with our next lesson.
+
+127
+00:09:35,000 --> 00:09:39,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/17 - GIT/003 How to set WIndows notepad as a default text editor in git.html b/17 - GIT/003 How to set WIndows notepad as a default text editor in git.html
new file mode 100644
index 0000000000000000000000000000000000000000..8bda67078ae35ef1522eeb05d470a2aac5439077
--- /dev/null
+++ b/17 - GIT/003 How to set WIndows notepad as a default text editor in git.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+ How to set WIndows notepad as a default text editor in git
+
+
+
+
+
+
+
How to set WIndows notepad as a default text editor in git
+
To set up basic Windows notepad as a default text editor in git, please, open the git bash and execute the next command:
git config --global core.editor "notepad"
And press enter. After this notepad will be set as a default text editor.
+
+
+
+
diff --git a/17 - GIT/004 Git repo init, First commit and main bracnh_en.srt b/17 - GIT/004 Git repo init, First commit and main bracnh_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..db0e81aa4c932e61eb0177f4a86575f7318cf78c
--- /dev/null
+++ b/17 - GIT/004 Git repo init, First commit and main bracnh_en.srt
@@ -0,0 +1,472 @@
+1
+00:00:05,000 --> 00:00:11,000
+Hello, the students in this lesson, we're going to learn how to create a local repository and how
+
+2
+00:00:11,000 --> 00:00:12,000
+to make your first comment.
+
+3
+00:00:13,000 --> 00:00:17,000
+First of all, I want to say that there are two ways to create a repository.
+
+4
+00:00:17,000 --> 00:00:20,000
+The first one is to create the new one locally.
+
+5
+00:00:20,000 --> 00:00:23,000
+The second option is to clone existing repository.
+
+6
+00:00:24,000 --> 00:00:30,000
+In this lesson, we are going to cover only the first option and the second option will be covered in
+
+7
+00:00:30,000 --> 00:00:30,000
+obsolescence.
+
+8
+00:00:31,000 --> 00:00:33,000
+One will learn what remote repositories are.
+
+9
+00:00:34,000 --> 00:00:40,000
+Our goal during this course is not to run thousands of fans to get comments that you want to use.
+
+10
+00:00:40,000 --> 00:00:44,000
+Instead, we are going to focus on practice and learn everything.
+
+11
+00:00:44,000 --> 00:00:46,000
+What you need for your current or the future job.
+
+12
+00:00:47,000 --> 00:00:51,000
+That's why most part of the lesson will spend practice in real life scenarios.
+
+13
+00:00:51,000 --> 00:00:59,000
+I will show you such main comments as it, get at it and get status.
+
+14
+00:00:59,000 --> 00:01:05,000
+Also in this lesson, I will tell what the branches will discuss different cases when to use different
+
+15
+00:01:05,000 --> 00:01:07,000
+comments with different attributes.
+
+16
+00:01:08,000 --> 00:01:08,000
+Let's start.
+
+17
+00:01:09,000 --> 00:01:12,000
+And the best way to understand this topic is to practice.
+
+18
+00:01:13,000 --> 00:01:16,000
+We are going to start from the creative git repository locally.
+
+19
+00:01:16,000 --> 00:01:18,000
+Here is our Dharma project.
+
+20
+00:01:18,000 --> 00:01:25,000
+Imagine that we have some source code here in SLC folder here in Benfold where we have compiled binary
+
+21
+00:01:25,000 --> 00:01:30,000
+files and we want to use it to track changes in these files.
+
+22
+00:01:30,000 --> 00:01:32,000
+Let's open the box here first.
+
+23
+00:01:33,000 --> 00:01:35,000
+Now let's initialize the repository.
+
+24
+00:01:36,000 --> 00:01:42,000
+Let's perform, get any common type, get in it and press enter.
+
+25
+00:01:43,000 --> 00:01:46,000
+Now you see that in parentheses there is a new word.
+
+26
+00:01:46,000 --> 00:01:50,000
+Master Master is a main branch.
+
+27
+00:01:50,000 --> 00:01:56,000
+What is a branch branches and I part of everyday development process.
+
+28
+00:01:56,000 --> 00:01:59,000
+Each branch contains a history of snapshots.
+
+29
+00:01:59,000 --> 00:02:03,000
+Technically, we may call these snapshots with other words.
+
+30
+00:02:04,000 --> 00:02:10,000
+Those are our comments during the development will switch branches to separate development of a new
+
+31
+00:02:10,000 --> 00:02:15,000
+task or a new feature, and after that we'll merge branches.
+
+32
+00:02:15,000 --> 00:02:21,000
+Master is our single and the main branch which we have right after repository creation.
+
+33
+00:02:22,000 --> 00:02:24,000
+How to do operations with branches.
+
+34
+00:02:24,000 --> 00:02:27,000
+We are going to learn in the next lessons after we executed.
+
+35
+00:02:28,000 --> 00:02:32,000
+Any comment don't get folder was created in our project.
+
+36
+00:02:32,000 --> 00:02:39,000
+It is hidden by default, so make sure you are enabled view of hidden folders and here it is.
+
+37
+00:02:40,000 --> 00:02:45,000
+You're going to have to change files here manually just in case you're interested.
+
+38
+00:02:45,000 --> 00:02:50,000
+You can investigate how it stores, configurations and the history of the project.
+
+39
+00:02:51,000 --> 00:02:57,000
+Now, when they have git repository initialized in our folder, we want to track changes in existing
+
+40
+00:02:57,000 --> 00:02:57,000
+files.
+
+41
+00:02:58,000 --> 00:03:04,000
+The first thing that you need to understand in this lesson is that files can exist in one of two states
+
+42
+00:03:04,000 --> 00:03:12,000
+tracked and untracked, ensured tracked files are files that were present in the last snapshot of your
+
+43
+00:03:12,000 --> 00:03:21,000
+files, those files that Keith is aware of, untracked files, files that are present in the work and
+
+44
+00:03:21,000 --> 00:03:28,000
+directory, but that were not in the last snapshot and are not in the staging area to tell you that
+
+45
+00:03:28,000 --> 00:03:30,000
+you want to track changes in file.
+
+46
+00:03:30,000 --> 00:03:36,000
+We need to execute git at command, git add comment adds files to the staging area.
+
+47
+00:03:36,000 --> 00:03:40,000
+Do remember first lesson when I told you about staging area?
+
+48
+00:03:40,000 --> 00:03:44,000
+That's the area where we place files that we want to commit.
+
+49
+00:03:44,000 --> 00:03:47,000
+We can add one file or multiple files.
+
+50
+00:03:47,000 --> 00:03:54,000
+For example, to have one file, I have to write the following git add license 60.
+
+51
+00:03:55,000 --> 00:04:00,000
+If I want to add multiple files, I can type space and type new file name.
+
+52
+00:04:01,000 --> 00:04:02,000
+For the sake of example.
+
+53
+00:04:02,000 --> 00:04:04,000
+Let it be read me dot M.G..
+
+54
+00:04:05,000 --> 00:04:07,000
+Now you can press enter.
+
+55
+00:04:08,000 --> 00:04:14,000
+The check, what is the status of your repository on which branch you are and whether there are states
+
+56
+00:04:14,000 --> 00:04:20,000
+changes to be committed, we have to type next gate comment gate status here.
+
+57
+00:04:20,000 --> 00:04:28,000
+I can see that two files were added to stage an error and the rest of the files were not, including
+
+58
+00:04:28,000 --> 00:04:37,000
+all files that are in directories been and SLC to clear get and so you can press control and L simultaneously.
+
+59
+00:04:37,000 --> 00:04:39,000
+Now this much better.
+
+60
+00:04:39,000 --> 00:04:42,000
+We can add multiple files with the help of the mask.
+
+61
+00:04:43,000 --> 00:04:49,000
+For example, if you want to add all files with Java extension, I need to type the following.
+
+62
+00:04:49,000 --> 00:04:58,000
+Get at asterisk dot Java asterisk here means files with any name, but that has Java extension.
+
+63
+00:04:59,000 --> 00:05:00,000
+Lets press enter.
+
+64
+00:05:00,000 --> 00:05:06,000
+We see here that line field is changed with carriage return and Lindfield characters.
+
+65
+00:05:06,000 --> 00:05:08,000
+Let's now check it status.
+
+66
+00:05:08,000 --> 00:05:13,000
+I use Arrow up key to check comments which have recently enter it.
+
+67
+00:05:13,000 --> 00:05:21,000
+Here is a status hypocenter and you see now your file is also added to the staging area.
+
+68
+00:05:22,000 --> 00:05:28,000
+By the way, in case you don't like such verbose status, you can use short version of git status.
+
+69
+00:05:29,000 --> 00:05:30,000
+Get Status Desh.
+
+70
+00:05:30,000 --> 00:05:37,000
+As you can see that there is a letter with a status is a files are added to the staging area modified
+
+71
+00:05:37,000 --> 00:05:38,000
+and not added.
+
+72
+00:05:39,000 --> 00:05:47,000
+If we want to add all files, we can just use dot like this git at DOT here.
+
+73
+00:05:47,000 --> 00:05:53,000
+Dot means all possible names and extensions and if we will check its status now, we are going to see
+
+74
+00:05:53,000 --> 00:05:54,000
+that now.
+
+75
+00:05:54,000 --> 00:05:57,000
+All files in my project are ready to be committed.
+
+76
+00:05:57,000 --> 00:06:02,000
+Now when all files are in stage staging error, let me commit these changes.
+
+77
+00:06:02,000 --> 00:06:13,000
+We have to type the next comment, get commit dash, am in it, commit in quotes and FLOC in this case
+
+78
+00:06:13,000 --> 00:06:15,000
+stands for message.
+
+79
+00:06:15,000 --> 00:06:19,000
+Each snapshot of our file system should have a message.
+
+80
+00:06:19,000 --> 00:06:26,000
+Usually this message is used to describe the changes that were made in scope of this that you can use
+
+81
+00:06:26,000 --> 00:06:31,000
+dash and flag because it is very convenient to live can it message in line with comit command.
+
+82
+00:06:32,000 --> 00:06:38,000
+In case you forgot to specify, dot and flag, the default text editor will be opened.
+
+83
+00:06:39,000 --> 00:06:41,000
+Let's use in line message command.
+
+84
+00:06:41,000 --> 00:06:45,000
+Usually the commit the message of the first commit is in it.
+
+85
+00:06:45,000 --> 00:06:47,000
+Commit press enter.
+
+86
+00:06:48,000 --> 00:06:50,000
+Hey, you see that you created a snapshot.
+
+87
+00:06:51,000 --> 00:06:52,000
+Let's check status.
+
+88
+00:06:53,000 --> 00:06:58,000
+And you can see that there is nothing to connect because there were no any other changes from the last
+
+89
+00:06:58,000 --> 00:07:06,000
+comment, let me clear console, by the way, in case you forget any comment, you always can ask it
+
+90
+00:07:06,000 --> 00:07:07,000
+to give you a hint.
+
+91
+00:07:07,000 --> 00:07:09,000
+There are two options.
+
+92
+00:07:09,000 --> 00:07:17,000
+The first option type help after comment that you want to use, for example, get status, double Desh
+
+93
+00:07:17,000 --> 00:07:18,000
+help.
+
+94
+00:07:18,000 --> 00:07:24,000
+And you can see that page from manual is open automatically in your Web browser.
+
+95
+00:07:24,000 --> 00:07:29,000
+Here you can find common description and all possible options how you can use this.
+
+96
+00:07:29,000 --> 00:07:33,000
+The second option is to type shortcut from help like this.
+
+97
+00:07:33,000 --> 00:07:36,000
+It's status Desh H.
+
+98
+00:07:37,000 --> 00:07:42,000
+And you're going to see a list of options that you can use with this comment right here in console.
+
+99
+00:07:43,000 --> 00:07:50,000
+One more thing that I wanted to show you in this lesson is how you can combine aid into states and commit
+
+100
+00:07:50,000 --> 00:07:52,000
+in one command, for example.
+
+101
+00:07:52,000 --> 00:07:56,000
+Let me do a modification in one of the source code files.
+
+102
+00:07:56,000 --> 00:07:59,000
+I will add one more space in some line.
+
+103
+00:07:59,000 --> 00:08:01,000
+Let's check shirt status.
+
+104
+00:08:02,000 --> 00:08:04,000
+And we see that we have one file.
+
+105
+00:08:04,000 --> 00:08:04,000
+Modify it.
+
+106
+00:08:05,000 --> 00:08:09,000
+Let me come in this file and adding it to the staging area simultaneously.
+
+107
+00:08:10,000 --> 00:08:24,000
+Just type the following gate comit, dash a dash cam, new changes and press enter get automatically
+
+108
+00:08:24,000 --> 00:08:31,000
+staged every file that is already tracked before doing the comit, letting you skip the part where we
+
+109
+00:08:31,000 --> 00:08:35,000
+have to add files to the staging area and perform it at command.
+
+110
+00:08:36,000 --> 00:08:39,000
+OK, now let's recap what we have learned today.
+
+111
+00:08:40,000 --> 00:08:43,000
+Today, we learned how to create local git repository.
+
+112
+00:08:43,000 --> 00:08:46,000
+You know what a branch is today.
+
+113
+00:08:46,000 --> 00:08:50,000
+You also understand the difference between tract and untracked files.
+
+114
+00:08:50,000 --> 00:08:55,000
+Together, we're told you to track files and added them to the staging area.
+
+115
+00:08:55,000 --> 00:08:58,000
+Now you know how to commit a snapshot of your files.
+
+116
+00:08:59,000 --> 00:09:04,000
+And also we learned how to request a hint from it and how to use help government.
+
+117
+00:09:05,000 --> 00:09:06,000
+That's all for today.
+
+118
+00:09:06,000 --> 00:09:10,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/17 - GIT/005 Git ignoring & Git log_en.srt b/17 - GIT/005 Git ignoring & Git log_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..b8733ae1592a359f53a778d945008ed7e412dc38
--- /dev/null
+++ b/17 - GIT/005 Git ignoring & Git log_en.srt
@@ -0,0 +1,548 @@
+1
+00:00:06,000 --> 00:00:11,000
+Hello, colleagues, in this lesson, we'll talk how we can ignore files from Geek and how to Ontrack
+
+2
+00:00:11,000 --> 00:00:17,000
+files if we don't want to get taken snapshots with these files after today's lesson.
+
+3
+00:00:17,000 --> 00:00:21,000
+Are going to learn what is a technophile and what should be placed there.
+
+4
+00:00:21,000 --> 00:00:27,000
+Also, I'm going to show you comments that will help us to track files or even the whole directory with
+
+5
+00:00:27,000 --> 00:00:33,000
+files in it to make sure that we can check, commit history and consult, will learn to then get your
+
+6
+00:00:33,000 --> 00:00:36,000
+comment and main attributes that it has.
+
+7
+00:00:36,000 --> 00:00:41,000
+Let's start I will show you get examples on our demo project to Standard Lesson.
+
+8
+00:00:41,000 --> 00:00:43,000
+I want to ask you a question.
+
+9
+00:00:43,000 --> 00:00:45,000
+What files you would like to track with get?
+
+10
+00:00:46,000 --> 00:00:50,000
+Technically, you can track changes in any file, but does it make sense?
+
+11
+00:00:51,000 --> 00:00:53,000
+Not always in software development.
+
+12
+00:00:53,000 --> 00:00:59,000
+There is a sense in tracking changes only in the source code and some configuration files.
+
+13
+00:00:59,000 --> 00:01:03,000
+There is no need to track files that will be generated again during the program.
+
+14
+00:01:03,000 --> 00:01:06,000
+Compilation like this binaries files in Java.
+
+15
+00:01:06,000 --> 00:01:13,000
+Also, there is absolutely no sense to store environments specific files like this claspers file because
+
+16
+00:01:13,000 --> 00:01:18,000
+colleagues of yours may use different development environment and they wouldn't need those files at
+
+17
+00:01:18,000 --> 00:01:18,000
+all.
+
+18
+00:01:19,000 --> 00:01:24,000
+Now, when we know this, we understood that in previous lesson we did the mistake.
+
+19
+00:01:24,000 --> 00:01:30,000
+Don't worry, we did that mistake on purpose so that you could learn additional important comments just
+
+20
+00:01:30,000 --> 00:01:30,000
+in case.
+
+21
+00:01:31,000 --> 00:01:38,000
+Imagine that you realized that you don't want to track changes in the binary files in this file because
+
+22
+00:01:38,000 --> 00:01:43,000
+it is specific only to the special program and have nothing in common with your source code.
+
+23
+00:01:43,000 --> 00:01:44,000
+What to do now?
+
+24
+00:01:45,000 --> 00:01:49,000
+We have to tell you to not track changes in that files anymore, starting from today.
+
+25
+00:01:50,000 --> 00:01:51,000
+How to do that?
+
+26
+00:01:51,000 --> 00:01:53,000
+I don't want to simply remove file.
+
+27
+00:01:53,000 --> 00:01:55,000
+That is the easiest way.
+
+28
+00:01:55,000 --> 00:01:58,000
+I want just to remove this file from the staging area.
+
+29
+00:01:58,000 --> 00:02:05,000
+But I still want to keep file in my working tree so I could keep using this file to remove files from
+
+30
+00:02:05,000 --> 00:02:12,000
+GIT, but still to keep them on the local machine, I have to use the get a ram common with cached attribute.
+
+31
+00:02:13,000 --> 00:02:22,000
+Let's remove this claspers file, type the following and get Basche get around that will Desh cached
+
+32
+00:02:23,000 --> 00:02:32,000
+dot claspers dot claspers is a file name and you see claspers file is still present in my work entry,
+
+33
+00:02:33,000 --> 00:02:35,000
+but it is marked as a removed foget.
+
+34
+00:02:36,000 --> 00:02:38,000
+Let me show you this in good status.
+
+35
+00:02:39,000 --> 00:02:45,000
+Here you can see that our claspers file is marked as untracked and deleted from the staging area.
+
+36
+00:02:45,000 --> 00:02:51,000
+Important thing for you to remember in case you will not use cached FLAC, you will remove a file from
+
+37
+00:02:51,000 --> 00:02:58,000
+your file system to cached means to keep file in your working directory, but remove it from the staging
+
+38
+00:02:58,000 --> 00:03:00,000
+area to not track it anymore.
+
+39
+00:03:00,000 --> 00:03:02,000
+Does it make sense now?
+
+40
+00:03:02,000 --> 00:03:08,000
+Let's discuss what to do in case you accidentally added to the staging area all files from the directory
+
+41
+00:03:09,000 --> 00:03:13,000
+because removing files from stage one by one could take a lot of your time.
+
+42
+00:03:14,000 --> 00:03:20,000
+So in case we wanted to remove from the staging area all files from specific directory, we have to
+
+43
+00:03:20,000 --> 00:03:28,000
+use our FLAC R stands for cursive with this FLAC all files from the specific directory and from internal
+
+44
+00:03:28,000 --> 00:03:33,000
+directories within that directory will be removed from the staging area.
+
+45
+00:03:33,000 --> 00:03:42,000
+Let's tibs the following get our ram desh are double desh cached then slash.
+
+46
+00:03:43,000 --> 00:03:50,000
+Let's check status, awesome class pass fail, and all files from being directory are excluded from
+
+47
+00:03:50,000 --> 00:03:51,000
+the staging area.
+
+48
+00:03:52,000 --> 00:03:59,000
+Now I there's a risk that accidentally those files back to the staging area during the next commit to
+
+49
+00:03:59,000 --> 00:04:00,000
+avoid this.
+
+50
+00:04:00,000 --> 00:04:06,000
+Let me tell you to ignore these files and directories, to tell you that I want to ignore something,
+
+51
+00:04:06,000 --> 00:04:12,000
+I have to create a special file without name and with gift ignore extension to create file from the
+
+52
+00:04:12,000 --> 00:04:16,000
+git bash console type the following touch.
+
+53
+00:04:17,000 --> 00:04:23,000
+Don't get ignore that requirement in all Linux terminals allows you to create a new file.
+
+54
+00:04:23,000 --> 00:04:29,000
+Now you can open this file in any text editor or even here in console, for example.
+
+55
+00:04:29,000 --> 00:04:35,000
+Now you can find it in your file here and you can open it in notepad if you wish.
+
+56
+00:04:35,000 --> 00:04:39,000
+But I will teach you how to impress your girlfriend or boyfriend.
+
+57
+00:04:39,000 --> 00:04:43,000
+I will show you how you can use your console to edit text files.
+
+58
+00:04:43,000 --> 00:04:46,000
+You can do almost everything with the help of console.
+
+59
+00:04:46,000 --> 00:04:48,000
+You just need to know what to do.
+
+60
+00:04:49,000 --> 00:04:50,000
+Typing console.
+
+61
+00:04:51,000 --> 00:04:53,000
+No, not yet.
+
+62
+00:04:53,000 --> 00:04:53,000
+Ignore.
+
+63
+00:04:54,000 --> 00:05:00,000
+Nana is the name of the text editor program for Unix like computer systems, which can be used with
+
+64
+00:05:00,000 --> 00:05:02,000
+the help of command line interface.
+
+65
+00:05:02,000 --> 00:05:05,000
+Now we can add any text to this file.
+
+66
+00:05:05,000 --> 00:05:10,000
+We can use Spartan's here, for example, asterisk, dot gloss.
+
+67
+00:05:11,000 --> 00:05:16,000
+This will tell you to ignore all files with any name, but with class extension.
+
+68
+00:05:17,000 --> 00:05:21,000
+In our particular case, we want to ignore all files in the folder.
+
+69
+00:05:21,000 --> 00:05:27,000
+Then let's write, then slash and we want to ignore class file.
+
+70
+00:05:27,000 --> 00:05:30,000
+So let's step dot pass.
+
+71
+00:05:32,000 --> 00:05:38,000
+This is enough for us now, let's save this file and regular text editor, you can press control plus
+
+72
+00:05:38,000 --> 00:05:40,000
+as buttons here.
+
+73
+00:05:40,000 --> 00:05:45,000
+We need to follow hints that are written down right here to exit.
+
+74
+00:05:45,000 --> 00:05:49,000
+Now, a text editor, I have to press control and X simultaneously.
+
+75
+00:05:50,000 --> 00:05:52,000
+It asks me whether I want to save the file.
+
+76
+00:05:53,000 --> 00:05:58,000
+I click Y button now it asks me to check the file name.
+
+77
+00:05:58,000 --> 00:06:02,000
+I keep it the same yet ignore and just press enter button.
+
+78
+00:06:03,000 --> 00:06:03,000
+Awesome.
+
+79
+00:06:04,000 --> 00:06:06,000
+Now we have get ignored in our repository.
+
+80
+00:06:07,000 --> 00:06:08,000
+Let's check the status.
+
+81
+00:06:09,000 --> 00:06:10,000
+We see the difference.
+
+82
+00:06:10,000 --> 00:06:13,000
+Now you just ignore that directory and files.
+
+83
+00:06:14,000 --> 00:06:20,000
+It even does not tell me that directory or claspers file is untracked like it told me before.
+
+84
+00:06:20,000 --> 00:06:23,000
+It just ignores these files.
+
+85
+00:06:23,000 --> 00:06:28,000
+By the way, you'd has a collection of getting our files for different programming languages.
+
+86
+00:06:28,000 --> 00:06:31,000
+I will leave this link and attachments to this lesson.
+
+87
+00:06:31,000 --> 00:06:35,000
+In my opinion, these files are a good starting point for your own good ignore.
+
+88
+00:06:36,000 --> 00:06:41,000
+But based on what I saw in these files, I can say that for many languages these technologies are not
+
+89
+00:06:41,000 --> 00:06:42,000
+completely perfect.
+
+90
+00:06:43,000 --> 00:06:46,000
+Most likely you would need to adjust it in your project.
+
+91
+00:06:46,000 --> 00:06:53,000
+But as I said before, it is a good starting point now when I'm totally sure that I ignored all files
+
+92
+00:06:53,000 --> 00:06:54,000
+that I don't need.
+
+93
+00:06:55,000 --> 00:06:59,000
+I can add all files to the staging area without any fear all the time.
+
+94
+00:07:00,000 --> 00:07:03,000
+Usually I will use just add comment was not like this.
+
+95
+00:07:04,000 --> 00:07:05,000
+Get at DOT.
+
+96
+00:07:06,000 --> 00:07:10,000
+Because I added to the gift, ignore everything, what I wanted to add.
+
+97
+00:07:11,000 --> 00:07:12,000
+Now let's commit our changes.
+
+98
+00:07:13,000 --> 00:07:16,000
+Always remember to write a message that makes sense.
+
+99
+00:07:17,000 --> 00:07:22,000
+In other lesson, I will tell you best practices for writing comit messages so that each your colleague
+
+100
+00:07:22,000 --> 00:07:29,000
+could understand your comments get conveyed that I am added to get ignored and removed.
+
+101
+00:07:29,000 --> 00:07:31,000
+Been from Stadion.
+
+102
+00:07:33,000 --> 00:07:40,000
+Press enter cool, and the last thing I wanted to show you today is how you can check your cammed history.
+
+103
+00:07:41,000 --> 00:07:46,000
+You might want to investigate it history just to check what happens and where you are in your project
+
+104
+00:07:47,000 --> 00:07:48,000
+to check this type.
+
+105
+00:07:48,000 --> 00:07:55,000
+Next comment, get luck, get log prints to your comment, history of the car and get branch.
+
+106
+00:07:55,000 --> 00:07:58,000
+In this case, this is out of the master branch.
+
+107
+00:07:58,000 --> 00:08:05,000
+And you see that from the first lesson we already created three chametz here by default get localist.
+
+108
+00:08:05,000 --> 00:08:12,000
+The comments made in that repository in reverse chronological order, that is the most recent comments
+
+109
+00:08:12,000 --> 00:08:13,000
+show up first.
+
+110
+00:08:14,000 --> 00:08:21,000
+As you can see, this comment list each comment with its checksum, the author's name and email that
+
+111
+00:08:21,000 --> 00:08:23,000
+they'd written and the commit message.
+
+112
+00:08:24,000 --> 00:08:26,000
+There are numerous options for Gitlow command.
+
+113
+00:08:26,000 --> 00:08:32,000
+I'm going to show you only the most helpful options which can help you to get necessary information
+
+114
+00:08:32,000 --> 00:08:33,000
+during the development.
+
+115
+00:08:33,000 --> 00:08:37,000
+For example, you can limit the amount of comments that you want to check.
+
+116
+00:08:37,000 --> 00:08:44,000
+In case I care the most about loss to commit, I have to type the following gig log dash to.
+
+117
+00:08:45,000 --> 00:08:50,000
+I believe you understood that you can change number to change the amount of commands for review and
+
+118
+00:08:50,000 --> 00:08:52,000
+as a practical attribute is a formatting.
+
+119
+00:08:53,000 --> 00:09:02,000
+For example, you can type you'd log double dash pretty equals one line and you can see on the checksum
+
+120
+00:09:02,000 --> 00:09:03,000
+and conveyed message.
+
+121
+00:09:03,000 --> 00:09:08,000
+There are multiple other attributes that can allow you to print commands following specific pattern
+
+122
+00:09:09,000 --> 00:09:14,000
+or to print commands that are related to changes in some specific directory or shortcomings in specific
+
+123
+00:09:14,000 --> 00:09:15,000
+date.
+
+124
+00:09:15,000 --> 00:09:21,000
+But in my humble opinion, those options are not used in daily basis because probably there is a lot
+
+125
+00:09:21,000 --> 00:09:26,000
+of sense for you to print its history in specific format, for example.
+
+126
+00:09:26,000 --> 00:09:33,000
+But from previous lesson, you remember how to use Get Help command to learn more from documentation.
+
+127
+00:09:33,000 --> 00:09:39,000
+Meanwhile, we'll keep focus on the most powerful and useful commands that will help you in everyday
+
+128
+00:09:39,000 --> 00:09:39,000
+activities.
+
+129
+00:09:40,000 --> 00:09:43,000
+It's look like that's all what I wanted to share with you today.
+
+130
+00:09:44,000 --> 00:09:46,000
+Let's recap what we have learned today.
+
+131
+00:09:46,000 --> 00:09:48,000
+Today we learned a lot together.
+
+132
+00:09:48,000 --> 00:09:54,000
+We learned how to tell you to stop track changes in specific files or directories.
+
+133
+00:09:54,000 --> 00:09:58,000
+Now we know how to tell you to ignore changes in some specific directories.
+
+134
+00:09:59,000 --> 00:10:05,000
+After today's lesson, you know how to create GUI Technophile that will work for your specific project.
+
+135
+00:10:05,000 --> 00:10:10,000
+And at the end of the lesson, we learned how to investigate our committee history.
+
+136
+00:10:11,000 --> 00:10:12,000
+That's all for today.
+
+137
+00:10:12,000 --> 00:10:16,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/17 - GIT/005 Git-ignore-for-different-languages.url b/17 - GIT/005 Git-ignore-for-different-languages.url
new file mode 100644
index 0000000000000000000000000000000000000000..084cac93ebeb1f908388e5a5fbb360bb83015a11
--- /dev/null
+++ b/17 - GIT/005 Git-ignore-for-different-languages.url
@@ -0,0 +1,2 @@
+[InternetShortcut]
+URL=https://github.com/github/gitignore
\ No newline at end of file
diff --git a/17 - GIT/006 Git undoing things & Vi text editor_en.srt b/17 - GIT/006 Git undoing things & Vi text editor_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..b76a82ae245d67f7d0cccfe93dd2ba495a2d8ccc
--- /dev/null
+++ b/17 - GIT/006 Git undoing things & Vi text editor_en.srt
@@ -0,0 +1,456 @@
+1
+00:00:06,000 --> 00:00:11,000
+Lot of the students in this lesson, we're going to talk about how you can undo things and adjust your
+
+2
+00:00:11,000 --> 00:00:14,000
+comments and we'll learn the basics of work and search console text.
+
+3
+00:00:14,000 --> 00:00:18,000
+Ed, as we in this lesson on real examples.
+
+4
+00:00:18,000 --> 00:00:25,000
+I'm going to show you how you can amend last comment, how to on stage files, if needed, more, longer
+
+5
+00:00:25,000 --> 00:00:29,000
+to restore command and how you can use it to restore state of files.
+
+6
+00:00:30,000 --> 00:00:35,000
+Also, I will show you how you can use tab for out to completion and get the brush to save your time
+
+7
+00:00:35,000 --> 00:00:36,000
+on typing words.
+
+8
+00:00:37,000 --> 00:00:40,000
+I will show you your basics of work in concert next week.
+
+9
+00:00:41,000 --> 00:00:43,000
+And as usual, let's practice.
+
+10
+00:00:43,000 --> 00:00:46,000
+I will open our project which we create.
+
+11
+00:00:47,000 --> 00:00:53,000
+OK, imagine that we need the command, but we forgot to include one more file or another.
+
+12
+00:00:53,000 --> 00:00:54,000
+Could change in that comment.
+
+13
+00:00:55,000 --> 00:00:58,000
+We can easily amend the last comment, but be careful.
+
+14
+00:00:59,000 --> 00:01:04,000
+Today we are going to learn one of the few errors and get where you may lose some work if you do it
+
+15
+00:01:04,000 --> 00:01:04,000
+wrong.
+
+16
+00:01:05,000 --> 00:01:06,000
+And changes.
+
+17
+00:01:06,000 --> 00:01:15,000
+We have to use the next command gate, commit double dash amand amant option takes current staging error
+
+18
+00:01:15,000 --> 00:01:17,000
+and uses it for the commit.
+
+19
+00:01:18,000 --> 00:01:24,000
+In case you have nassan staging area and the only thing you want to change is the commit message, then
+
+20
+00:01:24,000 --> 00:01:25,000
+just use this command.
+
+21
+00:01:26,000 --> 00:01:31,000
+For example, let me show you the message of our last week long dash.
+
+22
+00:01:31,000 --> 00:01:35,000
+One end of the gate ignore and removed from station.
+
+23
+00:01:35,000 --> 00:01:39,000
+That is our last message that we did on the previous lesson.
+
+24
+00:01:39,000 --> 00:01:43,000
+OK, now let's change it yet.
+
+25
+00:01:43,000 --> 00:01:45,000
+Commit double dash amand.
+
+26
+00:01:47,000 --> 00:01:55,000
+I had updated word at the beginning here, text editor is opened, just to remind you, not part is
+
+27
+00:01:55,000 --> 00:02:02,000
+open because I said not, but as a default text editor in global conflicts here, I can change message.
+
+28
+00:02:02,000 --> 00:02:06,000
+I press control and ask to save the file and close it.
+
+29
+00:02:07,000 --> 00:02:10,000
+Now let's check the last comit message.
+
+30
+00:02:10,000 --> 00:02:17,000
+And you can see that message is updated just in case not all students change the full text editor.
+
+31
+00:02:17,000 --> 00:02:21,000
+Let me show you what potentially you can see by default.
+
+32
+00:02:21,000 --> 00:02:23,000
+It bash users with text editor.
+
+33
+00:02:23,000 --> 00:02:29,000
+So in case you didn't change the full text editor, you're going to see unusual for you, text editor.
+
+34
+00:02:30,000 --> 00:02:32,000
+Let me change my global settings to demo this.
+
+35
+00:02:32,000 --> 00:02:39,000
+Do you get config demo Desh, Global Core Editor V.
+
+36
+00:02:40,000 --> 00:02:47,000
+Now, let me amend it myself one more time, which is a very powerful program that supports many cool
+
+37
+00:02:47,000 --> 00:02:48,000
+features.
+
+38
+00:02:48,000 --> 00:02:53,000
+Unfortunately, this course is not about me and I am not joking.
+
+39
+00:02:53,000 --> 00:02:57,000
+It is really possible to pass a course for the editor to learn more about it.
+
+40
+00:02:57,000 --> 00:03:03,000
+But I will show you now the basics so that you could navigate here just in case you forgot to change
+
+41
+00:03:03,000 --> 00:03:04,000
+the full text editor.
+
+42
+00:03:05,000 --> 00:03:12,000
+First of all, for cursor navigation, you have to use the next case out to move cursor to the right
+
+43
+00:03:12,000 --> 00:03:19,000
+just to move cursor down h to move cursor to the left, K to move cursor up.
+
+44
+00:03:20,000 --> 00:03:25,000
+The text editor has two modes command line mode and insert mode.
+
+45
+00:03:26,000 --> 00:03:31,000
+Let me show you on the example level of cursor after updated virt.
+
+46
+00:03:32,000 --> 00:03:34,000
+Now I need to switch to insert mode.
+
+47
+00:03:35,000 --> 00:03:36,000
+I need to press I key.
+
+48
+00:03:37,000 --> 00:03:41,000
+And you see here in the bottom we see insert words.
+
+49
+00:03:42,000 --> 00:03:45,000
+That means you're in the insert mode.
+
+50
+00:03:45,000 --> 00:03:49,000
+Now I can use backspace and all the keys to change the message.
+
+51
+00:03:50,000 --> 00:03:54,000
+Let me remove updated and write the editor test.
+
+52
+00:03:56,000 --> 00:04:02,000
+Now I have to say file and close it to do this, I need to switch with editor in command line mode.
+
+53
+00:04:03,000 --> 00:04:11,000
+I press escape button, you can see that there is no more insert is written down here to save changes
+
+54
+00:04:11,000 --> 00:04:11,000
+and exit.
+
+55
+00:04:11,000 --> 00:04:22,000
+We I have to type next column W and Q W stands for Right U stands for Quitte Press enter.
+
+56
+00:04:23,000 --> 00:04:29,000
+Now let's check our current message and receive that message is changed.
+
+57
+00:04:29,000 --> 00:04:30,000
+Awesome.
+
+58
+00:04:30,000 --> 00:04:36,000
+Now you understand what I meant when I said that we text Ed will be a bit unusual for you to use.
+
+59
+00:04:37,000 --> 00:04:38,000
+That's why.
+
+60
+00:04:38,000 --> 00:04:41,000
+Let's return back notepad as the default text editor.
+
+61
+00:04:42,000 --> 00:04:50,000
+OK, now let's imagine you forget to add some changes, let me add more spaces in the source code file.
+
+62
+00:04:56,000 --> 00:05:00,000
+Then I added the staging area get at DOT.
+
+63
+00:05:02,000 --> 00:05:08,000
+And now I want to adjust my last command so that it includes the latest changes and I don't want to
+
+64
+00:05:08,000 --> 00:05:18,000
+change comit message what I have to do, I have to perform next command, get commit double dash meant
+
+65
+00:05:18,000 --> 00:05:21,000
+double dash, no added.
+
+66
+00:05:22,000 --> 00:05:27,000
+And press, and here it is, let's check our combat history.
+
+67
+00:05:30,000 --> 00:05:32,000
+You can see that checksum is changed.
+
+68
+00:05:33,000 --> 00:05:40,000
+This is important just to remember that each time you do commit or just commit checksum, it's changed.
+
+69
+00:05:41,000 --> 00:05:45,000
+Later, I will show you one real example, why it is so important.
+
+70
+00:05:46,000 --> 00:05:51,000
+Now, I'd like to discuss with you next, Tenaris, that we create a new file, images, that we have
+
+71
+00:05:51,000 --> 00:05:53,000
+some important conflicts.
+
+72
+00:05:53,000 --> 00:06:01,000
+Let's create this file, watch some important conflicts, dot the 60, also edit changes to the existing
+
+73
+00:06:01,000 --> 00:06:05,000
+source code and put some new lines here.
+
+74
+00:06:05,000 --> 00:06:08,000
+And they added old files to the staging area.
+
+75
+00:06:08,000 --> 00:06:14,000
+Yet at DOT, now let's check status status.
+
+76
+00:06:15,000 --> 00:06:18,000
+Here's a new file and here's the existing one.
+
+77
+00:06:19,000 --> 00:06:25,000
+And I just realized that I don't want to have the one come with changes in the hello file and important
+
+78
+00:06:25,000 --> 00:06:30,000
+conflicts together, because logically that should be two different snapshots.
+
+79
+00:06:30,000 --> 00:06:35,000
+How I can stage changes and remove from the staging area files that I don't need.
+
+80
+00:06:36,000 --> 00:06:44,000
+Always remember to read, get hints, pay attention here use get restored about Desh staged file two
+
+81
+00:06:44,000 --> 00:06:45,000
+on stage.
+
+82
+00:06:45,000 --> 00:06:55,000
+Let's follow this hint it restore the modish staged SAAC slash and press stop key that provides us with
+
+83
+00:06:55,000 --> 00:07:00,000
+the auto completion so we won't waste our time on typing.
+
+84
+00:07:01,000 --> 00:07:02,000
+Press enter.
+
+85
+00:07:02,000 --> 00:07:09,000
+Let's check its status and we see that kilovolt file was removed from the staging area and wasn't removed
+
+86
+00:07:09,000 --> 00:07:11,000
+from my file system.
+
+87
+00:07:12,000 --> 00:07:14,000
+Also all changes are there on place.
+
+88
+00:07:15,000 --> 00:07:15,000
+Perfect.
+
+89
+00:07:16,000 --> 00:07:23,000
+I can create comment right now only with these changes and after that I can add to the stage a new file
+
+90
+00:07:23,000 --> 00:07:24,000
+and committed.
+
+91
+00:07:24,000 --> 00:07:25,000
+Awesome.
+
+92
+00:07:26,000 --> 00:07:28,000
+What if I want to discard changes?
+
+93
+00:07:28,000 --> 00:07:32,000
+Let's follow him from get here to discuss changes.
+
+94
+00:07:32,000 --> 00:07:35,000
+I have to type git restore and file name.
+
+95
+00:07:36,000 --> 00:07:38,000
+OK, let's do that git.
+
+96
+00:07:38,000 --> 00:07:44,000
+Restore a thirty slash and pressed up to autocomplete.
+
+97
+00:07:44,000 --> 00:07:45,000
+Hello World Java.
+
+98
+00:07:47,000 --> 00:07:51,000
+And now we can see that changes were averted great.
+
+99
+00:07:53,000 --> 00:08:00,000
+The one thing while I get the most is that everything what was committed can be recovered, even changes
+
+100
+00:08:00,000 --> 00:08:03,000
+that were done with the help of gift commitment commands.
+
+101
+00:08:04,000 --> 00:08:10,000
+Later in this course, I'll show you how you can use the travelogue to restore literally avarice and
+
+102
+00:08:10,000 --> 00:08:11,000
+what was ever committed.
+
+103
+00:08:12,000 --> 00:08:17,000
+However, the changes which should discard without committing is not possible to restore.
+
+104
+00:08:17,000 --> 00:08:19,000
+So be very careful.
+
+105
+00:08:20,000 --> 00:08:22,000
+That's all what I wanted to share with you today.
+
+106
+00:08:22,000 --> 00:08:24,000
+Let's recap what we have learned today.
+
+107
+00:08:25,000 --> 00:08:27,000
+Today we learned how to amend last comment.
+
+108
+00:08:28,000 --> 00:08:31,000
+We also learned how to change can message if you want.
+
+109
+00:08:31,000 --> 00:08:36,000
+So you saw the text editor and learn the basics to work in the editor.
+
+110
+00:08:37,000 --> 00:08:41,000
+Also, we learned how to use step for auto completion.
+
+111
+00:08:41,000 --> 00:08:48,000
+Now you know how to stage some changes and how to restore state of the file to the original state since
+
+112
+00:08:48,000 --> 00:08:49,000
+the last comment.
+
+113
+00:08:50,000 --> 00:08:51,000
+That's all for today.
+
+114
+00:08:51,000 --> 00:08:55,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/17 - GIT/007 Git remote repositories_en.srt b/17 - GIT/007 Git remote repositories_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..fa27dd95d3776e4e1a2ea4b94dd2130b655ce480
--- /dev/null
+++ b/17 - GIT/007 Git remote repositories_en.srt
@@ -0,0 +1,540 @@
+1
+00:00:06,000 --> 00:00:11,000
+Hello, colleagues, in this lesson, we are going to discuss what remote repositories are and how to
+
+2
+00:00:11,000 --> 00:00:11,000
+work with them.
+
+3
+00:00:12,000 --> 00:00:17,000
+I will tell you what is the source code hosting and why do we need it together?
+
+4
+00:00:17,000 --> 00:00:21,000
+We'll review the most popular in services and we'll compare them.
+
+5
+00:00:21,000 --> 00:00:24,000
+And this will create a remote repository.
+
+6
+00:00:24,000 --> 00:00:28,000
+I'm going to show you how to push a local repository to the remote.
+
+7
+00:00:29,000 --> 00:00:31,000
+You run such command as get push today.
+
+8
+00:00:32,000 --> 00:00:36,000
+I will show you what is with me dot and defile and when you can use it.
+
+9
+00:00:36,000 --> 00:00:41,000
+And at the end of the lesson, I will show you how you can clone an existing repository for your computer.
+
+10
+00:00:42,000 --> 00:00:45,000
+Let's start before we start looking at examples.
+
+11
+00:00:45,000 --> 00:00:46,000
+Let's understand first.
+
+12
+00:00:47,000 --> 00:00:49,000
+Why do we need remote repositories?
+
+13
+00:00:49,000 --> 00:00:55,000
+Usually where we work as a team with other software engineers and we need to collaborate with them somehow
+
+14
+00:00:55,000 --> 00:00:59,000
+and we want to have a single place with our latest version of the code.
+
+15
+00:01:00,000 --> 00:01:07,000
+Remote repository will help us with this remote repository is the same repository that we already created
+
+16
+00:01:07,000 --> 00:01:13,000
+in this course, but it's just hosted on the Internet and available online 24/7.
+
+17
+00:01:13,000 --> 00:01:18,000
+And every developer updates is a remote repository on the regular basis.
+
+18
+00:01:18,000 --> 00:01:24,000
+Collaborating with remote repositories means that you know how to push changes, how to pull changes
+
+19
+00:01:24,000 --> 00:01:29,000
+from there and how to resolve conflicts in the source code in case you have any.
+
+20
+00:01:29,000 --> 00:01:36,000
+Also, we need to know how to set a remote repository beside that, and this course will learn how to
+
+21
+00:01:36,000 --> 00:01:38,000
+manage various remote branches.
+
+22
+00:01:39,000 --> 00:01:45,000
+Each developer still has a repository on the local machine, but there is one single place where the
+
+23
+00:01:45,000 --> 00:01:48,000
+code of the latest version should be placed to start with.
+
+24
+00:01:48,000 --> 00:01:52,000
+Let's hold a brief overview of what Hosten for remote repositories you can use today.
+
+25
+00:01:53,000 --> 00:01:57,000
+On this slide, you can see three of the most popular Hosten forget repositories.
+
+26
+00:01:58,000 --> 00:02:03,000
+They are GitHub, probably one of the most popular Hosten in the world.
+
+27
+00:02:03,000 --> 00:02:09,000
+It supports a lot of features that supports and helped you to create efficient continuous integration
+
+28
+00:02:09,000 --> 00:02:11,000
+and continuous deployments processes.
+
+29
+00:02:11,000 --> 00:02:15,000
+Microsoft acquired GitHub repository for huge amount of money.
+
+30
+00:02:16,000 --> 00:02:21,000
+And you know, if Microsoft buy something that means a lot of product owners, marketers and developers
+
+31
+00:02:21,000 --> 00:02:26,000
+start proactively developing the product to win the competition with other vendors.
+
+32
+00:02:27,000 --> 00:02:31,000
+Mid-Market, it is a great tool made and supported by Atlassian.
+
+33
+00:02:31,000 --> 00:02:37,000
+This tool is mostly liked by developers because of the great integration with other licensed products
+
+34
+00:02:37,000 --> 00:02:40,000
+like such popular issue tracking system as JIRA.
+
+35
+00:02:40,000 --> 00:02:46,000
+It is very convenient to use this tool in conjunction with JIRA and Knowledge Base by Atlassian called
+
+36
+00:02:46,000 --> 00:02:48,000
+Confluence Getler.
+
+37
+00:02:49,000 --> 00:02:52,000
+One more popular Hosten forget repositories.
+
+38
+00:02:52,000 --> 00:02:57,000
+And to be honest, it is really hard to compare this one with previous to more or less.
+
+39
+00:02:57,000 --> 00:03:01,000
+All these three source code repositories have similar features.
+
+40
+00:03:01,000 --> 00:03:06,000
+Besides storing all of the source code, Goodlove offers similar features for each track and project
+
+41
+00:03:06,000 --> 00:03:08,000
+management as GitHub.
+
+42
+00:03:08,000 --> 00:03:13,000
+What we are going to choose for storing source code for all my students.
+
+43
+00:03:13,000 --> 00:03:19,000
+I use repositories on the GitHub for storing source code of my own projects, mobile and web apps which
+
+44
+00:03:19,000 --> 00:03:21,000
+we develop inside my company.
+
+45
+00:03:21,000 --> 00:03:24,000
+We use BitBucket premolars.
+
+46
+00:03:24,000 --> 00:03:29,000
+This is because the fact that long time ago BitBucket offered possibility to create private repositories
+
+47
+00:03:29,000 --> 00:03:30,000
+free of charge.
+
+48
+00:03:31,000 --> 00:03:33,000
+While this was paid feature in the GitHub.
+
+49
+00:03:33,000 --> 00:03:38,000
+Today you can create is a public or private repository on the GitHub for free too.
+
+50
+00:03:39,000 --> 00:03:45,000
+And just in one more time, no matter which online positive we are going to choose, configuration will
+
+51
+00:03:45,000 --> 00:03:45,000
+be the same.
+
+52
+00:03:46,000 --> 00:03:48,000
+So let's start our demo.
+
+53
+00:03:48,000 --> 00:03:51,000
+First of all, we have to create account on the GitHub.
+
+54
+00:03:52,000 --> 00:03:55,000
+The process of account registration is pretty intuitive and easy.
+
+55
+00:03:55,000 --> 00:03:58,000
+That's why I won't focus on that.
+
+56
+00:03:58,000 --> 00:04:01,000
+After you logged in, click on Plus sign here.
+
+57
+00:04:02,000 --> 00:04:06,000
+Select new repository, create name of your repository.
+
+58
+00:04:07,000 --> 00:04:10,000
+You can choose a name you would like for the demo purposes.
+
+59
+00:04:10,000 --> 00:04:14,000
+Let me learn it yet we can skip description.
+
+60
+00:04:14,000 --> 00:04:18,000
+As of now I want to make it public to be able to share it with you team.
+
+61
+00:04:19,000 --> 00:04:23,000
+You can keep your own repository, private or public, as you wish.
+
+62
+00:04:23,000 --> 00:04:27,000
+We don't need to let me read me nor get ignore.
+
+63
+00:04:27,000 --> 00:04:29,000
+We'll add this by ourselves.
+
+64
+00:04:29,000 --> 00:04:36,000
+Just press big green button, create repository and here you can find hints what to do next.
+
+65
+00:04:36,000 --> 00:04:38,000
+In case we don't have a local repository.
+
+66
+00:04:38,000 --> 00:04:42,000
+One case we want to push local repository to this hosting.
+
+67
+00:04:43,000 --> 00:04:50,000
+What is also worth to mention is that you can establish connection with it via HTTP protocol or S.H.
+
+68
+00:04:50,000 --> 00:04:56,000
+establish in connection with the SSA protocol requires additional configuration and I will show you
+
+69
+00:04:56,000 --> 00:05:03,000
+that in the separate lesson to establish connection via https, no additional configuration is a.
+
+70
+00:05:03,000 --> 00:05:10,000
+What in this lesson, I will show you how to push files to the Hosten with the help of HTTPS protocol,
+
+71
+00:05:10,000 --> 00:05:13,000
+that's why we need to click here, OK?
+
+72
+00:05:14,000 --> 00:05:20,000
+What we need to do now, we need to connect our local repository with this remote hosten how to do this.
+
+73
+00:05:20,000 --> 00:05:21,000
+Here we can see hints.
+
+74
+00:05:22,000 --> 00:05:29,000
+Let's go back to our get back and our local repository, first of all, to check that your local repository
+
+75
+00:05:29,000 --> 00:05:38,000
+isn't connected with any remote repository yet enters the next command, gets remote with option B and
+
+76
+00:05:38,000 --> 00:05:43,000
+we see that our local repository isn't connected with any other remote repository.
+
+77
+00:05:43,000 --> 00:05:46,000
+OK, then let's perform the next command.
+
+78
+00:05:47,000 --> 00:05:50,000
+Copy this https eurorail from here.
+
+79
+00:05:51,000 --> 00:05:52,000
+Press control and.
+
+80
+00:05:53,000 --> 00:06:02,000
+Now let's type the following year remote at our region and paste link which we copied to paste link
+
+81
+00:06:02,000 --> 00:06:06,000
+and it bash press mouse right click and select based option.
+
+82
+00:06:06,000 --> 00:06:08,000
+But what is a region.
+
+83
+00:06:08,000 --> 00:06:13,000
+Our region is a shorthand name for the remote repository to be more specific.
+
+84
+00:06:13,000 --> 00:06:18,000
+This word is used instead of the repository URL to make reference and much easier.
+
+85
+00:06:19,000 --> 00:06:25,000
+Now we need to connect our local branch master with the master branch in the remote repository all the
+
+86
+00:06:25,000 --> 00:06:27,000
+time during the development.
+
+87
+00:06:27,000 --> 00:06:31,000
+Are going to have two versions of the one branch that you will try to synchronize.
+
+88
+00:06:32,000 --> 00:06:37,000
+For example, if you have Master Branch in your repository, you should have a region master branch
+
+89
+00:06:37,000 --> 00:06:42,000
+in the remote repository to connect local master branch with a remote master branch.
+
+90
+00:06:42,000 --> 00:06:47,000
+We have to execute the next command, yet push our region was option.
+
+91
+00:06:47,000 --> 00:06:52,000
+You must option U stands for upstream.
+
+92
+00:06:53,000 --> 00:06:59,000
+This option automatically sets the upstream US link in our RAPPA to its central one.
+
+93
+00:06:59,000 --> 00:07:03,000
+After this one will tell you to pull changes.
+
+94
+00:07:03,000 --> 00:07:07,000
+It will understand that I want to pull changes exactly from this region.
+
+95
+00:07:07,000 --> 00:07:09,000
+Branch press enter.
+
+96
+00:07:10,000 --> 00:07:16,000
+It didn't ask me GitHub login and password because I already stored in my credential manager on my computer.
+
+97
+00:07:17,000 --> 00:07:23,000
+But most likely you will be asked to enter your GitHub login and password follows the hands on the pop
+
+98
+00:07:23,000 --> 00:07:24,000
+up windows.
+
+99
+00:07:25,000 --> 00:07:29,000
+Now let's go back to the Web browser to explore our regional repository.
+
+100
+00:07:30,000 --> 00:07:31,000
+Refresh the page.
+
+101
+00:07:32,000 --> 00:07:33,000
+Congratulations.
+
+102
+00:07:33,000 --> 00:07:37,000
+And you see that you have pushed your changes to the remote git repository.
+
+103
+00:07:38,000 --> 00:07:40,000
+By the way, can you see the repository description?
+
+104
+00:07:41,000 --> 00:07:47,000
+Usually people use read me dot and file to put their repository description by convention.
+
+105
+00:07:47,000 --> 00:07:51,000
+Content on this file is displayed on the homepage of the repository.
+
+106
+00:07:52,000 --> 00:07:59,000
+That's why, in case you want to put some description here, just to just read me file like we did.
+
+107
+00:07:59,000 --> 00:08:05,000
+Then one more thing that I want to show you today is how you can clone a remote repository, for example,
+
+108
+00:08:05,000 --> 00:08:11,000
+the first day you journey to a new job and started work on the new project, you can ask your tech lead
+
+109
+00:08:11,000 --> 00:08:17,000
+where the repository are and you will be provided with the link you have to clone remote repository
+
+110
+00:08:17,000 --> 00:08:22,000
+to your machine to be able to work on the source code together with the whole team.
+
+111
+00:08:23,000 --> 00:08:25,000
+How to clone existing repository.
+
+112
+00:08:26,000 --> 00:08:27,000
+Let me show you example.
+
+113
+00:08:28,000 --> 00:08:31,000
+Here is a project with a source code for my Java students.
+
+114
+00:08:31,000 --> 00:08:37,000
+Let me clone it to my local computer so that I could investigate the source code and push changes that
+
+115
+00:08:37,000 --> 00:08:43,000
+I want to press the green button and select https for the sake of the example.
+
+116
+00:08:44,000 --> 00:08:47,000
+Corbisiero now on your computer.
+
+117
+00:08:47,000 --> 00:08:50,000
+Navigate to any place on a file system you wish.
+
+118
+00:08:51,000 --> 00:08:58,000
+Choose a directory where you would like to store the source code of this project openly bash in that
+
+119
+00:08:58,000 --> 00:09:00,000
+directory and execute the next command.
+
+120
+00:09:02,000 --> 00:09:07,000
+Git clone, mouse, right, click paste and press the button.
+
+121
+00:09:12,000 --> 00:09:18,000
+Now you can check your folder and you will find all files from remote repository cloned here, including
+
+122
+00:09:18,000 --> 00:09:23,000
+the folder of the repository here you can find doget folder for this project.
+
+123
+00:09:24,000 --> 00:09:25,000
+Congratulations.
+
+124
+00:09:25,000 --> 00:09:28,000
+Now, let's recap what we have learned in this lesson.
+
+125
+00:09:29,000 --> 00:09:35,000
+Today, we learned what hosting for Repositories is one of the most popular gifts Hosten.
+
+126
+00:09:36,000 --> 00:09:38,000
+After that, we created account on the GitHub.
+
+127
+00:09:39,000 --> 00:09:43,000
+In this lesson, you saw how to check remote repository if needed.
+
+128
+00:09:43,000 --> 00:09:49,000
+Now you can connect your remote repository with the local one and push all necessary changes.
+
+129
+00:09:50,000 --> 00:09:53,000
+Also, you learned how to set up stream for the gift.
+
+130
+00:09:53,000 --> 00:09:58,000
+Branch will use this knowledge in the next lessons when will create other branches.
+
+131
+00:09:59,000 --> 00:10:05,000
+Now you know why you may need README file in your repository and what you have to write there.
+
+132
+00:10:06,000 --> 00:10:11,000
+In this lesson we reviewed to get KLON Command and I believe you understand how you can clone a repository
+
+133
+00:10:11,000 --> 00:10:12,000
+to your local machine.
+
+134
+00:10:13,000 --> 00:10:14,000
+That's all for this lesson.
+
+135
+00:10:15,000 --> 00:10:18,000
+Thanks a lot for your attention and see you in the next lesson.
+
diff --git a/17 - GIT/008 SSH Connection_en.srt b/17 - GIT/008 SSH Connection_en.srt
new file mode 100644
index 0000000000000000000000000000000000000000..5b5dd6d738b0985e5da5b468aea892c9030507a9
--- /dev/null
+++ b/17 - GIT/008 SSH Connection_en.srt
@@ -0,0 +1,480 @@
+1
+00:00:06,000 --> 00:00:07,000
+Hello, Jim.
+
+2
+00:00:07,000 --> 00:00:11,000
+In this lesson, I'm going to show you how you can establish S.H. Connection.
+
+3
+00:00:11,000 --> 00:00:14,000
+We'll talk briefly about why do we need it after that.
+
+4
+00:00:14,000 --> 00:00:21,000
+I will tell you how you have to generate SSL keys on your computer and where to configure SSL connection
+
+5
+00:00:21,000 --> 00:00:22,000
+in your account.
+
+6
+00:00:22,000 --> 00:00:27,000
+Also in this lesson, I will show you how you can update your remote repository that is connected to
+
+7
+00:00:27,000 --> 00:00:28,000
+your local one.
+
+8
+00:00:28,000 --> 00:00:33,000
+To start with, I'd like you to understand first what is SNH?
+
+9
+00:00:33,000 --> 00:00:36,000
+Because you're in your life as a software engineer.
+
+10
+00:00:36,000 --> 00:00:42,000
+You're going to use this protocol many times to get access to other computers, as, say, stands for
+
+11
+00:00:42,000 --> 00:00:43,000
+Secure Socket Shell.
+
+12
+00:00:44,000 --> 00:00:50,000
+It is a security protocols that allows you to connect to a remote computer by using text based interface.
+
+13
+00:00:50,000 --> 00:00:56,000
+Using the Sensage, you can easily log into another computer from anywhere and perform any commands
+
+14
+00:00:56,000 --> 00:00:59,000
+on that computer or do any changes you wish.
+
+15
+00:00:59,000 --> 00:01:05,000
+The goal of SFH is to make remote connections to computers much more secure while working with remote
+
+16
+00:01:05,000 --> 00:01:06,000
+repositories.
+
+17
+00:01:06,000 --> 00:01:13,000
+You often have to identify yourself using your username and password and establish an SSA connection
+
+18
+00:01:13,000 --> 00:01:14,000
+is another way.
+
+19
+00:01:14,000 --> 00:01:17,000
+How to identify yourself without using the username or passwords.
+
+20
+00:01:17,000 --> 00:01:25,000
+Every time SSA requires both components to be configured server side, that is our remote repository.
+
+21
+00:01:25,000 --> 00:01:29,000
+In this case, this is a GitHub and the second part is a client side.
+
+22
+00:01:30,000 --> 00:01:37,000
+That is our local computer to authenticate user as I keys are quite the key come in pairs.
+
+23
+00:01:37,000 --> 00:01:40,000
+Public and private key public key.
+
+24
+00:01:40,000 --> 00:01:47,000
+You can store on any remote server on the GitHub for example, and the private keys stored only on your
+
+25
+00:01:47,000 --> 00:01:54,000
+computer during the establishment of S.H. Connection Key is checked in case they're matched SSA each
+
+26
+00:01:54,000 --> 00:01:56,000
+session is established.
+
+27
+00:01:56,000 --> 00:02:03,000
+The cryptographic behind SSL key ensures that no one can reverse engineer your private key from the
+
+28
+00:02:03,000 --> 00:02:04,000
+public one.
+
+29
+00:02:04,000 --> 00:02:09,000
+Now you understand that first thing we need to do is to generate SSL keys.
+
+30
+00:02:09,000 --> 00:02:10,000
+Let's do that.
+
+31
+00:02:11,000 --> 00:02:17,000
+The few different ways how to generate as a stage kiss on your computer and if you Google this question,
+
+32
+00:02:17,000 --> 00:02:21,000
+you might find a few commands that help you to generate MSH cues from the console.
+
+33
+00:02:22,000 --> 00:02:28,000
+But I'm going to show you the easiest way to generate a set of keys that almost never mentioned to generate
+
+34
+00:02:28,000 --> 00:02:29,000
+the key.
+
+35
+00:02:29,000 --> 00:02:30,000
+Open the app.
+
+36
+00:02:31,000 --> 00:02:34,000
+You can find it in window search or just by pressing a mouse.
+
+37
+00:02:34,000 --> 00:02:34,000
+Right.
+
+38
+00:02:34,000 --> 00:02:37,000
+Click in the file explorer and selecting it be.
+
+39
+00:02:38,000 --> 00:02:43,000
+If you open it in the folder where you have local git repository initialized, it can look like this.
+
+40
+00:02:44,000 --> 00:02:48,000
+But in case you open, get GUI in some other place it can look like this.
+
+41
+00:02:49,000 --> 00:02:56,000
+Nevertheless, in both cases we need to click on the help up here and after that show at S.A.G. Press
+
+42
+00:02:56,000 --> 00:02:58,000
+generate key button.
+
+43
+00:02:58,000 --> 00:03:01,000
+Now I'm asked to enter a passphrase.
+
+44
+00:03:01,000 --> 00:03:07,000
+The main goal of this passphrase is to encrypt your private key in case attacker would steal your private,
+
+45
+00:03:07,000 --> 00:03:08,000
+as I say, key.
+
+46
+00:03:08,000 --> 00:03:11,000
+It will be useless for him because he doesn't know your passphrase.
+
+47
+00:03:12,000 --> 00:03:18,000
+While attackers spend time on crack in your private key passphrase can buy you some time to revoke keys
+
+48
+00:03:18,000 --> 00:03:19,000
+and roll over to the new one.
+
+49
+00:03:20,000 --> 00:03:25,000
+By leaving this field empty, we acceptance the risk that the attacker can get access to the private
+
+50
+00:03:25,000 --> 00:03:26,000
+key on our computer.
+
+51
+00:03:27,000 --> 00:03:33,000
+I just click OK button and when I am asked to enter the same passphrase, I just click OK, button one
+
+52
+00:03:33,000 --> 00:03:34,000
+more time.
+
+53
+00:03:34,000 --> 00:03:40,000
+And here you are going to see only publicly that you can share copies is key to the clipboard.
+
+54
+00:03:40,000 --> 00:03:43,000
+And open your GitHub account here.
+
+55
+00:03:43,000 --> 00:03:48,000
+Click on icon of your profile and select settings here.
+
+56
+00:03:48,000 --> 00:03:52,000
+Find a cessation keys section, click on it.
+
+57
+00:03:52,000 --> 00:03:56,000
+You can have multiple SSL keys associated with your account.
+
+58
+00:03:56,000 --> 00:04:03,000
+For example, here I have my two laptops connected to the single account, my HP and ASUS laptops.
+
+59
+00:04:04,000 --> 00:04:07,000
+To add new SSL key, just click this button.
+
+60
+00:04:07,000 --> 00:04:10,000
+Title can be any title you would like.
+
+61
+00:04:10,000 --> 00:04:12,000
+For example, my laptop.
+
+62
+00:04:12,000 --> 00:04:18,000
+Then put your cursor in key text area and paste the content of your clipboard.
+
+63
+00:04:19,000 --> 00:04:21,000
+I press control and be awesome.
+
+64
+00:04:22,000 --> 00:04:28,000
+Now press at S.A.G. you have me ask you to insert password.
+
+65
+00:04:30,000 --> 00:04:37,000
+And I can see the new S.A.G. is added to this list, great, what to do next to work with your remote
+
+66
+00:04:37,000 --> 00:04:42,000
+repositories, we assess each protocol you have to set the proper remote.
+
+67
+00:04:42,000 --> 00:04:47,000
+Let's navigate back to our kybosh to check what remote repository we currently have said.
+
+68
+00:04:48,000 --> 00:04:54,000
+You remember the command to check the remote gate remote with option B here.
+
+69
+00:04:54,000 --> 00:04:59,000
+You can see that currently we use HTTPS protocol to connect to our remote.
+
+70
+00:04:59,000 --> 00:05:02,000
+We need to change our remote to connect our repository.
+
+71
+00:05:02,000 --> 00:05:05,000
+We are S.H. Where to find another Ururoa.
+
+72
+00:05:06,000 --> 00:05:09,000
+Let's go back to the Web browser to our good Happe account.
+
+73
+00:05:10,000 --> 00:05:13,000
+Here is the repository which we created together on the previous lesson.
+
+74
+00:05:14,000 --> 00:05:20,000
+Let's press this green button here to remember that on previous lesson we selected HTP on purpose during
+
+75
+00:05:20,000 --> 00:05:21,000
+the remote setting.
+
+76
+00:05:22,000 --> 00:05:28,000
+Now I want you to press this button as SNH copy to the clipboard, this URL.
+
+77
+00:05:28,000 --> 00:05:31,000
+Let's get back to the kybosh on previous lesson.
+
+78
+00:05:31,000 --> 00:05:38,000
+You learned that that remote we have to target remote at command, but to change the remote area, we
+
+79
+00:05:38,000 --> 00:05:41,000
+have to enter another command that's typed the following.
+
+80
+00:05:42,000 --> 00:05:48,000
+Guedes remote said Eurorail a region and paste Eurail that we copied on the GitHub.
+
+81
+00:05:49,000 --> 00:05:49,000
+Press enter.
+
+82
+00:05:50,000 --> 00:05:52,000
+Now let's check our remote.
+
+83
+00:05:54,000 --> 00:05:55,000
+Awesome.
+
+84
+00:05:55,000 --> 00:05:59,000
+Now we see that we are not using HTTPS protocol anymore.
+
+85
+00:05:59,000 --> 00:06:02,000
+Let me show you one more thing so that you will be ready for that.
+
+86
+00:06:03,000 --> 00:06:04,000
+I want to make some changes.
+
+87
+00:06:04,000 --> 00:06:07,000
+Let me make some changes in this file.
+
+88
+00:06:10,000 --> 00:06:18,000
+Now, let me add it to the staging area and create a commit you commit, dash a dash cam test, S.H.
+
+89
+00:06:18,000 --> 00:06:21,000
+Connection, OK, committers created.
+
+90
+00:06:22,000 --> 00:06:29,000
+Now let's push our changes to the remote repository yet push origin master Origin Master is a reference
+
+91
+00:06:29,000 --> 00:06:31,000
+to our remote repository.
+
+92
+00:06:31,000 --> 00:06:37,000
+But on previous lesson we already set up stream for our current branch by using EU option.
+
+93
+00:06:38,000 --> 00:06:44,000
+That means my local repository is already aware that this master branch is connected with Master Branch
+
+94
+00:06:44,000 --> 00:06:45,000
+in the region.
+
+95
+00:06:45,000 --> 00:06:50,000
+And that also means that for me it is not necessarily to write Origin Master.
+
+96
+00:06:51,000 --> 00:06:52,000
+Let me even remove that now.
+
+97
+00:06:53,000 --> 00:07:00,000
+Press enter the message, which you see here is just to ensure that you trust this remote host and want
+
+98
+00:07:00,000 --> 00:07:04,000
+to connect to it types to get help to the nonhostile.
+
+99
+00:07:05,000 --> 00:07:12,000
+This message will appear on the first time you connect to the host and sees a message that this host
+
+100
+00:07:12,000 --> 00:07:14,000
+is permanently added to the list of known hosts.
+
+101
+00:07:15,000 --> 00:07:18,000
+The list of known hosts is located in the same folder.
+
+102
+00:07:19,000 --> 00:07:25,000
+You can find this folder inside your computer user folder in Linux based systems, including Mac OS.
+
+103
+00:07:26,000 --> 00:07:28,000
+This folder is located in the home directory.
+
+104
+00:07:29,000 --> 00:07:35,000
+Here in the directory you can find private and public access key and file with a list of nonhostile.
+
+105
+00:07:35,000 --> 00:07:39,000
+You can open this file in the notepad if you want to explore it.
+
+106
+00:07:39,000 --> 00:07:40,000
+Contents.
+
+107
+00:07:40,000 --> 00:07:43,000
+Let me search for GitHub mentions in this file.
+
+108
+00:07:46,000 --> 00:07:52,000
+And here you can see you have was added at the end of the list and let's check our repository to make
+
+109
+00:07:52,000 --> 00:07:55,000
+sure that our commute was successfully pushed to the remote.
+
+110
+00:07:56,000 --> 00:08:03,000
+I refresh page and here all you can see my last commute message and also I can check comit history.
+
+111
+00:08:03,000 --> 00:08:05,000
+Click here on comments.
+
+112
+00:08:06,000 --> 00:08:07,000
+Here's our latest comit.
+
+113
+00:08:08,000 --> 00:08:08,000
+Great.
+
+114
+00:08:09,000 --> 00:08:11,000
+Now, let's recap what we have learned today.
+
+115
+00:08:12,000 --> 00:08:18,000
+Today, we learned what is SSR protocol and when we need to use it, you understand how sausage connection
+
+116
+00:08:18,000 --> 00:08:20,000
+is created and how to generate.
+
+117
+00:08:20,000 --> 00:08:26,000
+As I say, each case, we can figure out our remote repository to work through the S.H. and we learned
+
+118
+00:08:26,000 --> 00:08:30,000
+what are known hosts are and how to give hope to the nonhostile.
+
+119
+00:08:31,000 --> 00:08:32,000
+That's all for now.
+
+120
+00:08:33,000 --> 00:08:36,000
+Thanks a lot for your attention and see you in the next lesson.
+