LINUX.ORG.RU

Широковещательное ООП

 ,


1

3

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

Собственно, частный случай этого уже есть, это паттерн Observer. Но можно сделать этот принцип general-моделью.

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

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

Там есть нейтив-объекты, которые реализованы на си, с чего ты взял, что это кто-то может не понимать? Но это не значит что си и ё эквивалентны.

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

После того как си скомпилировался, там уже нет никакого кода на си.

Капец ты дебил. А если я код на io запущу, там будет код на io? или всеж будет динамическая работа виртуальной машины, которая будет второчить объектами? И чем динамическое ворочение объектами по сценарию IO будет отличаться от ворочения динамическими объектами по сцеранию Си?

anonymous
()

Трата ресурсов системы не «слушание» эфира каждым объектом в системе - это роскошь и глупство. Есть паттерн «Слушатель» ЕМНИП, вот его и стоит использовать. Создал себе «Эфир», нацепил на него «Слушателей» и «Броадкастеров» ну и играй себе.. А то придумал мне.

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

Есть паттерн

Это ересь для макак. Настоящие Ъоопшники не заморачиваются какими-то паттернами, настоящие Ъоопшники сами выдумывают теорию и борют систему. в этом суть.

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

ООП и проектирование — это почти синонимы

Совсем упился уже.

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

Ждем концепции ООП на основе теплорода. Эфир устарел.

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

Видимо из-за глобального потепления теперь осеннее обострение длится дольше. А весеннее, похоже, начнется раньше.

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

А если я код на io запущу, там будет код на io?

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

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

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

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

Ты несешь херню. Само оно пишется, ага. Ты написал код на io, сохранил и исполнил. Никакого другого кода у тебя там не появилось и не написалось. Все, что у тебя там «написалось» это собранное AST, которое ты можешь вывести, например, в консоль в виде своего io. И все это аст состоит из нативных объектов. И что кому-то что-то мешает в рантайме создать АСТ и сделать тоже самое на чем угодно? Или ты реально считаешь, что только мифические программы (а кто их вообще видел?) на io умеют в рантайме свое поведение менять?

И что мне мешает из программы на той же си сделать буфер такой же программы на си и применить tcc например, поимев другую программу на си, написанную на программе на си? Только не притворяйся идиотом и не ори, что «tcc нечестно!!111, io само так умеет», потому что я могу этот tcc сделать частью своего бинарника.

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

на io умеют в рантайме свое поведение менять?

Не поведение, а исходник. Нет, не только на Io. Некоторые лиспы это, например, тоже умеют.

И что мне мешает из программы на той же си сделать буфер такой же программы на си и применить tcc например, поимев другую программу на си

Это можно, но это должно быть заранее подготовлено, а в Io это всегда доступно из коробки и может быть применено к любому коду. К тому же, в случае интерпретации сразу доступно все окружение.

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

умеют в рантайме свое поведение менять?

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

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

Не поведение, а исходник. Нет, не только на Io. Некоторые лиспы это, например, тоже умеют

У нас это умеет даже внутрикорпоративный бэйсик (DSL), при чем тут Io и лиспы?

Это можно, но это должно быть заранее подготовлено

Ну вот авторы Io для тебя, неосилятора, заранее все и подготовили.

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

Анонiмуса ответ.

Мы в этом DSL'е вполне себе ворочаем тем же DSL'ем, соответственно, Весь код <skip> доступен в рантайме как для чтения, так и для изменения., а так же в <skip> мы делегируем это среде исполнения, не говоря уже о в <skip> это всегда доступно из коробки и может быть применено к любому коду..

Повторяю вопрос: при чем тут Io и лиспы?

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

DSL

Это не DSL, хотя служит одним из средством реализации. Это рефлексия.

У нас это умеет даже внутрикорпоративный бэйсик

Покажи как твой бейсик сможет вот такой код


sum := method(x, x + x)
sum(1, 2) println
getSlot("sum") message next setName("-") 
sum(1, 2) println
getSlot("sum") code println

/* out
2
0
method(x, x -(x))
*/

авторы Io для тебя

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

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

Мы в этом DSL'е вполне себе ворочаем тем же DSL'ем, соответственно

Ты оказывается спец по dsl'ам которые ворочают dsl'ми? Тогда понятно. Попутно вопрос: ты уже научился проситься на горшок?

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

он на нем сайтик свой нарисовал? http://iolanguage.org/ это? Говорили тебе, что сайтик Васи - это не код - это дрочь на код и уровень хеловорда. А то, что автор сего сайта может во что-то серьезное я не верю.

Покажи как твой бейсик сможет вот такой код

это мой бейсик. В школе еще писал.

act << sum 
sum << x, x + x << act

sum << 2, 2

sum 
sum

/// out
2
0

anonymous
()

