Описание типа данных

Материал из Гостопедии
Перейти к навигации Перейти к поиску

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

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

Атомарные типы данных

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

В основе атомарного типа данных обычно находится тот или иной базовый тип данных. Источником базовых типов в большинстве случаев становится формат или инструмент, используемый для работы со значениями этого атомарного типа. Представим объект передачи данных формата JSON. Атомарные типы значений его свойств наверняка будут основаны на типах данных, предусмотренных этим форматом.

Перечислительным будем называть атомарный тип данных, допускающий закрытый список значений, каждому из которых приписан определенный смысл. Например, тип данных IssueSeverity может допускать значения normal, high и critical.

Разбираемым будем называть атомарный тип данных, для которого допустимым значением является строковое представление значения другого типа, удовлетворяющее оговоренному синтаксису. Например, формат JSON не предлагает отдельного типа данных для указания дат и времени. Применение этого формата требует указывать даты в виде строк определенного вида, например YYYY-MM-DD hh:mm:ss.

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

Комбинированным будем назвать атомарный тип данных, обладающий несколькими из описанных выше признаков. Например, в языке CSS применяются списки разбираемых и перечислительных значений: 1px solid #A1B2C3 и т. п.

Сложные типы данных

Сложные типы данных описывают значения, которые допускают представление в виде массивов или структур значений других типов.

Тематический план описания типа данных

Описание любого типа данных должно отвечать на следующие вопросы.

  • На какие явления предметной области указывают значения этого типа данных?
  • Какие операции определены над значениями этого типа данных?

Описание любого атомарного типа данных должно отвечать на следующие вопросы.

  • Каков базовый тип данных для описываемого атомарного типа?
  • Какие ограничения наложены на значения этого атомарного типа?

Описание перечислительного типа данных должно отвечать на следующие вопросы.

  • Каков перечень допустимых значений для этого типа данных?
  • Какова семантика каждого допустимого значения?

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

Описание разбираемого типа данных должно отвечать на следующие вопросы.

  • Каков фактический тип значений, представленных в виде строк?
  • Каков синтаксис строкового представления этих значений?

Описание списочного типа должно отвечать на следующие вопросы.

  • Какие атомарные типы допустимы для элементов списка?
  • Каков синтаксис списка, чем и как разделены его элементы?
  • Важен ли порядок элементов списка? Если да, то что он означает?
  • Допускается ли многократное вхождение элемента в список?

Если многократное вхождение элемента в список допустимо, следует объяснить, равнозначно ли оно однократному, а если нет, то что оно означает.

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

Описание сложного типа данных должно содержать описание структуры значения.

Пример

Типы данных

Время киносеанса

Время киносеанса указывает на время начала или время завершения киносеанса с точностью до одной минуты.

Время киносеанса представлено строковым значением в формате YYYY-MM-DD hh:mm, где

  • YYYY — номер года;
  • MM — номер месяца;
  • DD — число;
  • hh — часы по 24-часовой шкале;
  • mm — минуты.

Примеры:

  • 2024-09-24 12:30
  • 2024-12-03 21:00

Набор привилегий

Набор привилегий указывает на объем дополнительных услуг, предоставляемых зрителю в кинотеатре.

Значение типа «набор привилегий» представляет собой строку.

Значения типа «набор привилегий» ограничены приведенным ниже списком.

Значение Смысл
regular Привилегии отсутствуют
preferential Привилегии для лиц, имеющих социальные льготы
vip Максимальный уровень привилегий

Тема

Тема указывает на один из основных предметов, которому посвящен фильм.

Значение типа «тема» представляет собой строку, которая отвечает следующим требованиям:

  • не содержит пробельных символов;
  • начинается символом «решетка»: #;
  • не содержит символов «решетка» кроме начального.

Примеры:

  • #пришельцы
  • #апокалипсис
  • #ЛюбовьМорковь

Тематика

Тематикой называется набор тем, которым посвящен фильм.

Значение типа «тематика» представляет собой строку, составленную из значений типа «тема», разделенных символом пробела. Символ пробела, повторенный многократно, интерпретируется как единый разделитель. Начальные и конечные пробелы игнорируются. Порядок следования тем в тематике безразличен. Многократное вхождение темы в тематику не допускается.

Примеры:

  • #пришельцы #ЛюбовьМорковь
  • #пришельцы #апокалипсис
  • #квантовая_механика

Над значениями типа «тематика» определены следующие операции:

  • объединение;
  • пересечение;
  • уровень совпадения.

Объединение нескольких тематик дает в результате тематику, которая включает в себя каждую тему входящую в каждую из исходных тематик. Например, объединение тематик #пришельцы #ЛюбовьМорковь и #пришельцы #апокалипсис дает тематику #пришельцы #ЛюбовьМорковь #апокалипсис.

Пересечение нескольких тематик дает в результате тематику, включающую в себя те и только те темы, которые входят в каждую из этих тематик. Например, пересечение тематик #пришельцы #ЛюбовьМорковь и #пришельцы #апокалипсис дает тематику #пришельцы.

Уровнем совпадения нескольких тематик называется число, равное отношению количества тем в их пересечении к количеству тем в их объединении. Например, уровень совпадения тематик #пришельцы #ЛюбовьМорковь и #пришельцы #апокалипсис приблизительно равен 0,33.