LINUX.ORG.RU

Что не так с сообщениями в ООП

 ,


1

1

Мысль довольно простая, но она почему то дошла до меня только сейчас, когда я читал кое какие вещи по лингвистике.

В ООП объекты получают сообщения, это так же как и в RL. А разница в чем? В том что каждый объект имеет свой язык(!!!).

Свойства, методы, их имена, названия, это сообщения. Для этих имен должен быть общий словарь, так же как и у людей есть общий язык.

Некоторым аналогом этого является глобальное пространство имен, но некоторые проблемы реализации не позволяют это использовать полноценно. Поэтому де-факто концепция языка и обмена сообщениями не раелизуется в ООП и никто даже не думает обычно в этом смысле когда программирует

А что касается проблем, одна из них в том, что не реализовано обобщение(возможно отчасти это проблема раннего нединамического связывания). Например

Командир говорит: «возьмите в руки свое оружие»

Солдат Вася должен взять палицу, а солдат Петя копье, они оба должны понять выражение «взять свое оружие» и применить к собственной специфике.(это можно реализовать в рамках паттерна издатель-подписчик)



Последнее исправление: no2700 (всего исправлений: 3)

Солдат Вася должен взять палицу, а солдат Петя копье, они оба должны понять выражение «взять свое оружие» и применить к собственной специфике.

Поздравляю, вы изобрели полиморфизм.

В том что каждый объект имеет свой язык(!!!).

А IRL не так что ли?

Много поймёт нелингвист в работах по реконструкциям праиндоевропейского? (Собственно, всевозможные фрики дают наглядный ответ на этот вопрос.)

wandrien ★★
()
Ответ на: комментарий от wandrien

Поздравляю, вы изобрели полиморфизм.

Нет, я говорю именно о языковой стороне дела, не важно как это реализовано. Понятие полиморфизм вообще о другом, это множество форм при сохранении класса.

А IRL не так что ли?

В целом не так.Есть частности, как например частное мнение в определении сложных понятий, но в целом люди имеют общий язык.

Много поймёт нелингвист в работах по реконструкциям праиндоевропейского?

Тут многое будет зависеть от смекалки и общего интеллекта, фактически патриархи компоративистики были не узкими специалистами, например Шлегель. Но это как бы вопроса не особо и касается

no2700
() автор топика
Ответ на: комментарий от no2700

Компьютерам не нужна смекалка. Если он что-то не понял всецело, он должен показать сообщение об ошибке и остановить вычисления.

wandrien ★★
()
Ответ на: комментарий от wandrien

Я понял о чем Вы. О владении специализированным или формальным языком. Но тут нет противоречия, такие языки тоже общие, среди специалистов, среди групп.

no2700
() автор топика
Ответ на: комментарий от wandrien

Тут речь может идти и о «глобальном» языке и о узкоспециализированном его подмножестве, и о изолированном языке с собственной грамматикой, как какой нибудь язык логики, все они все равно расшариваются между подмножествами их носителей. Объекты в ООП должны быть носителями языков.

no2700
() автор топика
Ответ на: комментарий от wandrien

С точки зрения лингвистики, если проводить паралелли, наоборот, «общий» язык, то есть естественный, общеупотребительный, слишком свободен и нестрог для его использования в строгих семантиках, где требуется однозначность и нежелательны противоречия, возникающие из-за свободы трактовок тех или иных определений.

Но общий язык, глобальный язык, вовсек не обязан быть аналогом естественного языка, с его свободой и замусоренностью.

Вообще проблемы естественного языка не в том что он слишком свободен, а в том что его грамматика крайне непоследовательна, в силу исторического процесса.

Нет единообразия грамматических форм, вот в чем основная проблема. Тка-ач но лжец но фигурист но вахрер – тут при одной семантике везде разная суффиксация, например. Древние языки, особенно как раз праиндоевропейские были намного консистентней и это было наоборот плюсом к выразительности.

no2700
() автор топика
Ответ на: комментарий от no2700

