Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


—труктуры и типы данных €зыка программировани€




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

Ќа самом деле типы данных различаютс€ уже в базовом јссемблере дл€ процессоров х86 (например, "целое число" и "вещественное число"). Ёто объ€сн€етс€ тем, что дл€ чисел рассматриваемых типов отвод€тс€ различные объемы пам€ти, используютс€ различные регистры микропроцессора, а дл€ операций с ними примен€ютс€ различные команды јссемблера.

 ак правило, типы в €зыках программировани€ не всегда строго соответствуют подобным типам в математике. Ќапример, тип данных "целое число" всех €зыков программировани€ не соответствует прин€тому в математике пон€тию целого числа, в математике указанный тип не имеет ограничений ни сверху, ни снизу (не €вл€етс€ перечислимым), а в €зыках программировани€ эти ограничени€ есть.  ак правило, в €зыках и системах имеетс€ множество целых типов, отличающихс€ допустимым диапазоном значений (определ€емым объемом занимаемой пам€ти). —тоит отметить, что в большинстве реализаций €зыков и систем выход за границу целого типа (переполнение) не приводит к исключительной ситуации (возникновению ошибки времени исполнени€ программы).

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

ѕрин€то различать следующие основные типы данных:

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

ѕеречислимый тип. ћожет хранить только те значени€, которые пр€мо указаны (перечислены) в его описании. „аще всего значени€ перечислимого типа представл€ют собой лишь удобные дл€ человека обозначени€ (например, названи€ дней недели), а компьютер интерпретирует их как целочисленные значени€ (например, названию дн€ недели соответствует его номер). ¬ р€де €зыков определены также типы- диапазоны, которые могут принимать лишь ограниченный набор числовых значений (например, тип данных дл€ номера дн€ в мес€це может принимать значени€ от 1 до 31 включительно). ƒиапазоны удобны тем, что могут обеспечивать встроенный контроль значений переменных от переполнени€. ќбычно диапазоны записываютс€ в следующем виде: 1..31

„исловые типы. ’ран€т числа, к которым могут примен€тьс€ обычные арифметические операции.   числовым типам относ€тс€:

Ј ÷елочисленные типы записываютс€ со знаком + или -, или без знака, по обычным арифметическим правилам. –азличают целочисленные типы со знаком, которые могут принимать как положительные, так и отрицательные значени€ (обычные названи€ типов Ц Integer или Int, Long Int); и без знака, которые могут принимать только неотрицательные значени€ (Word).

Ј ¬ещественные типы могут записыватьс€ в одной из двух форм:

обычна€ запись: 2.5 -3.14 2.

¬ большинстве €зыков программировани€ цела€ часть отдел€етс€ от дробной символом точки;

экспоненциальна€ ("научна€")запись: в этой форме вещественное число представл€етс€ в виде m*10p, где m - мантисса или основание числа, принимающее значение 0.1≤|m|≤1, p - пор€док числа, заданный целочисленной константой. ƒействительно, любое вещественное число можно представить в экспоненциальной форме:

-153.5 -0.1535*103

99.005 0.99005*102

¬о всех IBM‑совместимых компьютерах вещественные числа хран€тс€ как совокупность мантиссы и пор€дка, что позвол€ет упростить операции над ними, использу€ специальную арифметику, отдельно обрабатывающую мантиссу и пор€док. ƒл€ программной записи числа в экспоненциальной форме в качестве обозначени€ "умножить на 10 в степени" используетс€ символ E или e (латинские):

-153.5 -0.1535*103 -0.1535E3 или -1.535E02

99.005 0.99005*102 0.99005E+02

¬ большинстве €зыков различаютс€ вещественные типы обычной (Real или Float) и двойной (Double) точности. ¬ последнем случае под число выдел€етс€ больший объем пам€ти и сохран€етс€ большее число знаков в дробной части.

Ј „исла произвольной точности, обращение с которыми происходит посредством длинной арифметики. ѕримером €зыка с встроенной поддержкой таких типов €вл€етс€ UBASIC, часто примен€емый среди криптографов.

—имвольный тип (char). ’ранит код одного символа. ћогут использоватьс€ различные кодировки. ¬о многих €зыках величины символьного типа записываютс€ как символ, заключенный в апострофы или двойные кавычки. ¬ разных €зыках под типом char может пониматьс€:

Ј набор печатных символов из алфавита, зафиксированного в описании €зыка (дл€ большинства €зыков англо€зычного происхождени€ этот алфавит соответствует кодовому набору ASCII);

Ј произвольна€ комбинаци€ нулей и единиц, размещаемых в одном байте.

