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

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


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

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

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

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

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

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

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

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

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

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

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


Поделиться с друзьями:
23 фев 2014 02:50
Мяу 24 ноя 2017 16:44
Шымкенттын кыздары зын зын зын зын зын

http://www.rolexladiewatch.org/tag/rolex-daytona-watches-replica 15 ноя 2017 22:41
is there a statue of limitatin on student loans??I am disabled and filled out the paperwork for the loan to be paid for because I am disabled. I filled out the paperwork over five yrs ago and now I am getting calls about the loan again??I live on a very low fix income and in kentucky

Avito321vom 28 окт 2017 06:12
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b>

<b>Мое почтение, дорогие друзья!</b>

Всегда рады предоставить Всем вам сервис по пополнению баланса на действующие активные аккаунты Avito (а также, совершенно новые). Если Вам необходимы определенные балансы - пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

<b>Аккаунты не Брут. Живут долго.</b>

Процент пополнения в нашу сторону и стоимость готовых аккаунтов: <b>50% от баланса на аккаунте.</b>
Если необходим залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
Для постоянных клиентов гибкая система бонусов и скидок!

<b>Гарантия: </b>

<b>И, конечно же ничто не укрепляет доверие, как - Постоплата!!!</b> Вперед денег не просим...

Рады сотрудничеству!

<b>Заливы на балансы Авито</b>
________

перевести деньги с авито кошелька на другой аккаунт
как вспомнить аккаунт на авито
купить аккаунт в world of tanks avito
как создать новый аккаунт на авито со старым номером телефона
кошелек авито создать

Avito321vom 29 сен 2017 04:53
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b>

<b>Здравствуйте, дорогие друзья!</b>

Всегда рады предоставить Всем вам услуги по пополнению баланса на действующие активные аккаунты Avito (а также, совершенно новые). Если Вам необходимы конкретные балансы - пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

<b>Аккаунты не Брут. Живут долго.</b>

Процент пополнения в нашу сторону и стоимость готовых аккаунтов: <b>50% от баланса на аккаунте.</b>
Если требуется залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
Для постоянных заказчиков гибкая система бонусов и скидок!

<b>Гарантия: </b>

<b>И, конечно же ничто не укрепляет доверие, как - Постоплата!!!</b> Вперед денег не просим...

Рады сотрудничеству!

<b>Заливы на балансы Авито</b>
________

как на один номер зарегистрировать 2 аккаунта на авито
кошелек женский кожаный бу на авито москва
где купить аккаунты для авито
авито фурла кошелек
как восстановить аккаунт на авито если он удален навсегда

Nataliehic 25 сен 2017 01:54
Данное сообщение размещено здесь с помощью XRumer + XEvil 3.0
XEvil 3.0 - революционное приложение, способное обходить практически любую антибот-защиту.
Распознавание капчи Google, Facebook, Yandex, VKontakte, Captcha Com и свыше 8400 тысяч других типов!
Вы читаете это - значит, это работает! ;)
Подробности на официальном сайте XEvil.Net, есть бесплатная демо-версия.

Serj190492 12 апр 2017 11:37
ЗЫ. Уроки супер, всё доступно!

Serj190492 12 апр 2017 11:37
Вам бы модератора на комментарии посадить, что ли...
Столько спама в последнее время(

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

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