Пятница, 20 Декабря 2024, 21:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Суть использования своих модулей в Delphi
GameMixДата: Воскресенье, 17 Июня 2012, 13:07 | Сообщение # 1
старожил
Сейчас нет на сайте
Всем привет.
Заметил, что во многих примерах для Delphi вместо того, чтобы писать код прямо в основной части, его выносят в отдельные unit'ы и потом подключают в uses.
Так вот вопрос: только ради удобства или есть ещё какие причины?


Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Воскресенье, 17 Июня 2012, 13:31
BASSДата: Воскресенье, 17 Июня 2012, 13:17 | Сообщение # 2
independent developer
Сейчас нет на сайте
1)Компактность и чистота кода - в главном модуле только вызовы функций, описанных в других модулях.
2)Области видимости - в главном модуле доступны только необходимые переменные и функции.
3)'Умная' линковка (SmartLink) - ненужные функции из модулей не линкуются с готовым *.exe-файлом.
4)Можно через инструкции initialization и finalization назначить модулю действия при запуске программы, и, соответственно, при завершении.

Добавлено (17.06.2012, 13:17)
---------------------------------------------
Может, у меня память плохая, но я не помню, чтобы на каждый компонент свой модуль создавался... При чём здесь компоненты?


Будь подобен лезвию бритвы: ярким, блестящим, отточенным, но холодным и не показывающим своего истинного цвета.

Сообщение отредактировал BASS - Воскресенье, 17 Июня 2012, 13:15
daunДата: Воскресенье, 17 Июня 2012, 13:23 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Просто, один раз написал, функцию, класс, интерфейс, давно забыл, как там все устроено, и все ровно продолжаешь использовать в разных проектах.
GameMixДата: Воскресенье, 17 Июня 2012, 13:31 | Сообщение # 4
старожил
Сейчас нет на сайте
BASS, сорри, перепутал название angel

Steel Standoff - 2D аркада.
Мои статьи
BasselДата: Воскресенье, 17 Июня 2012, 13:42 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Quote (GameMix)
только ради удобства или есть ещё какие причины?

ООП smile


Сообщение отредактировал Bassel - Воскресенье, 17 Июня 2012, 13:43
TimKruzДата: Воскресенье, 17 Июня 2012, 13:58 | Сообщение # 6
старожил
Сейчас нет на сайте
GameMix, ещё свой модуль можно скомпилировать (получить dcu) и отправить другому программисту. Он сможет использовать твои функции и компилировать всё в один exe, но не сможет изменить исходный код. А ты вставляешь в этот модуль свои копирайты. biggrin
Quote (BASS)
1)Компактность и чистота кода - в главном модуле только вызовы функций, описанных в других модулях.

Ну вообще для этого не обязательно использовать модули, можно распределить код по нескольким файлам и в основном в нужных местах вставить директиву включения другого файла. А в CodeGear RAD Studio Delphi доступно сворачивание кода, например, свернуть большое тело процедуры в один заголовок.
Quote (Bassel)
ООП

Модульность программы не имеет отношения к объектно-ориентированному программированию. Можно написать программу вообще без модулей, но с использованием классов и объектов. А можно написать структурно-ориентированную программу с модулями.
Quote (BASS)
3)'Умная' линковка (SmartLink) - ненужные функции из модулей не линкуются с готовым *.exe-файлом.

Не знал, не знал... Тогда почему стандартные модули (не все, конечно), если их просто подключить, но не использовать, сильно увеличивают размер exe? У них там что, initialization и finalization по 100 КБ (после компиляции) каждый? wacko




Сообщение отредактировал TimKruz - Воскресенье, 17 Июня 2012, 14:03
BASSДата: Воскресенье, 17 Июня 2012, 14:14 | Сообщение # 7
independent developer
Сейчас нет на сайте
Quote (TimKruz)
распределить код по нескольким файлам и в основном в нужных местах вставить директиву включения

Файлы разные, а для компилятора область видимости одна.
Quote (TimKruz)
Тогда почему стандартные модули (не все, конечно), если их просто подключить, но не использовать, сильно увеличивают размер exe? У них там что, initialization и finalization по 100 КБ (после компиляции) каждый?

Просто там те самые *.dcu линкуются без разбору - надо, не надо, всё засунем. Размер кода, быстродействие не так ценятся, как время недопрограммиста.
В Делфи ещё ничего, в Lazarus пустая заготовка после компиляции 5 Мб (!) весит. В итоге выдернул я оттуда компилятор и работаю с ним через командную строку. Без компонентов и формочек.


Будь подобен лезвию бритвы: ярким, блестящим, отточенным, но холодным и не показывающим своего истинного цвета.
GameMixДата: Воскресенье, 17 Июня 2012, 14:33 | Сообщение # 8
старожил
Сейчас нет на сайте
Quote (BASS)
4)Можно через инструкции initialization и finalization назначить модулю действия при запуске программы, и, соответственно, при завершении.

Пока не знаю, где мне это может пригодиться, но время покажет smile
Остальные причины понятны. Значит, на быстродействии значительно это не скажется?


Steel Standoff - 2D аркада.
Мои статьи
BASSДата: Воскресенье, 17 Июня 2012, 14:58 | Сообщение # 9
independent developer
Сейчас нет на сайте
GameMix,
1) пример: открыть файл лога на запись при старте и закрыть его же при завершении - очень удобно прописать прямо в модуле лога.
2) маловероятно. Это, в основном, для удобства.


Будь подобен лезвию бритвы: ярким, блестящим, отточенным, но холодным и не показывающим своего истинного цвета.
GameMixДата: Воскресенье, 17 Июня 2012, 15:02 | Сообщение # 10
старожил
Сейчас нет на сайте
BASS, понятно.
TimKruz, BASS, спасибо smile


Steel Standoff - 2D аркада.
Мои статьи
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг