4. Выясните, что делает каждый оператор основной программы.

2.2.  Проектирование проекта, использующего классы с наследованием

Следует признать, что работа с классами, их свойствами и методами достаточно сложна и требует от пользователя проведения экспериментов с программами. Эти исследования позволят  выяснить суть происходящего, взаимоотношения классов и их атрибутов, и, в конечном счете, получить верный и предсказуемый результат. Другого пути для того, чтобы научиться программировать, а тем более, работать с классами - нет.

Начиная сOffice 2000, в работе с классами появилось понятие - наследование интерфейса. Под интерфейсом всегда понимали средство общения. Такое общение пользователя с программой и ее объектами создается при помощи  открытых  свойств  и  методов  класса.  То  есть  при  наследовании класс-потомок (порождаемый класс) наследует(ему будут доступны) свойства и методы родительского класса, описанные какPublic – открытые.

Для того, чтобы порождаемый класс наследовал интерфейс родительского необходимо при декларировании класса записать имя родительского класса с ключевым словом Implements.

'Класс“Хоз_Гаража”

'******************************************

Implements Владелец

Implements Гараж

'СВОЙСТВА КЛАССА  Хоз_Гаража

Public HG_Vladel As Владелец

Public HG_Garag As Гараж

'МЕТОДЫ КЛАССА  Хоз_Гаража

Private Sub Class_Initialize()

'-----------------------------------------------------------------------

НЕ нашли? Не то? Что вы ищете?

Set HG_Vladel = New Владелец

Set HG_Garag = New Гараж

End Sub

Public Sub Zadan_Prop_Hoz_Garag(ByVal Prop_HG_Na As String, _

ByVal Prop_HG_Nu As Integer, ByVal Prop_HG_M As String, _

ByVal Prop_HG_D As Date, ByVal Prop_HG_C As Integer, _

ByVal Prop_HG_Ce As Long)

'--------------------------------------------------------------------------------------

25

' 1-й метод класса Хоз_Гаража(Задание свойств классу Хоз_Гаража)

'Свойства можно задать, используя приведенные шесть инструкций

'HG_Garag. Pr_G_Name = Prop_HG_Na

'HG_Garag. Pr_G_Numbe = Prop_HG_Nu

'HG_Garag. Pr_G_Material = Prop_HG_M

'HG_Garag. Pr_G_Date_P = Prop_HG_D

'HG_Garag. Pr_G_Comfort = Prop_HG_C

'HG_Garag. Pr_G_Cena = Prop_HG_Ce

'  Свойства можно также задать, используя метод

'  объекта ГАРАЖ - Zadan_Prop_Garag

HG_Garag. Zadan_Prop_Garag Prop_HG_Na, Prop_HG_Nu, Prop_HG_M,

Prop_HG_D, Prop_HG_C, Prop_HG_Ce

End Sub

Public Sub Viv_Inform_Ob_Kl_HG()

' 3-й метод класса.

' Вывод информации об объекте класса Хоз_Гараж в окно отладки

'------------------------------------------------------------------------------------

HG_Garag. Viv_Inform_Ob_Kl_G ' Вывод информации об объекте Гараж

' используем методViv_Inform_Ob_Kl_G объекта Гараж

HG_Vladel. Viv_Inform_Ob_Kl ' Вывод информации об объекте Владелец End Sub

Public Sub Opredel_Cena_Gar()

' 4-й метод класса.

' Расчет стоимости гаража на текущую дату и вывод ее

'------------------------------------------------------------------------------------

Dim b_Cen As Long, Ist_Cena As Long

Dim b_dat As Date, b_int As Integer

b_Cen = CLng(HG_Garag. Pr_G_Cena)

b_dat = HG_Garag. Pr_G_Date_P

b_int = DateDiff("YYYY", b_dat, Now)

Ist_Cena = CLng(b_Cen * (1 - b_int * 0.05))

Debug. Print "Истинная цена для Гаража номер - " & _

HG_Garag. Pr_G_Numbe & Chr(13) & "В объединении - " & _

HG_Garag. Pr_G_Name & " составляет - " & Ist_Cena