¬ первой интерпретации (свойственной €зыкам линии ѕаскаль) дл€ значений типа char определены только операции сравнени€ в соответствии с прин€тым алфавитом. Ќапример, при использовании ASCII выполн€ютс€ соотношени€ 0 < 1 <...< 9 < A < B <...< Z < a < b <...< z; известно, что если значение переменной x удовлетвор€ет условию 0 <= x <= 9, то это значение - цифра; если A <= x <= Z, то значение x - прописна€ буква; если a <= x <= z, то значение x - строчна€ буква и т.д. ѕри использовании этой интерпретации арифметические операции над символьными значени€ми не допускаютс€.

¬о второй интерпретации (свойственной €зыкам линии —и) литеральными константами типа char по-прежнему могут быть печатные символы из прин€того в €зыке алфавита, но возможно использование и числовых констант, задающих желаемое содержимое байта. ¬ этом случае, как правило, над значени€ми типа char возможно выполнение не только операций сравнени€, но и операций целочисленной арифметики.

Ќаконец, в некоторых €зыках €вно различают тип char как чисто символьный тип и тип сверхмалых целых (tiny integer) как тип целых чисел со значени€ми, умещающимис€ в один байт.

¬ современных компьютерах, как правило, поддерживаетс€ целочисленна€ байтова€ арифметика, обеспечивающа€ как первую, так и вторую интерпретацию типа char.

Ћогический тип (bool, boolean, logical). »меет два значени€: истина и ложь.   величинам этого типа могут примен€тьс€ логические операции.  ак правило, данный тип используетс€ в операторах ветвлени€ и циклах. ¬ некоторых €зыках €вл€етс€ подтипом числового типа, при этом ложь (false) равна 0, а истина (true) равна единице или любому ненулевому значению. Ќесмотр€ на то, что дл€ хранени€ значений этого типа теоретически достаточно одного бита, обычно в реализаци€х переменные этого типа занимают один байт пам€ти. ƒл€ всех типов данных, дл€ которых определены операции сравнени€, определены также и правила, по которым эти операции сравнени€ вырабатывают булевские значени€. Ќад булевскими значени€ми возможны операции конъюнкции или логического умножени€ (обозначаетс€ & или AND), дизъюнкции или логического сложени€ (обозначаетс€ | или OR) и отрицани€ (~ или NOT), определ€емые следующими таблицами истинности:

TRUE AND TRUE = TRUE
TRUE AND FALSE = FALSE
FALSE AND TRUE = FALSE
FALSE AND FALSE = FALSE

TRUE OR TRUE = TRUE
TRUE OR FALSE = TRUE
FALSE OR TRUE = TRUE
FALSE OR FALSE = FALSE

NOT FALSE = TRUE
NOT TRUE = FALSE

ћножество (set). ¬ основном определение типа совпадает с обычным математическим пон€тием множества. ƒопустимы стандартные операции с множествами и проверка на принадлежность элемента множеству. ¬ некоторых €зыках рассматриваетс€ как составной тип.

“еперь перечислим и кратко охарактеризуем составные (сложные) типы данных.

ћассив (аrray). ћассивом называют упор€доченный набор однотипных переменных (элементов).  аждый элемент имеет целочисленный пор€дковый номер, называемый индексом. „исло элементов в массиве называют его размерностью. ћассивы используютс€ там, где нужно обработать сразу несколько переменных одного типа - например, оценки всех 20 студентов группы или координаты 10 точек на плоскости. —троку текста можно рассматривать как массив символов, а текст на странице - как массив строк. ѕример одномерного массива Ч вектор в математике, двумерный массив Ч матрица (см. п. 1.2).

—троковый тип (string). ’ранит строку символов. јналогом сложени€ в строковой алгебре €вл€етс€ конкатенаци€ (прибавление одной строки в конец другой строки, сцепление строк). ¬ €зыках, близких к бинарному представлению данных, чаще рассматриваетс€ как массив символов, в €зыках более высокой абстракции зачастую выдел€етс€ в качестве простого.

«апись (структура).  ак и массивы, записи относ€тс€ к составным типам данных. «апись состоит из фиксированного числа элементов, называемых пол€ми.  аждое поле представл€ет собой объект простого типа данных - как правило, строку или число. —ущественно то, что в одну запись могут входить пол€ различного типа, в отличие от массива, все элементы которого однотипны. Ќапример, записью можно считать следующую строку экзаменационной ведомости:

Ѕорисова ё.ј. 4 5 5

ƒанна€ запись состоит из четырех полей: одно поле - строкового типа (фамили€ и инициалы студента), остальные три пол€ - числовые (оценки студента по трем дисциплинам).

