Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
    1. Структуры

Со структурами мы с вами знакомы слабо. Несколько слов я сказал о них в 12.1. А именно, я сказал, что структура – это один из видов объектов (в широком смысле), который наряду с классами, модулями и перечислениями входит в состав пространств имен. У структуры, также как и у класса, могут быть свойства и методы. Нам известны структуры Точка, Прямоугольник и др.

В Паскале структурам соответствуют записи, в Visual Basic 6.0 структурам соответствует пользовательский тип данных, в Си структуры тоже называются структурами.

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

Рассмотрим пример.

Задание. Вы хотите занести в компьютер информацию о ваших любимых компьютерных играх (хотя бы для того, чтобы затем как-то ее анализировать, например, определить, какая игра занимает больше места на диске). Для простоты ограничим информацию об игре тремя элементами:

  • Название игры

  • Сколько места игра занимает на диске (в мегабайтах)

  • Хорошая или плохая графика у игры (ваша оценка)

Также для экономии ограничимся двумя играми. Ваша программа должна будет занести в память информацию об обеих играх, а затем выполнить три задания:

  • Распечатать название первой игры

  • Определить, сколько места займут на диске обе игры вместе

  • Ответить, хороша или плоха графика у второй игры

Ваши действия. Для начала нужно создать структуру для размещения информации об игре. Нам уже приходилось конструировать перечисления (см. 13.3). Там мы сначала создавали тип перечисления, а затем объявляли этим типом переменные. Здесь действуем аналогично – придумываем сначала имя новому типу структуры (типИгра), причем придумываем также имена и типы всем элементам информации об игре, которые мы хотим хранить в структуре, после чего пишем:

Structure типИгра

Dim Название As String

Dim Объем As Integer

Dim Графика_хорошая As Boolean

End Structure

Слово Structure как раз и обозначает структуру.

Тип определен. Теперь VB знает, что входит в информацию об игре и сколько места в памяти она займет. Можно объявлять переменные, то есть отводить место в памяти:

Dim Игра1, Игра2 As типИгра 'Отводим в памяти место под информацию о двух играх

Вот полный текст программы:

'Создаем тип структуры. Его нельзя объявлять в процедуре:

Structure типИгра

Dim Название As String

Dim Объем As Integer

Dim Графика_хорошая As Boolean

End Structure

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Игра1, Игра2 As типИгра 'Отводим в памяти место под информацию о двух играх

'Заносим в память компьютера информацию об играх:

Игра1.Название = "StarC" : Игра2.Название = "Heroes III"

Игра1.Объем = 90 : Игра2.Объем = 200

Игра1.Графика_хорошая = False : Игра2.Графика_хорошая = True

Debug.WriteLine(Игра1.Название) 'Выполняем 1 задание

Debug.WriteLine(Игра1.Объем + Игра2.Объем) 'Выполняем 2 задание

'Выполняем 3 задание:

If Игра2.Графика_хорошая Then Debug.WriteLine("Хорошая графика") _

Else Debug.WriteLine("Плохая графика")

End Sub

Обратите внимание, что имя элемента структуры отделяется от имени переменной точкой. Нам это привычно по работе со структурами Размер, Прямоугольник и др., когда имя такого элемента структуры, как свойство, тоже отделялось от имени переменной точкой.

Массивы и структуры отличаются от простых типов данных, таких как Integer или String. Если переменная простого типа содержит в каждый момент времени только одно значение (число, строку, дату и т.п.), то массив или структура в каждый момент времени содержат по нескольку значений. Поэтому такие типы называют составными (composite).

Можно писать операторы такого вида:

Игра2 = Игра1 'Игре 2 присваиваются все элементы 1-й игры

В этом случае всем элементам игры 2 присваиваются значения соответствующих элементов игры 1.

Базы данных. Выстроенную подобным образом в памяти информацию о чем-либо часто называют базой данных. Всю информацию об одной переменной (в нашем случае об одной игре) называют записью в этой базе данных. Программу, которая извлекает информацию из базы данных, сортирует записи и производит другую обработку информации в базе данных, называют системой управления базой данных. В нашем примере роль системы управления базой данных играет процедура Button1_Click.

Базы данных являются настолько распространенным средством хранения информации, что в VB есть специальные мощные инструменты для работы с ними. Мы рассмотрим их в Error: Reference source not found.

Массивы структур: Вы хотите создать базу данных о 30 играх. Для этого достаточно вместо очень длинного объявления

Dim Игра1, Игра2, …………… Игра30 As типИгра

объявить массив:

Dim Игра(30) As типИгра

Теперь можно использовать операторы такого вида:

Игра(16).Название = "KU4" 'название 16-й игры

Игра(25).Объем = 400 'объем 25-й игры

Debug.WriteLine(Игра(8).Графика_хорошая)

Игра(29) = Игра(12) '29-й игре присваиваются все элементы 12-й игры

Структура в структуре: Элементы структуры могут иметь не только простой тип, но и составной, в том числе быть массивом, структурой или объектом.

Пусть мы хотим иметь более подробную, чем в предыдущем примере, информацию о графике. Для этого организуем отдельную структуру:

Structure типГрафика

Dim Хорошая As Boolean

Dim Число_цветов As Integer

Dim Максимальное_разрешение As String

End Structure

А поскольку информация о графике является составной частью информации об игре, вставим переменную созданного типа в качестве элемента в структуру игры:

Structure типИгра

Dim Название As String

Dim Объем As Integer

Dim Графика As типГрафика

End Structure

Теперь мы можем писать такие операторы:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Игра(30) As типИгра

Игра(8).Графика.Хорошая = True

Игра(14).Графика.Число_цветов = 65000000

Игра(29).Графика.Максимальное_разрешение = "1280х960"

Debug.WriteLine(Игра(14).Графика.Число_цветов)

End Sub

Заключение. Вы увидели, что составные элементы структуры сами могут включать в себя структуры. Они могут вкладываться друг в друга, как матрешки, до бесконечности. Так можно создать иерархии данных практически в любой области знаний. Примеры же о массивах и объектах в качестве элементов структур я не буду рассматривать, так как они кажутся мне несколько сложноватыми для начинающих.

Создайте базу данных о себе, ближайших родственниках или друзьях. О каждом должно быть известно:

  • Имя

  • Дата рождения

  • Цвет глаз

Массивы не используйте. Программа должна:

  • Распечатать ваш возраст и цвет глаз

  • Ответить на вопрос – правда ли, что ваш дядя старше тети.

Создайте базу данных о своих книжках. О каждой книжке должно быть известно:

  • Название

  • Автор

  • Дата издания

  • Число страниц

Обязательно используйте массив не меньше, чем из 5 структур. Программа должна:

  • Вычислить средний возраст ваших книжек

  • Определить, каких книжек больше – толстых или тонких

  • Ответить на вопрос – есть ли у вас разные книги одного автора (это нелегко)