Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Второй реферат по Комп Графике.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
51 Кб
Скачать
☆

Модули и классы

Программный код в Visual Basic хранится в модулях. Существуют три вида модулей: модуль формы (Form), стандартный модуль (Module) и модуль класса (Class Module).

• Модуль формы (расширение файла *.frm) является основой большинства приложений Visual Basic. Модуль формы содержит процедуры обработки события, общие процедуры и объявленные на уровне формы: переменные, константы, типы и внешние процедуры. Если открыть модуль формы в текстовом редакторе, можно увидеть описания формы и её элементов управления, включая их свойства. Код, размещённый в модуле формы, может ссылаться на другие формы или объекты приложения.

• Стандартный модуль (расширение файла *.bas) является контейнером для процедур, функций и объявлений, к которым обычно получают доступ другие модули приложения. Они могут содержать глобальную переменную (доступную всему приложению) или описанные на уровне модуля: переменные, константы, типы, внешние и глобальные процедуры. Код, размещённый в стандартном модуле, может быть не связан с определенным приложением; если не использовать ссылки на модуль формы или имена элементов управления, стандартный модуль может быть использован в других приложениях.

• Модуль класса (расширение файла *.cls) является основой объектно-ориентированного программирования в Visual Basic. Модуль класса используется для создания новых объектов. Эти объекты могут иметь собственные свойства, методы и события. Фактически, форма — просто модуль класса, который может содержать элементы управления, помещенные в него, и выводить их на экран. Классы могут содержать специальные процедуры Class_Initialize и Class_Terminate, которые фактически являются конструктором и деструктором.

Объектно-ориентированное программирование

Простое взаимодействие между объектами является одним из базовых составляющих парадигмы Visual Basic. Сам объект называется экземпляром класса. Объектная модель VB предоставляет различные классы для работы с формами, элементами управления, буфером обмена, коллекциями, экраном и т. д. Для взаимодействия с другими объектами класс предоставляет разработчику интерфейс, состоящий из свойств, методов и событий.

Создание нового объекта из класса возможно ранним или поздним связыванием. Для раннего связывания используется ключевое слово New перед именем класса. Для позднего связывания используется функция CreateObject возвращающая ссылку на созданный объект. Присваивание ссылок осуществляется в переменные с типом Object, используя оператор Set. Доступ к методам и свойствам класса происходит через оператор — точку ., который ставится сразу после имени переменной объектного типа. Если класс содержит события, то переменные объявляются с ключевым словом WithEvents, тем самым будут доступны процедуры обработки событий.

Пример показывает взаимодействие программы с библиотекой Microsoft Scripting Runtime, предоставляющая объекты для работы с файловой системой:

Public Sub Main()

Dim objFSO As New FileSystemObject 'Создаём экземпляр класса, используя оператор New

Dim objWindows As Folder

Set objWindows = objFSO.GetFolder(Environ("SYSTEMROOT")) 'Вызываем метод класса GetFolder и присваиваем ссылку на полученный объект

MsgBox "Папка Windows: " & objWindows.Path 'Читаем свойства класса

MsgBox "Дата создания: " & Format(objWindows.DateCreated, "YYYY-MM-DD H:mm:ss")

Dim sTextFilePath As String

Dim objTS As TextStream

sTextFilePath = objFSO.BuildPath(Environ("TEMP"), "Тестовый файл.txt") 'Метод с двумя параметрам возвращает значение типа String

Set objTS = objFSO.CreateTextFile(sTextFilePath, True)

objTS.Write "Привет, Википедия!"

objTS.Close

objFSO.DeleteFile sTextFilePath, True

Set objFSO = Nothing 'Присваивая Nothing, происходит освобождение ссылки, и объект может вызвать процедуру деструктора

Set objWindows = Nothing 'VB автоматически вызывает деструктор, если на объект больше не ссылаются

Set objTS = Nothing

End Sub

Visual Basic позволяет разработчику самому создавать новые классы. В отличие от других языков программирования, таких как Java и C++, Visual Basic имеет неполную поддержку ООП.

Как известно, абстрактный класс необходим, чтобы предоставить шаблон для интерфейса другим классам. В Visual Basic классы имеющие члены класса, но не содержащие реализацию, можно использовать в качестве абстрактных классов, но фактически они ими не являются. Из классов Visual Basic всегда можно создать объекты, даже если они не содержат кода[2]

Принцип инкапсуляции действует в Visual Basic. Чтобы разграничить доступ к членам класса, служат модификаторы Public, Private и Friend, используемые при описании процедур, функций, констант, переменных и пользовательских типов.

Наследование реализации не поддерживается. Visual Basic обеспечивает только поддержку наследования интерфейса через оператор Implements. При наследовании интерфейса любой класс может действовать как базовый класс интерфейса. Вообще любой класс, может выступать как базовый класс интерфейса.

Полиморфизм обеспечивается только через интерфейсы, так как наследование VB не поддерживает. Реализация полиморфизма показана на примере классов Автомобиль и Самолёт реализующие интерфейс класса Транспорт.

'Класс ITransport.cls

Public Function GetMaxSpeed() As Long

End Function

'Класс CAuto.cls

Implements ITransport 'Наследуем интерфейс

Private Function ITransport_GetMaxSpeed() As Long 'Реализация метода

ITransport_GetMaxSpeed = 240

End Function

'Класс CFly.cls

Implements ITransport

Private Function ITransport_GetMaxSpeed() As Long

ITransport_GetMaxSpeed = 700

End Function

'Стандартный модуль Program.bas

Option Explicit

Public Sub Main()

Dim T As ITransport 'Объявляем переменную с типом ITransport

Set T = New cAuto

WhatTransportSpeed T 'Передаем ссылку в процедуру, которая вызовет нужный метод класса, в зависимости от реализации

Set T = New cFly

WhatTransportSpeed T

End Sub

'Функция имеет аргумент, который принимает ссылку на объект, реализующий интерфейс ITransport

Public Sub WhatTransportSpeed(Transport As ITransport)

MsgBox "Максимальная скорость: " & Transport.GetMaxSpeed()

End Sub