ООП C# | Объектно ориентированное программирование C#

Ранее мы изучили, что такое объекты и классы. Также, рассмотрели свойства, которыми объекты обладают. Кроме того, были затронуты действия, которые могут совершаться над объектами, называемые методами.  Главной задачей объектно — ориентированного подхода является упрощение процесса разработки. Весь подход стоит на трех основных принципах: наследование, инкапсуляция и полиморфизм. Рассмотрим каждый из них и объектно ориентированное программирование в целом.

Смотрите моё видео на тему объектно-ориентированное программирование C#

Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!

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

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

Объектно-ориентированное программирование. Наследование
Иерархия классов при наследовании

Вернемся к ранее рассмотренному примеру кода. Был описан класс «Персонаж», который является базовым. От него могут быть унаследованы более «узкие» классы персонажей, такие как «Воин», «Стрелок», «Маг» и другие. Следует заметить, что класс может наследоваться только от одного базового класса.

/// <summary>
/// Класс "Воин".
/// </summary>
public class Warrior : Character
{

}

/// <summary>
/// Класс "Маг".
/// </summary>
public class Wizard : Character
{

}

/// <summary>
/// Класс "Лучник".
/// </summary>
public class Archer : Character
{

}

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

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

Полиморфизм

Достаточно сложное в определении понятие. Если говорить упрощенно, мы можем использовать свойства и методы потомков. К примеру, мы объявили несколько потомков класса «Персонаж».

Character warrior = new Warrior();

При подобной записи warrior будет являться объектом класса «Воин» несмотря на то, что типом мы указали базовый класс.

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

В C# любой класс является наследником класса Object. Благодаря этому свойству экземпляр любого класса обладает рядом полезных методов.

  • Equals() — сравнение переданного в качестве параметра объекта с текущим.
  • GetHashCode() — возвращает хеш-код текущего объекта в памяти.
  • GetType() — позволяет идентифицировать тип объекта.
  • ToString() — приводит класс к строке.
  • Finalize() — отвечает за уничтожение объекта (вызывается автоматически).
  • MemberwiseClone() — возвращает точную копию объекта.

Любой из этих методов может быть переопределен для изменения или дополнения функциональности.

Объектно ориентированное программирование — Итоги

Итак, это минимум, необходимый для понимания что такое объектно-ориентированное программирование. Переопределение методов мы рассмотрим далее. Удачных экспериментов, коллеги.

Также рекомендую изучить статью SOLID в объектно-ориентированном программировании. А также подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.