Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 62781
Создание отчето... 62757
ТЕХНОЛОГИИ ДОСТ... 59298
Пример работы с... 57996
Имитационное мо... 54669
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

Пользователей: 13,071
новичок: virtualight
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Игра Sokoban на Delphi + Блок схемы
Моделирование работы крупного аэропорта на GPSS + Пояснительная записка
Моделирование процесса передачи данных по магистрали с основным и резерв...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Программы и модули
Большую программу невозможно написать, не разбив ее на части. До сих пор мы изучали механизмы логической декомпозиции программы: классы и функции. Однако большие программы требуется разбивать на части еще и физически. Обычно отдельная часть большой программы называется модулем. Разбиение программы на части выгодно по многим причинам: отдельные части крупного проекта могут одновременно разрабатываться разными программистами; с небольшим модулем быстрее и удобнее работать; разбиение способствует инкапсуляции, что облегчает обнаружение и исправление ошибок.
Разделить программу на части — это только половина работы. Отдельные модули сами по себе функционировать не будут — программу требуется снова собрать в единое целое. Обычно сборка осуществляется одним из двух способов: во-первых, можно объединить исходные тексты, во-вторых, программу собрать можно и из объектных модулей. Объектный модуль — это результат трансляции одного модуля. Такой способ называется раздельной трансляцией.
Основным достоинством первого подхода является простота, а главный недостаток — необходимость транслировать большую программу. Этот процесс может занимать очень много времени.
Во втором варианте объединяются объектные модули. Собственно, этот способ и был придуман для того, чтобы избежать трансляции всей программы целиком. Процесс сборки программы из объектных модулей называется компоновкой, и выполняет эту работу специальная программа, которая обязательно входит в состав любой системы программирования. Эта программа называется компоновщиком, но программисты часто называют ее линкером (linker).
При компоновке в программу собираются не только разработанные нами модули, но и стандартные модули. Стандартные модули, естественно, не транслируются вместе с нашей программой — они поставляются вместе с системой в виде объектных модулей и объектных библиотек. Если вы напишете в программе вызов некоторой стандартной функции, например sqrt(x), то компоновщик разыщет среди стандартных модулей тот, в котором записана эта функция, и присоединит ее к программе.
Обычно в реальном программировании используется сочетание обоих подходов: в единую программу компонуются объектные модули, но отдельный объектный модуль может собираться из нескольких модулей с исходным текстом. В С++ объединение исходных текстов делается с помощью препроцессора.
Таким образом, мы можем разбить большую программу на файлы, оттранслировать их по отдельности, а потом собрать в единое целое. Однако в С++ отсутствуют конструкции для обозначения модуля. Вместо этого в стандарте определено понятие единицы трансляции (см. п. п. 2/1 в [1]). Единица трансляции — это отдельный файл с исходным текстом на С++, который получается после обработки препроцессором. Поэтому в дальнейшем мы будем использовать термины «файл» и «модуль» как синонимы. В С++ отсутствуют также конструкции для сборки объектных модулей в исполняемую программу — это делается средствами интегрированной среды. Обычно в интегрированной среде создается проект, в составе которого указываются все исходные и объектные модули.
ПРИМЕЧАНИЕ
Средства определения и сборки модулей включены во многие языки. В клонах Modula й Oberon модуль является основной конструкцией. В языке Turbo Pascal модуль обозначается зарезервированным словом unit, а использование модуля в программе можно указать директивой uses. В Java модуль (пакет) обозначается зарезервированным словом package, а подключение пакета задается оператором import.

Раздельная трансляция требует согласования объявлений и определений в разных единицах трансляции. Если что-то не согласовано, то мы получим ошибку либо при компиляции, либо при компоновке. Во всех единицах трансляции должны быть согласованы объявления классов, функций, переменных и констант, перечислений, шаблонов и пространств имен.
Опубликовал Kest January 15 2014 15:58:52 · 3 Комментариев · 3702 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
YaXniZkij January 15 2014 17:41:17
Да, хорошую прогу без разбиения на модули не напишешь, это точно)) Помню как я на первом курсе в универе писал жуткого вида РГЗ на 1000 строк и все в одном модуле. Ну и намучился тогда! Зато научился в куче кода искать нужную строчку))
Зато сейчас печалей не знаю. Разбил на модули в каждом модуле своя подпрограмма, решающая конкретную задачу! Удобно!
Роберт January 15 2014 22:31:13
"Разделяй и властвуй" вот мой тезис даже при написании простой программы.
Это правило, которое я выучил сразу. Разделение кода на автономные части дает вам не толь легкую читабельность кода, но и его функциональность в плане повторного использования.
Один раз написав часть кода можно его использовать и в других программах. Тоже относиться и к классам, только там сложнее.
Vladimir B. January 15 2014 23:36:59
Немного сложновата техническая сторона реализации вашей информации, но, думаю это того стоит. Я ошибался раньше, предполагая, что разбивая программу на части, потеряю много времени. Но, ознакомившись с весьма поучительной и полезной информацией из вашей статьи пришел к выводу,что: следуя определенным правилам, от создания большой программы с исходными и объектными модулями будет больше практической пользы.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Animation (Пример...
SendSMS для PHP-F...
Использование Lis...
DemoEdit [Исходни...
iComm v.6.1 - выв...
Работа с картотеками
Indy in Depth Глу...
PHP 5 в подлинник...
DiZsubmit
WAP версия сайта
PDJXPPack
Редактор анимаций
CwstatusBar
Работа с матрицами
RSS Feeds
XPmenu
TmxOutlookBarPro
DateEdit
Dreamsoft Progres...
Измерение тактово...

Топ загрузок
Приложение Клие... 100420
Delphi 7 Enterp... 84874
Converter AMR<-... 20061
GPSS World Stud... 11931
Borland C++Buil... 11401
Borland Delphi ... 8361
Turbo Pascal fo... 7007
Visual Studio 2... 4983
Калькулятор [Ис... 4618
FreeSMS v1.3.1 3529
Случайные статьи
Мультиаккаунты в о...
10.5. Принципы
получателям
Выбор сканирующего...
Охотничье поведени...
Азартные игры Gmsd...
Раскрутка блога в ...
"=" expected
Деревья со ссылками
Про удаленные сервера
Клиенты Windows fo...
Постоянная интеграция
Особенности постро...
Запрос полиморфной...
9.3. Оптимизируем ...
Wizard) 317RPC (Re...
Процедура GETMEM. ...
Практикум 12-1: ра...
Зумирование с фото...
Многостраничные ко...
Онлайновая инфогра...
Главное достоинств...
7.4. Закон Литтла
nonvar(X)
Функция MEMAVAIL. ...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?