Применение готовых и разработанных программистом модулей позволяет эффективно решать задачу повторного использования однажды написанного кода.
23.1. Назначение и структура модулей
Модуляминазывают заранее скомпилированные библиотеки подпрограмм, которые программист может использовать для создания новых программ. При программировании на Паскале модули подключаются из специальных библиотечных файлов, имеющих тип *.tpu(TurboPascalUnit). Модуль сам по себене являетсявыполняемой программой, но его подпрограммы используются другими программами.
Для того, чтобы создать модуль, нужно написать файл с расширением *.pas, соблюдающий описанную далее структуру модуля, затем в менюCompileоболочки Паскаля установить переключательDestinationв значениеDisk(как мы помним, это же нужно сделать, если Вы собираетесь получить из своей программы на Паскале приложение *.exe), затемсобратьмодуль, выбрав в менюCompileпунктBuild. После устранения ошибок компиляции готовый модуль (файл с расширением *.tpu) будет находиться в папке Паскаля.
Как решать уравнения с модулем или Математический торт с кремом (часть 1) | Математика
Структура модуля такова (новые ключевые слова выделены жирным):
константы, типы данных, переменные, процедуры и функции.
Тела общих процедур и функций находятся в разделе реализации.
Раздел интерфейса является общим. В нем можно определить то, что будет
видимо и доступно для любой другой программы (или модуля),
использующей данный модуль. В интерфейсной части может находиться раздел
Uses, если модуль подключает другие модули. В таком случае, слово Uses должно
следовать сразу за словом Interface>
Implementation
объявленных в интерфейсной части.
Раздел реализации является частным. Все объявления, сделанные здесь могут быть
видимы только внутри данного раздела модуля.
Все константы, типы, переменные, процедуры и функции, объявленные в
интерфейсной части видимы в разделе реализации.
В разделе реализации могут находиться ее собственные дополнительные объявления,
невидимые любым программам, использующим модуль.
Раздел Uses может находиться в части реализации сразу после
зарезервированного слова Implementation.
объявлению в разделе интерфейса>
значения данным модуля, открывать используемые им файлы, если таковые есть,
Для работы с координатами точек на плоскости создадим простейший модуль и вызовем его подпрограммы его при написании новой программы:
type point = array [1..2] of real;
procedure put (var p:point;x,y:real);
function distance (p1,p2:point):real;
function corner (p1:point):integer;
procedure put (var p:point;x,y:real);
function distance (p1,p2:point):real;
function corner (p1:point):integer;
if p1[1]>0 then begin
if p1[2]>0 then corner:=1
if p1[2]>0 then corner:=2
Наш модуль определяет тип данных Point(точка) как массив из 2 вещественных чисел. Процедураputпозволяет задать для точки значенияx- иy-координаты, функцияdistanceвозвращает расстояние между двумя точками, а функцияcorner– номер координатной четверти, в которой находится точка, или 0, если точка лежит на одной из осей координат. Разумеется, реальные модули могут включать сотни функций, если предметная область, которую они моделируют, достаточно сложна. Теперь напишем маленькую тестовую программу, использующую наш модуль:
Создание модулей на языке Pascal
writeln (‘Расстояние от A до B=’,distance(a,b):8:3);
writeln (‘Номер координатной четверти для A=’,corner(a));
Оператор uses, подключающий модуль, указан в первой строке программы. Во время компиляции этой программы в текущем каталоге должен присутствовать файлpoints.tpu, содержащий созданный ранее модульPoints.
При сборке сложной программы Паскаль ищет модули только в тех папках, которые перечислены в поле ввода Unit directoriesокнаDirectoriesверхнего менюOptions, поэтому все готовые модули следует либо помещать в одну из этих папок, либо дописать в поле ввода нужные пути к папкам. В Приложении 4 приводится полный листинг модуля для работы с «мышью» из программы на Паскале и тесты для него.
Источник: studfile.net
Модульность
С выходом JDK 9 в языке Java появилась новая возможность — модульность. Модульность позволяет разбить код на отдельные структурные единицы — модули. Фактически модуль представляет группу пакетов или ресурсов, объединенных в одно целое и к которым можно обращаться по имени модуля.
До Java 9 было несколько уровней инкапсуляции функционала. Первый уровень представлял класс, в котором мы могли определить переменные и методы с различным уровнем доступа. Следующий уровень представлял пакет, который, в свою очередь, представлял коллекцию классов. Однако со временем этих уровней оказалось недостаточно. И модуль стал следующим уровнем инкапсуляции, который объединял несколько пакетов.
Модуль состоит из группы пакетов. Также модуль включает список все пакетов, которые входят в модуль, и список всех модулей, от которых зависит данный модуль. Дополнительно (но необязательно) он может включать файлы ресурсов или файлы нативных библиотек.
В качестве названия модуля может использоваться произвольный идентификатор из алфавитно-цифровых символов и знаков подчеркивания. Но рекомендуется, чтобы название модуля соответствовало названию, которого начинаются пакеты этого модуля.
Определим и используем простейший модуль. Допустим, файлы с исходными кодами помещаются в папку C:java (либо какую-нибудь другую папку на жестком диске). Создадим в этой папке каталог, который назовем demo . Этот каталог будет представлять модуль.
В каталоге demo определим новый файл module-info.java со следующим кодом:
module demo
Этот файл представляет дескриптор модуля (module descriptor). Этот файл может содержать только определение модуля.
С помощью ключевого слова module определяется модуль, который называется demo, то есть так же, как и каталог, в котором данный файл расположен. После имени модуля с помощью фигурных скобок можно определить тело модуля, но в данном случае код модуля не содержит никаких инструкций.
Далее в каталоге demo создадим папку com . В папке com создадим папку metanit , а в папке com/metanit — папку hello .
В папке com/metanit/hello определим новый файл Hello.java :
package com.metanit.hello; public class Hello < public static void main(String[] args)< System.out.println(«Hello Demo Module!»); >>
Название пакета файла — com.metanit.hello отражает структуру папок, в которых расположен файл. Сам файл определяет класс Hello, который в методе main выводит на консоль строку.
В итоге у нас получится следующая стуктура проекта:
Теперь скомпилируем все это. Для этого вначале перейдем в командной строке/терминале к папке, в которой находится модуль demo.
Затем для компиляции модуля выполним следующую команду:
javac demo/module-info.java demo/com/metanit/hello/Hello.java
После компиляции модуля demo выполним программу с помощью следующей команды:
java —module-path demo —module demo/com.metanit.hello.Hello
Параметр —module-path указывает на путь к модулю, а —module — на главный класс модуля.
При наборе команды вместо параметра —module-path можно указать его сокращение -p , а вместо параметра —module — сокращение -m .
И на консоли отобразится сообщение «Hello Demo Module!»
Источник: metanit.com
Пользовательские модули
В этом разделе я расскажу, как создать свой модуль и как использовать его в своей программе. Структуру модуля вы уже знаете. Если забыли, то см. здесь: Модули.
Итак, создаём программу обычным уже известным нам способом.
Затем выбираем в меню ФАЙЛ команду СОЗДАТЬ МОДУЛЬ.
Сохраняем модуль под именем, например, myunit. Для этого выбираем меню ФАЙЛ — СОХРАНИТЬ.
Всё. Модуль готов и сохранён. Для верности можете сохранить весь проект.
При создании модуля в Lazarus структура его формируется автоматически, то есть в редакторе исходного кода сразу появляются основные разделы модуля. И вам остаётся только добавить свой код.
Итак, добавляем свои подпрограммы в модуль и получаем примерно следующее:
Листинг 26.1. Наш модуль на Паскале.
Обратите внимание на комментарии. Вы уже изучили немало, поэтому должны понимать смысл этих комментариев. Более подробно описывать не буду.
А теперь посмотрим, как использовать функции нашего модуля в нашей программе.
Листинг 26.2. Использование модуля в программе.
Первым делом нужно подключить модуль к программе. Вы уже знаете, как это сделать. Если вы создавали этот модуль из этой же программы, то модуль будет подключен автоматически.
Ну а дальше, надеюсь, всё понятно. Мы не объявляем в программе переменную х, так как она объявлена в модуле myunit в разделе глобальных переменных, следовательно, видна из нашей программы.
В программе мы вызываем функцию MyFunc, а результат выводим на экран. Если же вы попробуете вызвать из программы функцию MyFunc100, которая также имеется в нашем модуле, то это приведёт к ошибке компиляции, так как функция MyFunc100 не объявлена в интерфейсном разделе, то есть не видна из других модулей и программ.
В этом разделе мы немного коснулись темы видимости переменных. Более подробно об этом я расскажу в следующем разделе.
Источник: info-master.su