Ќа €зыке ѕаскаль описание переменной типа "запись" могло бы выгл€деть следующим образом:

type zap = record

fam: string;

m, inf, h: integer;

end;

«десь zap - им€ нового типа данных, а fam, m, inf и h - имена полей записи. —лужебные слова record Е end в данном случае играют роль операторных скобок, внутри которых записываютс€ пол€ записи с указанием их типов.

‘айловый тип (file). ’ранит только однотипные значени€, доступ к которым осуществл€етс€ только последовательно (файл с произвольным доступом, включенный в некоторые системы программировани€, фактически €вл€етс€ не€вным массивом).

 ласс (class). »спользуетс€ в объектно-ориентированном программировании, подробнее описан в п. 1.4.

Ќе все типы данных представл€ют имеют отношение к описанию каких-либо объектов реального мира, то есть типы, представл€ющие объекты компьютерного мира и €вл€ющиес€ исключительно компьютерными терминами. ѕримеры таких типов:

Ј ”казатель (Pointer). ’ранит адрес в пам€ти компьютера, указывающий на какую-либо информацию, как правило Ч указатель на переменную или массив.

Ј —сылка. ќбъект, указывающий на определенные данные, но не хран€щий их.

ѕроцесс проверки и накладывани€ ограничений Ч контрол€ типов, может выполн€тьс€ во врем€ компил€ции (статическа€ проверка) или во врем€ выполнени€ (динамическа€ проверка).

Ј —татическа€ типизаци€ Ч контроль типов осуществл€етс€ при компил€ции.

Ј ƒинамическа€ типизаци€ Ч контроль типов осуществл€етс€ во врем€ выполнени€.

 онтроль типов также может иметь несколько вариантов реализации.

Ј —трога€ типизаци€ Ч совместимость типов автоматически контролируетс€ трансл€тором:

Ј Ќоминативна€ типизаци€ (англ. nominative type system) Ч совместимость должна быть €вно указана (наследована) при определении типа.

Ј —труктурна€ типизаци€ (англ. structural type system) Ч совместимость определ€етс€ структурой самого типа (типами элементов, из которых построен составной тип).

Ј —лаба€ типизаци€ Ч совместимость типов никак трансл€тором не контролируетс€. —овместимость определ€етс€ и реализуетс€ общим интерфейсом доступа к данным типа.

ѕеречислим основные преимущества от использовани€ типов данных.

Ј Ќадежность. “ипы данных защищают от трех видов ошибок:

1. Ќекорректное присваивание. ѕусть переменна€ объ€влена как имеюща€ числовой тип. “огда попытка присвоить ей символьное или какое-либо другое значение в случае статической типизации приведет к ошибке компил€ции и не даст такой программе запуститьс€. ¬ случае динамической типизации код программы перед выполнением потенциально опасного действи€ сравнит типы данных переменной и значени€ и также выдаст ошибку. ¬се это позвол€ет избежать неправильной работы и "падени€" программы.

2. Ќекорректна€ операци€. ѕозвол€ет избежать попыток применени€ выражений вида "—трока" + 1. ѕоскольку все переменные в пам€ти хран€тс€ как наборы битов, то при отсутствии типов подобна€ операци€ была бы выполнима (и могла дать странный результат). — использованием типов такие ошибки отсекаютс€.

3. Ќекорректна€ передача параметров. ≈сли функци€ "синус" ожидает, что ей будет передан числовой аргумент, то передача ей в качестве параметра строки может иметь непредсказуемые последстви€. ѕри помощи контрол€ типов такие ошибки также отсекаютс€ на этапе компил€ции.

Ј —тандартизаци€. Ѕлагодар€ соглашени€м о типах, поддерживаемых большинством систем программировани€, сложилась ситуаци€, когда программисты могут быстро мен€ть свои рабочие инструменты, а программы не требуют больших переделок при переносе исходных текстов в другую среду.   сожалению, стандартизации по универсальным типам данных еще есть куда развиватьс€.

Ј ƒокументирование. »спользование того или другого типа данных объ€сн€ет намерени€ программиста. Ќапример, типы enum (перечислимый) и bool (логический) в конкретном €зыке программировани€ не об€зательны и вместо них может быть int (целочисленный) Ч но оба они означают, что перед нами не цела€ величина, а одно из нескольких предопределенных значений.






ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-05-07; ћы поможем в написании ваших работ!; просмотров: 5345 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ѕольшинство людей упускают по€вившуюс€ возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © “омас Ёдисон
==> читать все изречени€...

763 - | 590 -


© 2015-2023 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.016 с.