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