End Sub

'МЕТОДЫ для получения и задания свойств класа ХОЗЯИН ГАРАЖА

Public Property Get Pr_HG_Name() As Variant

Pr_HG_Name = HG_Garag. Pr_G_Name

End Property

Public Property Let Pr_HG_Name(ByVal vNewValue As Variant)

HG_Garag. Pr_G_Name = vNewValue

End Property  'HG_Garag. Pr_G_Name

Public Property Get Pr_HG_Numbe() As Variant

Pr_HG_Numbe = HG_Garag. Pr_G_Numbe

End Property

Public Property Let Pr_HG_Numbe(ByVal vNewValue As Variant)

HG_Garag. Pr_G_Numbe = vNewValue

End Property  'HG_Garag. Pr_G_Numbe

Public Property Get Pr_HG_Material() As Variant

Pr_HG_Material = HG_Garag. Pr_G_Material

End Property

Public Property Let Pr_HG_Material(ByVal vNewValue As Variant)

HG_Garag. Pr_G_Material = vNewValue

End Property  'HG_Garag. G_Material

Public Property Get Pr_HG_Date_P() As Variant

Pr_HG_Date_P = HG_Garag. Pr_G_Date_P

End Property

Public Property Let Pr_HG_Date_P(ByVal vNewValue As Variant)

HG_Garag. Pr_G_Date_P = vNewValue

End Property  'HG_Garag. G_Date_P

Public Property Get Pr_HG_Comfort() As Variant

Pr_HG_Comfort = HG_Garag. Pr_G_Comfort

End Property

Public Property Let Pr_HG_Comfort(ByVal vNewValue As Variant)

HG_Garag. Pr_G_Comfort = vNewValue

End Property  'HG_Garag. G_Comforf

Public Property Get Pr_HG_Cena() As Variant

27

Pr_HG_Cena = HG_Garag. Pr_G_Cena

End Property

Public Property Let Pr_HG_Cena(ByVal vNewValue As Variant)

HG_Garag. Pr_G_Cena = vNewValue

End Property  'HG_Garag. G_Cena

'==========================================================

Public Property Get Pr_XG_Name() As String

Pr_XG_Name = HG_Vladel. Pr_Name

End Property

Public Property Let Pr_XG_Name(ByVal vNewValue As String)

HG_Vladel. Pr_Name = vNewValue

End Property  'Pr_XG_Name

Public Property Get Pr_XG_Fam() As String

Pr_XG_Fam = HG_Vladel. Pr_Fam

End Property

Public Property Let Pr_XG_Fam(ByVal vNewValue As String)

HG_Vladel. Pr_Fam = vNewValue

End Property  'Pr_XG_Fam

Public Property Get Pr_XG_Date_R() As Variant

Pr_XG_Date_R = HG_Vladel. Pr_Date_R

End Property

Public Property Let Pr_XG_Date_R(ByVal vNewValue As Variant)

HG_Vladel. Pr_Date_R = vNewValue

End Property  'Pr_XG_Date_R

Public Property Get Pr_XG_Tel() As Variant

Pr_XG_Tel = HG_Vladel. Pr_Tel

End Property

Public Property Let Pr_XG_Tel(ByVal vNewValue As Variant)

HG_Vladel. Pr_Tel = vNewValue

End Property  'Pr_XG_Tel

Программа тестирования класса Хоз_Гаража

'*******************************************

Public Гараж_01 As New Гараж

Dim Влад_01 As New Владелец

Dim Хоз_Гар_01 As New Хоз_Гаража

28

Public Sub UserClass_Вл_Гар()

'-------------------------------------------------

' Первое же обращение к объекту приводит к его инициализации

Debug. Print "ВЛАДЕЛЕЦ": Влад_01.Viv_Inform_Ob_Kl

Debug. Print "ГАРАЖ": Гараж_01.Viv_Inform_Ob_Kl_G

Debug. Print "ХОЗ_ГАРАЖА": Хоз_Гар_01.Viv_Inform_Ob_Kl_HG

' Задаем значения свойствам объекта Хоз_Гар_01, из класса Хоз_Гаража

