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

    Добавлено
    Цитата Romkin @
    А случай, когда в конструкторе предка поле инициализируется в 1, а в конструкторе потомка надо туда поставить 2, не приводит к двойной инициализации?
    Если возникает такая необходимость - значение будет передано как параметр конструктора.
      Цитата Romkin @
      Во-во. Чем больше беседую, тем больше убеждаюсь, что программирование на С++ - это такой особый вид мазохизма. Ужас. Сравнимо с тем, чтобы иметь в гараже Ford-T, и ездить на нем, уверяя всех, что это круто. И периодически раз в десятилетие обращаться в мастерскую, чтобы привесили новые фишки, например, ремни безопасности за десяток лет наконец-то придумали как навесить :lol:

      Это ошибочная оценка, типичная для оценки со стороны :)
      Для меня язык вообще имеет мало значения. Язык должен выбираться исходя из задачи и придуманной архитектуры системы.
      Более того, выбор языка можно отложить и на тот момент, когда будет завершена первая итерация проектирования и завершены прототипы... Все зависит от задачи.
      И на этом уровне языковые детали уже не так важны - нужно лишь сделать правильный выбор и следовать ему, не пытаясь использовать язык не по назначению.

      Цитата
      Цитата D_KEY @
      Если удалил из коллекции, а объект продолжает жить, то куда приходит событие?

      OnPing есть и у объекта и у коллекции. Событие приходит в OnPing объекта всегда, а в событие коллекции - если он в ней. Эссно, если есть обработчик.

      Я в очередной раз забыл механизм событий в Delphi, но помню шарповый, они сильно отличаются?
      Мне показалось, что при помещении события в коллекцию, подписаться на это событие должна коллекция, чтобы при его приеме породить событие для своих подписчиков. Так? А при удалении, коллекция просто "отписывается" от события объекта. Так?
      Правда я так и не понял, причем тут интерфейсы и ушел несколько в другую сторону :)

      Добавлено
      Цитата Romkin @
      Цитата D_KEY @
      "Сишники" не бедные и знакомы с другими языками.
      Как говорится в "старой" поговорке, "любой уважающий себя сишник знает ещё с десяток других языков, главным образом для того, чтобы их обсирать".

      Скорее даже можно сказать, что с каждым языком они пытаются работать точно как с С++ :) И когда это не получается - начинают обсирать. "Если это выглядит иначе, чем в С++ - значит, это неверно. Аминь".

      :no: смотри выше. В данной серии холиваров я просто никак не могу понять, где и зачем можно применить Delphi.

      Добавлено
      Цитата Flex Ferrum @
      Цитата Romkin @
      Понимаешь, тут меня все толкают на то, что создание и инициализация - это конструктор. Ну я и пытаюсь объяснить, так чтобы поняли, что создание и инициализация - разные этапы. Создание - сразу всего объекта, а потом остается его инициализировать как надо, это уже программист пишет. И тут его воля, хочет - вызовет инициализацию от TAbstractButton, хочет - напрямую поле установит. Если долезет, конечно.

      Понимаю. C++ тоже есть подобное разделение. Отдельно - аллокация (опционально), отдельно - конструирование, оно же инициализация.

      А у них, как я понимаю, не "оно же"
      Сообщение отредактировано: D_KEY -
        Цитата Flex Ferrum @
        Да вроде от рождения стандарта была.

        Что-то я про новый стандарт читал... Новый стандарт Strongly typed enums. Не?
          Цитата D_KEY @
          А у них, как я понимаю, не "оно же"

          Угу. :) В итоге имеем пенальти на двойной инициализации. :D

          Добавлено
          Цитата Romkin @
          Что-то я про новый стандарт читал... Новый стандарт Strongly typed enums. Не?

          Не. Это про другое.
            Цитата Romkin @
            Новый стандарт Strongly typed enums. Не?
            Это некоторое ужесточение контроля.
              Цитата D_KEY @
              Я в очередной раз забыл механизм событий в Delphi, но помню шарповый, они сильно отличаются?
              Мне показалось, что при помещении события в коллекцию, подписаться на это событие должна коллекция, чтобы при его приеме породить событие для своих подписчиков. Так? А при удалении, коллекция просто "отписывается" от события объекта. Так?
              Правда я так и не понял, причем тут интерфейсы и ушел несколько в другую сторону

              Ну на интерфейсах у меня получилось естественных образом, поскольку сисадмин юзает vbs :) И обсервер для событий соответственно есть ужо. Но на чистом Delphi это эквивалентно: в метод IPing подается интерфейс с методом обратного вызова.
              Интерфейс мне позволил обрамить интерфейс враппером-элементом коллекции, ничего не зная при этом о классе-реализаторе.
              Мнемонически где-то так:
              ExpandedWrap disabled
                type
                  TCollectionItem = class(TInterfacedObject, IPing)
                  private
                    FPing: IPing;
                    FCollection: ICollection;
                  protected
                    property Ping: IPing read FPing implements IPing;
                  public
                    constructor Create(ACollection: ICollection; APing: IPing);
                    destructor Destroy; override;
                  end;
                 
                implementation
                 
                  constructor TCollectionItem.Create(ACollection: ICollection; APing: IPing);
                  begin
                    inherited Create;
                    FPing := APing;
                    FCollection := ACollection;
                    //...
                    FPing.RegisterCallback(FCollection.OnPing);
                  end;
                 
                  destructor TCollectionItem.Destroy;
                  begin
                    FPing.UnregisterCallback(FCollection.OnPing);
                    inherited;
                  end;

              Собственно все. Элемент коллекции реализует IPing. В реале чуть сложнее, там у элемента нет подсчета ссылок, его коллекция уничтожает. Ну и коллбек посложнее...
                Romkin, так а на абстрактных классах почему нельзя будет также сделать? Или я опять запутался и мы не о том спорили :D ?
                  Цитата D_KEY @
                  смотри выше. В данной серии холиваров я просто никак не могу понять, где и зачем можно применить Delphi.

                  Дык понятно, зачем нужен другой язык, если есть С++ :)
                  Видишь ли, мы уже спорим очень долго, что само по себе указывает на тот факт, что на Delphi можно делать почти то же, что на С++. Просто на нем это можно делать проще и с удобствами для программиста. Естественно, за удобства надо платить, но эта плата невелика и все больше нивелируется. И исповедовать принцип минимализма всегда я не буду :)
                  Особенно если учесть, что Delphi в область драйверов и микроконтроллеров не суется.

                  Добавлено
                  Цитата D_KEY @
                  Romkin, так а на абстрактных классах почему нельзя будет также сделать? Или я опять запутался и мы не о том спорили

                  Хм. Ну покажи, как можно уничтожить TCollectionItem, оставив от него часть, которая реализует функциональность IPing?
                  У меня-то все понятно: он делегировал этот функционал объекту, который уже есть, причем без доступа к коду этого объекта и без своей реализации интерфейса.
                    Цитата Romkin @
                    Это не является необходимостью.
                    Тогда зачем в Delphi запихнули ненужную вещь? ;)
                      D_KEY, а, и учти еще, что у меня в этом коде все защищено: объект, реализующий IPing, не уничтожится пока он есть в коллекции.

                      Добавлено
                      Цитата trainer @
                      Тогда зачем в Delphi запихнули ненужную вещь?

                      А зачем вам
                      Цитата trainer @
                      Новый стандарт Strongly typed enums. Не?
                      Это некоторое ужесточение контроля.

                      :)
                      strict private - это именно ужесточение контроля.
                        Цитата Romkin @
                        Хм. Ну покажи, как можно уничтожить TCollectionItem, оставив от него часть, которая реализует функциональность IPing?

                        Если взять во внимание тот факт, что в С++ конструкторы/деструкторы - фактически создают/разушают объект, а в делфи - Конструкторы/деструкторы - ничего не создают/разрушают, а всеголишь инициализируют/деинициализируют, то в С++, конструктор заменяется на любой метод, деструктор заменяется на любой метод, допустим их можно обозвать Initialize/Deinitialize вот и все...
                        Сообщение отредактировано: KILLER -
                          Цитата Romkin @
                          Хм. Ну покажи, как можно уничтожить TCollectionItem, оставив от него часть, которая реализует функциональность IPing?

                          А вот мне интересно посмотреть на код конструктора какого-нибудь делфийского класса, у которого есть нетривиальные базовые классы, требующие недефолтной инициализации своих мемберов.
                            Цитата Romkin @
                            и учти еще, что у меня в этом коде все защищено: объект, реализующий IPing, не уничтожится пока он есть в коллекции.
                            Подсчет ссылок - это секретная технология Delphi, недоступная в других языках. :D
                              Цитата Flex Ferrum @
                              А вот мне интересно посмотреть на код конструктора какого-нибудь делфийского класса, у которого есть нетривиальные базовые классы, требующие недефолтной инициализации своих мемберов.

                              Хватит ходить вокруг да около :)
                              Да и хватит уже беседовать конструкторах, было уже. Мне очень трудно вообразить себе класс с таким нетривиальным базовым классом. Нужно недефолтное - сделай в конструкторе, наследник его вызовет. Если уж совсем приперло - перекрываешь NewInstance, это виртуальный метод.

                              Добавлено
                              Цитата trainer @
                              Подсчет ссылок - это секретная технология Delphi, недоступная в других языках.

                              Э, батенька. У вас классы тоже автоматом уничтожаются при выходе из области видимости. Вопрос тут не в этом, а в том, сколько чего понадобится нацеплять в С++. :)
                                Цитата Romkin @
                                Да и хватит уже беседовать конструкторах, было уже. Мне очень трудно вообразить себе класс с таким нетривиальным базовым классом. Нужно недефолтное - сделай в конструкторе, наследник его вызовет.

                                Да вот мне интересно - как? :) И чем это тогда отличается от сборки экземпляров классов "из предков"? :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 208 209 [210] 211 212 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5546 ]   [ 15 queries used ]   [ Generated: 1.08.26, 10:27 GMT ]