Описание доступности модулей, процедур и функций
В главе 1 в качестве одной из технологических идей программирования было рассмотрено регулирование доступности различных данных и блочных структур в других блочных структурах. Примером блочной структуры является модуль, который в проект добавляется командой "Проект/Добавить модуль" ("Project/Add Module") или кнопкой "Добавить …".
Добавленный таким образом модуль становится доступным всем проектам. Для этого достаточно зарегистрировать его в другом проекте командой "Проект/Добавить файл" ("Project/Add File"). При выборе команды открывается окно выбора файлов, и в проект можно добавить любой видимый в окне файл, даже если он находится в другом каталоге.
Нередко бывает необходимо сделать модуль недоступным для других проектов. Для этого достаточно в первой строке кода модуля поставить оператор "Option Private Module". Тогда при добавлении файлов в другие проекты он становится невидимым в окне выбора файлов, а следовательно, и недоступным для других проектов.
В модуле можно описывать данные (см. 4.2), процедуры и функции. При их описании возникают аналогичные задачи – обеспечение доступности данных вне модуля и ограничение доступности пределами модуля. Если заголовку процедуры или функции предшествует слово public, то процедура или функция доступны за пределами модуля, слово private ограничивает доступ к ним пределами модуля. Видимость модулей и описанных внутри них процедур и функций показана на рис. 4.1
.
Рис. 4.1. Доступность модулей и описанных в них процедур и функций
Добавить модуль в проект можно командой "Проект/Добавить модуль" ("Project/Add Module"). При этом он может быть сделан доступным в другом проекте командой "Проект/Добавить файл" ("Project/Add File") При необходимости ограничить доступность модуля одним проектом в первой строке кода программы модуля достаточно поставить оператор "Option Private Module" Процедуры и функции, описанные в модуле со словом "Public", доступны в пределах модуля и вне его. Слово "Private" ограничивает доступность процедур и функций пределами модуля, содержащего их описание |
4.2. Описание данных
и преобразование типов данных
Описание данных выполняется с целью сообщить операционной системе символьные эквиваленты адресов данных, их типы и доступность данных в различных блочных структурах. Понятие о типах данных и их доступности разобраны в главе 1.
Описание данных возможно в модулях, в секции General кода программы формы и внутри описания процедуры и функции. В любом случае оператор описания изменяемых данных имеет вид:
Public
Private Имя_данного [(размерность)] As тип
Dim
Слово Public указывает доступность данного за пределами блочной структуры, слова Private и Dim ограничивают доступность данных пределами той блочной структуры (модуля, процедуры, функции), в которой эти данные описаны (рис. 4.2). Судя по описанию языка, слова private и dim – синонимы.
![]() |
Рис. 4.2. Доступность данных, описанных в разных блочных структурах
На рис. 4.2 показаны блочные структуры двух проектов – формы и модули первого проекта и один модуль второго проекта. Жирным шрифтом выделены элементы описания данных, имеющие значение для понимания рисунка, и имена данных, доступных в разных структурах.
Тип данных (табл. 1.1.) определяет место в оперативной памяти, отводимое для данных и возможные операции над данными.
Задание параметра "размерность" указывает на организацию данных в виде массива. Если параметр пуст (т.е. внутри скобок ничего нет), то массив динамический, и он в дальнейшем должен быть определен оператором ReDim. Если параметр не пуст, то описание размерности имеет вид:
нижняя_граница to верхняя_граница
или
нижняя_граница1 to верхняя_граница1, нижняя_граница2 to верхняя_граница2
или
нижняя_граница1 to верхняя_граница1, нижняя_граница2 to верхняя_граница2, …, нижняя_границаN to верхняя_границаN,
где нижняя_граница – наименьшее значение индекса элемента массива,
верхняя_граница – наибольшее значение индекса элемента массива.
В первом случае описан одномерный массив (строка или столбец), во втором – двухмерный (таблица), в третьем – многомерный. Это описание размерности необходимо использовать и в операторе ReDim.
Описание данных постоянных во время выполнения программы имеет вид:
Public
Const Имя_константы as тип = выражение
Private
Примеры описания данных приведены в табл. 4.1.
Таблица 4.1
Примеры описания данных
Пример описания | Комментарий |
Public a As Integer | Описана глобальная переменная a целого типа |
Dim b As Integer, Private b As Integer | Описана локальная переменная b целого типа |
Public d (1 to 5) As Single Dim f(1 to 5) As Single Private r(1 to ) As Single Dim r1(1 to 5, 1 to 10) As Single | Описан глобальный одномерный массив d из 5 элементов типа single Описан локальный одномерный массив f из 5 элементов типа single Описан двумерный массив размером 5 строк на 10 столбцов из чисел типа single |
Public q() As Integer Private s () As Integer | Описан глобальный динамический массив целых чисел Описан локальный динамический массив целых чисел |
Public Const Pi As Single=3.14 Private Const Pi=3.14 | Описана глобальная константа Pi=3.14 (single) Описана локальная константа Pi=3.14 (single) |
Очень распространенной операцией является преобразование типов данных. Особенно это касается операций ввода данных с клавиатуры и вывода данных на экран или печать. Традиционными операторами преобразования типов являются встроенные функции int, val, str, asc и chr. В языке Visual Basic предусмотрены и новые операторы преобразования типов данных. Наиболее часто встречающиеся операторы преобразования типов данных приведены в табл. 4.2. Операторы преобразования типов данных встречаются в правой части оператора присваивания значения переменной, в любой части логического выражения, сравнивающего две величины, а также в списке вывода:
· a=int(b) 'преобразовать данные, записанные по адресу b в целый тип и результат записать по адресу a,
· if chr(f)="n" 'если результат преобразования данных по адресу f есть буква "n",
· write #1, a, val(b) 'пишутся в файл данные с именем а и результат преобразования данных, размещенных по адресу b из строкового в численный тип.
Таблица 4.2
Операторы преобразования типов данных
Формат оператора | Назначение | Пример |
Val(f), где f – строковые данные | Преобразование строковых данных в численные | F="123.5" Val(F)=123.5 |
Str(a), где а – численные данные | Преобразование численных данных в строковые | A=123.5 str(a)=" 123.5" a= -123.5 str(a)="-123.5" |
Int(f), где f – данные не целого типа | Преобразование численных данных в данные целого типа | A=10.51 : B= -10.22 Int(A)=10:Int(B)= -11 |
Chr(b), где 0<b<256 – целое число | Определение символа по его коду | Chr(68) = "D" |
Asc(s), где s – данные строкового типа | Определение кода первого символа данных, записанных по адресу s | Asc("DEL") = 68 |
Fix(n), где n – числовое выражение | Преобразование к целому типу | A= -99.8 : B=99.8 Fix(A)= -99: Fix(B)=100 |
Cbool(выражение) | Приведение выражения к типу Boolean | А=5:B=5:C=0 Cbool(A=B) = True Cbool(C) = False |
CByte(выражение) | Преобразование к типу Byte | C=123.6 Cbyte(C)=124 |
CDate(выражение) | Преобразование к типу Date | A="Febr 16, 2002" B="4:57:48 PM" CDate(A) : CDate(B) CDate(A+B) |
CDbl(выражение) | Преобразование к типу Double | F=123.5 (single) A=CDbl(F)=123.5 (double) |
CInt(выражение) | Преобразование к типу Integer (см. Int) | A=123.56 Cint(A)=124 |
CLng(выражение) | Преобразование к типу Long | A=123 (integer) CLng(A)= 123 (long) |
CSng(выражение) | Преобразование к типу Single | C=5.3421115 (double) CSng(C)=5.34211 |
CStr(выражение) | Преобразование к типу String | A=437.324:B=False CStr(A)="437.324" CStr(B)="False" |
Для описания сложных типов данных служит оператор Type – End Type:
Type Имя_типа
Имя_поля_1 as тип_1
Имя_поля_2 as тип_2
. . .
Имя_поля_n as тип_n
End Type
Имена полей являются именами переменных, из которых конструируется сложный тип данных. В качестве полей могут быть использованы статические и динамические массивы, в том числе и строковые постоянной и переменной длины. Описание сложного типа оператором Type – End Type используется только на уровне модуля. Доступность этого описания регулируется обычным способом с помощью слов Public и Private.
Пример. Описание типа Student (табл. 3.1), дополненное массивом оценок, имеет вид:
Type Student Type Student
FIO as string FIO as string*60
Psevdo as string или Psevdo as string*20
NumDel as string NumDel as string*10
Ocenki (1 to 54) as integer Ocenki (1 to 54) as integer
End Type End Type
Во втором случае строковые данные FIO, Psevdo и NumDel имеют фиксированную длину в 60, 20 и 10 байт соответственно. Описание данных сложного типа выполняется так же, как и описание данных простого типа.
Описание данных выполняется операторами:
![]() ![]() |