Для ООП должно быть по теории, по идеи, все сообщения асинхронные. И не вызов метода, а именно посылка. Но тут проблема синхронизации внутренних состояний объекта.

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

Это не DSL, хотя служит одним из средством реализации.

Я говорю о внутрикорпоративном бэйсике, это DSL. То, что в нем есть рефлексия - это просто дополнительная плюшка, появившаяся намного позже самого DSL'а, но то, что она появилась - закономерное развитие языка.

Покажи как твой бейсик сможет вот такой код

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

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

А мы просто так написали DSL, чтобы троллить анонiмуса на ЛОРе, на самом деле мы вручную пишем много рутинного однообразного кода, выполняющего служебные низкоуровневые действия.

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

я не верю

Зато я верю, что ты смогешь(что-нибудь), когда подрастешь

это мой бейсик

ast<<transformer>>monad<<functor

2
0

мой бейсик круче твоего бейсика, а мое ушу круче твоего ушу.

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

Сможет, но синтаксис тебе не понравится

Ниче страшного, показывай

А мы просто так написали DSL

Ты путаешь жопу с пальцем. Io сам является инструментом для реализации DSL. Ты, судя по всему, даже не понимаешь, что такое DSL

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

Ты не можешь в абстракцию, поэтому не можешь в проектирование, а следовательно (если следовать уже твоей логике) не можешь в ООП.

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

Ладно, я не могу чего-то там, но давай лучше о тебе. Ты слился или как?

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

Io сам является инструментом для реализации DSL

Т.е. ты утверждаешь, что из одного DLS нельзя транслировать в другой DSL?

Ты, судя по всему, даже не понимаешь, что такое DSL

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

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

Это решил рынок! Не хочу троллить. Я с C++ уже давно. Я конечно фанат этого языка, но практика и ситуация в мире показывает, что C++ место там где есть такие слова как «производительность» и «ООП». Там где C сложно, а Java слишком кучеряво. Java и C# .NET это именно «проектирование», это логика, это костяк приложения, это типа «энтерпрайз». А С++ нафиг не нужен, как бы мне самому обидно не было от сего факта. У Java средств для ООП на 1% больше. А про смолтоки всякие я молчу.

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

Ты какую то пургу несешь, нулевой вообще недотроль, пнх, разговор окончен

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

Зато я верю

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

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

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

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

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

Я понимаю, если есть сам идея сообщений, то нет этих методов, вызовов и т.д. Да но как хранить свойства и состояние объекта?

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

А с чего ты вообще взял что сайт на Io написан? И что его автор языка писал? Может ему некогда, и им другой человек занимался?

А вообще, для своих целей этого функционала более чем достаточно, ничего сложней и не нужно.

А декорт сейчас занимается разработкой пирингового софта для бикоинов, к твоему сведению.

theKingOfTheLor
()

hint: TObject static var

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

Да но как хранить свойства и состояние объекта?

свойства и состояние объекта хранится в памяти объекта, либо его предков, не понимаю, в чем проблема.

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

А декорт сейчас занимается разработкой пирингового софта для бикоинов

охлол. Все, понял. Это «реальнооченькруто». Говорить реально больше не очем.

:D Хоть что покруче придумал, а то так оскорбить Декорте ...

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

А синхронизация само-сабой нужна, в том числе доступа к общей памяти, это для любого асинхронного кода справедливо.

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

вот его последний проект вроде

Широковещательное ООП (комментарий)

Даже удивительно, зачем же автор ио сам использует ио в разработке

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

anonymous
()

Ты вообще в курсе про наследование? Не думал о том, что можно создать абстрактный сигнал, подписать на него m слотов, и реализовать n наследников?

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

И что? Я не об этом говорю. Должен быть эфир, и слушатели и одновременно излучатели этого эфира. любое сообщение подписчиков — это сигнал в эфир, которое слушают все. А наследование тут ортогонально. Можно создать класс объектов, дефолтно подключенных к какому-либо эфиру, от этого класса унаследовать сабкласс, никто не запрещает.

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

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

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

anonymous
()

Почитай что-ли про domain events.

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

А наследование тут ортогонально

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

comp00 ★★★★
()
Последнее исправление: comp00 (всего исправлений: 1)

Только анонiмус на второй странице комментариев своего треда может писать из-под нового аккаунта, потому что старый забанили.

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

уже вон и Qt изобрел почти

Справедливости ради, в Qt сигналы/слоты реализованы не идеально (макросы, сравнивающие строковые литералы, так ведь?). Они работают, и на выходе получается то, что ожидается, но все же это какое-то не ООП решение.

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

макросы, сравнивающие строковые литералы, так ведь?

Не, в 5 уже можно шаблоны. Но осталось и старая схема, да.

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

мне теперь все ООПшн ки будут мерещаться как анонiмусы

bookman900 ★★★★★
()

ты придумал ethernet

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