На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (21) « Первая ... 18 19 [20] 21   ( Перейти к последнему сообщению )  
> ООП - в топку!
    Цитата Qraizer @
    Мне кажется, вы не понимаете, что такое обмен сообщениями в ОП. В ОП вообще ничего нет, кроме объектов, которые взаимодействуют посредством обмена сообщениями. Именно это и реализуют экземпляры классов посредством вызова методов в ООП.
    А то, что вы, ну вот сейчас конкретно ты, JoeUser, считаешь за обмен сообщениями, это не те сообщения, и не те обмены между объектами. Широковещательный, групповой итп обмены – это уже не принцип, а паттерн

    Так как в изначальной статье была, кажется, отсылка к эрлангу и его сообщениям, то не понимаешь как раз ты. Подробно опишу уже завтра, спатки пора.
      Цитата Астарот @
      Так как в изначальной статье была, кажется, отсылка к эрлангу и его сообщениям, то не понимаешь как раз ты. Подробно опишу уже завтра, спатки пора.
      Если отбросить в сторону аснхронность, то какая принципиальная разницf между отправкой сообщения и вызовом функции? В эрланге, чтобы отправить сообщение, надо вызвать функцию :lol:
      Сообщение отредактировано: applegame -
        Цитата applegame @
        В эрланге, чтобы отправить сообщение, надо вызвать функцию

        Вообще-то '!' это оператор :)

        Цитата applegame @
        то какая принципиальная разницf между отправкой сообщения и вызовом функции?

        Принципиальная :) Ну, если не доходить до абсурда, при котором посылка сообщения - это еще и работа с регистрами процессора, конечно. По сути вызов метода (крайзер сказал все же про метод, а не про функцию) это переход к некоему алгоритму обработки, который должен обработать входные параметры, и что-то да вернуть, хотя бы void. Этот алгоритм еще и должен принадлежать некоему объекту, раз уж речь о методе. Сообщение же это просто абстрактный набор неких данных, семантика которых при передаче сообщения совершенно не важна. Из того же эрланга:
        ExpandedWrap disabled
          Expr1 ! Expr2

        Expr1 отправлено процессу Expr2. Что там находится в Expr1 совершенно не важно. Что с этим сделает Expr2 тоже совершенно не важно. Нет даже гарантий, что Expr2 существует. А если существует, то нет гарантий, что Expr1 будет когда-то прочитано. А если быдет прочитан, то нет гарантий, что не будет отброшен. А если будет обработан, то нет гарантий, что это выльется в вызов каких-то функций. И процесс, который отправил сообщение ничего не ждет, как при вызове метода, ничего не пишет на стек, живет себе дальше. Вообще если приземленно, то аналогия будет примерно такой: вызов метода - это письмо, в котором Петя говорит Васе, что нужно сделать. А посылка сообщения тогда - это почта, которая это письмо доставляет от Пете к Васе в запечатанном конверте, и чья ответственность ограничивается только доставкой, при этом находится вне сферы влияния и Пети, и Васи.
        Сообщение отредактировано: Астарот -
          Цитата Астарот @
          Вообще-то '!' это оператор
          Ну это на самом низком уровне. Голый процесс вряд-ли можно назвать объектом. А вот gen_server уже вполне, а там для отправки уже нужно делать call или cast. call так вообще очень сильно похож на обычный вызов метода объекта.
          Цитата Астарот @
          Expr1 отправлено процессу Expr2. Что там находится в Expr1 совершенно не важно. Что с этим сделает Expr2 тоже совершенно не важно. Нет даже гарантий, что Expr2 существует. А если существует, то нет гарантий, что Expr1 будет когда-то прочитано. А если быдет прочитан, то нет гарантий, что не будет отброшен. А если будет обработан, то нет гарантий, что это выльется в вызов каких-то функций. И процесс, который отправил сообщение ничего не ждет, как при вызове метода, ничего не пишет на стек, живет себе дальше. Вообще если приземленно, то аналогия будет примерно такой: вызов метода - это письмо, в котором Петя говорит Васе, что нужно сделать. А посылка сообщения тогда - это почта, которая это письмо доставляет от Пете к Васе в запечатанном конверте, и чья ответственность ограничивается только доставкой, при этом находится вне сферы влияния и Пети, и Васи.
          Это все детали реализации. Говорят в Smalltalk то что внешне выглядит как отправка сообщений внутри сделано обычными вызовами. :)

          Походу эта дискуссия скоро перейдет в плоскость философии.
          Сообщение отредактировано: applegame -
            Цитата applegame @
            Ну это на самом низком уровне. Голый процесс вряд-ли можно назвать объектом. А вот gen_server уже вполне

            Это такой же низкий уровень, как и вызов метода какого-то объекта - есть объект, вызвали метод. Есть процесс - послали сообщение. И вызов метода, и посыл сообщения - это средства языка :-? А gen_server это здоровенный кусок кода, который кто-то написал за нас, и там может быть все, что угодно. В жабе - как обратный пример! - воодушевившись примером эрланга сваяли некую Akka, где попытались повторить его акторную модель. Но не будем же мы говорить после этого, что в java есть посылка сообщений? :-? Получилось у них, насколько я знаю, не очень, если что...

            Цитата applegame @
            а там для отправки уже нужно делать call или cast

            Только синхронная посылка сообщений там сделана, само-собой, через посылку двух асинхронных :)

            Цитата applegame @
            call так вообще очень сильно похож на обычный вызов метода объекта.

            Именно, что только похож, поскольку под капотом это все то же асинхронное сообщение, и подразумеваемый контракт, что ответное сообщение, которое будет когда-то послано, будет содержать id переданный в запросе, и только благодаря этому id процесс ждущий ответ сможет этот ответ отличить от всех других сообщений. Сравни с адресом возврата на стеке :)

            Цитата applegame @
            Это все детали реализации.

            Это основа на которой все работает, и от нее никуда не деться. Сделать похоже на синхронный вызов - да, можно, но чуть ковырнуть, и уже все совсем не так :)

            Цитата applegame @
            Говорят в Smalltalk то что внешне выглядит как отправка сообщений внутри сделано обычными вызовами.

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

            Добавлено
            Цитата applegame @
            Походу эта дискуссия скоро перейдет в плоскость философии.

            Может оно и не плохо? :D
              Цитата applegame @
              Это все детали реализации. Говорят в Smalltalk то что внешне выглядит как отправка сообщений внутри сделано обычными вызовами. :)

              Вот как раз то, как реализована посылка/обработка сообщений - действительно деталь реализации. Но во многих языках торчит уже реализация - вызов методов. Т.е. ты не сможешь реализовать в рамках стандарта крестовое ООП иначе, например.
                Цитата Астарот @
                Так как в изначальной статье была, кажется, отсылка к эрлангу и его сообщениям, то не понимаешь как раз ты.
                Отсылка в статье конкретно к Эрлангу не имеет отношения к общему принципу взаимодействия объектов. Как объектная модель Плюсов является лишь одной из возможных, так и Эрланг реализует механизм одним из возможных способов. Фуллстекщик по ходу просто проникся идеей Эрганга и вполне имел на это право, мне вон тоже объектная модель Плюсов гораздо симпатичнее Дельфёвой, ВБшной или там Джавной, но вот зачем он распространил одну из возможных реализаций на всю парадигму, это надо у него спросить.
                  Цитата Qraizer @
                  Отсылка в статье конкретно к Эрлангу не имеет отношения к общему принципу взаимодействия объектов.

                  "Остап Ибрагимович, Вы же знаете как я Вас уважаю..." (С)

                  Qraizer, но ты неправ! Если "создатель" термина ООП критикует некоторые из его "инкарнаций" идеологии (его идеологии!!!) ООП, то он имеет на это полное право. Не нравится - форкай! Только не называй это уже ООП, называй, к примеру, ООПQ. Никто и лишнего слова не скажет!

                  Ну а по поводу "обмена сообщений" ... Ну для механизма исключений таки ввели ключевое слово "throw". Замечу, не функцию, не метод - а именно ключевое слово. Это собственность ЯП. Все зависимости и инварианты на столе.

                  Хотите изначального ООП в разрезе изначальных пожелалок автора сей идеомы - реализуйте в языке! Сделайте ключевыми словами, к примеру, "send", "listen", "subscribe", "unsubscribe" &etc. Обеспечьте функционал, и только тогда поговорим о чистом ООП без личных форков. И да ... ИМХО.
                    Цитата JoeUser @
                    Если "создатель" термина ООП

                    На самом деле это спорный вопрос. C++ вдохновлялся языком simula 67(в том году и появился). Алан Кэй не имеет к нему никакого отношения.

                    Добавлено
                    Цитата
                    Первым языком программирования, в котором были предложены основные понятия, впоследствии сложившиеся в парадигму, была Симула, но термин «объектная ориентированность» не использовался в контексте использования этого языка. В момент его появления в 1967 году в нём были предложены революционные идеи: объекты, классы, виртуальные методы и др.
                      Цитата D_KEY @
                      На самом деле это спорный вопрос. C++ вдохновлялся языком simula

                      C++ - это не ООП!
                      Мы говорим о идиоме, отвязанной от реализации.
                      Просто когда возникла такая идея.
                        Цитата JoeUser @
                        Мы говорим о идиоме, отвязанной от реализации.
                        Просто когда возникла такая идея.

                        Я и говорю, что это спорно. Симула многими считается первым языком с поддержкой ООП, при этом Кэй не имеет к нему никакого отношения. То, что он придумал термин, не делает его создателем концепции, которая тогда, судя по всему, витала в воздухе. Его взгляд, соответственно, лишь один из возможных.
                        Про C++ я упомянул лишь в контексте, в котором было написано мною процитированное.
                        Сообщение отредактировано: D_KEY -
                          Цитата JoeUser @
                          Если "создатель" термина ООП критикует некоторые из его "инкарнаций" идеологии (его идеологии!!!) ООП, то он имеет на это полное право. Не нравится - форкай! Только не называй это уже ООП, называй, к примеру, ООПQ. Никто и лишнего слова не скажет!
                          А я разве не сказал, что наш доблестный фуллстековый функциональник перевирает цитаты, выдёргивая их из контекста? Он критиковал-то не языковые ООП-архитектуры, а неправильное их пользование программерами. Собственно, функциональный фуллстекщик как раз на сие и напоролся, так что цитата ровно о нём самом, но он при этом умудрился перевернуть её на 180°.
                            Цитата applegame @
                            то какая принципиальная разница между отправкой сообщения и вызовом функции?

                            Ну, некоторая есть: сообщение — тоже объект, и объект, которому передано сообщение может по-разному реагировать на «неподдерживаемое сообщение». В случае с вызовом методов и VMT ты не можешь вызвать произвольный метод на любом объекте. Реакция на неподдерживаемое сообщение может быть разной, например, знакомый рассказывал, что в одном проекте возможность перехвата и обработки неподдерживаемого сообщения в Ruby использовалась для динамического формирования config-объекта, который фактически читал свои «свойства» из файла.

                            Цитата applegame @
                            Говорят в Smalltalk то что внешне выглядит как отправка сообщений внутри сделано обычными вызовами.

                            Не совсем. Там есть один «метод» — dispatch, остальное ООП реализовано через сообщения поверх него.

                            Добавлено
                            Вот тут чуть подробней про разницу сообщений и методов. По сути это разница между динамической и статической типизацией.
                              Цитата korvin @
                              Вот тут чуть подробней про разницу сообщений и методов. По сути это разница между динамической и статической типизацией.
                              В D тоже есть возможность создать объект для которого можно вызвать любой метод. :) Правда все разруливается в compile-time.
                              Но можно взять Ruby, Там тоже можно любой метод для объекта вызвать и объект может сам решать, что ему делать с этим методом. И это уже в run-time. ЕМНИП даже похапе и жабаскрипт так умеют. Тоже мне киллер-фича. :lol:
                              Так что неубедительно.
                              Сообщение отредактировано: applegame -
                                Цитата applegame @
                                В D тоже есть возможность создать объект для которого можно вызвать любой метод. :) Правда все разруливается в compile-time.

                                Каким образом это может разруливаться в compile-time, если сообщение можно сформировать в runtime?

                                Цитата applegame @
                                Но можно взять Ruby, Там тоже можно любой метод для объекта вызвать и объект может сам решать, что ему делать с этим методом. И это уже в run-time. ЕМНИП даже похапе и жабаскрипт так умеют. Тоже мне киллер-фича. :lol:
                                Так что неубедительно.

                                Это и есть отправка сообщения, а не вызов метода. Практически все динамически-типизированные языки реализуют message-passing, а не virtual-method-invocation. Разница в том, что первое реализуется рантаймом, второе — компилятором. Есть, конечно и смешанные варианты: статически-типизированные языки с рефлексией (та же Java), но делается это всё там через адовую жопу.
                                Сообщение отредактировано: korvin -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (21) « Первая ... 18 19 [20] 21 


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0666 ]   [ 16 queries used ]   [ Generated: 16.04.24, 21:32 GMT ]