Немного про ООП
Инкапсуляция
- Инкапсуляция обеспечивает объединение данных и функции и в некоторых случая позволяет ограничить доступ одних объектов к другим.
Инкапсуляция обеспечивает сокрытие данных, но не является самим сокрытием данных. Она не всегда даёт такую возможность, так как некоторые языки представляют механизм рефлексии, который позволяет менять приватные данные


- Инкапсуляция по Герберту Шилдту

Наследование
- Механизмы наследования можно заменить с помощью агрегации и композиции, однако эта парадигма нужна для формирования иерархии родственных объектов и создавать более благоприятные условия для реализации полиморфизма.
Однако тут стоит упомянуть, что наследование может быть даже вредно в реальных проектах, ведь можно поломать весь код из одного места и когда у родителя огромное множество наследников – вносить правки становится крайне сложно


- Идеальный пример наследования можно увидеть в прототипировании JS. Тут в качестве родителя выступает конкретно сформированный объект и объекты можно сотворять на ходу

Полиморфизм
-
Ad Hoc полиморфизм – который представлен перегрузкой методов

-
Параметрический полиморфизм – который представлен в C# через Generics
-
И полиморфизм подтипов, который мы достигаем через наследование и апкаст. Легче всего его понять, используя паттерн «Стратегия»

-
Ещё один пример полиморфизма в логировании

-
А таким образом можно показать полиморфизм в JS

-
А тут пример, когда полиморфизм обеспечивает сокрытие. Тут представлен публичный метод Test, который при вызове в классе Program не позволит скомпилировать программу, так как теперь к нему нет доступа (он стал приватным и вызывается через метод Test2)

Абстракция
- Инкапсуляция влияет на формирование интерфейса нашего будущего типа

Посылка сообщения
- Объект вызывает метод у другого объекта

- Если в C такая парадигма может сработать, то уже в C# компилятор за такой подход надаёт по рукам

Повторное использование
- Парадиигма, которая определяет повторное использование кода в проектах. Обычно и эту парадигму опускают в описании