Модульность
Модульность – это разделение программы на фрагменты, которые компилируются по отдельности, но могут устанавливать связи с другими модулями.
Правильное разделение программы на модули является почти такой же сложной задачей, как выбор правильного набора абстракций.
Модули выполняют роль физических контейнеров, в которые помещаются определения классов и объектов при логическом проектировании системы.
Для небольших задач допустимо описание всех классов и объектов в одном модуле. Однако для большинства программ лучшим решением будет сгруппировать в отдельный модуль логически связанные классы и объекты, оставив открытыми те элементы, которые совершенно необходимо видеть другим модулям.
Модульность – это свойство системы, которая была разложена на внутренние связные, но слабо связанные между собой модули.
Структура модуля в Object Pascal
В ObjectPascal модуль – это самостоятельная языковая конструкция. В этом языке интерфейс модуля отделен от его реализации. Т.е. модульность и инкапсуляция ходят рука об руку.
Структура модуля имеет следующий вид:
Unit<имя библиотечного модуля>;
Interface{интерфейсная секция}
<заголовок процедуры с указанием параметров>;
<заголовок функции с указанием параметров>;
…
Implementation {секция реализации}
<заголовок и тело процедуры с указанием параметров>;
<заголовок и тело функции с указанием параметров>;
…
Раздел Unitсодержит имя библиотечного модуля.
В интерфейсной секции описываются те константы, типы, переменные, процедуры и функции, которые являются глобальными, т.е. доступны основной программе или модулю, которые используют данный модуль.
В секции реализации определяются тела всех глобальных процедур и функций. В ней также описываются константы, переменные, процедуры и функции, являющиеся локальными, т.е. недоступными основной программе.
Области видимости
При описании нового класса важен разумный компромисс. С одной стороны, требуется скрыть от других методы и поля, представляющие собой внутреннее устройство класса (для этого и придуманы свойства). Маловажные детали на уровне пользователя объекта будут бесполезны и только помешают целостности восприятия.
С другой стороны, если слишком ограничить набор инструментальных средств и свободу маневра данный класс не будет использоваться для дальнейшей работы.
В модели объектов языка ObjectPascalсуществует механизм доступа к составным частям объекта, определяющий области, где ими можно пользоваться (области видимости). Это можно делать с помощью директив Private, Protected и Public.
Поля, свойства и методы, находящиеся в секции Public не имеют ограничений на видимость. Они доступны из других функций и методов объектов, как в данном модуле, так и во всех прочих, ссылающихся на него.
Поля, свойства и методы, находящиеся в секции Private доступны только в методах класса и функциях, содержащихся в том же модуле, что и описываемый класс. Такая директива позволяет полностью скрыть детали внутренней реализации класса. Свойства и методы из секции private можно изменять, и это не будет сказываться на программы, работающих с объектами этого класса.
Поля, свойства и методы секции protected также доступны только внутри модуля с описываемым классом. Но – и это самое главное – они доступны в классах, являющихся потомками данного класса, в том числе и в других модулях.