Регулярность грамматики делает язык таким, что он становится понимаем без отдельных пояснений, определения терминов не нужны, они растут из самой грамматики языка и носитель регулярного языка должен понимать любое вновь появившееся слово как выражение, без отдельного пояснения «что имеется в виду».

То же должно быть реализовано и в машине, во всяком случае в ООП

no2700
() автор топика

Есть довольно обоснованное мнение (вольный перевод), что там не только с сообщениями не так.

Во время первого своего знакомства с ООП, когда до этого о концепции сообщений я вообще ничего не знал, тоже долго не мог понять, почему фактически вызовы всяких методов и процедур вдруг начали называться обменом сообщениями. Пришлось подчиниться. Как в том анекдоте про вильки-тарельки и сол-фасол - «это невозможно понять, это надо запомнить». И ведь запоминают же.

blexey ★★★★★
()
Ответ на: комментарий от blexey

Можно начать уже с самого названия, понятие «объект» с точки зрения строгого определения не соответствует понятию «любая сущность», как это принято в быту, понятие «объект» в программировании имеет бытовое значение, а не то что принято в логике и грамматике, как пассивная часть процесса, в отличие от субъекта действия. Это все говорит о том, что CS развивался не научным, а базарным путем, никто за точностью терминов не следил, хотя это ко всей современной науке относится

no2700
() автор топика
Ответ на: комментарий от blexey

Хотя вообще то к базовым идеям ООП восходит только одно из перечисленного г-ном Сотником, у него свои собственные «базовые идеи»

no2700
() автор топика
Ответ на: комментарий от blexey

И он кстати ошибается в том что в декларативных языках не существует состояний. Декларативность это тоже из области базара, строго понятие декларативности противопоставляется не состоянию, а императивности, то есть это описательный стиль в отличие от стиля инструкций, отображение против действия, «что» против «как». Декларативными языками в настоящей CS являются только логические

no2700
() автор топика
Ответ на: комментарий от no2700

Притом, что примечательно, декларативность, в этом настоящем смысле, не противоречит состоянию, потому что состояние базы данных есть.

no2700
() автор топика
Ответ на: комментарий от blexey

Во время первого своего знакомства с ООП, когда до этого о концепции сообщений я вообще ничего не знал, тоже долго не мог понять, почему фактически вызовы всяких методов и процедур вдруг начали называться обменом сообщениями.

Просто изучать ООП надо не на примере C++, а на примере SmallTalk - там с сообщениями естественно все получается. Методы прописаны как обработчики сообщений. Виндовое API для GUI кстати тоже пример ООП, управляемого сообщениями.

Конечно, даже в Smalltalk в конечном итоге это все сводится к вызову тех или иных фактически функций, но по крайней мере, они представлены как обработчики сообщений и в принципе не тождественны. Но Smalltalk для понимания ООП еще и тем хорош, что этот язык придуман теми же, кто вообще концепцию ООП придумал (Алан Кей) и был реализован для ее иллюстрации. Остальные языки уже вторичны в этом смысле.

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 2)
Ответ на: комментарий от blexey

долго не мог понять, почему фактически вызовы всяких методов и процедур вдруг начали называться обменом сообщениями.

Тут кстати противоречия тоже нет, во всяком случае концептуального. Команда инициирующая выполнение процедуры может быть рассмотрена как посылка сообщения. Разница тут не в этом, а в том что в ООП процедуры вызываются не глобально, а со стороны объектов.

no2700
() автор топика
Ответ на: комментарий от praseodim

Просто изучать ООП надо не на примере C++, а на примере SmallTalk - там с сообщениями естественно все получается. Методы прописаны как обработчики сообщений. Виндовое API для GUI кстати тоже пример ООП, управляемого сообщениями.

Сообщения подразумевают, что есть отправитель и получатель. Они также подразумевают возможность «отправить сообщение и заняться своими делами», т.е. асинхронность.

Сообщения реализует любое микроядро.

А в SmallTalk обычный вызов методов.

Не стоит натягивать сову на глобус ради красивой терминологии.

wandrien ★★
()

анонiмус, ты ли это?

