Описание доступности модулей, процедур и функций

В главе 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 байт соответственно. Описание данных сложного типа выполняется так же, как и описание данных простого типа.

 

 

Описание данных выполняется операторами: Public Private Имя_Данных [(Размерность)] As Тип Dim Public Const Имя_Константы As Тип = Выражение, Private где описание размерности имеет вид нижняя_граница to верхняя_граница В случае необходимости в модуле можно описать сложный тип данных оператором Type – End Type: Type Имя_типа Имя_поля_1 as тип_1 . . . Имя_поля_n as тип_n End Type Возможно преобразование данных из одного типа в другой специальными операторами int, val, str, asc, chr, Cint, CSng, CDbl, CLng, CStr и др.