Я, як правило, намагаюся описати об'єктно-орієнтоване програмування, використовуючи приклади реального світу.
Наприклад, я можу сказати, що клас, що називається, Vehicle
описує мінімальні речі, якими є транспортний засіб. Я попрошу людину сказати мені, що він чи вона думає про транспортний засіб. Іноді вони говорять такі речі, як "Ну, як машина чи вантажівка", і я киваю і погоджуюся з ними. Тоді я запитаю, які відмінності між автомобілем та вантажівкою. Іноді вони згадують розмір, іноді призначення та інші речі.
Тоді я попрошу їх забути про машину чи вантажівку і просто попрошу продовжити опис транспортного засобу:
"О, добре рухається"
"У нього є оператор або водій"
тощо ...
Незабаром ми дізнаємося, що таке транспортний засіб, і я сказав, що в ООП ми визначимо транспортний засіб, і заради аргументу скажемо, що він може рухатись і давати йому водій свого роду. Тоді я запитаю, добре, так що ж має Автомобіль?
"Двері"
"Windows"
А потім вантажівка….
"Двері" "вікна" "Ще колеса!"
Незабаром, після багатьох дискусій, інша людина, як правило, визначила:
1) Що являє собою транспортний засіб
2) Що являє собою автомобіль
3) Що являє собою вантажівка
4) Що являє собою літак.
Все без жодних технічних даних Ми розділили властивості кожного на потрібні області. Вони розуміють спадщину ("Ага, машина - транспортний засіб, вантажівка - транспортний засіб, але машина - не вантажівка. Це ПРОСТО, так!").
Вони навіть розуміють поліморфізм: "Звичайно, вони в основному роблять те саме, але це може зробити трохи інакше". Ми можемо говорити про поведінку та про те, де це має жити на нашому дереві предметів.
Залежно від їхньої освіти та походження, деякі отримують це швидше, ніж інші. Але коли я порівнюю OOP з об'єктами реального життя, більшість людей завжди це отримує. Насправді я знайшов у розмовах з нетехнічними людьми речі, про які ніколи не думав. Транспортні засоби не потребують, наприклад, безпілотників (безпілотники), але чи програміст вважав би оператора транспортного засобу властивістю цього? Я не кажу, що згадувати оператора правильно чи неправильно, але це змушує задуматися про те, що ми моделюємо, і що ми намагаємося досягти, розробляючи програмне забезпечення.
Тепер часткова спеціалізація шаблонів, з іншого боку .... :)