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

    А как ещё?
      Цитата Flex Ferrum @
      Я интерфейсом считаю фиксацию некоторого поведение. Контракт между классом и его клиентами. Поведение - это набор методов.

      Цитата Flex Ferrum @
      Если это семантически разные методы, об этом должно быть явным образом сообщено клиенту.

      А не кажется, что взаимоисключающие параграфы? Набор методов отражает поведение или всё же оно не зависит от их сигнатур?
      В том то и проблема, что пока семантика пишется в документации для людей, а не в коде для компилятора, набор методов - это набор методов, а не поведение.
      Цитата D_KEY @
      Ну, например, есть вариант, что для того, чтобы можно было что-либо делать с объектом, нужно обязательно указать интерфейс типа-параметра, а если интерфейс не указан, то никаких операций с типом и объектами типа делать будет нельзя.

      Тот самый явный каст?
        Цитата MyNameIsIgor @
        А не кажется, что взаимоисключающие параграфы? Набор методов отражает поведение или всё же оно не зависит от их сигнатур?

        Нет. Потому что сигнатура метода - это тоже часть контракта. Два набора одноимённых методов, но с разными сигнатурами, будут фиксировать разное поведение.
          Цитата MyNameIsIgor @
          Цитата D_KEY @
          Ну, например, есть вариант, что для того, чтобы можно было что-либо делать с объектом, нужно обязательно указать интерфейс типа-параметра, а если интерфейс не указан, то никаких операций с типом и объектами типа делать будет нельзя.

          Тот самый явный каст?

          Да я бы и неявный оставил, но проверку сделал бы статическую в том смысле, что статический класс передаваемого объекта должен соответствовать интерфейсу.
            Цитата DesweR @
            Самое элементарное - фабрика.

            И что, по твоему вот это:
            ExpandedWrap disabled
                A := Factory.Get<IA>;
                B := Factory.Get<IB>;

            IA, IB - Интерфейсы не известные на этапе компиляции? Гхм... Боюсь спросить, а как ты с ними дальше работаешь, если ты не знаешь что получил?
              Цитата MyNameIsIgor @
              Набор методов отражает поведение или всё же оно не зависит от их сигнатур?
              В том то и проблема, что пока семантика пишется в документации для людей, а не в коде для компилятора, набор методов - это набор методов, а не поведение.

              А если есть языковые механизмы для пред-, постусловий и инвариантов? Семантика может быть описана с их помощью. Правда практика показала, что программисты не любят это делать...
                Цитата Flex Ferrum @
                Нет. Потому что сигнатура метода - это тоже часть контракта.

                Но не весь. Возвращаясь к тому же стеку, если я не буду использовать top, то благополучно смогу запихнуть очередь. Ну, и что я получу, сделав push, а потом pop?
                Цитата Flex Ferrum @
                Два набора одноимённых методов, но с разными сигнатурами, будут фиксировать разное поведение.

                Ок. Вопрос в том, что будут делать два одноимённых метода с одинаковыми сигнатурами. Кто тут мамой поклянётся, что они ведут себя одинаково?
                  Цитата MyNameIsIgor @
                  Но не весь. Возвращаясь к тому же стеку, если я не буду использовать top, то благополучно смогу запихнуть очередь. Ну, и что я получу, сделав push, а потом pop?

                  Цитата MyNameIsIgor @
                  Ок. Вопрос в том, что будут делать два одноимённых метода с одинаковыми сигнатурами. Кто тут мамой поклянётся, что они ведут себя одинаково?

                  Ну, тут ты прав. :)
                    Цитата D_KEY @
                    А если есть языковые механизмы для пред-, постусловий и инвариантов? Семантика может быть описана с их помощью.

                    Да, они Ъ-вещь. Но даже они не могут всё описать.
                    Ты пойми, мои претензии гораздо более идеологические, чем практические. И я отдаю себе в этом отчёт. Ну, просто если в Go утки-интерфейсы выглядят идеологически цельно, то когда мы захотим такие же в плюсах с их шаблонами, множественным наследованием и абстрактными классами, то что мы получим? Уже озвученную автоматизацию написания наследника? И вместе с ней потенциальные проблемы а-ля auto_ptr. Мой вопрос прост: а все уверены, что это нужно?
                      Цитата DesweR @
                      Если кто забыл, TBC1 и TBC2 реализуют только интерфейсы IB и IC, указанные явно в декларации, но никак не интерфейс IA, несмотря даже на то, что он является их базовым.

                      А если в IA будет метод, который не реализован классами TBC1 и TBC2, он ведь будет виден? Думаю будет, и если мы его вызовем, думая что он таки реализован в производных классах, что мы получим то? pure virtual function call ?
                        Цитата MyNameIsIgor @
                        Но даже они не могут всё описать.

                        По идее, они могут полностью математически описать семантику АТД, что теоретически вполне достаточно для интерфейсов. С другой стороны, на практике в некоторых случаях указание таких полных контрактов может быть трудноосуществимо...
                          Цитата Flex Ferrum @
                          А как ещё?

                          Явным указанием в декларации класса, что он реализует именно этот интерфейс, а не какие угодно со аналогичной сигнатурой.

                          Цитата scorpion @
                          IA, IB - Интерфейсы не известные на этапе компиляции? Гхм... Боюсь спросить, а как ты с ними дальше работаешь, если ты не знаешь что получил?

                          Они не известны фабрике, ей это вообще по барабану.

                          Цитата scorpion @
                          А если в IA будет метод, который не реализован классами TBC1 и TBC2, он ведь будет виден?

                          Это не будет компилироваться, все методы интерфейса должны быть реализованы.
                          Сообщение отредактировано: DesweR -
                            Цитата D_KEY @
                            По идее, они могут полностью математически описать семантику АТД, что теоретически вполне достаточно для интерфейсов. С другой стороны, на практике в некоторых случаях указание таких полных контрактов может быть трудноосуществимо...

                            Ну, а если допустить, что осуществимо хотя бы в большинстве случаев? Т.е. тогда мы имеем описание семантики для интерфейса-утки и двух классов, вроде как реализующими данный интерфейс (пусть будет стек и очередь). Здесь у меня вопрос: на сколько сложна реализация компилятора, сравнивающая эти описания и ещё при компиляции отвергающая очередь как не предоставляющего гарантию получения pop'ом того же элемента, что мы только что за'push'или? :)
                            Сообщение отредактировано: MyNameIsIgor -
                              Цитата MyNameIsIgor @
                              Здесь у меня вопрос: на сколько сложна реализация компилятора, сравнивающая эти описания и ещё при компиляции отвергающая очередь как не предоставляющего гарантию получения pop'ом того же элемента, что мы только что за'push'или? :)

                              Для этого достаточно сопоставить инвариантов класса и интерфейса, а также пред- и пост- условия соответствующих методов.
                                Цитата D_KEY @
                                Для этого достаточно сопоставить инвариантов класса и интерфейса, а также пред- и пост- условия соответствующих методов.

                                Я понимаю. Просто они могут быть описаны по-разному :)

                                Добавлено
                                Как вообще описать, что если я сделаю pop после push, то получу вставленный элемент? :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 310 311 [312] 313 314 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.4523 ]   [ 15 queries used ]   [ Generated: 31.07.26, 22:29 GMT ]