Я решил посмотреть на это с точки зрения, как бы семантики.
Чем является исполнитель языка? Возьмем для простоты интерпретатор. Он является процессором, который берет на вход строки программы. Также, его можно рассматривать как актор, принимающий на вход сообщения, это, практически, то же самое.
Что представляет из себя программа на *обычном* языке? набор строк-комманд для единственного процессора. Либо, набор сообщений для единственного актора.
Чем, в этом смысле отличается ООП/агентный/акторный подход? Тем, что у нас, в нашей среде программирования, не один, а множество таких процессоров. Каждый актор является, фактически, независимым процессором. Независимым от других, и независимым от «верхнего». И мы, реализуя любой актор/объект, де-факто, пишем свой собственный процессор. Таким образом мы можем произвольным образом расширять систему произвольным количеством процессоров.
Отсюда и принципиальное различие парадигм, в одном случае мы пишем программу, а в другом — реализуем систему. И между этими двумя подходми, на самом деле, пропасть.
Ради справедливости, надо добвить, что наличие множества метациклических интерпретаторов в пределах одной программы, в языках лисп-семейства, создают похожий эффект, так что, такой подход можно тоже считать частным случаем ООП. Остальные же подходы принципиально бедны, они не реализуют систему, там происходит все на уровне инструкция/исполнение