ИМХО учить ОО с самого начала - ужасная идея. Процедурное кодирование не является «плохой привычкой» и является подходящим инструментом для некоторых работ. Отдельные методы в объектно-ориентированной программе в любом случае имеют довольно процедурный вид. Кроме того, до того, как вы изучите процедурное программирование достаточно хорошо, чтобы его ограничения стали видны, объектно-ориентированное программирование не кажется очень полезным для студента.
Прежде чем вы сможете по-настоящему понять объектно-ориентированную архитектуру, вам необходимо знать основы структур данных и позднего связывания/функций более высокого порядка. Трудно понять полиморфизм (который в основном передает указатель на данные и набор функций, которые работают с данными), если вы даже не понимаете концепции структурирования данных вместо того, чтобы просто использовать примитивы и передавать функции более высокого порядка/ указатели на функции.
Шаблоны проектирования следует преподавать как нечто фундаментальное для объектно-ориентированного программирования, а не что-то более сложное. Шаблоны проектирования помогают вам увидеть лес за деревьями и дают относительно конкретные примеры того, как объектно-ориентированное программирования может упростить реальные проблемы, и вы все равно захотите их изучить в конце концов. Более того, как только вы действительно овладеете объектно-ориентированным подходом, большинство шаблонов проектирования станут очевидными задним числом.
Прикрепляю к посту несколько видео по теме: