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

    Так я его могу получить из IB либо из IC.
      Цитата scorpion @
      А если я хочу расширить функциональность, допустим отнаследоватся от класса, который уже реализует интерфейсы, и при этом у него все методы расположены в закрытой секции(private). То как я его расширю?

      Если класс допускает изменение реализации в производных классах, то у него методы будут в protected ;)
        Цитата MyNameIsIgor @
        Тогда как происходит сокрытие, если всё доступно через интерфейс?

        Прост ов секции private или protected. Через объект ты доступ не получишь, только явно через интерфейс, который тебе нужно явно получить.
        Цитата scorpion @
        А если я хочу расширить функциональность, допустим отнаследоватся от класса, который уже реализует интерфейсы, и при этом у него все методы расположены в закрытой секции(private). То как я его расширю? Допустим, я хочу немножко изменить функциональность одного из методов.

        Оычно они все же в протектед. Но ничто тебе не мешает включить интерфейс в класс, нет запрета объявления реализации уже объявленного в предках интерфейса.
        Добавлю из хелпа:A class can also reimplement an entire interface that it inherits from an ancestor class. This involves relisting the interface in the descendent class' declaration. For example:
        ExpandedWrap disabled
          type
            IWindow = interface
              ['{00000115-0000-0000-C000-000000000146}']
              procedure Draw;
              // ...
            end;
            TWindow = class(TInterfacedObject, IWindow)
              // TWindow implements IWindow pocedure Draw;
              // ...
            end;
            TFrameWindow = class(TWindow, IWindow)
              // TFrameWindow reimplements IWindow procedure Draw;
              // ...
            end;

        Reimplementing an interface hides the inherited implementation of the same interface. Hence method resolution clauses in an ancestor class have no effect on the reimplemented interface.
        Сообщение отредактировано: Romkin -
          Цитата scorpion @
          Так я его могу получить из IB либо из IC.

          Не получишь, даже кастом.
            Цитата korvin @
            какой метод вызовется в случае

            Будет amgigous name resolution. Но это компилятор проконтролирует.
              Цитата Romkin @
              Прост ов секции private или protected. Через объект ты доступ не получишь, только явно через интерфейс, который тебе нужно явно получить.

              И в чём проблема? Получение интерфейса запрещено языком? Ведёт к непредсказуемым последствия? Нет? Тогда кто что скрыл?
                в том смысле, что автокаст
                ExpandedWrap disabled
                  procedure guestAction(guest: IGuest);
                  begin
                    guest.foo;
                    adminAction(guest);
                  end;

                не будет компилироваться, как в случае private, так и в случае public
                а если код поменять так:
                ExpandedWrap disabled
                  procedure guestAction(guest: IGuest);
                  begin
                    guest.foo;
                    //adminAction(guest);
                  end;
                   
                  ...
                   
                  var
                    user: TUser;
                   
                  begin
                    user := TUser.Create;
                   
                    try
                      guestAction(user);
                      adminAction(user);
                      ReadLn;
                    except
                      on E: Exception do begin
                        Writeln(E.ClassName, ': ', E.Message);
                        ReadLn;
                      end;
                    end;

                то в случае и с public и с private вылетит исключение, хоть методы и выполнились
                ExpandedWrap disabled
                  foo
                  bar
                  EInvalidPointer: Invalid pointer operation

                почему?
                  Цитата korvin @
                  суммарный интерфейс Класса должен включать интерфейс Интерфейса

                  Почему? Для чего?
                    Цитата DesweR @
                    Если класс допускает изменение реализации в производных классах, то у него методы будут в protected ;)

                    Ага, а счего бы ему не допускать изменений ?

                    Цитата Romkin @
                    Оычно они все же в протектед. Но ничто тебе не мешает включить интерфейс в класс, нет запрета объявления реализации уже объявленного в предках интерфейса.

                    Ну вот, теперь они уже не закрытые, а защищеные стали. Зачем вообще это нужно, если есть интерфейс с открытыми методами? И кто будет использовать голые классы, имея в своем распоряжении интерфейсы? И откого это вся конспирация?
                      Цитата MyNameIsIgor @
                      И в чём проблема? Получение интерфейса запрещено языком? Ведёт к непредсказуемым последствия? Нет? Тогда кто что скрыл?

                      по-моему делфисты просто занимаются каким-то самообманом с этой их "фишкой"
                        Цитата DesweR @
                        Почему? Для чего?

                        потому что класс нам об этом сказал, потому что в этом суть интерфейсов, а не в том, что вы думаете
                          Цитата DesweR @
                          Не получишь, даже кастом.

                          Это ты конкретно сейчас про делфи сказал? Вон корвин, что та там кастит и ниче, прокатывает.
                            Цитата korvin @
                            Цитата D_KEY @
                            поддержки аспектно-ориентированного программирования, ... Есть не очень успешные попытки это делать, как раз на страшных костылях...

                            АОП -- разве все три реализации плохи? (я-то их сам не видел)

                            С АОП основная "проблема" в наличии специального дополнительного "аспектного" пре-компилятора. В общем, из того, что пытался использовать, все производило впечатление УГ.

                            Добавлено
                            Цитата Qraizer @
                            D_KEY, ну... сорри тогда. Я воспринял так, что ты предъявляешь это всё как большой недостаток.

                            Как большой недостаток я воспринимаю только отсутствие гибкости. Все-таки тот же буст вынуждено ужасен :)
                              Цитата MyNameIsIgor @
                              И в чём проблема? Получение интерфейса запрещено языком? Ведёт к непредсказуемым последствия? Нет? Тогда кто что скрыл?

                              Цитата scorpion @
                              И откого это вся конспирация?

                              Еще раз: указанное разделение функционала. Явное указание как работать с сущностью. Фактически ты не можешь одновременно работать с разными интерфейсами. Собственно, это вопрос а зачем делают несколько интерфейсов у класса? Можно же вообще все в один пихнуть!
                                Цитата Flex Ferrum @
                                У меня как раз библиотекчка для таких дел подбирается. Там сейчас проперти, ленивые списки, надо бы и мультиметоды добавить.

                                :good:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 316 317 [318] 319 320 ...  494 495


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