Хоз_Гар_01.Zadan_Prop_Hoz_Garag Prop_HG_Na:="Кооператив22", _

Prop_HG_Nu:=666, Prop_HG_M:="Железо", _

Prop_HG_D:=#2/9/2009#, Prop_HG_C:=6, Prop_HG_Ce:=80000

' Меняем фамилию у объекта Влад_01 из класса Владелец.

' Фамилия у объекта Хоз_Гар_01 из класса Хоз_Гаража осталась преж-ней

Влад_01.Pr_Fam = "Петров_01"

Debug. Print "= Гараж= ": Гараж_01.Viv_Inform_Ob_Kl_G

Debug. Print "= Владелец= ": Влад_01.Viv_Inform_Ob_Kl

Debug. Print "= Хозяин_Гаража= ": Хоз_Гар_01.Viv_Inform_Ob_Kl_HG

' Меняем фам-ю у хозяина гаража– об. Хоз_Гар_01 из класса

Хоз_Гаража.

' Фамилия у объекта Влад_01 из класса  Владелец осталась прежней

Debug. Print "= КАС - 15 + Иванов_01 = "

Хоз_Гар_01.Pr_XG_Fam = "Иванов_01"

Хоз_Гар_01.Pr_HG_Name = "КАС-15"

Гараж_01.Viv_Inform_Ob_Kl_G

Хоз_Гар_01.Viv_Inform_Ob_Kl_HG

' Определяем цену гаража с учетом амортизации

Хоз_Гар_01.Opredel_Cena_Gar

Debug. Print "Владельцем гаража являтся гр." & Хоз_Гар_01.Pr_XG_Fam

End Sub

Задание №4.

1. Наберите приведенные тексты программ и  убедитесь в работоспособности созданных программных средств.

2. Сделайте эксперименты. Поменяйте  у свойств и(или) методов Pub-lic наPrivate, добавьте свои свойства и методы. Сделайте выводы.

29

3. Попробуйте создать проект, схема которого представлена на рисунке 1.1, либо какой-то свой, использующий механизм наследования.

Лекция 3.4 Общие понятия о дисковых файлах (файловый ввод и вывод). Основные положения по открытию, закрытию и удалению дисковых файлов.

1.  ОСНОВНЫЕ ПОЛОЖЕНИЯ

Помимо файлов известных форматов, которые определяются использо-ванием того или иного пакета–Word, Excel и т. д., существуют файлы, яв-ляющиеся  внешними  по  отношению  к  используемому  приложению.  Они хранятся самостоятельно на диске и к ним можно обращаться из любого при-ложенияOffice, и, более того, с ними можно работать при программировании наVB, Delphi, C++ и других языках программирования.

Дисковые файлы делят на три группы:

Файлы последовательного доступа. Такие файлы представляют по-следовательность текстовых строк разной длины. Признаки конца строк яв-ляются разделителями элементов файла. Специальных средств поиска для

них нет. Для того чтобы получить данные из файла нужно открыть его и про-честь последовательно все данные до нужного места.

Открыть файл последовательного доступа можно в одном из трех ре-жимов. Действия, происходящие с такими файлами при этом, показаны на Рисунке 3.1.

Рисунок 3.1. Режимы работы с фалами последовательного доступа

Режим Input.

Ввод текста из файла (чтение)

Попытка открыть несу-ществующий файл приве-дет к ошибке.

Файл последова-тельного доступа

Режим Append.  Вывод текста в конец файла(за-пись). Выводимый текст присоединяется в конец файла Прежнее содержимое уничтожается Сохра-ненное прежнее содер-жимое. Новая, до-бавленная в конец файла,  строка

Попытка открыть не-существующий файл в этих режимах  приве-дет к созданию нового файла.

Файл последовательного доступа, откры-тый для чтения, при смене режима дол-жен быть сначала закрыт. После этого файл следует открыть с одновременной установкой нового режима, например ре-жима записи(Output илиAppend)

Режим Output.  Вывод текста в файл(запись).

Прежнее содержимое файла при этом теряется

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6