Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии обработки информации на Java. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
Министерство образования и науки Российской Федерации
Саратовский государственный технический университет
А.В. Ермаков
ТЕХНОЛОГИИ ОБРАБОТКИ
ИНФОРМАЦИИ НА JAVA
для студентов специальностей «Информационные системы
и технологии», направлений «Информационные системы
и технологии», «Информационные технологии», «Информатика
и вычислительная техника», «Программная инженерия»
Саратов 2015
1
УДК 004.8 ББК 32
Е 72
Рецензенты:
Кафедра математической экономики
Саратовского государственного университета имени Н.Г. Чернышевского
Доктор технических наук, профессор В.А. Кушников
Одобрено
редакционно-издательским советом
Саратовского государственного технического университета
Ермаков А.В.
Е 72 Технологии обработки информации на Java: учеб. пособие /
А.В. Ермаков. Саратов: Сарат. гос. техн. ун-т, 201
5. 48 с.
ISBN 978-5-7433-2841-3
В учебном пособии дано описание основных способов хранения ин­формации в языке программирования Java, описаны операции над прими­тивами и особенности их представления, связь с классами-обертками. Приведены способы хранения ссылочных типов, а также особенности об­ращения к ссылочным типам, включая обобщенные (генерик) ссылки.
Пособие предназначено для студентов, изучающих информационные технологии, однако также может быть полезно для преподавателей выс­шей школы, аспирантов, студентов бакалавриата и магистратуры соответ­ствующих направлений.
УДК 004.8 ББК 32
© Саратовский государственный
технический университет, 2015
ISBN 978-5-7433-2841-3 © Ермаков А.В. 2015
2
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ ............................................................................................................. 4
ГЛАВА 1. Грамматики ......................................................................................... 6
1.1. Контекстно-свободные грамматики ........................................................... 6
1.2. Лексические грамматики ............................................................................. 6
1.3. Синтаксические грамматики ....................................................................... 6
1.4. Нотации грамматик ...................................................................................... 7
ГЛАВА 2. Типы, Значения и Переменные ..................................................... 10
2.1. Виды Типов данных и Значений ............................................................... 10
2.2. Примитивные Типы данных и Значения .................................................. 11
2.2.1. Целочисленные Типы и Значения ...................................................... 11
2.2.2. Операции над целочисленными значениями .................................... 12
2.2.3. Вещественные Типы, Форматы и Значения ..................................... 14
2.2.4. Операции над вещественными числами ...........................................
17
2.2.5. Тип boolean и Логические Значения .................................................. 20
2.3. Ссылочные Типы и Значения .................................................................... 21
2.3.1. Объекты ................................................................................................ 23
2.3.2. Класс Object .......................................................................................... 26
2.3.3. Класс String .......................................................................................... 26
2.3.4. Когда Ссылочные типы являются Одними и теми же ..................... 26
2.4. Типовые переменные ................................................................................. 27
2.5. Параметризованные Типы ......................................................................... 29
2.5.1. Типовые аргументы и Маски типов .................................................. 30
2.5.2. Члены и Конструкторы Параметризованных Типов ....................... 33
2.6. Стирание Типов .......................................................................................... 34
2.7. Материализованные Типы ......................................................................... 34
2.8. Необработанные Типы ............................................................................... 35
2.9. Типовое Пересечение ................................................................................. 40
2.10. Подтипы ..................................................................................................... 41
2.10.1. Отношения подтипов между пр
имитивными типами ................... 41
2.10.2. Отношения подтипов между Классами и Интерфейсами ............. 41
2.10.3. Отношения подтипов между Массивами ........................................ 42
2.11. Где используются Типы ....................................................................... 42
КОНТРОЛЬНЫЕ ВОПРОСЫ .......................................................................... 45
СПИСОК ЛИТЕРАТУРЫ .................................................................................. 46
3
ВВЕДЕНИЕ
Отправной точкой развития информационных технологий можно
считать появление задачи автоматизации обработки информации. Обра­ботка представляет собой преобразование информации из одной формы в другую, производимое по строгим формальным правилам.
Изначально под обработкой информации понималось выполнение
простых арифметических действий, включая сложение, умножение, деле­ние и вычитание. В вопросах создания механических вычислительных ма­шин успели отметиться мн
огие известные ученые, включая Леонардо да Винчи. В XVIII веке к обработке информации добавляется задача вычис­ления логарифмов. В качестве исторического анекдота можно вспомнить, что компьютером тогда назывался человек, занимавшийся вычислением логарифмов для логарифмических таблиц.
Современный этап развития информационных технологий диктует понятие обработки информации гораздо шире. Прежде всего, существу­ет большая р
азница между информацией и данными. Информацией бу­дем считать любые сведения об окружающем мире, которые возможно выразить каким-либо образом. С точки зрения ЭВМ информация обра­батываться не может, так как не имеет структурированной формы пред­ставления.
Данными будем называть структурированную форму представления
информации. Одна и та же информация может быт
ь преобразована в раз­ные формы данных. В ЭВМ хранятся данные, и не может храниться ин­формация. При этом все операции с данными внутри ЭВМ, исключая во­просы хранения и передачи данных, можно свести к её обработке.
В этом учебном пособии мы будем говорить, что обработка инфор-
мации представля
ет собой процесс преобразования информации в какой­либо формат данных. Все операции, выполняемые ЭВМ0 мы будем назы­вать обработкой данных.
Ключевым вопросом, с точки зрения обработки данных, является их структура. Форма представления данных устанавливает границы возмож­ностей и допустимые типы операций. Отсюда важнейшей задачей в про­цессе разработки ПО является выявление испо
льзуемой информации и вы­бор корректного способа её представления в виде данных в соответствии с задачей.
Важной особенностью современного этапа развития процессов раз­работки программного обеспечения является требование быстрой разра­ботки. Современная промышленная разработка ПО требует, чтобы первый прототип приложения был получен еще в начале процесса разработки, и при этом содерж
ал как можно меньше ошибок, особенно типовых. От-
талкиваясь от этой идеи, современные языки программирования, исполь-
4
зующиеся в промышленной разработке ПО, предлагают специфические структуры, которые можно использовать при разработке.
Данное пособие сконцентрировано на вопросе представления данных в языке программирования Java седьмой редакции. Язык программирова­ния Java является одним из лидеров рынка разработки программного обес­печения. Он обладает развитой системой типов данных и предоставляет большой объем программных интерфейсов, реализующих структуры дан­ных. Предлагаемая сист
ема типов позволяет значительно снизить количе­ство ошибок в процессе разработки и ускорить её. Понимание принципа хранения данных в Java и принципа их использования крайне важно лю­бому разработчику при реализации программных решений.
К преимуществам языка Java перед аналогами относится то, что его разработка производится под эгидой Java Community. Это сообщество раз­работчиков, устан
овивших строгий регламент разработки самого языка и его API. В соответствии с регламентом, разработка языка ведется специ­альными комиссиями под надзором сообщества, в котором каждый при необходимости может предложить значимые правки в стандарт. После разработки стандарта и на его основе выполняется эталонная реализация, которая и используется в большинстве случаев. Такой подход гарантирует, что язык Java не может генерировать неожиданного поведения, так как он строго описан. Да
нное пособие написано на основе главной спецификации:
Java language specification.
Представленное читателю учебное пособие не является самостоя­тельной книгой, с помощью которой можно изучить программирование на зыке Java.
5
ГЛАВА 1. ГРАММАТИКИ
Глава описывает контекстно-свободные грамматики, используемые в этом пособии для определения лексической и синтаксической структуры программы.
1.1. Контекстно-свободные грамматики
Контекстно-свободные грамматики состоят из набора продукций. Каждая продукция имеет абстрактный символ, называемый нетерминаль­ным, находящийся на левой стороне, дальнейшую последовательность из одного и более нетерминальных символов, и наконец, терминальный сим­вол, если он является самы
м правым символом последовательности. Для каждой грамматики терминальные символы выбираются из специфическо­го алфавита.
Начиная с последовательности, состоящей из одного выделенного нетерминального символа, называемого целевым символом, имеющаяся контекстно-свободная грамматика определяет язык, а конкретно – набор возможных последовательностей терминальных символов, которые по­лучаются в результате по
следовательной перестановки любых нетерми­нальных символов, в последовательности символов с ограниченной пра­вой стороной для которой переставляемые символы являются левой сто­роной.
1.2. Лексические грамматики
Лексическая грамматика языка Java определяется собственными терминальными символами, составленными из символов набора Unicode. Она определяет набор продукций, начиная с ключевого символа Вход, ко­торый описывает то, как последоват
ельность Unicode символов преобразу-
ется в последовательность входных элементов.
Эти входные элементы, за исключением пробелов и комментариев, которые будут отброшены при компиляции, выбираются из терминальных символов синтаксической грамматики языка Java и называются лексемами. Лексемы делятся на идентификаторы, ключевые слова, литералы, раздели­тели и операции.
1.3. Синтаксические грамматики
Синтаксическая грамматика языка программирования Java состо
ит из лексем, определенных лексической грамматикой и его терминальными символами. Она определяет набор продукций, начиная с ключевого симво-
6
ла МодульКомпиляции, который описывает, как последовательность лексем может формировать синтаксически корректную программу.
1.4. Нотации грамматик
Всякий раз, как данное пособие будет делать отсылки к терминаль­ным символам, они будут показываться шрифтом fixed width в продукциях лексической и синтаксической грамматик. Данная форма подразумевает, что терминальные символы обязаны появляться в программе именно в той форме за
писи, которая приведена в тексте.
Нетерминальные символы показаны курсивом. Определение нетер­миналов вводится с помощью имени, после которого ставится двоеточие. Одна или более альтернативных правосторонних форм нетерминалов должны располагаться на следующих за терминалом строчках.
К примеру, синтаксическое определение:
ЕслиТоИнструкция:
if ( Выражение ) Инструкция
сообщает, что нетерминал ЕслиТоИнструкция представляется лексемой if, за которой следует смотрящая влево скобка, за которой следует Выражение, за которым следует правая скобка, после которой следует Инструкция.
Другой пример синтаксического определения:
СписокАргументов:
Аргумент
СписокАргументов, Аргумент
показывает, что нетерминал СписокАргументов может представляться или одним Аргумент или же СписокАргументов, за которым следует запятая, за которой следует Аргумент. Это определение для СпискаАргументов является рекурсивным, так как описывается само через себя. В результате должно быть понятно, что Список Аргументов может состоять из любого положительного числа аргументов. Такое рекурсивное определение нетерминалов является наиболее часто применяющимся способом.
Нижний индекс «опц», который может появляться после терминалов или нетерминалов, обозначает опциональный (необязательный) символ. Альтернатива, указывающая опциональный символ, обычно демонстриру­ет два способа записи правой стороны предиката: одну, в которой опцио­нального символа нет, и одну, в которую он включен.
Это означает, что:
ИнструкцияПрерывания:
break Идентификатор
это соглашение для обозначения:
ИнструкцияПрерывания:
break ;
break Идентификатор;
опц
;
7
и то, что:
БазоваяИнструкцияFor:
for ( ИнициализаияЦикла
; УсловиеВыполненияИтерации
опц
; ШагСчетчика
опц
опц
Инструкция
это соглашение для следующего обозначения:
БазоваяИнструкцияFor:
for ( ; УсловиеВыполненияИтерации
for (ИнициализаияЦикла; УсловиеВыполненияИтерации
; ШагСчетчика
опц
) Инструкция
опц
; ШагСчетчика
опц
опц
Инструкция
что в свою очередь обозначение для:
БазоваяИнструкцияFor:
for ( ; ; ШагСчетчика
for ( ; УсловиеВыполненияИтерации; ШагСчетчика
for (ИнициализаияЦикла; ; ШагСчетчика
for (ИнициализаияЦикла; УсловиеВыполненияИтерации; ШагСчетчика
) Инструкция
опц
опц
) Инструкция
опц
) Инструкция
опц
Инструкция
что в свою очередь обозначение для:
БазоваяИнструкцияFor:
for ( ; ; ) Инструкция
for ( ; ; ШагСчетчика) Инструкция
for ( ; УсловиеВыполненияИтерации;) Инструкция
for ( ; УсловиеВыполненияИтерации; ШагСчетчика) Инструкция
for (ИнициализаияЦикла; ; ) Инструкция
for (ИнициализаияЦикла; ; ШагСчетчика) Инструкция
for (ИнициализаияЦикла; УсловиеВыполненияИтерации;) Инструкция
for (ИнициализаияЦикла; УсловиеВыполненияИтерации; ШагСчетчика)
Инструкция
таким образом, нетерминал БазоваяИнструкцияFor на самом деле имеет восемь различных способов записи правой стороны.
Очень длинные формы записи правой стороны могут быть продол­жены на второй строчке с заметным отступом на этой второй линии.
К примеру, синтаксическая грамматика, содержащая эту продукцию:
ОбъявлениеКонструктора:
МодификаторыКонструктора
Выбрасывает
ТелоКонструктора
опц
ИмяКонструктора
опц
указывает одну правую сторону для нетерминала ОбъявлениеКонструктора.
Когда после двоеточия в определении грамматики следуют слова «одно из», они означают, что каждый из терминальных символов на сле­дующей строке или нескольких строках являются определением одной из возможных альтернатив.
К примеру, лексическая грамматика содержит следующую продукцию:
ОтНуляДоТрех: один из
0 1 2 3
)
)
)
8
Что означает укороченную запись для:
ОтНуляДоТрех:
0
1
2
3
В том случае, если альтернативы в лексической продукции являются лексемами, это демонстрируется набором символов, которые могут фор­мировать такую лексему.
Например, такое определение:
ЛогическийЛитерал: один из
true false
В лексической грамматике является сокращением для:
ЛогическийЛитерал:
true
false
Правая сторона лексической продукции может указывать запреще­ние на использование конкретного расширения путем использования фра­зы «но не», показывая далее, какое расширение является запрещенным.
К примеру, такое имеет место быть в продукции для ВходнойСимвол(§3.4) и
Идентификатор:
ВходнойСимвол:
ВходнойСимволUnicode но не CR или LF
Идентификатор:
СимволыИдентификатора но не КлючевоеСлово или ЛогическийЛитерал или NullЛитерал
Наконец, несколько нетерминальных символов могут быть приведе­ны в описательной форме фразой в романском шрифте в тех случаях, когда непрактично указывать все возможные альтернативы.
К примеру:
ИсходныеВходныеСимволы:
любой Unicode символ
9
ГЛАВА 2. ТИПЫ, ЗНАЧЕНИЯ И ПЕРЕМЕННЫЕ
Язык программирования Java имеет статическую типизацию, откуда следует, что для каждой переменной и каждого выражения во время компи­ляции должен быть известен его тип.
Язык программирования Java – это также язык и со строгой типиза­цией, так как указание типа ограничивает набор значений, которые могут иметь переменные, или которые могут быть пол нения выражения, а также ограничивает набор операций, которые могут выполняться с этими значениями, и определяет смысл самих операций. Строгая статическая типизация позволяет находить многие ошибки еще на этапе компиляции исходного кода.
В языке программирования Java все типы делятся на две категории: примитивные типы и ссылочные типы. К примитивным типам относится boolean тип (лог
целые типы byte, short, int, long, и char, а также вещественные типы float и double. Ссылочные типы представлены классами, интер­фейсами и массивами. Кроме того, выделен специальный null-тип. Объект –
это динамически созданный экземпляр класса или динамически созданный массив. Значениями ссылочных типо ложенные в памяти JVM. Все объекты, включая массивы, поддерживают методы класса Object. Строковые литералы представляют собой объекты класса String.
Типы данных языка Java делятся на две группы: примитивные типы и ссылочные типы. Соответственно, существует две группы значений ти­пов данных, которые могут храниться в пер гументы, возвращаться методами, и использоваться в операциях: прими­тивные значения и ссылочные значения.
ический) и числовые типы. Числовые типы делятся на
в являются ссылки на объекты, распо-
2.1. Виды Типов данных и Значений
учены в результате выпол-
еменных, передаваться как ар-
ТипДанных:
ПримитивныйТип
СсылочныйТип
Кроме того, существует специальный null-тип, который не имеет имени. Значение именно этого типа будет у выражения null.
Так как null-тип не имеет имени, невозможно объявить переменную
null-типа, или выполнить приведение к null-типу.
null-ссылкаэто единственное значение выражения имеющего null­тип.
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]