ИГА. Понятие базы данных
![]()
|
Записи и их свойства.Типы массивов позволяют работать с регулярными структурами данных, каждый элемент которых относится к одному и тому же базовому типу. Существует другая разновидность составных конструируемых типов данных, которые позволяют определять и использовать нерегулярные структуры данных, элементы которых могут относиться к разным встроенным или явно определенным типам данных. Собирательно типы этой разновидности называются типами записи или структурными типами. К счастью, общее понятие типа записи практически одинаково в сильно и слабо типизированных языках. Идея состоит в том, что в определении структурного тип; перечисляются имена полей записи, и для каждого поля указывается его тип данных. После этого можно определять переменные вновь сконструированного типа и производить доступ к полям переменных. На языке Модула-2 определение структурного типа «комплексные числа» могло бы выглядеть следующим образом: type complex = record re: real; im : real end Записи с вариантами При реальном программировании достаточно часто возникает желание по-разному интерпретировать содержимое одной и той же области памяти в зависимости от конкретных обстоятельств. Хорошим стилем является использование каждой структурной переменной с некоторым объектом предметной области, к которой относится программа. Поля структуры в этом случае содержат требуемые характеристики объекта. Но любой объект может менять свое состояние и соответственно набор характеристик. Поэтому удобно, продолжая использовать ту же область памяти, иметь возможность понимать ее структуру и содержание таким образом, который согласуется с текущим состоянием объекта. Наиболее строгое решение содержится в языках линии Паскаль. В определении всего структурного типа или его завершающей части можно явно указать специальное поле перечисляемого типа (дискриминант), значения которого являются метками соответствующих вариантов типа записи. Для корректного использования переменных такого типа требуется заносить в поле дискриминанта актуальное значение при изменении интерпретации переменной и руководствоваться значением дискриминанта при доступе к содержимому переменной. Вот пример определения типа записи с вариантами в языке Паскаль: type person = record Iname, fname: alfa; birthday: date; marstatus: (single, married); case sex: (male, female) of male: (weight: real; bearded: boolean); female: (size: array[l..3] of inteqer) end (Считается, что типы данных alfa и date уже определены.) После определения переменной типа person в любой момент можно обращаться и к полямweight и bearded , и к элементу массива size , но корректно это следует делать, руководствуясь значением дискриминанта sex . Множества и их свойства (язык Pascal).Еще одной разновидностью конструируемых типов являются типы множеств. Такие типы поддерживаются только в развитых сильно типизированных языках. В языке Паскаль тип множества определяется конструкцией type Т=set of T0, где Т0— встроенный или ранее определенный тип данных (базовый тип). Значениями переменных типа Т являются множества элементов типа Т0(в частности, пустые множества). Для любого типа множества определены следующие операции: «?» — пересечение множеств, «+» — объединение множеств, «–» — вычитание множеств и « in » — проверка принадлежности к множеству элемента базового типа. С использованием механизма множеств можно писать лаконичные и красивые программы, но нужно отдавать себе отчет в том, что для эффективной реализации множеств требуются серьезные ограничения их мощности. Обычно в реализациях языков допускаются множества, мощность базового типа которых не превосходит длину машинного слова. Это связано с тем, что перечисленные выше операции допускают эффективную реализацию только а том случае, когда значение множества представляется битовой шкалой, длина которой равна мощности базового типа. «1» означает, что соответствующий элемент базового типа входит в множество, «0» — не входит. Чтобы для выполнения операций над множествами можно было прямо использовать машинные команды, нужно ограничить длину шкалы машинным словом. Динамические структуры данных.Базовыми типами в языках программирования выступают статические типы данных, на основе которых могут быть созданы статические структуры. Статические структуры данных представляют собой структурированное множество базовых структур. Количество элементов, а соответственно и необходимая память для них, вычисляется на этапе компиляции, и память резервируется под структуры заранее. Данные хранятся в статической памяти компьютера. [1] Архитектура статических структур данных делает их более простыми для программиста, т.к. количество элементов известно заранее и доступ к ним осуществляется по индексу (физический адрес элемента известен и не должен вычисляться). Более того, работа с этим типом структур быстрее с аппаратной точки зрения (доступ к ОЗУ быстрее и данные расположены одним целым). [1] В практическом программировании невозможно обойтись только статическими структурами, т.к. объём данных для последующей обработки не всегда известен заранее. Поэтому возникает потребность в динамических структурах данных, объём которых не определён заранее. Динамические структуры данных – множество элементов с возможностью изменения мощности [2]. По этому определению видно, что количество элементов в динамической структуре данных ограничено средой исполнения программы (аппаратная часть, верхняя граница адресного пространства). Для реализации динамической структуры данных необходимы элементы, которые состоят из двух логических составляющих [1]: Указатель или указатели на соседние элементы структуры Указатель на полезные данные |