Навигация
Главная
Поиск
Форум
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
Создание отчето... 63901
Модуль Forms 63635
ТЕХНОЛОГИИ ДОСТ... 60479
Пример работы с... 59857
Имитационное мо... 55948
Реклама
Сейчас на сайте
Гостей: 17
На сайте нет зарегистрированных пользователей

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

Моделирование круглосуточного интернет кафе на GPSS + Отчет
Двунаправленный динамический список на Delphi + Блок схемы
Принадлежит ли точка пересечению двух окружностей на Turbo Pascal + Отче...

Реклама



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

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

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

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


Комментарии
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...
Шаблон для новост...

Случайные загрузки
Delphi 7: Для про...
Counter [Исходник...
Отключение и вклю...
CoolDev TipsSyste...
IIIDTrans
Заставка. Изображ...
Проигрыватель Mp3
База данных: Книж...
PHP: настольная к...
C++ Стандартная б...
Введение в станда...
Delphi 2006 - Спр...
AJAX и PHP. разра...
PHP 5. Практика с...
UmEdit
Sztransppanel
Работа с базами д...
Win-Prolog 3.618
StartMark
Printgrid

Топ загрузок
Приложение Клие... 100449
Delphi 7 Enterp... 85814
Converter AMR<-... 20067
GPSS World Stud... 12518
Borland C++Buil... 11575
Borland Delphi ... 8504
Turbo Pascal fo... 7023
Visual Studio 2... 4989
Калькулятор [Ис... 4739
FreeSMS v1.3.1 3536
Случайные статьи
Область построения...
Введение в язык XSLT
Поле приоритета вк...
На что потратить в...
СИСТЕМА ОБСЛУЖИВАН...
Дополнительные фак...
Применение различн...
Частный сектор Абх...
Большинство соврем...
Особенности органи...
Дополнительные вст...
OpenGL. Шесть куби...
5.1.1. Вывод термов
Работа со списками...
Вычисление суммы ч...
Оборудование для у...
Предварительно обд...
Error In Integer c...
При хакинге Xbox п...
Создание проекта и...
Типы данных в Orac...
Логическая бомба н...
Листинг 9.2. После...
Межпроцессовые вза...
Список тем для изу...
Статистика



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


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