anonymous
()
Ответ на: комментарий от wandrien

Вообще-то в Smalltalk есть асинхронные сообщения. Я правда, если честно, не настолько хорошо его изучал, да и давненько, чтобы сейчас четко сказать все ли они асинхронные или нет.

praseodim ★★★★★
()
Ответ на: комментарий от praseodim

что этот язык придуман теми же, кто вообще концепцию ООП придумал (Алан Кей)

Вообще, я бы усомнился в том что это придумал Кей. Как минимум этому предшествовали работы Марвина Мински «Society of Mind» и модель акторов Карла Хьюитта, а так же его реализация первого логического языка Planner, все основы ООП были заложены уже там.

no2700
() автор топика
Ответ на: комментарий от praseodim

Вообще-то в Smalltalk есть асинхронные сообщения. Я правда, если честно, не настолько хорошо его изучал, да и давненько, чтобы сейчас четко сказать все ли они асинхронные или нет.

Здесь вопрос принципиальный в том, КТО посылает сообщение.

В ООП, как оно есть в C++ или Java, этот КТО не представлен. Сообщения посылает просто некий код, который невозможно идентифицировать как «объект» или «сущность».

Не знаю, как в SmallTalk.

Сообщения через микроядерные IPC чаще всего в этом плане именно настоящие сообщения, так как стороны идентифицируют друг друга по хэндлерам и могут, например, «послать сообщение обратно», «переслать хэндлер отправителя другому участнику» и т.п.

wandrien ★★
()
Ответ на: комментарий от no2700

Вообще, я бы усомнился в том что это придумал Кей. Как минимум этому предшествовали работы Марвина Мински «Society of Mind» и модель акторов Карла Хьюитта, а так же его реализация первого логического языка Planner, все основы ООП были заложены уже там.

Хз, признаться не читал Society of Mind и про Planner ничего не знаю, так что не буду спорить. Но могу предположить, что в законченном виде концепцию все же выкатил Алан Кей.

praseodim ★★★★★
()
Ответ на: комментарий от wandrien

Они также подразумевают возможность «отправить сообщение и заняться своими делами», т.е. асинхронность.

Это не обязательно. Может быть вариант когда отправляется сообщение и ожидается ответ, хотя сама возможность отправить асинхронное сообщение конечно должна быть.

То что смоллток реализован кривовато в этом смысле обусловлено тем что быстрая реализация на том железе была невозможна, или ее не осилили. Это плод компромисса между концепцией и реализацией

no2700
() автор топика
Ответ на: комментарий от wandrien

В ООП, как оно есть в C++ или Java, этот КТО не представлен.

Вообще как сделаешь, так и будет. сделаешь сообщения с отправителем - будут сообщений с отправителем.

anonymous
()
Ответ на: комментарий от wandrien

В ООП, как оно есть в C++ или Java, этот КТО не представлен. Сообщения посылает просто некий код, который невозможно идентифицировать как «объект» или «сущность».

Если вызов метода объекта А осуществляется изнутри метода объекта B, это можно считать посылкой от одного другому, другое дело, что получатель ничего не знает обычно о том кто дергает его метод. Все таки нельзя сказать что посылки от одного другому тут вообще нет.

no2700
() автор топика
Ответ на: комментарий от wandrien

В ООП, как оно есть в C++ или Java, этот КТО не представлен. Сообщения посылает просто некий код, который невозможно идентифицировать как «объект» или «сущность».

Не знаю, как в SmallTalk.

В принципе там нет «просто кода», все есть объект, хотя бы и номинально это выглядело как просто код из консоли.

Сообщения через микроядерные IPC чаще всего в этом плане именно настоящие сообщения, так как стороны идентифицируют друг друга по хэндлерам и могут, например, «послать сообщение обратно», «переслать хэндлер отправителя другому участнику» и т.п.

Ну в общем, да.

praseodim ★★★★★
()
Ответ на: комментарий от anonymous

Вообще как сделаешь, так и будет. сделаешь сообщения с отправителем - будут сообщений с отправителем.

