Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

Глава 7. Модули и классы

7.1. Модули

Программный мо­дуль представляет собой текстовый файл, содержащий подпрограммы, функ­ции, переменные и константы. Проект может состоять из множества программных модулей. Модули могут объединяться в классы. Как и элементы, классы обладают свойствами, методами и событиями, предназначенными для выполнения взаимосвязан­ных операций. Хорошо спроектированный класс представляет собой впол­не самостоя­тельный фрагмент программы, и его можно перенести из одно­го проекта в другой. Модули можно включать в несколько проектов. Груп­пи­руя однородные функции в пределах одного модуля, создается программная библиотека. Если поместить модули в один каталог (папку), то их можно будет использовать в других проектах.

Для создания модуля используется команда меню Project/Add Module. Имя модуля задается свойствомName. В разделе (General) (Declarations)размещаются команды, влияющие на все процедуры и функ­ции модуля, например:

Option Explicit ‘необходимость явного объявления переменных;

Option Base 1 ‘отсчет элементов массива с единицы;

OptionPrivateModule‘элементы модуля недоступны другим приложениям;

Public ... ‘объявляются глобальные переменные.

Для создания новой процедуры или функции в модуле используется командаTools/Addprocedureи окно настройки процедуры (рис. 7.1.1) либо непосредственно вводится заголовок процедуры или функции.

Рис. 7.1.1. Настройка процедуры

Примерcоздания модуля из трех функций: File, Wait иMouseArray

Создайте новый проект командой File/New Project.

Выполните команду Project/Add Moduleи задайте свойству Name значение BSP (библиотека стандартных программ).

Введем тексты функции.

Public Function File(Name as String) As Boolean ‘проверка наличия файла

File= Len(Dir(Name))>0 ‘0 - файла нет, иначе - файл есть.

End Function

Public Sub Wait ‘установка маркера мыши в виде песочных часов

Screen.MousePointer=11 ‘изображение песочных часов для объекта Screen

End Sub

Public Sub MouseArray ‘установка маркера мыши в виде стрелочки

Screen.MousePointer=0 ‘изображение стрелочки для объекта Screen(экран)

End Sub

Сохраните модуль командой File/Save BSPв своей папке (например, Library). При обращении к подпрограмме модуля указывается имя модуля, точка и имя подпрограммы. Если имена подпрограмм во всех модулях уникальны, то имя модуля можно не указывать.

Открытые (глобальные), закрытые (локальные) процедуры

Тексты процедур событий, связанных с формой, называются моду­лем формы. Они доступны для всех процедур и функций этого модуля.

Заголовки закрытых процедур начинаются со слова Private. Такие процедуры доступны в пределах модуля формы. Если заголовок начинать со слова Public или слова Public и Private не ука­заны, то такие процедуры называются открытыми (глобальными), и они доступны для всех процедур всего приложения. Для вызова открытой проце­ду­ры из модуля другой формы нужно указать имя формы, точку и имя процедуры.

7.2. Классы

Классы аналогичны модулям, но имеют собственные методы, свой­ст­ва и события. Они используются для создания объектов‑потомков.

Пример. Покажем порядок создания и использования классов на при­мере создания классаCalc(арифметические операции с двумя числами). МетодыAdd(x,y), Subt(x,y), Mult(x,y), Div(x,y) реализуют опе­ра­ции сло­­же­ния, вычитания, умножения и деления вещест­вен­ных чиселXиYсоответственно. СвойствоRoundresзадает чис­ло знаков после запятой (3). СвойствоErrorsвозвращает текст сообщения об ошибке в вы­чис­ле­ни­ях (например, деление на ноль). СобытиеOnErrorsвозникает при делении на ноль.

  1. Создадим новый проект.

  2. Выполним команду Add-Ins/Add in Manager. Дважды щелкнем мышкой по строке VB 6 Class Builder Utility, нажмем кнопку OK. Строка Class Builder Utility появится в меню Add-Ins. Выполним командуAdd-Ins/Class Builder Utilityдля вызова построителя класса (рис. 7.2.1).

  3. Нажмем кнопку Add New Classи создадим класс под именемCalc.

  4. Нажмем кнопку Add New Methods to Current Classи создадим метод-функцию под именемAddс двумя аргументамиXиY(ByVal). Аргументы и результат имеют типDouble. Анало­гич­но создадим остальные методы.

  5. Нажатием кнопки Add New Property to Current Class создадим свой­ства Errors типа Variant и Roundres типа Integer. Процедуры-свойства ти­паGetиспользуются при чтении значения свойства (X=<класс>.<свой­ст­во>), а ти­­повLetиSet‑ при формировании значения свойства (<класс>.<свой­ство>=X).

