Как всегда, это действительно зависит от языкового фона, с которого они происходят. Не каждый язык реализует ОО-парадигмы одинаково, иногда возможно использовать ОО-подход в языке, который не является строго ОО вообще.
Как правило, важно упомянуть уровни доступа. Почему свойства должны быть частными? Какой смысл иметь геттеры и сеттеры? Это хорошее место для сравнения объектов с коллекциями, такими как карты или массивы (даже если они могут быть реализованы как объекты, а не как примитивы).
Наследование и полиморфизм должны идти рука об руку. Это вопрос абстракции, хотя. Объяснение различий между абстрактными базовыми классами и интерфейсами, вероятно, опять же является проблемой языка - некоторые языки допускают множественное наследование, другие допускают только несколько интерфейсов.
Инкапсуляция довольно проста, если вы разобрались с уровнями доступа. Опять же, в зависимости от языка, который вы, возможно, захотите объяснить внутренним классам и тому подобное, абстрагируйте идею ОО еще дальше с помощью анонимных классов.
Я считаю, что лучше всего начать с чего-то знакомого: связанных функций и переменных. Узнать, каким должен быть объект и к какому объекту должно принадлежать свойство или метод, сложно, поэтому начните с ясных случаев.
Обработчик базы данных может быть хорошим примером или электронным письмом (создать новое электронное письмо, установить его заголовки и содержимое, прикрепить файлы и отправить его - довольно просто и знакомо даже непрограммистам, но прекрасный пример для мышление в терминах объектов (электронная почта, контакты; возможно, даже почтовые ящики, серверы), методов (создание, отправка, вложение, установка) и свойств (заголовки, содержимое, вложения)).
Что важно, так это: даже если у ваших учеников есть некоторый (не ОО) опыт программирования, адаптация к ООП - это процесс, а «получить его» часто нет. Я слышал, многие люди описывают это как внезапное событие, а не плавный переход. Конечно, «калибровка» - это длительный процесс: вам нужно выяснить, когда имеет смысл создавать новые классы и когда будет достаточно нескольких временных переменных, массива или вспомогательных функций (в зависимости от вашего языка), но это необходимо практика, а не обучение.