Cтраница 2
Простейшим понятием, широко применяемым в языках программирования ЭВМ, является понятие типа данных. Основными широко используемыми типами данных, которые подробно будут рассмотрены в гл. [16]
Более того, определение типа данных как многоосновной алгебры плохо согласуется с понятием типа данных в языках программирования, где тип всегда связывается с одной основой и относящимися к ней операциями. [17]
Так же как в тематике баз данных центральным является понятие модели данных, в языках программирования стержневым стало понятие типа данных. Как показано в предыдущих разделах, согласно современной трактовке тип данных определяет множество объектов ( значений) посредством множества операций. Таким образом, задать тип данных - значит определить множество объектов, множество операций над ними и множество правил ( аксиом, ограничений), указывающих допустимое сочетание или применимость операций к тому или иному объекту ( состоянию) типа данных. Как и модели данных, типы данных интенсивно исследуются с различных точек зрения, среди которых наибольшее распространение получило теоретико-множественное и, в частности, алгебраическое обоснование типа данных, рассмотренное в предыдущих разделах. [18]
Благодаря введению такого понятия описания типа данных сигнатура алгебры разбивается на ряд фрагментов ( по количеству основ), в каждом из которых вокруг данного имени основы концентрируется определенный круг имен операций, и такой фрагмент мы связываем с понятием типа данных. Для различения этих фрагментов, очевидно, их необходимо именовать. Немедленные вопросы: как соотносятся между собой имя основы и имя типа данных и соответственно чем индексируются операции: именами основ или именами типов. [19]
При таком иерархическом описании необходимо четко определять данные Д -, существующие на каждом L - м уровне иерархии, а также разрешенные при этом операции FY В этом смысле DI и FI естественно считать единым понятием, что говорит о важности понятия типа данных. Абстрагированием данных называют абстрактное определение типа данных ( /) -, F), а определенный таким образом тип данных - абстрактным типом данных. [20]
Следующий вопрос: по какому принципу подбирается список операций данного типа. Если мы хотим следовать понятию типа данных как множества значений, определяемому множеством операций, то должны связывать с типом данных все необходимые операции по созданию и анализу этих значений. Такие группы операций были названы в разд. Поскольку мы хотим, чтобы все значения данного типа создавались его операциями, в список операций типа включаются все конструкторы. Точно так же в него включаются все необходимые анализаторы. [21]
В то же время каждый программист, конструирующий или исследующий тип данных, рассматривает его как некоторый фрагмент алгебры, заключающий в себе определенный список операций и формирующий определенное множество значений. Поэтому, рассуждая о типах данных, необходимо различать понятие типа данных как отдельного индивидуума и понятие системы типов данных программы или языка программирования. [22]
Клоны типа K1VF применяются в программировании в связи с понятием типа данных. [23]
Он поставил цель построить алгебраическую семантику абстрактного типа, максимально приближенную к программистскому понятию типа данных как отдельного объекта и согласующуюся с идеей иерархического построения системы типов данных. Принципиальной особенностью предложенной трактовки является учет только минимально необходимой информации о примитивных типах. К ней относятся все те основы расширяемой алгебры, имена которых встречаются в области определения и области значений конструируемых операций, и те ее операции, которые используются в аксиомах спецификации нового типа. Благодаря этому модель типа данных может быть представлена таким редуктом совокупной алгебры системы типов данных, который необходим для поддержки операций конструируемого типа. [24]
Действительно, моделирование некоторой реальности будет осуществляться проще и естественнее, если инструмент моделирования будет позволять разбивать моделируемые объекты на группы ( типы) и манипулировать с объектами каждой группы наиболее приемлемыми для них средствами. Поэтому нет ничего удивительного, что языки программирования как один из инструментов моделирования реального мира интенсивно используют понятие типа данных. [25]
Рассматриваемые в данной главе языки программирования существенно различаются по набору своих конструкций и формам их описания. Чтобы иметь единый инструмент для сопоставления различных конструкций различных языков, будем использовать в качестве методической основы их анализа введенное выше понятие типа данных. [26]
Классификация есть форма абстракции, посредством которой набор объектов рассматривается как объект более высокого уровня - класс объектов, характеризующий свойства каждого принадлежащего ему объекта. Классификация обеспечивает представление связи экземпляр чего-либо между классом объектов в схеме и объектом в базе данных. Нетрудно видеть, что такое понятие класса объектов соответствует самому понятию типа данных. [27]
Приведенные определения нуждаются в нескольких уточнениях. Во-первых, любая модель данных имеет дело не только с родовыми, но и с конкретными типами данных, как, например, булевский, целый и вещественный типы. Во-вторых, модель содержит не только набор типов данных, но и языковые средства спецификации ограничений целостности и формирования запросов к базе данных, которые необходимо связать с понятиями типов данных. Следует не забывать также, что все типы модели данных связаны посредством операций в единую систему типов. Как показано в предыдущих разделах, система взаимосвязанных типов представляет собой многоосновную алгебру. Однако поскольку каждая модель данных задает только спецификации типов данных, то правильнее сказать, что она является представлением некоторой теории многоосновных алгебр. В то же время любая СУБД, реализующая данную модель, является алгеброй данной теории. [28]
Если же говорить о системе типов языка программирования в целом, включая в нее как типы, предоставляемые пользователю, так и те типы, которые фигурируют на уровне трансляции, то становится возможным указать родовые типы записей и объединений, которые конкретизируются при вычислении программы как данного. Более того, каждый, кто создавал транслятор языка программирования с типами записей, хорошо знает, что для обработки определений всех типов записей имеется одна процедура, воспринимающая в качестве параметров описания полей записи и конструирующая на их основе конкретный тип записи. Вычисление этой процедуры связано с объектами таких необычных типов, как описание имени, последовательность описания имен, которые выступают в качестве фактических параметров, конкретизирующих вырабатываемый результат. Осознание данного факта приводит к необходимости распространения понятия типа данных на все конструкции языка программирования. Это хорошо согласуется с представленной выше концепцией исполнения программы, базирующейся на принципах смешанных вычислений. Новый взгляд на систему типов позволяет, в частности, считать средства задания типов записей и объединений проекцией средств цельной системы типов на ее пользовательскую часть. [29]
В постоянно появляющихся новых языках программирования предлагаются все новые и новые средства конструирования типов данных. К ставшим уже традиционными простым и структурным типам добавляются средства конструирования абстрактных, инкапсулированных, полиморфных и других типов данных. Кроме того, в некоторых языках [90, 149] появилось понятие класса как дополнительное к понятию типа данных. [30]