Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 27 28 [29] 30 31 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#421
,
|
|
|
|
KILLER, да все что угодно, любые глобальные объекты можно инициализировать, что-нибудь где-нибудь зарегистрировать, в общем, любой код который должен выполняться при запуске и при завершении работы приложения. Модуль позволяет выполнить такие стартовые и финальные действия.
|
|
Сообщ.
#422
,
|
|
|
|
И да, всё это будет инкапсулировано в модуле.
|
|
Сообщ.
#423
,
|
|
|
|
И на что этот обработчик исключения будет влиять? У вас же как я понимаю в делфях конструкция try/except/finaly неразрывные, тоесть не могут быть размазаны по коду...Цитата DesweR @ Можешь зарегистрировать сообщения, установить обработчик исключений, подменить менеджер памяти, инициализировать пул потоков, да вообще что угодно. Это если объекты этих типов они описаны глобально для модуля? Так ведь глобальные переменые зло, мыж тут вроде ООП обсуждаем... Добавлено Цитата --Ins-- @ KILLER, да все что угодно, любые глобальные объекты можно инициализировать, что-нибудь где-нибудь зарегистрировать, в общем, любой код который должен выполняться при запуске и при завершении работы приложения. Модуль позволяет выполнить такие стартовые и финальные действия. Понятно, и часто вы юзаете глобальные переменные в рамках одного модуля? В С++ они автоматом создаются, если нужно инициализировать, то можно сразу же инициализировать, считай что секций initialization/finalization в С++, это тело неймспейса |
|
Сообщ.
#424
,
|
|
|
|
Цитата KILLER @ И на что этот обработчик исключения будет влиять? Обработчик необработанных исключений, видимо имелся в виду. Ну, или safecall-exception-обработчик. Можно вариантные функции переопределить, например, чтобы при конвертации варианта в строку вызывалась твоя функция. Ну или что-то в этом роде, многие системные функции можно заменить своими совершенно легально Добавлено Цитата KILLER @ если нужно инициализировать, то можно сразу же инициализировать Так циферку или там массив и у нас инициализироват можно, а что, у вас при обявлении, скажем, класса, можно сразу и его методы вызвать? |
|
Сообщ.
#425
,
|
|
|
|
Так ведь у вас же можно через имя модуля вызывать функции? или они должны быть описаны в этих секциях для нормальной компиляции? Допустим если в С++ в глобальном пространстве имен(без неймспейсов) попытаться переопределить системную функцию которая тоже расположена в глобальном пространстве имен, то будет ошибка компиляции, а вот если ее засунуть в свой неймспейс, и вызывать через имя этого неймспейся или внутри него, то уже будет вызвана переопределенная функция.
|
|
Сообщ.
#426
,
|
|
|
|
Можно еще какие-нибудь курсоры/битмапы из ресурсов загрузить...
|
|
Сообщ.
#427
,
|
|
|
|
Цитата KILLER @ И на что этот обработчик исключения будет влиять? У вас же как я понимаю в делфях конструкция try/except/finaly неразрывные, тоесть не могут быть размазаны по коду... Не так понял, я про свои трейсеры исключений. Цитата KILLER @ Это если объекты этих типов они описаны глобально для модуля? Так ведь глобальные переменые зло, мыж тут вроде ООП обсуждаем... Зло конечно, но от него никуда не деться (или как к примеру реализуешь пул потоков?). Цитата KILLER @ Понятно, и часто вы юзаете глобальные переменные в рамках одного модуля? RTL и VCL практически везде |
|
Сообщ.
#428
,
|
|
|
|
Цитата --Ins-- @ +1. Уже устал твердить на разных форумах, что классу просто приписали понятие пространство имен, кое к ООП никакого отношения не имеет. Но ведь иначе нельзя будет заявить что Java/C# - это 100% объектно ориентированные языки. А в этом случае реклама потерпит эпик фэйл и языки не продвинутся на рынок (за счет чего?). Так что это просто дешевая уловка на которую клюют недалекие программисты и менеджеры Добавлено Цитата D_KEY @ Что дают модули(не как единицы трансляции, а на уровне логики), чего не в состоянии обеспечить классы? Всё. Так как задачи у модулей и у классов - совершенно разные ![]() Можно узнать источники информации по данному вопросу? Или это твое личное мнение? И это... Никто не говорит о пространстве имен - это отдельная тема. Ты вообще знаешь что такое модульность? |
|
Сообщ.
#429
,
|
|
|
|
Цитата --Ins-- @ Так циферку или там массив и у нас инициализироват можно, а что, у вас при обявлении, скажем, класса, можно сразу и его методы вызвать? ![]() При объявлении экземпляра класса наверно ты имел ввиду? Ну так ведь конструктор класса вызывается автоматически. |
|
Сообщ.
#430
,
|
|
|
|
как пример: у меня GDI+ инициализируется/финализируется в этих секциях т.е. просто подключил модуль и работаем |
|
Сообщ.
#431
,
|
|
|
|
Цитата KILLER @ Так ведь у вас же можно через имя модуля вызывать функции? или они должны быть описаны в этих секциях для нормальной компиляции? Ну да, то что лежит в интерфейсной секции. |
|
Сообщ.
#432
,
|
|
|
|
Цитата --Ins-- @ Я ответил - все. Все, что делают модули, т.е. содержат различные обявления и реализации. И если ты считаешь что это задача классов, то искренне сочувствую. Гвозди ты тоже лопатой забиваешь? Какие различные объявления и реализации? В ООП просто нет необходимости в таком сборище. В ООП задача решается в терминах объектов и взаимодействия между ними. Для группировки же схожих классов в подсистемы используются неймспейсы и пакеты в стиле Java. Еще раз прошу объяснить, зачем в таком случае нужны модули, ведь достаточно файлов и единиц трансляции. |
|
Сообщ.
#433
,
|
|
|
|
Цитата KILLER @ Так ведь у вас же можно через имя модуля вызывать функции? или они должны быть описаны в этих секциях для нормальной компиляции? Допустим если в С++ в глобальном пространстве имен(без неймспейсов) попытаться переопределить системную функцию которая тоже расположена в глобальном пространстве имен, то будет ошибка компиляции, а вот если ее засунуть в свой неймспейс, и вызывать через имя этого неймспейся или внутри него, то уже будет вызвана переопределенная функция. Ты нефига не понял Допустим есть необработанное исключение. Если оно возникнет, то будет вызвана специальная функция обработчик. Прикол в том, что адрес этой функции хранится в некой глобальной переменной. Возникло необработанное исключение - читаем адрес и вызываем функцию по адресу. Так вот, в модуле system.pas объявлена такая функция по-умолчанию, она показывает окошко об ошибке с текстом runtime-error. А вот модуль, скажем, SysUtils.pas назначает этой переменной адрес своей функции, которая покажет более развернутую информацию об исключении. А вот в модуле специализированной утилиты-построителя отчетов вообще может быть показан навороченный диалог со стеком вызовов и ссылкой на сайт разработчика Понял?Ну, или safecall-исключения можно по другому обрабатывать. По-умолчанию если safecall-вызов привел к исключению, то на вызываемой возбуждается EOleException. Это не всегда удобно, удобнее было бы возбудить то же исключение, что и возникло внутри модуля (если это возможно). Я когда-то писал функцию, которая это делает. Естественно ее нужно установить в initialization Добавлено Цитата Shaggy @ как пример: у меня GDI+ инициализируется/финализируется в этих секциях т.е. просто подключил модуль и работаем Хороший пример |
|
Сообщ.
#434
,
|
|
|
|
Цитата --Ins-- @ 1. Модуль - это единица компиляции 2. Разделение интерфейса от реализации (вот если бы это было в C# - я бы значительно меньше имел против него, но мне очень не нравится необходимость писать код прямо внутри объявления класса) 3. Возможность объявить implementation-only идентификаторы (функции, переменные, типы) Для этого достаточно единиц трансляции. Модули, как логическая сущность не нужны Цитата 4. initialization/finalization-секции. Классовые конструкторы/деструкторы не заменяют эти возможности, но могут удачно дополнять. Приведи пример, демонстрирующий необходимость подобного механизма. Постараюсь ответить. |
|
Сообщ.
#435
,
|
|
|
|
Цитата Shaggy @ как пример: у меня GDI+ инициализируется/финализируется в этих секциях т.е. просто подключил модуль и работаем Оно ведь как я понимаю реализовано с помощью классов? У вас ведь деструкторы/конструкторы автоматом вызываюца Скрытый текст Вотето вы строчите... за вами не успеваю |