Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Python 3: стандартная иерархия типов

В информатике и компьютерном программировании , с типом данных или просто типа является атрибутом данных , который говорит компилятор или интерпретатор , как программист намеревается использовать данные. Большинство языков программирования поддерживают основные типы данных: целые числа (разного размера), числа с плавающей запятой (которые приблизительно соответствуют действительным числам), символы и логические значения . Тип данных ограничивает значения, которые выражение, например, переменная или функция, может принимать. Этот тип данных определяет операции, которые могут быть выполнены с данными, значение данных и способ сохранения значений этого типа. Тип данных предоставляет набор значений, из которых выражение (т.е. переменная, функция и т. Д.) Может принимать свои значения. [1] [2]

Концепция [ править ]

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

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

Общие типы данных включают:

Например, в языке программирования Java тип int представляет собой набор 32-битных целых чисел в диапазоне значений от -2 147 483 648 до 2 147 483 647, а также операции, которые могут выполняться с целыми числами, такие как сложение, вычитание и умножение. Цвет, с другой стороны, может быть представлен тремя байтами, обозначающими количество красного, зеленого и синего цветов, и строкой, представляющей имя цвета.

Большинство языков программирования также позволяют программисту определять дополнительные типы данных, обычно путем объединения нескольких элементов других типов и определения допустимых операций для нового типа данных. Например, программист может создать новый тип данных с именем « комплексное число », который будет включать действительные и мнимые части. Тип данных также представляет собой ограничение, накладываемое на интерпретацию данных в системе типов , описывая представление, интерпретацию и структуру значений или объектов, хранящихся в памяти компьютера. Система типов использует информацию о типах данных для проверки правильности компьютерных программ, которые обращаются к данным или манипулируют ими.

Большинство типов данных в статистике имеют сопоставимые типы в компьютерном программировании и наоборот, как показано в следующей таблице:

Определение [ править ]

( Parnas, Shore & Weiss, 1976 ) выделили пять определений «типа», которые использовались - иногда неявно - в литературе. Типы, включающие поведение, больше соответствуют объектно-ориентированным моделям, тогда как модель структурированного программирования , как правило, не включает код и называются простыми старыми структурами данных .

Вот пять типов:

Синтаксический
Тип - это чисто синтаксическая метка, связанная с переменной при ее объявлении. Такие определения «типа» не придают типам семантического значения. [ требуется разъяснение ]
Представление
Тип определяется в терминах его состава более примитивных типов - часто машинных типов.
Представление и поведение
Тип определяется как его представление и набор операторов, управляющих этими представлениями.
Пространство значений
Тип - это набор возможных значений, которыми может обладать переменная. Такие определения позволяют говорить о ( непересекающихся ) объединениях или декартовых произведениях типов.
Ценностное пространство и поведение
Тип - это набор значений, которыми может обладать переменная, и набор функций, которые можно применить к этим значениям.

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

Классы типов данных [ править ]

Примитивные типы данных [ править ]

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

Типы машинных данных [ править ]

Все данные в компьютерах на базе цифровой электроники представлены битами (варианты 0 и 1) на самом низком уровне. Наименьшая адресуемая единица данных обычно представляет собой группу битов, называемую байтом (обычно октет , который составляет 8 бит). Единица, обрабатываемая инструкциями машинного кода, называется словом (по состоянию на 2011 год , обычно 32 или 64 бита). Большинство инструкций интерпретируют слово как двоичное число , так что 32-битное слово может представлять целые числа без знака от 0 до или целые числа со знаком от до . Из-за дополнения двухмашинному языку и машине по большей части не нужно различать эти беззнаковые и подписанные типы данных.

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

Типы машинных данных должны быть открыты или сделаны доступными в системах или языках программирования низкого уровня , чтобы обеспечить точный контроль над оборудованием. С языком программирования , например, поставляет целые типов различной ширины, например, shortи long. Если соответствующий собственный тип не существует на целевой платформе, компилятор разбивает его на код, используя типы, которые действительно существуют. Например, если 32-битное целое число запрашивается на 16-битной платформе, компилятор неявно обрабатывает его как массив из двух 16-битных целых чисел.

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

Логический тип [ править ]

Тип Boolean представляет значения true и false . Хотя возможны только два значения, они редко реализуются как одна двоичная цифра по соображениям эффективности. Многие языки программирования не имеют явного логического типа, вместо этого интерпретируя (например) 0 как ложь, а другие значения как истину. Логические данные относятся к логической структуре того, как язык интерпретируется на машинном языке. В этом случае логический 0 относится к логике False. Истина всегда ненулевой, особенно такой, который известен как логическое 1.

