ПОНЯТНО О Visual Basic NET (том 2)

Структуры


Со структурами мы с вами знакомы слабо. Несколько слов я сказал о них в 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 есть специальные мощные инструменты для работы с ними. Мы рассмотрим их в Глава 24. .
      Массивы структур: Вы хотите создать базу данных о 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
      Заключение. Вы увидели, что составные элементы структуры сами могут включать в себя структуры. Они могут вкладываться друг в друга, как матрешки, до бесконечности. Так можно создать иерархии данных практически в любой области знаний. Примеры же о массивах и объектах в качестве элементов структур я не буду рассматривать, так как они кажутся мне несколько сложноватыми для начинающих.
      Задание 109.      
      Создайте базу данных о себе, ближайших родственниках или друзьях. О каждом должно быть известно:
      • Имя

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

      • Цвет глаз

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

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

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

          • Автор

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

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

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

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

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


            • Содержание раздела