Немного про ООП

OOPCSharp

Инкапсуляция

  • Инкапсуляция обеспечивает объединение данных и функции и в некоторых случая позволяет ограничить доступ одних объектов к другим.

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

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

Наследование

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

Однако тут стоит упомянуть, что наследование может быть даже вредно в реальных проектах, ведь можно поломать весь код из одного места и когда у родителя огромное множество наследников – вносить правки становится крайне сложно

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

Полиморфизм

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

  • Параметрический полиморфизм – который представлен в C# через Generics

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

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

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

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

Абстракция

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

Посылка сообщения

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

Повторное использование

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