Перечисления [ править ]

Перечислимый тип имеет различные значения, которые могут быть сопоставлены и присвоенными, но которые не обязательно имеют какое - либо конкретное представления бетонного в памяти компьютера; компиляторы и интерпретаторы могут представлять их произвольно. Например, четыре масти в колоде игральных карт могут быть четырьмя счетчиками с именами КЛУБ , АЛМАЗ , СЕРДЦЕ , ЛОПАТА , принадлежащими пронумерованному типу с именем масть . Если объявлена ​​переменная V имеющая костюмв качестве типа данных ему можно присвоить любое из этих четырех значений. Некоторые реализации позволяют программистам присваивать целочисленные значения значениям перечисления или даже рассматривать их как эквивалентные целым числам по типу.

Числовые типы [ править ]

Такие как:

  • В число типов данных, или «не-дробные числа». Могут быть подтипами в соответствии с их способностью содержать отрицательные значения (например, unsignedв C и C ++). Также может иметь небольшое количество предопределенных подтипов (например, shortи longв C / C ++); или позволить пользователям свободно определять поддиапазоны, такие как 1..12 (например, Pascal / Ada ).
  • Типы данных с плавающей запятой обычно представляют значения как дробные значения высокой точности ( рациональные числа , математически), но иногда их ошибочно называют реальными числами (напоминающими математические действительные числа ). У них обычно есть предопределенные пределы как для их максимальных значений, так и для их точности. Обычно хранится внутри в форме a × 2 b (где a и b - целые числа), но отображается в знакомой десятичной форме.
  • Типы данных с фиксированной точкой удобны для представления денежных величин. Они часто реализуются внутри как целые числа, что приводит к заранее определенным ограничениям.
  • Числовые типы Bignum или произвольной точности не имеют предопределенных ограничений. Они не являются примитивными типами и используются редко из соображений эффективности.

Составные типы [ править ]

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

  • Массив (называемая также вектор, список , или последовательность) хранит число элементов и обеспечить произвольный доступ к отдельным элементам. Элементы массива обычно (но не во всех контекстах) должны быть одного типа. Массивы могут быть фиксированной длины или расширяемыми. Индексы в массиве обычно должны быть целыми числами (в противном случае можно подчеркнуть это ослабление, говоря об ассоциативном массиве ) из определенного диапазона (если не все индексы в этом диапазоне соответствуют элементам, это может быть разреженный массив ).
  • Запись (также называемая кортежем или структурой) Записи относятся к простейшим структурам данных . Запись - это значение, которое содержит другие значения, обычно с фиксированным числом и последовательностью и обычно индексируемые по именам. Элементы записей обычно называют полями или членами .
  • Союз . Определение типа объединения будет указывать, какой из ряда разрешенных типов примитивов может храниться в его экземплярах, например, «с плавающей точкой или длинное целое число». В отличие от записи , которая может содержать число с плавающей запятой и целое число; тогда как в объединении разрешен только один тип.
    • Меченого союз (также называемый вариант , вариант записи, дискриминированным объединение или объединение непересекающихся) содержит дополнительное поле , указывающее его текущий тип для повышения безопасности типа.
  • Множество не является абстрактной структурой данных , которая может хранить определенные значения, без какого - либо конкретного порядка , и не повторяется значение. Сами значения не извлекаются из наборов, скорее, значение проверяется на членство, чтобы получить логическое значение «in» или «not in».
  • Объект содержит ряд полей данных, как записи, а также ряд подпрограмм для доступа или модификации их, называемые методы .

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

Строковые и текстовые типы [ править ]

Такие как:

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

Типы символов и строк могут хранить последовательности символов из набора символов, такого как ASCII . Поскольку большинство наборов символов включают цифры , возможна числовая строка, например "1234". Однако во многих языках они рассматриваются как принадлежащие к другому типу числового значения 1234.

Типы символов и строк могут иметь разные подтипы в зависимости от требуемой «ширины» символа. Исходный 7-битный ASCII оказался ограниченным и был заменен 8- и 16-битными наборами, которые могут кодировать широкий спектр нелатинских алфавитов (таких как иврит и китайский ) и другие символы. Строки могут быть растянутыми по размеру или иметь фиксированный размер, даже на одном языке программирования. Они также могут быть разделены на подтипы по их максимальному размеру.

Примечание. Строки не являются примитивным типом данных во всех языках. В C , например, они состоят из массива символов.

Абстрактные типы данных [ править ]

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

