
1. Частина де ми, де-юре, обговорюємо прототипне ООП...
1.1. ...а де-факто - прототипне успадкування
1.1.1. 'Числа, рядки, логічні змінні (true та false), а також значення null та undefined у JavaScript відносяться до простих типів даних. Решта — об'єкти. Числа, рядки та логічні змінні схожі на об'єкти тим, що мають методи, але, на відміну від об'єктів, вони незмінні. Об'єкти в JavaScript мають ключові колекції, що змінюються. В JavaScript об'єктами є масиви, функції, регулярні вирази, і, звичайно, об'єкти також є об'єктами.' Дуглас Крокфорд
1.1.2. Розглянемо Array
1.1.2.1. акцесори - не змінюють вихідний масив
1.1.2.1.1. Array.prototype.includes
1.1.2.1.2. Array.prototype.slice
1.1.2.2. мутатори - змінюють вихідний масив
1.1.2.2.1. Array.prototype.push
1.1.2.2.2. Array.prototype.pop
1.1.2.2.3. Array.prototype.splice
1.1.2.3. ітератори - застосовують функцію, передану як аргумент, на кожному елементі масиву для створення нового
1.1.2.3.1. forEach
1.1.2.3.2. map
1.1.2.3.3. filter
1.1.2.4. Трохи експериментів
1.1.3. Порівняння з класовим ООП
1.1.3.1. немає приватності
1.1.4. Q&A
2. Принципи S.O.L.I.D.
2.1. S - Single Responsibility Principle
2.1.1. Простими словами: 'Кожен клас повинен виконувати лише один обов’язок. Це не означає, що в нього має бути тільки один метод. Це означає, що всі методи класу мають бути сфокусовані на виконання одного спільного завдання. Якщо є методи, які не відповідають меті існування класу, їх треба винести за його межі.'
2.1.1.1. Візуалізація
2.2. O - Open/Close Principle
2.2.1. Простими словами: 'Класи мають бути відкриті до розширення, але закриті для змін.'
2.2.1.1. Візуалізація
2.3. L - Liskov Substitution Principle
2.3.1. Простими словами: 'Якщо у вас є функція, яка працює для базового типу, вона повинна працювати для похідного типу'
2.3.1.1. Візуалізація
2.4. I - Interface Segregation Principle
2.4.1. Простими словами: 'Багато спеціалізованих інтерфейсів краще за один універсальний'
2.4.1.1. Візуалізація
2.5. D - Dependency Inversion Principle
2.5.1. Простими словами: - високорівневі модулі не повинні залежати від низькорівневих. І ті, і ті мають залежати від абстракцій - абстракції не мають залежати від деталей реалізації. Деталі реалізації повинні залежати від абстракцій
2.5.1.1. Візуалізація
2.6. Q&A
3. Епілог
3.1. Екстра матеріали
3.1.1. https://www.telerik.com/blogs/understand-prototypes-prototypal-inheritance-javascript
3.1.2. https://www.digitalocean.com/community/tutorials/understanding-prototypes-and-inheritance-in-javascript
3.1.3. https://dou.ua/lenta/articles/solid-principles/
3.1.4. https://medium.com/@cramirez92/s-o-l-i-d-the-first-5-priciples-of-object-oriented-design-with-javascript-790f6ac9b9fa
3.1.5. https://medium.com/backticks-tildes/the-s-o-l-i-d-principles-in-pictures-b34ce2f1e898
3.1.6. https://dev.to/duncanmcardle/solid-principle-1-single-responsibility-javascript-4ide
3.2. Домашнє завдання
3.3. Тизер-трейлер наступного вебінару
3.3.1. Q&A