На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 140 141 [142] 143 144 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Qraizer @
    А вот второе - категорическое нет. Это методы разных интерфейсов. С какого перепуга они окажутся одним и тем же? Имена совпали? Бывает. Кто виноват?

    В обоих ситуациях можно считать Программиста (хоть мне тоже не нравится молчание компилятора при совпадении имён, но тут иначе только хуже):
    а) На начальном проектирования не позаботился о именовании методов у классов, позиционируемых как "множествено-наследуемые".
    б) Выбрал классы изначально не позиционируемые как "множествено-наследуемые".

    Цитата Qraizer @
    Зато Shaggy лишён возможности наследовать готовые реализации ITCP и IHistory, написанные с год назад для разных проектов. Вот объединить бы оба плюса в одни Плюсы...

    Можно путём агрегации, будет выглядеть примерно так:
    ExpandedWrap disabled
        MultiClass.TCP.LifeTime;
        MultiClass.History.LifeTime;

    Но зато никаких коллизий.

    Цитата Qraizer @
    Ну, забыть поставить можно и очередной override.

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

    Цитата Qraizer @
    DesweR, как обычно, ничего не понял, но вставил. Речь шла о том, что при передаче в функцию, ожидающую интерфейс A, и получая в ней поведение интерфейса B - это только в Delphi и C# считается за +. Интересно посмотреть на счастливого программера, меняющего время жизни TCP-пакета и получающего вместо этого смену длины истории диалога.

    А ты читай внимательнее, т.к. в Delphi и C# интерфейсы реализацию не несут - обрати своё внимание на классы реализующие эти интерфейсы, а именно на переопределённый метод f класса B, унаследованного от базового A. И не надо нам потом рассказывать о "счастливых" программистах С++ ;)

    Цитата Qraizer @
    Я-таки вижу в Дельфийном коде AS? Или мне мерещится? ...Ах да, он же не работает, тьфу ты... работает как и должен работать в Дельфи, угу.

    Да он собственно там и не нужен (пардон за мой копипаст), класс B и так включает реализацию IA.

    Цитата Qraizer @
    Если кто не понял. А то как слепые, такое ощущение. static_cast<> там играет роль селектора реализаций интерфейса A. Если уж горе-дизайнер надизайнил такую иерархию, что бедному Повстанцу теперь за ним разгребать, то выбор требуемой одной из двух копий реализации A выполняется одним чихом. "А у вас?"

    Больше походит на хак, прямой вызов метода предка, переопределённого в потомке.

    Добавлено
    Цитата MyNameIsIgor @
    Цитата Qraizer @
    Цитата DesweR @
    Delphi +
    C# +
    C++ -
    DesweR, как обычно, ничего не понял, но вставил.

    Да я вообще в осадок выпал... Вот что сказать человеку, утверждающему, что небо красное? :blink:
    Цитата DesweR @
    Ну вы ещё в полиморфизме используйте static_cast и называйте нас ненормальными

    Привидение потомка к предку и предка к потомку - две большие разницы.
    Цитата DesweR @
    Если правильно понял, то также как и у меня.

    Слава Богу, хоть что-то поняли... Только сначала я просил как раз иное поведение. И уже после того, как korvin привёл код, который по моим представления им не обладал (что вы и подтвердили), я спросил, как же тогда будет выглядеть код с переопределение метода класса A в B.

    Ты юродствуешь или в самом деле не понимаешь?
    Сообщение отредактировано: DesweR -
      Цитата DesweR @
      Ты юродствуешь или в самом не понимаешь?

      Это вы не изволите понимать наличие двух реализаций интерфейса IA в одном классе.
        Цитата MyNameIsIgor @
        Слава Богу, хоть что-то поняли... Только сначала я просил как раз иное поведение. И уже после того, как korvin привёл код, который по моим представления им не обладал (что вы и подтвердили), я спросил, как же тогда будет выглядеть код с переопределение метода класса A в B.

        Мда, это так "ООПшно" :D

        Добавлено
        Цитата MyNameIsIgor @
        Это вы не изволите понимать наличие двух реализаций интерфейса IA в одном классе.

        Гмм... что?
          Цитата DesweR @
          Мда, это так "ООПшно"

          Это теперь мантра такая? korvin - законодатель мод?
          Цитата DesweR @
          Гмм... что?

          Вот и я говорю: вы не понимаете.
            Цитата MyNameIsIgor @
            Вот и я говорю: вы не понимаете.

            А мне кажется это вы не понимаете, точнее вы изначально не так поняли поставленную задачу Корвином, исказив её в своём варианте.
              Цитата DesweR @
              А мне кажется это вы не понимаете, точнее вы изначально не так поняли поставленную задачу Корвином

              Я понял изначальную задачу. И я её решил. Как и Повстанець.
              Цитата DesweR @
              исказив её в своём варианте

              Я её не исказил, а предложил новую задачу на основе имеющейся. Кстати, решения так и не увидел :tong:
                Цитата MyNameIsIgor @
                Я понял изначальную задачу. И я её решил. Как и Повстанець.

                Ну да ладно, по своему так по своему решили.

                Цитата MyNameIsIgor @
                Я её не исказил, а предложил новую задачу на основе имеющейся. Кстати, решения так и не увидел

                Это?
                Цитата DesweR @
                вызов метода предка, переопределённого в потомке.


                Добавлено
                Цитата D_KEY @
                DesweR, внимательнее нужно читать и меня тоже. Модули, безусловно, нужны, речь о том, что является модулями в ООП системе. Если ты еще не понял, то Мейер считает, что классы.

                Мейер не просто считает, что классы, а выводит серию критериев, принципов и правил, которым должна соответствовать модульность, собственно класс для него - это средство достижения цели (собственно ему так и проще, Eiffel - чистый ОО язык). Справедливости ради, я хотел бы провести сравнение - насколько модульность в C++ и Delphi в своём виде соответствует представлениям Мейера, но всё времени не хватает хотя бы на ознакомление с Eiffel.

                Добавлено
                К слову спросить, а в C# есть ли дизайн классов по контракту? В Oxygene (Delphi Prism) есть :)
                http://prismwiki.codegear.com/en/Class_Contracts
                  Цитата DesweR @
                  Это?

                  Прочитайте тему.
                    Цитата MyNameIsIgor @
                    Прочитайте тему.

                    Это Delphi vs C++ vs C# (сообщение #2852323) ?
                      Это.
                        Едем дальше, требуется чтобы на этом моменте:
                        ExpandedWrap disabled
                          f1(static_cast<A&>(b));

                        получилось это:
                        ExpandedWrap disabled
                          A::f()

                        Верно?

                        Добавлено
                        Метод класса В
                        ExpandedWrap disabled
                          virtual void IB_f() { std::cout << "B::f()" << std::endl; }

                        это фактически перекрытый метод класса А
                        ExpandedWrap disabled
                          virtual void f() { std::cout << "A::f()" << std::endl; }

                        Так?

                        Добавлено
                        Если всё верно, тогда зачем эти методы делать виртуальными?
                          Цитата DesweR @
                          Едем дальше, требуется чтобы на этом моменте:
                          ExpandedWrap disabled
                            f1(static_cast<A&>(b));

                          получилось это:
                          ExpandedWrap disabled
                            A::f()

                          Верно?

                          Добавлено
                          Метод класса В
                          ExpandedWrap disabled
                            virtual void IB_f() { std::cout << "B::f()" << std::endl; }

                          это фактически перекрытый метод класса А
                          ExpandedWrap disabled
                            virtual void f() { std::cout << "A::f()" << std::endl; }

                          Так?

                          Нет, не верно. Метод A::f - отдельно, метод B::IB_f - отдельно.
                          Сообщение отредактировано: MyNameIsIgor -
                            MyNameIsIgor
                            А что у тебя выведется при таком варианте?
                            ExpandedWrap disabled
                              var
                                a: A;
                                b: B;
                              begin
                                a := A.Create;
                                a.f;
                               
                                b := B.Create;
                                b.f;
                               
                                a := B.Create;
                                a.f;
                              end;
                              Цитата DesweR @
                              Цитата D_KEY @
                              DesweR, внимательнее нужно читать и меня тоже. Модули, безусловно, нужны, речь о том, что является модулями в ООП системе. Если ты еще не понял, то Мейер считает, что классы.

                              Мейер не просто считает, что классы, а выводит серию критериев, принципов и правил, которым должна соответствовать модульность, собственно класс для него - это средство достижения цели (собственно ему так и проще, Eiffel - чистый ОО язык). Справедливости ради, я хотел бы провести сравнение - насколько модульность в C++ и Delphi в своём виде соответствует представлениям Мейера, но всё времени не хватает хотя бы на ознакомление с Eiffel.

                              Если рассматривать классы, то С++ удовлетворяет критериям. А отдельного понятия "модуль" в С++ нет :)
                                Цитата korvin @
                                2) совпадают полностью сигнатуры -- никакой колизии, просто один и тот же метод, в чем проблема? пересечение множеств всего-навсего
                                ...
                                т.е. это не является коллизией в общем-то. хотя как именно ведет себя C# и Delphi в таких ситуациях, я не знаю, сужу по Java/Go/Racket

                                В C# это не так. При реализации придётся явно указать, от какого интерфейса взят метод.
                                ExpandedWrap disabled
                                  void InterfaceName.MethodName(int a)
                                  {...}
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 140 141 [142] 143 144 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.2656 ]   [ 14 queries used ]   [ Generated: 31.07.26, 04:42 GMT ]