Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Технологии обработки информации на Java. Учебное пособие
.pdf
Министерство образования и науки Российской Федерации
Саратовский государственный технический университет
А.В. Ермаков
ТЕХНОЛОГИИ ОБРАБОТКИ
ИНФОРМАЦИИ НА 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
