Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 52
Текст из файла (страница 52)
В каждом языке имеется некоторый набор встроегтых прини тивных тип оп данных. Дополнительно в языке могут быть предусмотрены средства, позволяющие программисту определять новые типы данных. Одно из главных различий между ранними языками программирования, такими как ГОКТКАХ или СОВОЕ, и более поздними, такими как)ага и Ада, лежит в области определяемых программистом типов данных (эта тема подробно рассмотрена в разделе 6А). Современный подход к проблеме состоит в том, что в языке должны присутствовать средства для манипулирования типами данных. Это важнейшее свойство, добавленное в язык МЕ, и одна из особенностей моделей объектно-ориентированного программирования, обсуждаемых в главе 7. 5.1.
Свойства типов и объектов 187 Основные элементы спецификиции типа данных следующие: 1) иглрибуты, которые характеризуют объекты данных заданного типа; 2) значения, которые могут принимать объекты заданного типа; 3) операции,которыеопределяютвозможныеманипуляциинадобъектамиданных заданного типа. Например, в случае спецификации для типа данных «массив» атрибуты могут включать количество размерностей массива, допустимый диапазон изменения индекса для каждой размерности и тип данных элементов массива.
Значения могут быть представлены множествами чисел, которые определяют допустимые значения элементов массива, а операции могут включать индексацию элементов массива (каждому элементу соответствует определенный индекс). Возможны также операции для создания массивов, изменения их формы, доступа к некоторым атрибутам (например, верхней и нижней границе диапазона изменения индексов) и выполнения арифметических действий над парами массивов. Ниже перечислены основные элементы реализации тина данных.
1, Способ предстлдвлеяия объектов данных этого типа в памяти компьютера в и роцессе выполнения программы. 2. Способ пре0ставления операций, определенных для этого типа данных, через конкретные алгоритмы и процедуры, которые используются для манипуляций с выбранной формой представления объектов данных в памяти. Реализация типа данных определяет, каким должно быть программное моделирование соответствующих частей виртуального компьютера в терминах более простых базовых конструкций, предоставляемых соответствующим слоем виртуального компьютера.
Последний, в свою очередь, может быть представлен либо непосредственно аппаратными средствами, либо комбинацией аппаратных и программных средств, определенных операционной системой нли микрокодом. Последнее, что требуется определить цри описании типа данных, — это его сиитиксическое преоставление. И спецификация, и реализация мало зависят от конкретных синтаксических форм, используемых в данном языке. Атрибуты объектов данных обычно представлены си~1заксически через объявления или определения типов.
Значения могут представляться литералами или именованными константами. Вызов операций может происходить при помощи специальных символов, встроенных процедур или функций, таких как з1п или гезу, или неявным образом через комбинации других элементов языка. Конкретный вид синтаксического представления не имеет большого значения, но си нтакснческэя информация может быть использована компилятором для определения времени свяаывапия различных атрибутов и, следовательно, позволяет транслятору создать наиболее эффективное представление данных в памяти или выполнить проверку данных на соответствие указанному типу.
Спецификация элементарных типов данных ! Элементирный объект данных может содержать только одно аначение. Класс таких объектов, для которых определены различные операции, называется элемен- 188 Глава 5. Элементарные типы данных тарным типом данных, Хотя в каждом языке программирования, как правило, присутствует свой, отличный от других набор элементарных типов данных и хотя конкретный вид их спецификации в различных языках может существенно разлигаться, тем не менее такие типы, как вещественные и целые числа, булевы значения, перечисления и указатели присутствуют почти во всех языках.
Например, несмотря нато что булев тип данных включен в большинство языков, их спепификации в) ауа и С++ совершенно различны|. Атрибуты. Основные атрибуты любого объекта данных, в частности его имя и тип, остаются неизменными в течение врелтени жизни объекта. Во время работы программы некоторые атрибуты могут храниться в дескрипторе (описателе данных, которы й также называется вектором предварител оной ин формации) как часть этого обьекта данных; другие могут использоваться только для определения местоположения объекта в памяти компьютера и ие использоваться явным образом. Обратите внимание на то, что значение атрибута объекта данных отличается от значения, которое содержится в этом обьекте.
Последнее может изменяться в течение времени жизни объекта и в процессе выполнения программы всегда представлено явным образом. Значения. Тип объекта данных определяет множество допустимых значений, которгяе могут содержаться в этом обьекте. Например, целочисленный тип определяет всевозможные целые числа, которые могут служить значениями объектов данных этого типа. В языке С определены четыре класса целых чисел; 1пг, злогС, ) ело и спас. Поскольку в большинстве компьютеров арифметические операции ца аппаратном уровне реализованы несколькими способами с различной точностью (например, 16-битные и 32-битные целые числа или 32-оитные и 64-битные целые числа), в языке С программист может выбирать между этими различными аппаратными представлениями.
Класс зйогс соответствует наиболее короткому представлению числа, класс 1оло — наиболее длинному аппаратному представлению, а класс зн1 использует наиболее эффективный аппаратный способ представления из возможных. Этот класс может совпадать с классом зйогС или 1олд, а может соответствовать некоторому промежуточному представлению числа. Интересно отметить, что в С символы хранятся как 8-битные целые числа типа сваг, который является подтипом целочисленного типа. Множество значений, допустимых для элементарных объектов данных, обычно является упорядоченным множеством с наименьшим и наибольшим элементамн.
В каждой паре различных значений (элементов упорядоченного множества) одно всегда больше другого. Например, для целочисленного типа дан вы х имеются цаиболыпсе значение, которое может бьгть представлено в памяти компьютера, наименьшее значение и все промежуточные целые числа в их обычной последовательности.
Операции. Набор операций, определенных для какого-то типа данных, задает возможные манипуляции (действня) с обьектамн этого типа. Эти операции могут быть элеметпарными, то есть являться частью определения языка, или они могут В Сь ч булевы в~ ~аления сгое и 1а1зе реализованы через целочисленный тин данных, и поэтому л~абое 'меловое значение (через приведение тинон) лгожет рассыатривагься нах булево, зогла хан в Явка булев тив ланных — зто самостоятельный тио, отличный от целочисленного — Прнчеч науч ред.
5.1. Свойства типов и объектов 189 определяться программистом в виде подпрограмм или методов как часть определения класса. В этой главе мы в основном будем заниматься элементарными операциями; определяемые программистом операции будут рассмотрены более подробно в следующих главах ПРИМЕР 5.3. Сигнатуры элементарных операций 1. Целочисленное сложение — это операция, аргументами которой являются два целочисленных объекта данных, а результатом — также целочисленный объект данных, обычно содержащий значение, равное сумме значений аргументов. Следовательно, спецификация выглядит следующим образом: +; тптедег х тпгедег т тпгедег 2. Операция «=» проверяет на равенство значения двух целочисленных объектов данных.
Результатом выполнения этой операции является булево значение (истина или ложь). Спецификация может быть выражена так: -; тптедег х тптедег -т Воо1еап 3. Операция извлечения квадратного корня, 5()КТ, применима к объектам данных вещественного типа: Всат: геа1 т геа1 Операция является математической функциеи: каждому допустимому входному значению, то есть арйтуигентуг (или набору аргументов), она сопоставляет однозначно определенный результат. У каждой операции имеются некоторая область определения (множество допустимых значений аргументов, на которои и определена зта операция) и обласгль знамений (множество возможных значений для результата выполнения операции).
Действие операции определяет, каковы будут результаты для данного набора входных значений (аргументов). Обычно действие операции задается с помощью алгоритма, который указывает, как следует вычислять результат для любого заданного набора аргументов; но возможны и другие варианты спецификации. Например, для того, чтобы определтпь действие операции умножения, вы можете просто привести таблицу умножения, в которой перечислены результаты перемножения любых пар чисел, вместо того чтобы указывать алгоритм перемножения двух чисел.
Для определения сигнатуры операции требуется указать количество и порядок следования аргументов из области определения операции, а также их тип; также нужно указать порядок следования и типы данных для области значения операции. Для такой спецификации удобно использовать обычный вид записи, используемый в математике: иил операции тип арг х тип арг х ,. тип арг т тип результата В языке С такая запись называется пролтотиполг функции. Операция, у которой имеются два аргумента и один результат, называется бинарной'.
Если у операции имеются один аргумент и один результат, то она называ- Лргуметгты онераннн ггазывают также операндами. — Принеч. ггиуч. лед. 190 Глава 5. Элементарные типы данных ется унарной. Количество аргументов операции часто называется арностью операции. Большая часть примитивныхопераций в языках программирования оинарные или унарные. Для точной спецификации действия операции обычно требуется информация оолее подробная, чем сигнатура. В частности, способ представления аргументов (точнее, типов данных, к которым относятся аргументы) в памяти компьютера обычно определяет, какие действия можно осушествлять с этими аргументами.