Помимо проверки, спецификацию можно сразу превратить в реализацию. OBJ семейство языков программирования, например баз на эту опцию , используя уравнения для описания и переписывания запускать их. Алгебраическая спецификация [3] была важным предметом исследований в CS около 1980 года и почти синонимом абстрактных типов данных в то время. Он имеет математическую основу в Универсальной алгебре . [4] Язык спецификации можно сделать более выразительным, допустив другие формулы, а не только уравнения.

Типичный пример - иерархия типов данных list , bag и set . Все эти типы данных могут быть объявлены с помощью трех операций: null , который создает пустой контейнер, single , который создает контейнер из одного элемента, и append , который объединяет два контейнера одного типа. Полная спецификация для трех типов данных может быть затем дана следующими правилами для этих операций:

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

Другие типы [ править ]

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

Указатели и ссылки [ править ]

Основным несоставным производным типом является указатель , тип данных, значение которого напрямую ссылается (или «указывает») на другое значение, хранящееся в другом месте в памяти компьютера, используя его адрес . Это примитивный вид справки . (В повседневной жизни номер страницы в книге можно рассматривать как часть данных, которая относится к другой). Указатели часто хранятся в формате, похожем на целое число; однако попытка разыменования или "поиска" указателя, значение которого никогда не было допустимым адресом памяти, приведет к сбою программы. Чтобы решить эту потенциальную проблему, указатели считаются отдельным типом по отношению к типу данных, на которые они указывают, даже если базовое представление такое же.

Типы функций [ править ]

Хотя функциям тоже может быть назначен тип, их тип не считается типом данных в настройках этой статьи. Здесь данные рассматриваются в отличие от алгоритмов . В программировании функции сильно связаны с последними. Но поскольку центральным мотивом универсальной обработки данных является то, что алгоритмы могут быть представлены в виде данных , например текстового описания и двоичных программ, контраст данных и функций имеет свои пределы. И наоборот, функции можно использовать и для кодирования данных . Многие современные системы типов сосредоточены на функциональных типах, а многие современные языки интерпретируют функции как первоклассные граждане .

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

Мета-типы [ править ]

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

Типы утилит [ править ]

Для удобства, языки высокого уровня могут поставлять типы готовых данных «реального мира», например , время , даты и денежных ценностей и памяти , даже если язык позволяет им быть построены из примитивных типов.

Системы типов [ править ]

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

Компилятор может использовать статический тип значения для оптимизации хранения он нуждается и выбор алгоритмов для операций по стоимости. Во многих компиляторах Cfloat тип данных, например, представлен в 32- битном формате в соответствии со спецификацией IEEE для чисел с плавающей запятой одинарной точности . Таким образом, они будут использовать микропроцессорные операции с плавающей запятой над этими значениями (сложение с плавающей запятой, умножение и т. Д.).

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

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

См. Также [ править ]

  • Типы данных C
  • Словарь с данными
  • Функциональное программирование
  • вид
  • Теория типов для математических моделей типов
  • Система типов для различных вариантов набора текста на языке программирования
  • Преобразование типов

Ссылки [ править ]

  1. ^ напечатайте в бесплатном он-лайн словаре по вычислительной технике
  2. Перейти ↑ Shaffer, CA (2011). Структуры данных и анализ алгоритмов в C ++ (3-е изд.). Минеола, Нью-Йорк: Дувр. 1.2. ISBN 978-0-486-48582-9.
  3. ^ Эриг, Х. (1985). Основы алгебраической спецификации 1 - Уравнения и начальная семантика . Springer-Verlag. ISBN 0-387-13718-1.
  4. ^ Wechler, Вольфганг (1992). Универсальная алгебра для компьютерных ученых . Springer-Verlag. ISBN 0-387-54280-9.

Дальнейшее чтение [ править ]

  • Парнас, Дэвид Л .; Шор, Джон Э .; Вайс, Дэвид (1976). «Абстрактные типы, определенные как классы переменных». Материалы конференции 1976 г. по данным: абстракция, определение и структура : 149–154. DOI : 10.1145 / 800237.807133 . S2CID  14448258 .
  • Карделли, Лука ; Вегнер, Питер (декабрь 1985 г.). «О понимании типов, абстракции данных и полиморфизма» (PDF) . ACM Computing Surveys . 17 (4): 471–523. CiteSeerX  10.1.1.117.695 . DOI : 10.1145 / 6041.6042 . ISSN  0360-0300 . S2CID  2921816 .
  • Кливленд, Дж. Крейг (1986). Введение в типы данных . Эддисон-Уэсли. ISBN 978-0201119404.

Внешние ссылки [ править ]

  • СМИ, связанные с типами данных на Викискладе?
  • Типы данных Java