C#   Уроки программирования с нуля. Си-шарп для чайников   C#

Здравствуйте, гость!
Вход
Регистрация


Инкапсуляция в Си-шарп. Модификаторы доступа
В этом уроке мы поговорим о еще одном из базовых принципов ООП – инкапсуляции.

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

Инкапсуляция – это скрытие реализации объекта от конечного пользователя, которое в Си-шарп осуществляется при помощи модификаторов доступа (private, public…). Конечным пользователем объекта здесь выступает либо объект наследник, либо программист.

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

А теперь давайте будем разбираться, зачем нужна инкапсуляция, зачем что-то скрывать. Представим что объект это какая-либо вещь (телефон, автомобиль…), так вот инкапсуляция позволяет создать корпус этой вещи. Возьмем для примера мобильный телефон. У него есть различные кнопки, другие элементы интерфейса, и то, что внутри (схемы, соединения…). Если сравнивать с объектом в программировании, то элементы интерфейса это публичные методы, а то что внутри – приватные члены объекта. Когда мы нажимаем какую-либо кнопку на телефоне, нам нет необходимости знать, какие при этом процессы происходят внутри телефона, мы ждем только результата. В программировании мы вызываем какой-либо метод, этот метод может вызывать другой, внутренний, вспомогательный метод, и в итоге мы получаем результат. Этот вспомогательный метод нет смысла вызывать напрямую, это может сынициировать какой-либо сбой в программе, поэтому доступ к нему стоит ограничить.

Вот представьте себе телевизор без корпуса. Человек хочет переключить канал, подходит к телевизору, и вместо того, чтобы нажать кнопку переключения канала, он выдергивает какой-то проводок (ну не имел он никогда дела с телевизорами или пьяный). Канал не переключился, результат не тот. В программировании это равноценно вызову вспомогательного метода, непредназначенного для прямого вызова. Человеку свойственно ошибаться, инкапсуляция позволяет избавить программиста от допущения подобного рода ошибок.

Для реализации инкапсуляции в Си-шарп используются модификаторы доступа. Какие они бывают я уже писал в уроке Классы в Си-шарп, но повторюсь и здесь:

- public – доступ к члену возможен из любого места одной сборки, либо из другой сборки, на которую есть ссылка;
- protected – доступ к члену возможен только внутри класса, либо в классе-наследнике (при наследовании);
- internal – доступ к члену возможен только из сборки, в которой он объявлен;
- private – доступ к члену возможен только внутри класса;
- protected internal - доступ к члену возможен из одной сборки, либо из класса-наследника другой сборки.

Какой модификатор и где использовать, так однозначно объяснить невозможно. Всё зависит от конкретной задачи, ситуации. Знаю, что выбор модификатора является одной из самых частых проблем новичков. Скажу, что для начала главное разобраться с тремя модификаторами – public, protected и private. Вся выше написанная теория должна помочь вам в их освоении, а закрепление знаний придет только с практикой. Но одну подсказку таки скажу. Простые поля класса почти никогда не объявляются как public, придерживайтесь этой нормы.

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

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


Поделиться с друзьями:
23 фев 2014 02:50
bas-tion.ru 07 май 2016 12:40
Начал изучать Английский язык в 40 лет. Сейчас владею свободно (мне так кажется). Полная аналогия с любым языком программирования. Изучения любого языка состоит из 2-х этапов:

1. Понимание того что ты делаешь.
2. Доведение до автоматизма того что ты понял.

Легко запомнить только то что легко представить. Современное обучение не правильное, так как человек имеет основную 3-х мерную память, а материал предоставляется в 2-х мерном виде.

По поводу инкапсуляции:
Исходя из прочитанного в статье выше, инкапсуляция необходима для защиты данных от внешнего доступа. Данные похожи на особо-важную персону внутри броне-капсулы.

Совет: Пишите любые комментарии к коду. Если можете написать комментарий, значит вы поняли что делаете.


// Пример
static void Main(string[] args) // Статический метод, не требуется объект для вызова. Ничего не возвращает. В качестве аргумента принимает строковые массивы.
{
}

ROOT 28 мар 2016 16:34
Прочел комментарий Дониер'а и понял, что я определился с тем, что мне нравится слишком поздно (20 лет). Эх... если бы это случилось раньше! Уже 4-й курс (учусь на программиста), но при поступлении я ничего не знал об этой профессии (почти ничего), отстал от всех, забил. Но позже втянулся, понравилось. Конечно, еще не поздно, но все-равно чувствую себя ущербно по сравнению с другими. Столько времени про***л. Спасибо этому сайту и Вам, уважаемый Admin. Вы действительно мне помогли. Дали пинка что ли... Я этого не забуду и обязательно поблагодарю!