Рис. 7.2.1. Окно построителя класса

  1. Нажатием кнопки Add New Event to Current Classсоздадим собы­тиеOnErrorsс аргументомNameError(ByVal) типаVariant.

  2. Закроем окно построителя класса. В окне проекта дважды щел­к­нем по имени класса Calcи увидим окноcпроцедурами, которые создал построитель класса. Удалим все свойства-процедуры­ типаSetиLetдля свойстваErrors, заполним мето­ды-функции соответствующим кодом, заме­ним комментарии построителя и создадим новую процедуру Class_Ini­tia­lize для присвоения умал­чи­вае­мых значений свойствам. Получим сле­дующий текст процедур для классаCalc.

(General) (Declarations) ‑ раздел глобальных объявлений класса

Private mvarError As Variant 'переменная для хранения свойства Errors

Public Event OnErrors(nameerror As Variant) ‘процедура-событие OnErrors

Private mvarroundres As Integer 'переменная для хранения свойства Roundres

Public Property Let roundres(ByVal vData As Integer) ‘установка Roundres

mvarroundres = vData ‘процедура выполняется, когда Calc.Roundres=X

End Property

Public Property Get roundres() As Integer ‘чтение свойства Roundres

roundres = mvarroundres ‘процедура выполняется, когда X=Calc.Roundres

End Property

Public Property Get Errors() As Variant ‘чтение значения свойства Errors

Errors = mvarError ‘процедура выполняется, когда X=Calc.Errors

End Property

Public Function subt(ByVal X As Double,ByVal Y As Double)As Double‘X+Y

subt=round(X-Y,mvarroundres) ‘формирование результатаX-Y

End Function

Public Function div(ByVal X As Double, ByVal Y As Double) As Double’X/Y

mvarError= ““ 'формирование значения свойстваErrors

IfY= 0Then‘деление на ноль

mvarError= “Деление на ноль“ ‘формирование значения свойстваErrors

RaiseEvent OnErrors(mvarError) ‘генерация события OnErrors

div= 0 ‘возвращение нуля в качестве результата

Else: ‘деление возможно

div=round(X/Y,mvarroundres) ‘формирование результатаX/Y

End If

End Function

Public Function mult(ByVal X As Double,ByVal Y As Double)As Double’X*Y

mvarError= ““ 'формирование значения свойстваErrors

mult=round(X*Y,mvarroundres) ‘формирование результатаX*Y

End Function

Public Function add(ByVal X As Double,ByVal Y As Double)As Double ’X+Y

mvarError= ““ 'формирование значения свойстваErrors

add=round(X+Y,mvarroundres) ‘формирование результатаX+Y

End Function

Private Sub Class_Initialize() ‘инициализация при создании объекта

mvarError=““: mvarroundres=3 ‘умалчиваемые значения

End Sub

  1. Разместим на форме кнопки Command1,Command2 (для тестиро­ва­ния работы класса) и составим процедуры для этой формы.

(General) (Declarations) ‑ раздел глобальных объявлений формы

‘объявление объектной переменной obCalcтипаCalcс событиями класса

Private WithEvents obCalc As calc

Private Sub Form_Load() ‘процедура загрузки формы

Set obCalc = New Calc ‘создание объекта obCalc класса Calc

obCalc.roundres= 6 ‘свойствуRoundresприсваивается значение 6

End Sub

Private Sub Command1_Click() ‘процедура проверки деления

Debug.PrintobCalc.div(6, 0) ‘выполнение методаdiv(6/0!) и вывод

IfobCalc.Errors<> ““ThenMsgBoxobCalc.Errors‘сообщение об ошибке

End Sub

Private Sub Command2_Click() ‘процедура проверки сложения

Debug.PrintobCalc.add(6,8) ‘выполнение методаAdd(6,8) и вывод суммы

End Sub

Private Sub obCalc_onerrors(nameerror As Variant) ‘cобытие Onerrors

MsgBox “Событие OnErrors “+nameerror+”!” ‘вывод сообщения об ошибке

End Sub

  1. Сохраним и выполним приложение.

Аналогичным образом можно создать класс на основе класса Calc.