тут недвно был тред, что такое ооп, чем оно отличается от не-ооп, бла-бла-бла. Так ничего и не выяснилось толком.
Конечно, можно все-таки выделить характерную черту ООП — это семантика передачи сообщений. Остальное все в тумане...
Почему такой, казалось бы простой вопрос не имеет однозначного ответа?
Потому что ответ лежит на поверхности, поэтому его никто не видит.
Ответ заключается в том, что любая другая парадигма — есть частный случай ООП, в том смысле, что может быть выражена в терминах ООП, но не наооборот. Само название ООП тут не слишком удачно, кстати, поскольку объект в ООП — это скорей субъект. Карл Хьюитт придумал гораздо более подходящее название — акторы.
Именно в этом и кроется разгадка того, почему так трудно отделить ООП от иных парадигм.
Простой пример. Возьмем подстановочную модель, ака ФП. Центральным объектом данной парадигмы является функция. С точки зрения ООП, функция — это актор. Например, у нас есть функция, которая имеет такой вид sum(1, 2) // 3
Мы могли бы выразить это как-то так
Sum = new Function
Sum.code = a + b
theSum = new Sum
theSum.setArguments(a: 1, b: 2)
theSum.call
То есть, грубо говоря, если мы берем некоторую полноценную ООП/Акторную семантику, и ограничиваем ее выразительные возможности, мы получаем на выходе другую парадигму. Такие вот дела:)