Вообще как сделаешь, так и будет. Cделаешь вызов функций через obj->class->method(obj), вот тебе и ООП.

Вообще как сделаешь, так и будет. Cделаешь передачу управления через call и возврат через mov rax, retvalue ; ret. вот тебе и процедурное программирование.

Вообще как сделаешь, так и будет. Соединишь в одном устройстве АЛУ, декодер команд и запоминающее устройство, вот тебе и ЭВМ.

Вообще как сделаешь, так и будет. Откроешь завод по запеканию масок на кремний, вот тебе и микроэлектроника.

wandrien ★★
()
Ответ на: комментарий от wandrien

ну а шо ты хотел. Это более низкоуровневый конструктор, чем тот же руби, или io или smalltalk. Однако говорить, что там чего-то нет - глупо, ибо оно есть.

anonymous
()
Ответ на: комментарий от praseodim

Хз, признаться не читал Society of Mind и про Planner ничего не знаю, так что не буду спорить. Но могу предположить, что в законченном виде концепцию все же выкатил Алан Кей.

Сам Алан Кей говорил что он выдвинул термин «ООП», не уверен что он когда либо утверждал что он разработал саму концепцию(не считая дизайна Смоллтока конечно)

no2700
() автор топика
Ответ на: комментарий от no2700

Классы тоже уже были, классы это прозрачная типизация. Когда программист является не просто пользователем типов, когда он создает типы сам. Сами же типы уже были до ООП, и в языках логического программирования они уже были на пользовательском уровне. Логическое определение какого либо понятия и последующее вычисление по признакам уже класс. Вычисление по предикату в любом языке является де-факто отнесением к классу.

no2700
() автор топика

В том что каждый объект имеет свой язык(!!!).

На каком языке ты, объект, разговариваешь? Вроде, слова понятные, но их сочетание - полный бред.

Что не так с сообщениями в ООП

В статье про ООП русской википедии слово «сообщение» не встречается. Что такое «ООП» по твоему?

Давай, ты сперва сформулируешь свою «альтернативную теорию ООП» со своими определениями, куда входит понятие «сообщение» - после поговорим. А то, намешал недо-«теорию информации» с недо-«ОПП» и выдал кашу из терминов.

anonymous
()
Ответ на: комментарий от crutch_master

Восстаньте из небытия оффлайна гуру Плюсов и Явы! Время брани с неверными, отвергающими ООП и совратившихся на путь гнусной функциональщины и прочей ереси!

crutch_master ★★★★★
()
Ответ на: комментарий от anonymous

Давай, ты сперва сформулируешь свою «альтернативную теорию ООП» со своими определениями, куда входит понятие «сообщение»

Понятие сообщение и так есть, то что в вики его нет это проблемы пользователей вики, с которыми вообще то у меня нет желания что-либо обсуждать.

Тут не «изобретаются» сообщения, тут речь идет о их систематизации, чтобы они в явном виде представляли из себя аналог коммуникации между людьми использующими язык, в прямом смысле этого слова.

Это есть в каком то зачаточном виде, в виде глобального пространства имен в программировании, но нам надо чтобы это было совершенно явно как язык с конкретной грамматикой и интерпретацией а не просто неймспейсы

Ясно?

no2700
() автор топика
Ответ на: комментарий от anonymous

Однако говорить, что там чего-то нет - глупо, ибо оно есть.

Говорить, что в Си нет ООП - глупо, ибо оно там есть.

Хмммм…

wandrien ★★
()
Ответ на: комментарий от wandrien

приколись, баклан, QEMU написан в стиле ООП (объекты, сообщения, вот это все) На чистом Си.

anonymous
()
Ответ на: комментарий от anonymous

Начать тут можно и непосредственно с лингвистического аспекта. Сообщения являются самым примитивным видом языка, можно поработать над тем чтобы сообщения обрели грамматическую форму, а были не просто набором слов. Эти слова должны быть связаны единой системой, с четкими правилами словоизменений, словоформ и так далее.

