Классы и объекты C#: инкапсуляция

С наследованием в C# мы разобрались и можно переходить к следующему «киту» объектно-ориентированного программирования — инкапсуляции. Инкапсуляция — это возможность (механизм) с помощью которой мы можем спрятать от конечного пользователя реализацию того или иного метода, устройства объекта и так далее и представить в пользование только то, что необходимо для работы, обеспечив тем самым целостность объекта. Опять же, определение может быть немного трудным для понимания, поэтому разберемся с ним подробнее и на примерах.

Пример инкапсуляции

Конечным пользователем объекта, в большинстве случаев, является программист. И не всегда этим самым программистом будете вы. Зачем скрывать от пользователя реализацию объекта? Ответ на этот вопрос был наглядно продемонстрирован ещё в самом первом примере работы с классами, когда мы разрабатывали свойства для класса Building. Вот, например, одно из свойств нашего класса:

private double height;
public double Height
{
    get => height;
    set => height = value > 0 ? value : throw new Exception("Высота здания не может быть менее 0 метров");
}

Что бы произошло, если бы мы не использовали инкапсуляцию и не скрыли бы от пользователя переменную height, а написали бы код «на заморачиваясь», например, вот так:

public double height;

Как минимум, это привело бы к тому, что мы могли бы задать отрицательное значение высоты здания, что не совсем логично, даже если это какое-то подземное сооружение. Этот только маленький пример того для чего в C# и других языках программирования используется инкапсуляция.

Вполне возможно, что при разработке своих проектов вам придётся писать классы в которых значение того или иного свойства зависят от расчёта величин в одном или нескольких методах вашего класса, которые по сути пользователю не нужны для работы — ему важен конечный результат (значение свойства). В этом случае, вы наверняка используете инкапсуляцию и спрячете «лишние» методы класса в «черный ящик», объявив их с модификатором private.

Как обеспечивается инкапсуляция в C#

В C# для инкапсуляции используются публичные (public) свойства и методы объекта, а переменные (за очень редким исключением) остаются закрытыми (private) от пользователя. Про уровни доступа мы говорили вот в этой статье.

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

Итого

Инкапсуляция в ООП позволяет скрыть от конечного пользователя реализацию той или иной части объекта (класса), обеспечивая тем самым целостность работы. Инкапсуляция в C# реализуется с использованием различных модификаторов доступа к полям и свойствам объектов. Без инкапсуляции нам бы пришлось перед использованием того или иного метода или свойства вникать в реализацию, чтобы не натыкаться на различного рода ограничения и ошибки, с инкапсуляцией же мы в большей степени уверены в том, что внутренние механизмы объекта максимально «разрулят» все возможные проблемы и, в случае необходимости, сообщат нам об исключительной ситуации.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии