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