From 6d049738d8830cb7507e4ae85e8a3cb305ab93f0 Mon Sep 17 00:00:00 2001
From: cheatsnake <72691412+cheatsnake@users.noreply.github.com>
Date: Sat, 21 Jan 2023 11:16:14 +0300
Subject: [PATCH] updated subtopic about OOP
---
README.md | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index b5f7f73..469335c 100644
--- a/README.md
+++ b/README.md
@@ -1497,21 +1497,26 @@
[ООП](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) – это один из наиболее удачных и удобных подходов для моделирования предметов реального мира. Этот подход сочетает в себе несколько очень важных принципов, которые позволяют писать модульный, расширяемый и слабо-связанный код.
- Понятие [класса](https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81%D1%81_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))
- > Класс можно понимать как кастомный тип данных (своего рода шаблон), в котором вы описываете структуру будущих объектов, которые будут реализовывать данный класс. Классы могут содержать `свойства` (это конкретные поля, в которых могут храниться данные конкретного типа данных) и `методы` (это функции, которые имеют доступ к свойствам и возможность ими манипулировать, изменять).
+ > Класс можно понимать как кастомный тип данных (своего рода шаблон), в котором Вы описываете структуру будущих объектов, которые будут реализовывать данный класс. Классы могут содержать `свойства` (это конкретные поля, в которых могут храниться данные определенного типа данных) и `методы` (это функции, которые имеют доступ к свойствам и возможность ими манипулировать, изменять).
- Понятие [объекта](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))
- > Объект это конкретная реализация класса.
+ > Объект – это конкретная реализация класса. Если в классе, например, описано свойство _name_ с типом _string_, то объект будет иметь конкретное значение для этого поля, например _"Alex"_.
+ - [Принцип наследования](https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))
+ > Возможность создавать новые классы, которые наследуют свойства и методы своих родителей. Это позволяет повторно использовать код и создавать иерархию классов.
- [Принцип инкапсуляции](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))
> Возможность скрывать определенные свойства/методы от доступа из вне, оставляя только упрощенный интерфейс для взаимодействия с объектом.
- - [Принцип наследования](https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))
- > Возможность создавать новые объекты, которые наследуют свойства и методы существующих объектов. Это позволяет повторно использовать код и создавать иерархию классов.
- [Принцип полиморфизма](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0))
> Возможность реализовывать один и тот же метод по разному в классах наследниках.
+ - [Композиция](https://github.com/f3ath/translations/blob/master/composition-vs-inheritance.md) вместо наследования
+ > Часто принцип `наследования` может усложнить и запутать Вашу программу, если хорошенько не поразмыслить над тем, как выстраивать будущую иерархию. Поэтому существует альтернативный (более гибкий) подход, который называют композицией. В частности, в языке Go отсутствуют классы и многие ООП принципы, но широко [используется композиция](https://golangbyexample.com/oop-inheritance-golang-complete).
🔗 Ссылки на материалы
1. 📺 [**ООП на простых примерах** – YouTube](https://youtu.be/-6DWwR_R4Xk)
2. 📄 [**Объектно-ориентированное программирование на примере**](https://doka.guide/js/oop/)
+3. 📺 [**Первые шаги в ООП: класс, объект, self в Python** – YouTube](https://youtu.be/odY5dlZifFE)
+4. 📺 [**Просто о ООП на примерах для TypeScript/JavaScript** – YouTube](https://youtu.be/VjGdjqyXbhg)
+5. 📺 [**ООП на примерах для Kotlin** – YouTube](https://youtu.be/3e8ZEO9ADrc)