Моделирование активности и мифологическое сознание
Итак, есть некая активность. В мифологическом сознании первобытного человека за каждым действием стоит сознательное существо. Например, если течет, то делает это живое существо — река, если светит, то делает это живое существо Солнце. Поэтому в мифологическом сознании у каждого действия есть сознающий себя актор, который это действие выполняет. И мы можем сказать, что назначение (функция) этого актора — делать это действие. Я специально говорю о том, что все это происходит только в рамках мифологического сознания. Например, машина едет по дороге только в рамках мифологического сознания, потому что на самом деле машина не обладает волей и не может куда-то ехать. Наш язык настроен на отражение мифологического сознания, поэтому нам так сложно мыслить иначе. Например, можно было бы сказать, что участником активности является машина и дорога, в результате этой активности машина постоянно перемещается по дороге, но мы, одушевляя машину, говорим о том, что это делает именно машина. Таким образом, назначение машины в рамках мифологического сознания — ехать, или в рамках мифологического мышления функция машины — ехать. (хотя мы могли бы с тем же успехом одушевить колесную пару и сказать, что ехать — это функция колесной пары, а не машины). Замечу, что назначение как и функция — не имеет начала и конца в рамках существующего контекста.
В рамках того же мифологического сознания, если мы не знаем актора, но видим, что происходит нечто, то мы говорим о действии, которое происходит само по себе, и называем его процессом. Например, если мы видим пламя, то говорим, что идет процесс горения. При этом, если мы выяснили, что идет сжигание попутного газа, то мы можем, одушевив попутный газ в рамках мифологического сознания, сказать, что функция попутного газа — гореть. Мы можем также выяснить, что сжигание происходит при помощи специального факела, и, одушевив факел, мы говорим, что функция факела — сжигать попутный газ. Все ровно так же, как с машиной и колесной парой — что одушевили, то и делает: попутный газ, или факел. Я хочу подчеркнуть, что процесс — это функция без актора, и, также как функция, — не имеет начала и конца в рамках существующего контекста.
Иногда нам надо сказать об активности, которая имела начало и конец. В мифологическом сознании это действие также делает одушевленный актор, например, вулкан выбросил лаву. При этом описание активности в виде операции не есть описание активности в виде функции. Например, в мифологическом сознании функция Солнца — давать тепло. Но допустим, что в какой-то момент Солнце взрывается. В рамках мифологического сознания это происшествие не есть функция Солнца, — это операция, совершенная Солнцем. Описание активности в виде операции также не есть описание активности в виде процесса.
Иногда мы говорим о последовательности действий — сначала делается одно, потом второе, потом третье и тд. Такое описание активности — есть сценарий. При этом описание активности в виде сценария не есть описание активности в виде функции, или в виде процесса.
Иногда мы говорим о типовой последовательности действий. Например, мы говорим, что при пожаре надо действовать определенным образом. Тогда мы говорим о модели сценариев, или о регламенте. Регламент есть модель моделей активностей. При этом очень часто регламент путают с процессом, пытаясь одним словом назвать модель активности и модель модели активности. Это является грубой логической ошибкой.
В ООП мифологическое сознание проникло в виде методов, которые должны выполняться определенными объектами определенных классов. В статье Мир есть совокупность фактов, а не вещей об этом хорошо написано. Нам трудно мыслить вне рамок мифологического сознания и потому кажется естественным, что объект класса «машины» обладает методом «ехать». Но по сути своей — этот способ мышления — попытка одушевить неодушевленное.
Спасибо за внимание. Я, как и обещал, был краток.
Комментарии (5)
18 декабря 2016 в 12:55 (комментарий был изменён)
+1↑
↓
Нам трудно мыслить вне рамок мифологического сознания и потому кажется естественным, что объект класса «машины» обладает методом «ехать».
В изначальном объектно-ориентированном подходе у машины нет метода «ехать».Любой объект может принять любое сообщение, и результат не гарантирован.
Машина, скорее всего, поедет, а лошадь скорее всего, нет — ей нужно сообщение «скакать галопом».Но когда ОО-языки стали превращаться из динамических в статические, процесс отправки сообщение объекту стал называться вызовом метода, а имя сообщения методом.
Получилась подмена:
изначально имя сообщения (метода) задавалось вызывающей стороной,
, а потом внезапно оказалось, возможные для вызова методы стали задаваться на стороне объекта-приемника.
Отсюда и получилось, что «машина имеет метод 'ехать'».Недавно на хабре была серия статей про Алана Кея и Smalltalk — можно обратиться к ним и почитать дополнительные материалы по Smalltalk.
И, наверное, не случайно динамические языки до сих пор популярны и активно развиваются (Ruby и многие другие).
18 декабря 2016 в 13:01
0↑
↓
Спасибо за комментарий! Просто часто можно слышать про методы объектов класса в ООП и это вводит в заблуждение18 декабря 2016 в 13:23 (комментарий был изменён)
0↑
↓
Машина, скорее всего, поедет, а лошадь скорее всего, нет — ей нужно сообщение «скакать галопом».
Помимо инкапсуляции (сведения функций и состояний в отдельный структурно-семантический «объём») в ООП ещё наличествуют абстракция, полиморфизм и наследование. Код, посылающий сообщения, скорее всего будет оперировать не конкретными объектами, а их обобщениями. То есть в его представлении будут не машины или лошади, а, например, транспортные средства. И сообщения, соответственно, будут — «переместиться» вместо «ехать» или «скакать». А как именно перемещаться (или не перемещаться) уже решат сами объекты, исходя из своего классового существа и актуального состояния. В этом главная практическая польза ООПа, иначе и огород было бы незачем городить.18 декабря 2016 в 13:39
0↑
↓
Есть мнение, что наследование лишь одно из возможных (и не самое удачное) средств реализации полиморфизма и повторного использования кода.Конечно, машина и лошадь вполне могут обработать сообщение «переместиться», если в заданной предметной области способ перемещения не важен, а вот здание класса «недвижимость» — нет.
18 декабря 2016 в 14:21
0↑
↓
В мифологическом сознании первобытного человека за каждым действием стоит сознательное существо
Нет. «Для мифологического сознания все, что существует — одушевлено.» (википедия)
Например, машина едет по дороге только в рамках мифологического сознания, потому что на самом деле машина не обладает волей и не может куда-то ехать.
Вообще-то, нет. Чтобы ехать, не нужна воля.
Наш язык настроен на отражение мифологического сознания
С чего бы вдруг?
Собственно, из двух показанных выше неверных посылок вы и строите неверный вывод: «В ООП мифологическое сознание проникло в виде методов, которые должны выполняться определенными объектами определенных классов.»
Нам трудно мыслить вне рамок мифологического сознания и потому кажется естественным, что объект класса «машины» обладает методом «ехать».
Человеку, который знаком с оригинальной концепцией Кея, и знает, что «метод «ехать» объекта «машина» — это, на самом деле, сообщение «езжай» объекту «машина», это совершенно не кажется противоестественным и/или мифологичным. Есть актор, способный на конкретное действие, есть команда, его активирующая. Все логично.