**Simula** - первый ООП-язык (1967) => Smalltalk => LISP => Pascal => ... **Объектно-ориентированная программа** представляет собой совокупность объектов, взаимодействующих друг с другом посредством передачи сообщений. С помощью такой программы реализуется требуемый функционал. **Объектно-ориентированное программирование (ООП)** - это программирование, сфокусированное на данных, причем данные и их поведение неразрывно связаны. Вместе данные виды поведения представляют собой **классы**, а экземплярами классов являются **объекты**. Основные концепции ООП: *По версии Ершова:* 1. **Моделирование** решаемой задачи 2. Возможность создавать определенные пользователем **абстрактные типы данных**, содержащие модели данных объекта и его поведения 3. **Инкапсуляция** - разделение прав доступа к данным, а также объединение связанных данных 4. Возможность повышения степени повторного использования кода за счет **наследования** и **шаблонов** 5. **Полиморфная обработка родственных объектов** (совмещение замещения и открытого наследования) *На самом деле:* - Абстракция - Инкапсуляция - Наследование - Полиморфизм