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

    и тип каких данных описывает этот класс? =)

    заодно напомню слова Qraizer'а: "Класс - это не тип данных. Он может быть использован для создания типов данных, но это небольшая частность."
      Цитата korvin @
      заодно напомню слова Qraizer'а: "Класс - это не тип данных. Он может быть использован для создания типов данных, но это небольшая частность."

      Он говорил о специфики С++, где class может использоваться и для других целей.
        Цитата korvin @
        там написано "class A". очевидно, что это класс
        Открываем стандарт C++ и смотрим пункт 3.9.2 Compound types.
          Цитата D_KEY @
          Он говорил о специфики С++, где class может использоваться и для других целей.

          а KILLER разве не на C++ код привел? кроме того, Qraizer упомянул, что это относится и к делфи, я просто не стал тот кусок приводить, можешь глянуть, это вроде на 129-й странице. вот про C# не сказал =)
            Цитата korvin @
            там написано "class A". очевидно, что это класс.

            class - переводится как тип.
              Цитата trainer @
              Цитата korvin @
              там написано "class A". очевидно, что это класс
              Открываем стандарт C++ и смотрим пункт 3.9.2 Compound types.

              дык сразу ссылку бы дал, или ты пункты на память помнишь? или у тебя он на бумаге?
                Цитата --Ins-- @
                D_KEY, вернемся к нашим баранам.... Про класс дл работы с GDI+... Опиши еще раз, подробнее, что этот класс у тебя будет делать. Интерфейс его приведи, если так угодно

                Все, что умеет делать GDI+. Мы, наверно, не совсем друг друга понимаем, да и не работал я с GDI+ уже давно...
                Если же ты собираешься использовать GDI+ непосредственно в высокоуровневом коде и это будет размазано по всему коду, то можно произвести инициализацию при запуске программы, хоть в main.
                Можешь завести отдельный класс инициализации.

                Добавлено
                --Ins--, каким образом вы вообще работаете именно с GDI+, а не с GDI?
                  Цитата korvin @
                  дык сразу ссылку бы дал, или ты пункты на память помнишь? или у тебя он на бумаге?
                  Ссылки у меня нет. Есть файл. Из заголовка пункта и контекста неясно, о чем там написано? Класс в C++ - частный случай составного(пользовательского) типа

                  Добавлено
                  Кстати, сразу же в начале стандарта в пункте 1.1 написано буквально:
                  Цитата
                  In addition to the facilities provided by C, C++provides additional data types, classes, templates, exceptions, namespaces, inline functions, ...
                  Сообщение отредактировано: trainer -
                    Цитата D_KEY @
                    Все, что умеет делать GDI+


                    Все???? :blink: Неслабо перегруженный класс у тебя получится

                    Цитата D_KEY @
                    то можно произвести инициализацию при запуске программы, хоть в main.


                    Можно, никто не спорит, но вот оно преимущество юнитов как вещи в себе - подключил и используй, написав просто uses. А юнит о необходимой инициализации финализации сам позаботится. Тут и модульность, и инкапсуляция, и разделение обязанностей, и декомпозиция. Слукавишь, если будешь утверждать обратное ;) Тут есть некоторая аналогия с подключением библиотеки DLL - у них тоже м.б. код собственной инициализации/финализации, скрытый в ее недрах, но ты просто пишешь LoadLibrary не волнуясь о том, что необходимо еще сделать для правильной работы. И кстати, такой подход вполне себе здорово дополняет ОО-подход. Объектный и модульный подход сочетаются замечательно, в то время как собственно объектный подход, который обеспечивается в недообъектных языках (но выдающих себя за такие) в сравнении с ним костылен.

                    Цитата D_KEY @
                    Можешь завести отдельный класс инициализации.


                    Вот меня это всегда и умиляло :D Еще заведи класс отдельный для финализации, для выделения памяти объектов GDI+, для освобождения, для слежения за хэндлами, и еще сотню-другую классов, выполняющих различные сервисные действия, потом их сосчитай и ужаснись :D Не видишь костыльности НЕОБХОДИМОСТИ плодить сущности в программной модели в сравнении с модулями, которые эту необходимость не вызывают?

                    Цитата D_KEY @
                    --Ins--, каким образом вы вообще работаете именно с GDI+, а не с GDI?


                    Все типы GDI+ MS предоставляет сама (кисти, перья, холсты и т.д.). В Delphi над ними сделана объектная обертка. Кстати, еще одно подтверждение богатства объектной модели Delphi. MS требует выделять и освобождать память для объектов GDI+ специальными функциями. В Delphi это нисколько не мешает использовать обычные классы, просто перекрыв в их общем предке NewInstance/FreeInstance
                    Сообщение отредактировано: --Ins-- -
                      Цитата --Ins-- @
                      вот оно преимущество юнитов как вещи в себе - подключил и используй, написав просто uses.
                      Ну прям эксклюзив дельфийских юнитов. :D
                        Цитата trainer @
                        Ну прям эксклюзив дельфийских юнитов.


                        По вашим комментами именно такое впечатление и создается, особенно по таким:
                        Цитата D_KEY @
                        то можно произвести инициализацию при запуске программы, хоть в main.
                        :D
                          Ну так вам уже демонстрировался аналог Initialization/Finalization. Это надо повторять каждые 10 страниц?
                            Цитата KILLER @
                            class - переводится как тип.

                            class переводится как "класс".
                            type переводится как "тип".
                              Цитата --Ins-- @
                              Цитата D_KEY @
                              Все, что умеет делать GDI+


                              Все???? :blink: Неслабо перегруженный класс у тебя получится

                              Все, что тебе от него нужно. Извини, мое восприятие несколько искажено тем, что я никогда не использую некроссплатформенные технологии напрямую :(
                              То есть обертка была бы в любом случае.

                              Цитата
                              Цитата D_KEY @
                              то можно произвести инициализацию при запуске программы, хоть в main.


                              Можно, никто не спорит, но вот оно преимущество юнитов как вещи в себе - подключил и используй, написав просто uses. А юнит о необходимой инициализации финализации сам позаботится.

                              А, ну так для этого можешь создать соответствующий класс, отвечающий за инициализацию:
                              Интерфейс:
                              ExpandedWrap disabled
                                #pragma once
                                 
                                class GDIP_initializer
                                {
                                    GDIP_initializer();
                                    ~GDIP_initializer();
                                 
                                    static GDIP_initializer s_initializer;
                                };


                              Реализация:
                              ExpandedWrap disabled
                                GDIP_initializer GDIP_initializer::s_initializer = GDIP_initializer();
                                 
                                GDIP_initializer::GDIP_initializer()
                                {
                                    // инициализация
                                }
                                 
                                GDIP_initializer::~GDIP_initializer()
                                {
                                    // деинициализация
                                }


                              Цитата
                              Тут и модульность, и инкапсуляция, и разделение обязанностей, и декомпозиция. Слукавишь, если будешь утверждать обратное ;)

                              Зачем мне утверждать обратное? Я говорю о том, что все тоже самое умеют делать классы.

                              Цитата
                              Тут есть некоторая аналогия с подключением библиотеки DLL - у них тоже м.б. код собственной инициализации/финализации, скрытый в ее недрах, но ты просто пишешь LoadLibrary не волнуясь о том, что необходимо еще сделать для правильной работы.

                              Заметь, что это да и весь твой пример не имеют к ООП никакого отношения и являются следствием процедурного подхода и глобальных инициализаций/финализаций.

                              Цитата
                              И кстати, такой подход вполне себе здорово дополняет ОО-подход.
                              Каким образом.

                              Цитата
                              Вот меня это всегда и умиляло :D Еще заведи класс отдельный для финализации, для выделения памяти объектов GDI+, для освобождения, для слежения за хэндлами, и еще сотню-другую классов, выполняющих различные сервисные действия, потом их сосчитай и ужаснись :D
                              Конечно, я так и сделаю, ибо не хочу вручную заниматься слежением за памятью, хендлами и выполнять другие сервисные действия, которые можно вынести под контроль отдельных объектов, которые будут делать это автоматически, безопасно(с точки зрения исключений) и не требовать моей ручной работы и копипасты.

                              Цитата
                              Не видишь костыльности НЕОБХОДИМОСТИ плодить сущности в программной модели в сравнении с модулями, которые эту необходимость не вызывают?

                              Нет никакой необходимости. Не хочешь плодить - вызови вручную.
                                Цитата korvin @
                                class переводится как "класс".
                                type переводится как "тип".

                                тип RUS->EN, class EN->RUS, type EN->RUS, класс RUS->EN
                                Этого будет достаточно в качестве аргументов?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 132 133 [134] 135 136 ...  494 495


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