Суть использования своих модулей в 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, сорри, перепутал название
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
Bassel | Дата: Воскресенье, 17 Июня 2012, 13:42 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Quote (GameMix) только ради удобства или есть ещё какие причины? ООП
Сообщение отредактировал Bassel - Воскресенье, 17 Июня 2012, 13:43 |
|
| |
TimKruz | Дата: Воскресенье, 17 Июня 2012, 13:58 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| GameMix, ещё свой модуль можно скомпилировать (получить dcu) и отправить другому программисту. Он сможет использовать твои функции и компилировать всё в один exe, но не сможет изменить исходный код. А ты вставляешь в этот модуль свои копирайты. Quote (BASS) 1)Компактность и чистота кода - в главном модуле только вызовы функций, описанных в других модулях. Ну вообще для этого не обязательно использовать модули, можно распределить код по нескольким файлам и в основном в нужных местах вставить директиву включения другого файла. А в CodeGear RAD Studio Delphi доступно сворачивание кода, например, свернуть большое тело процедуры в один заголовок. Модульность программы не имеет отношения к объектно-ориентированному программированию. Можно написать программу вообще без модулей, но с использованием классов и объектов. А можно написать структурно-ориентированную программу с модулями. Quote (BASS) 3)'Умная' линковка (SmartLink) - ненужные функции из модулей не линкуются с готовым *.exe-файлом. Не знал, не знал... Тогда почему стандартные модули (не все, конечно), если их просто подключить, но не использовать, сильно увеличивают размер exe? У них там что, initialization и finalization по 100 КБ (после компиляции) каждый?
Сообщение отредактировал 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 назначить модулю действия при запуске программы, и, соответственно, при завершении. Пока не знаю, где мне это может пригодиться, но время покажет Остальные причины понятны. Значит, на быстродействии значительно это не скажется?
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
BASS | Дата: Воскресенье, 17 Июня 2012, 14:58 | Сообщение # 9 |
independent developer
Сейчас нет на сайте
| GameMix, 1) пример: открыть файл лога на запись при старте и закрыть его же при завершении - очень удобно прописать прямо в модуле лога. 2) маловероятно. Это, в основном, для удобства.
Будь подобен лезвию бритвы: ярким, блестящим, отточенным, но холодным и не показывающим своего истинного цвета.
|
|
| |
GameMix | Дата: Воскресенье, 17 Июня 2012, 15:02 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| BASS, понятно. TimKruz, BASS, спасибо
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
|