Объяснение на двух простых примерах из реальной жизни
Я считаю, что для программистов это два самых известных и любимых друга. Кроме того, один из многих вопросов на собеседовании. Многие будут знать их теоретически, и многие будут практически внедрять их в свои программы, но даже после того, как потратят достаточно времени, вы все равно будете проявлять следующие симптомы:
- Они оба похожи?
- Я знаю их по книжным определениям, но иногда не понимаю, насколько они разные?
- Неужели это два разных понятия? Потому что я чувствую, что они одно и то же.
- Посмотрев программу, я не могу сказать, что здесь Инкапсуляция, а что Абстракция?
- Если мне нужно написать программу на любом языке, как мне реализовать эти концепции?
не волнуйся, ты в порядке! Я хотел бы поделиться двумя примерами из реального мира, которые очень легко связать, и попытаться решить эту путаницу.
Пример 1: простой выключатель света
Я знаю, что вы, должно быть, заметили выключатели в вашем доме / офисе / школе. Вы ведь знаете выключатель света в гостиной / спальне? Давайте просто запишем детали и детали, которые мы знаем об этом конкретном переключателе.
Назначение / использование переключателя
Назначение переключателя простое. Просто чтобы осветить комнату, когда это необходимо.
Как использовать?
- Переключатель имеет всего два варианта ВКЛ и ВЫКЛ. Вам просто нужно нажать на нее.
- При нажатии / включении он загорается, посылая мощность / электричество на лампочку, и освещает комнату
- При нажатии вверх / выключении он отключает источник питания лампы и делает комнату темной.
Типы пользователей?
Здесь могут быть два типа пользователей
- Электрик, который приедет и установит вам выключатель. Он очень хорошо квалифицирован и обладает навыками в этой области, знает каждую деталь переключателей и прочего и никогда не боится поражения электрическим током. Он мужчина!
- Такой пользователь, как я / вы, обычный парень, который просто хотел бы использовать переключатель, и ему все равно, как он установлен. Кроме того, я / вы могли бы когда-нибудь подумать, что на самом деле не имеет значения, как электрик выполнил бы эту работу. Нам просто нравится, когда лампочка включается / выключается при нажатии.
Как получить доступ к переключателю?
- Коммутатор, содержащий различные кнопки (кнопки, включая переключатель лампочки, регулятор скорости вращения вентилятора, розетки и т. Д.), Будет установлен на стене, доступной для человека.
- Проводка, необходимая для передачи электричества между источником питания и лампочкой, будет встроена в саму стену, не подвергая ее воздействию, в целях безопасности. Таким образом, пользователь случайно не прикоснется к проводам, по которым идет электричество.
Откуда вы знаете, что это выключатель на свет, а не на какой-либо другой?
- Переключатель бывает разных цветов, форм и размеров.
- Переключатель обычно располагается в доступных местах по мере необходимости. Например, выключатель света в ванной будет располагаться рядом с ванной, а не в гостиной. Просто так кухонный выключатель света не будет находиться в спальне.
- Если есть несколько переключателей, то один из них может иметь специальную индикацию / маркировку, чтобы человек мог легко его идентифицировать.
Я думаю, мы записали почти все, что знаем о переключателе, не так ли? Давайте попробуем определить, что здесь такое инкапсуляция и абстракция.
Абстракция против инкапсуляции
Что нужно знать обычному человеку
- Где свет?
- Где установлен / находится коммутатор?
- Если на одном коммутаторе несколько переключателей / кнопок, то нажатие какого переключателя включит / выключит какой свет? Например, как определить, какая кнопка для какого света?
Думаю, это лишь важные детали, которые необходимо знать любому обычному человеку. Я уверен, что даже вы со мной согласитесь, правда?
И знаете что, вот что такое концепция Абстракция! Пользователю предоставляются только актуальные и требуемые детали, а электрик скрывает все несущественные детали, к которым на самом деле не может получить доступ обычное лицо из соображений безопасности.
Для электрика, который является таким квалифицированным специалистом, при установке переключателя следует помнить о следующих вещах:
- Основываясь на использовании, например, на кухне / в ванной, он знает, где лучше всего установить выключатель.
- Он знает, как сделать проводку, соблюдая все меры безопасности, чтобы ни один из проводов не выходил наружу.
- Если есть необходимость иметь переключатели для управления скоростью вращения вентилятора, запускать водяной насос, включать свет в гостиной, все в одном месте, например, на том же распределительном щите, тогда он должен будет прийти с планом и дизайном того, как справиться со всеми этими проводками. Потому что у каждого электронного компонента будут разные требования к питанию.
- Возможно, ему придется подумать о разных дизайнах, основанных на разных требованиях, основанных на релевантности.
Я не электрик, но полагаю, что это то, о чем он будет помнить во время работы. Суть в том, что он знает, что лучше для пользователя этого переключателя.
Но теперь вы электрик, обладаете всеми навыками, он знает, как разместить все необходимые вещи, такие как провода, ленты, пайка и т. Д., В одном месте, называемом распределительным щитом, чтобы пользователь не мог видеть, что за этим стоит.
Все необходимые вещи собраны в одном месте, не раскрывая слишком много деталей. И когда я говорю «релевантно», это означает, что на кухонном распределительном щите не будет проводки для освещения в спальне. Объединение всех важных вещей воедино и демонстрация пользователю только основных функций - это концепция под названием Инкапсуляция!
Пример 2: банкомат
Все мы знаем, что это за машина и для чего она нужна, верно? Это банкомат, который выдает деньги. Ооо, деньги !! ??? Конечно, этот аппарат предлагает множество других функций. Но давайте просто перечислим все, что мы знаем о нем.
- В каждом банке есть банкоматы
- Человек должен иметь счет в банке и ему нужна карта для использования аппарата.
- Человек, имеющий счет в одном банке, может пользоваться банкоматом любого другого банка.
- Банкомат имеет следующие особенности:
- Читает карту
- Читает защитный PIN-код
- Считывает сумму, которую мы хотим снять
- Предоставьте пользователю основные возможности
- Выберите номинал
2. Выберите тип счета, например, Сберегательный, Текущий и т. Д.
3. Просмотр баланса и многое другое.
- Слот для карты, где пользователь может провести карту
- Слот для наличных, в котором будут выдаваться купюры
Полагаю, это важные детали, которые могут заинтересовать любого человека, использующего машину, верно? Надеюсь, ты согласен.
А теперь давайте просто отметим все моменты, которых мы не знаем. Или мы всегда задавались вопросом.
- Как машина узнает мое имя, когда я смахиваю карту?
- Как он узнает, что я ввел правильный PIN-код?
- Как он узнает, достаточно ли наличных денег той купюры, которую я просил?
- Кто пополняет счет наличными в автомате, когда он пустой?
- Как он узнает, когда отменить транзакцию, если что-то пойдет не так?
- Как мои транзакции уведомляют меня, отправляя SMS вовремя, когда я заканчиваю?
И многие другие вопросы о том, как / когда?
Я надеюсь, что это те моменты, которые мы знаем, а на самом деле не знаем о машине.
А теперь давайте попробуем выяснить, как здесь вписываются инкапсуляция и абстракция.
Абстракция против инкапсуляции
Если вы читали мой предыдущий пост, то к настоящему времени вы, должно быть, уже догадались и отчасти догадались, что это за инкапсуляция и абстракция. Итак, давайте разберемся, что здесь происходит.
Если вы такой же обычный или крутой парень, как я, то знаете, все, что нам действительно небезразлично для банкоматов, было бы просто
- Как им управлять,
- Получите деньги,
- И тихо покинуть это место, чтобы никто не заметил. Тсс… !!!
Это понятие машины - Абстракция. Потому что мы действительно не знаем, что происходит внутри машины, например, когда я ввожу свой PIN-код, какая программа работает в фоновом режиме для его проверки. Или скажем, какая программа отправляет мне SMS-уведомления или как хранятся деньги.
Кроме того, если вы на мгновение задумаетесь, эти детали как бы защищены от любых злоупотреблений со стороны пользователя. Таким образом, целостность и конфиденциальность пользователя защищены и находятся в безопасности в руках банка.
Теперь банк и его сотрудники, которые изготовили бы и установили банкомат в вашем районе, сделали бы это.
- Сохраняя конфиденциальность пользовательской информации,
- Скрытие деталей от пользователя, например, о том, как оборудование работает изнутри, например, детали оборудования или программы
Очень важные детали, которые нельзя скомпрометировать, скрыты от пользователя. И эта концепция называется Инкапсуляция.
Самое важное различие между этими двумя концепциями - НАМЕРЕНИЕ. Намерение предоставить пользователю только релевантные и необходимые детали и скрыть детали реализации (которые на самом деле не требуются пользователю) от пользователя.
В некотором смысле, если вы понимаете, концепция инкапсуляции - это способ реализации концепций абстракции.
Я надеюсь, что теперь вы знаете, что такое абстракция и инкапсуляция. Что вы думаете?