Я відповім на ваше запитання запитанням; коли ви вранці їхали на роботу (я припускаю, що ви насправді так робили), чи хвилювались ви, як саме двигун відкривав клапани, щоб впустити паливно-повітряні суміші, а потім запалив їх? Ні. Вам байдуже, як працює двигун вашого автомобіля під час руху по дорозі. Ви все одно , що вона робить роботу.
Припустимо, одного дня ваша машина не спрацює. Не запускається, кидає стрижень, ламає пояс, незрозуміло занурюється в цей бетонний бар'єр, не з вашої вини, поки ви були зайняті надсиланням повідомлень. Тепер вам потрібна нова машина (принаймні тимчасово). Вас точно хвилює, як працює ця нова машина? Ні. Те, про що ви дбаєте, - це по-перше, що він працює, а по-друге, ви можете використовувати ті самі знання та навички, якими користувалися для керування старим автомобілем, щоб керувати новим. В ідеалі вам повинно здатися, що в автомобілі, за яким ви їдете, не було змін. Реально, спосіб роботи цього нового автомобіля повинен дати вам якомога менше "сюрпризів".
Ці основні догмати є основним принципом, що стоїть за інкапсуляцією та абстракцією. Знання того, як об’єкт робить те, що робить, не повинно бути необхідним його використанням для того, щоб робити те, що він робить. Навіть у комп'ютерному програмуванні деталі електричних доріжок у процесорі, що працює у вашій програмі, вичерпуються як мінімум за півдесятка шарів інструкцій вводу / виводу, драйверів, програмного забезпечення ОС та часу виконання. Багато дуже успішних інженерів програмного забезпечення пишуть ідеально хороший код, не переживаючи жодного разу про точну архітектуру апаратури або навіть побудову ОС, яка її запустить. Включаючи мене.
Інкапсуляція / приховування інформації дозволяє менталітету "не байдуже, як це робиться, просто дбайте про те, щоб це зробити". Ваш об’єкт повинен викрити те, що корисно споживачеві, таким чином, що споживач може легко споживати. Тепер, у реальному світі, це не означає, що автомобіль не повинен давати користувачеві ніякої інформації про внутрішні робочі місця або що машина повинна дозволяти користувачеві лише найосновніші функції, такі як запалювання, кермо, і педалі. У всіх автомобілях є спідометри та датчики палива, тахометри, ідіотні ліхтарі та інші відгуки. Практично всі автомобілі також мають вимикачі для різних незалежних підсистем, наприклад, фари, поворотники, радіо, регулювання сидіння тощо. Деякі машини дозволяють отримати досить езотеричний вхід користувача, наприклад, чутливість центрального диференціала з обмеженим ковзанням. У всіх випадках, якщо ви досить знаєте, ви можете відкрити його та змінити речі, щоб змусити його працювати трохи по-іншому. Але, в більшості випадків, можливо, просто можливо, користувач не повинен мати можливість безпосередньо та незалежно керувати паливними насосами зсередини кабіни? Можливо, просто, можливо, користувач не повинен мати можливість вмикати гальмівні світильники, фактично не натискаючи педаль гальма?
Абстракція дозволяє «це не те саме, що це, але оскільки вони обидва XI, можна використовувати їх так, як я б хотів будь-який X». Якщо ваш об'єкт успадковує або реалізує абстракцію, ваші споживачі повинні розраховувати, що ваша реалізація дасть такий самий або подібний результат, як і інші відомі реалізації абстракції. Toyota Camry та Ford Fusion - це "машини". Таким чином, вони мають загальний набір очікуваних функціональних можливостей, наприклад, кермове колесо. Поверніть його проти годинникової стрілки, машина їде ліворуч. Поверніть його за годинниковою стрілкою, машина їде праворуч. Ви можете зайти в будь-який автомобіль в Сполучених Штатах і очікувати, що у машини буде кермо і принаймні дві педалі, одна справа правою педаллю "їде машина", а друга в центрі - педаль "зупинки машини" .
Слідство абстракції - це "теорія найменшого здивування". Якщо ви сіли за кермо нового автомобіля на тест-драйв, повернули кермо за годинниковою стрілкою і автомобіль повернув ліворуч, ви були б здивовані як мінімум. Ви звинуватили б дилера в тому, що він розглядає POS, і навряд чи вислухаєте будь-яку з його причин, чому нова поведінка "краща", ніж те, до чого ви звикли, або наскільки добре ця поведінка "задокументована" чи як " прозора "система управління є. Незважаючи на цей новий автомобіль та всі інші, якими ви керували, як і раніше залишаються «машинами», під час руху цього автомобіля вам доведеться змінити деякі основні поняття того, як слід керувати автомобілем, щоб успішно керувати новим автомобілем. Це, як правило, погано, і це відбувається лише тоді, коли є нова інтуїтивна перевага перед новою парадигмою. Можливо, додавання ременів безпеки є хорошим прикладом; 50 років тому ви щойно приїхали і поїхали, але тепер вам доведеться загнутися, інтуїтивна перевага полягає в тому, що ви не потрапляєте через лобове скло або на місце пасажира, якщо потрапите в ДТП. Вже тоді водії чинили опір; багато власників автомобілів вирізали ремені безпеки з машини, поки не було прийнято закони, що вимагають їх використання.