===================================

Ах, чел, мне без нескольких лет - 30, 2 года заочку сдаю как нибудь. А ты говоришь в 20 поздно. У нас на потоке и в 35 народ учится. Так что, никогда не поздно.

===================================

Ты чертовски прав)) Никогда не поздно воплотить свою мечту)) Этот сайт помог многим... и многим поможет. Когда-то 3-го августа 2015 и я тоже только начал программировать именно по этим урокам. Потом еще Шилдт, вебинары, видеоуроки... это здорово!!! Спасибо Максиму))) xD

hello 03 фев 2016 12:44
Прочел комментарий Дониер'а и понял, что я определился с тем, что мне нравится слишком поздно (20 лет). Эх... если бы это случилось раньше! Уже 4-й курс (учусь на программиста), но при поступлении я ничего не знал об этой профессии (почти ничего), отстал от всех, забил. Но позже втянулся, понравилось. Конечно, еще не поздно, но все-равно чувствую себя ущербно по сравнению с другими. Столько времени про***л. Спасибо этому сайту и Вам, уважаемый Admin. Вы действительно мне помогли. Дали пинка что ли... Я этого не забуду и обязательно поблагодарю!

===================================

Ах, чел, мне без нескольких лет - 30, 2 года заочку сдаю как нибудь. А ты говоришь в 20 поздно. У нас на потоке и в 35 народ учится. Так что, никогда не поздно.

Kolsky 31 дек 2015 20:27
Дониер, +10)
Максим, благодарю вас за доступное и в то же время полное изложение материала! Надеюсь на продолжение уроков, как и многие, впрочем.

rotkiv 13 окт 2015 14:49
пример с телефоном был кстати, но все же когда и какой модификатор доступа использовать это вопрос

Роман 17 сен 2015 16:33
Большая благодарность автору. Очень полезные и понятные уроки.

Виталий 19 фев 2015 20:17
Честно говоря, так и не понял зачем она нужна. Но, думаю, со временем пойму.

Диманиак 01 дек 2014 13:43
Для лучшего понимания модификатора protected internal прошу объяснить понятие "другая сборка" и как оно (связь между основной и другой сборкой) работает, привести пример.

Остальные модификаторы понятны и стараюсь использовать их исходя из принципа необходимости и достаточности.

AlexSerikov 09 июл 2014 21:10
Прочел комментарий Дониер'а и понял, что я определился с тем, что мне нравится слишком поздно (20 лет). Эх... если бы это случилось раньше! Уже 4-й курс (учусь на программиста), но при поступлении я ничего не знал об этой профессии (почти ничего), отстал от всех, забил. Но позже втянулся, понравилось. Конечно, еще не поздно, но все-равно чувствую себя ущербно по сравнению с другими. Столько времени про***л. Спасибо этому сайту и Вам, уважаемый Admin. Вы действительно мне помогли. Дали пинка что ли... Я этого не забуду и обязательно поблагодарю!

Максим 26 май 2014 14:37
Дониер
---
Спасибо)

Дониер 25 май 2014 12:27
Здравствуйте, мне 14 лет давно интересовался программированием. Большое спасибо вам за сайт, написано доступным языком. Научиться программированию это моя мечта, работать в группе программистов создавать что-то и это интригует меня и я больше хочу научиться этому. Да... путь этот как я понимаю очень трудный и долгий. Разработчики этого сайта не останавливайтесь на достигнутым, мы всгда вас поддержим. Вы будуте учиться вместе с нами и открывать новое для себя. Успехов вам и мне не посесмешало бы!!!

Вячеслав 26 фев 2014 14:42
это круто. жалко уроков мало, мне как студенту понравилось


Добавить комментарий:

Имя (обязат.)
E-mail (обязат., не публикуется)


Для вставки ваших программ пользуйтесь кнопкой "исходный код"
Вёрстка сайта с нуля

Уникальный Видеокурс!

"Научись верстать сайты и заработай на этом!"

Получить видеокурс

Подпишись на курс по программированию, и узнавай первым о новых уроках!

RSS подписка Страничка Вконтакте Мы в Twitter
Бесплатный курс по основам PHP
Ошибка в тексте? Выделите ее мышкой и нажмите Ctrl+Enter
Поблагодарить автора: Номер карты (ПриватБанк)
5168 7572 4170 8660
WebMoney
R372544961915 U685637142028 Z999792764387
Наверх
Система Orphus