no2700
() автор топика
Ответ на: комментарий от no2700

Понятие сообщение и так есть

Где есть, в твоем объекте - голове? А другие «объекты» знают про некое твое «сообщение»? Может ты сперва задашь «глобальном пространстве имен» (например, в твоей альтернативной невикипедии), что такое «сообщение», чтобы другие «объекты» тоже знали про твое «сообщение»?

не «изобретаются» сообщения, тут речь идет о их систематизации

Начни с статьи «теория информации» на вики, посмотри схемку передачи сигнала от источника к приемнику, подумай над тем, какие блоки надо согласовывать/систематизировать на пути прохождения сигнала, чтобы источник и приемник могли осмысленнно обмениваться сигналами?

Кстати, реакция на сигнал (действие, ответ объекта, возвращаемое значение) - это тоже сигнал.

anonymous
()
Ответ на: комментарий от no2700

Акцентировать внимание на поведении объекта. Это вот целое поле для исследований. Человеческое поведение, реакция на слова весьма сложная штука, чтобы понять сущность ООП нужно реализовывать более сложное поведение. В большинстве случаев сейчас это сводится к «полю» где описана прямая реакция объекта на конкретное сообщение, в некоторых случаях еще описывается то на сообщения каких объектов реагировать, а на сообщения каких не реагировать(то что называют инкапсуляцией). Это мизер.

no2700
() автор топика
Ответ на: комментарий от anonymous

Ничего интересного ты не пишешь, только пыжишься

no2700
() автор топика
Ответ на: комментарий от anonymous

«На Си можно писать в стиле ООП» и «В Си есть ООП» содержательно разные утверждения.

Второе утверждение ложное, ну а первое, очевидно, не ложно.

wandrien ★★
()
Ответ на: комментарий от no2700

с четкими правилами словоизменений, словоформ и так далее.

Вот это для машины точно лишнее. Естественные языки обходятся без словоизменения. Китайский, вьетнамский, индонезийский и т.п.

Сообщения являются самым примитивным видом языка, можно поработать над тем чтобы сообщения обрели грамматическую форму, а были не просто набором слов.

Вполне вероятно, что на нашем этапе развития IT, уже наверное следовало бы переходить как раз к передаче «смыслов», а не низкоуровневых «инструкций».

Чтобы машина понимала выражения наподобие «выбери все значения больше 1000 и отсортируй их по возрастанию» вне зависимости от того, идёт речь о компиляции Си-подобного кода или об отправке запроса в базу данных или сортировке строк в терминале.

Но как к такой задаче подступиться, не ясно.

wandrien ★★
()
Ответ на: комментарий от wandrien

Чтобы машина понимала выражения наподобие «выбери все значения больше 1000 и отсортируй их по возрастанию»

Python Robot Framework

anonymous
()
Ответ на: комментарий от wandrien

Что такое "стиль"?

Осталось задать отношение «ООП»–«стиль ООП».

anonymous
()
Ответ на: комментарий от wandrien

от это для машины точно лишнее. Естественные языки обходятся без словоизменения. Китайский, вьетнамский, индонезийский и т.п.

Там суть не в словоизменении, а в построении грамматики. Но грамматика без словоизменений как правило громоздкая, это в любом случае минус, так как требует дополнительных костылей по типу этого уродливого образования времен в английском и французском, в аналитических языках в целом.

no2700
() автор топика

anonimous снова выходит на связь

anonymous
()
Ответ на: комментарий от wandrien

Чтобы машина понимала выражения наподобие «выбери все значения больше 1000 и отсортируй их по возрастанию» вне зависимости от того, идёт речь о компиляции Си-подобного кода или об отправке запроса в базу данных или сортировке строк в терминале.

В принципе, такое «понимание» реализовано в некоторых высокоуровневых языках, проблема в том, что это хардкор. Такое «понимание» идет не от того что система умная, а от того что каждая такая операция реализована отдельно. То есть это иллюзия «понимания», нечто подобное тому как понимает мир аутист, с помощью отдельных инструкций на каждую ситуацию.

no2700
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.