Объяснение на двух простых примерах из реальной жизни

Я считаю, что для программистов это два самых известных и любимых друга. Кроме того, один из многих вопросов на собеседовании. Многие будут знать их теоретически, и многие будут практически внедрять их в свои программы, но даже после того, как потратят достаточно времени, вы все равно будете проявлять следующие симптомы:

  • Они оба похожи?
  • Я знаю их по книжным определениям, но иногда не понимаю, насколько они разные?
  • Неужели это два разных понятия? Потому что я чувствую, что они одно и то же.
  • Посмотрев программу, я не могу сказать, что здесь Инкапсуляция, а что Абстракция?
  • Если мне нужно написать программу на любом языке, как мне реализовать эти концепции?

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

Пример 1: простой выключатель света

Я знаю, что вы, должно быть, заметили выключатели в вашем доме / офисе / школе. Вы ведь знаете выключатель света в гостиной / спальне? Давайте просто запишем детали и детали, которые мы знаем об этом конкретном переключателе.

Назначение / использование переключателя

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

Как использовать?

  • Переключатель имеет всего два варианта ВКЛ и ВЫКЛ. Вам просто нужно нажать на нее.
  • При нажатии / включении он загорается, посылая мощность / электричество на лампочку, и освещает комнату
  • При нажатии вверх / выключении он отключает источник питания лампы и делает комнату темной.

Типы пользователей?

Здесь могут быть два типа пользователей

  • Электрик, который приедет и установит вам выключатель. Он очень хорошо квалифицирован и обладает навыками в этой области, знает каждую деталь переключателей и прочего и никогда не боится поражения электрическим током. Он мужчина!
  • Такой пользователь, как я / вы, обычный парень, который просто хотел бы использовать переключатель, и ему все равно, как он установлен. Кроме того, я / вы могли бы когда-нибудь подумать, что на самом деле не имеет значения, как электрик выполнил бы эту работу. Нам просто нравится, когда лампочка включается / выключается при нажатии.

Как получить доступ к переключателю?

  • Коммутатор, содержащий различные кнопки (кнопки, включая переключатель лампочки, регулятор скорости вращения вентилятора, розетки и т. Д.), Будет установлен на стене, доступной для человека.
  • Проводка, необходимая для передачи электричества между источником питания и лампочкой, будет встроена в саму стену, не подвергая ее воздействию, в целях безопасности. Таким образом, пользователь случайно не прикоснется к проводам, по которым идет электричество.

Откуда вы знаете, что это выключатель на свет, а не на какой-либо другой?

  • Переключатель бывает разных цветов, форм и размеров.
  • Переключатель обычно располагается в доступных местах по мере необходимости. Например, выключатель света в ванной будет располагаться рядом с ванной, а не в гостиной. Просто так кухонный выключатель света не будет находиться в спальне.
  • Если есть несколько переключателей, то один из них может иметь специальную индикацию / маркировку, чтобы человек мог легко его идентифицировать.

Я думаю, мы записали почти все, что знаем о переключателе, не так ли? Давайте попробуем определить, что здесь такое инкапсуляция и абстракция.

Абстракция против инкапсуляции

Что нужно знать обычному человеку

  • Где свет?
  • Где установлен / находится коммутатор?
  • Если на одном коммутаторе несколько переключателей / кнопок, то нажатие какого переключателя включит / выключит какой свет? Например, как определить, какая кнопка для какого света?

Думаю, это лишь важные детали, которые необходимо знать любому обычному человеку. Я уверен, что даже вы со мной согласитесь, правда?

И знаете что, вот что такое концепция Абстракция! Пользователю предоставляются только актуальные и требуемые детали, а электрик скрывает все несущественные детали, к которым на самом деле не может получить доступ обычное лицо из соображений безопасности.

Для электрика, который является таким квалифицированным специалистом, при установке переключателя следует помнить о следующих вещах:

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

Я не электрик, но полагаю, что это то, о чем он будет помнить во время работы. Суть в том, что он знает, что лучше для пользователя этого переключателя.

Но теперь вы электрик, обладаете всеми навыками, он знает, как разместить все необходимые вещи, такие как провода, ленты, пайка и т. Д., В одном месте, называемом распределительным щитом, чтобы пользователь не мог видеть, что за этим стоит.

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

Пример 2: банкомат

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

  • В каждом банке есть банкоматы
  • Человек должен иметь счет в банке и ему нужна карта для использования аппарата.
  • Человек, имеющий счет в одном банке, может пользоваться банкоматом любого другого банка.
  • Банкомат имеет следующие особенности:
  1. Читает карту
  2. Читает защитный PIN-код
  3. Считывает сумму, которую мы хотим снять
  • Предоставьте пользователю основные возможности
  1. Выберите номинал

2. Выберите тип счета, например, Сберегательный, Текущий и т. Д.

3. Просмотр баланса и многое другое.

  • Слот для карты, где пользователь может провести карту
  • Слот для наличных, в котором будут выдаваться купюры

Полагаю, это важные детали, которые могут заинтересовать любого человека, использующего машину, верно? Надеюсь, ты согласен.

А теперь давайте просто отметим все моменты, которых мы не знаем. Или мы всегда задавались вопросом.

  • Как машина узнает мое имя, когда я смахиваю карту?
  • Как он узнает, что я ввел правильный PIN-код?
  • Как он узнает, достаточно ли наличных денег той купюры, которую я просил?
  • Кто пополняет счет наличными в автомате, когда он пустой?
  • Как он узнает, когда отменить транзакцию, если что-то пойдет не так?
  • Как мои транзакции уведомляют меня, отправляя SMS вовремя, когда я заканчиваю?

И многие другие вопросы о том, как / когда?

Я надеюсь, что это те моменты, которые мы знаем, а на самом деле не знаем о машине.

А теперь давайте попробуем выяснить, как здесь вписываются инкапсуляция и абстракция.

Абстракция против инкапсуляции

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

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

  • Как им управлять,
  • Получите деньги,
  • И тихо покинуть это место, чтобы никто не заметил. Тсс… !!!

Это понятие машины - Абстракция. Потому что мы действительно не знаем, что происходит внутри машины, например, когда я ввожу свой PIN-код, какая программа работает в фоновом режиме для его проверки. Или скажем, какая программа отправляет мне SMS-уведомления или как хранятся деньги.

Кроме того, если вы на мгновение задумаетесь, эти детали как бы защищены от любых злоупотреблений со стороны пользователя. Таким образом, целостность и конфиденциальность пользователя защищены и находятся в безопасности в руках банка.

Теперь банк и его сотрудники, которые изготовили бы и установили банкомат в вашем районе, сделали бы это.

  • Сохраняя конфиденциальность пользовательской информации,
  • Скрытие деталей от пользователя, например, о том, как оборудование работает изнутри, например, детали оборудования или программы

Очень важные детали, которые нельзя скомпрометировать, скрыты от пользователя. И эта концепция называется Инкапсуляция.

Самое важное различие между этими двумя концепциями - НАМЕРЕНИЕ. Намерение предоставить пользователю только релевантные и необходимые детали и скрыть детали реализации (которые на самом деле не требуются пользователю) от пользователя.

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

Я надеюсь, что теперь вы знаете, что такое абстракция и инкапсуляция. Что вы думаете?