Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Перечисление модулей в implementation и interface


Автор: dizzy1984 20.4.2009, 07:24
В чем отличие объясните.

Автор: pseud 20.4.2009, 10:08
Цитата

•  Раздел интерфейса (interface). После оператора unit следующей функцио
нальной строкой должен быть оператор interface. Все, что находится между
этой строкой и оператором implementation данного модуля, доступно извне
и может использоваться другими модулями и программами. Именно в таком
разделе описываются типы данных, константы, переменные, процедуры и
функции, которые должны быть доступны программе или другим модулям.
В этом разделе допустимы только объявления (но не реализация!) функций и
процедур. Сам оператор interface занимает отдельную строку и содержит
единственное ключевое слово:
  interface
•  Раздел реализации (implementation) следует за разделом интерфейса и начи
нается оператором implementation. Хотя основное содержимое этой части
модуля составляют тела описанных ранее процедур и функций, здесь также
можно определять типы данных, константы и переменные, которые будут дос
тупны только в пределах данного модуля. Сам оператор implementation за
нимает отдельную строку и содержит единственное ключевое слово:
  implementation


Добавлено @ 10:15
Цитата

В разделе uses перечисляются модули, которые будут включены в данную про
грамму (или в модуль). Например, если в программе FooProg используются функции
или типы данных из двух модулей — UnitA и UnitB, — то раздел uses этой программы
должен выглядеть следующим образом:
Код

Program FooProg;
uses
  UnitA, UnitB;

Модули могут содержать два раздела uses: один — в разделе interface, а другой —
в разделе implementation.
Вот пример простейшего модуля:
Код

Unit FooBar;
interface
uses BarFoo;
  { Объявления открытых элементов (public) }
implementation
uses BarFly;
  { Объявления закрытых элементов (private) }
initialization
  { Код инициализации }
finalization
  { Код завершения }
end.

Иногда может возникнуть ситуация, когда модуль UnitA использует модуль UnitB,
а тот в свою очередь — модуль UnitA. Обычно наличие подобных взаимных ссылок
(circular unit reference) свидетельствует о просчетах на этапе проектирования струк
туры приложения. Этого следует избегать. Устранить данную проблему можно создав
третий модуль, в состав которого войдут все необходимые функции и процедуры обо
их модулей. Если же по какимлибо соображениям это невозможно (например, модули
достаточно велики), переместите один из разделов uses в раздел implementation
модуля, а другой оставьте в разделе interface. Зачастую это решает проблему.

Автор: dizzy1984 20.4.2009, 11:01
Если я правильно понял, то это звучит как "перечисление модулей в списке uses секции interface необходимо для возможности компилирования типов данных, констант, переменных, функций и процедур в секции interface и секции implementation ". "Перечисление модулей в списке uses секции implementation необходимо для возможности компилирования типов данных, констант, переменных, функций и процедур в секции implementation и никак не влияет на секцию interface"?

Автор: mes 20.4.2009, 23:11
в грубом изложение да

Автор: bems 20.4.2009, 23:26
где возможно включай в implementation, и только там где по-другому не работает - в interface

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)