- •Введение
- •1 Концепции объектно-ориентированного программирования
- •1.1 Классы и объекты
- •1.2 Геттеры и сеттеры
- •1.3 Перегрузка методов
- •1.4 Ключевые слова this и super
- •1.5 Метод toString()
- •1.6 Конструкторы
- •1.7 Определение класса в Java
- •1.8 Принципы ООП
- •1.8.1 Абстракция
- •1.8.2 Инкапсуляция
- •1.8.3 Наследование
- •1.8.4 Полиморфизм
- •1.9 Переопределение методов
- •1.10 Подстановка
- •1.11 Апкастинг и даункастинг
- •1.13 Абстрактные классы и интерфейсы
- •1.13.1 Абстрактные классы
- •1.13.2 Интерфейсы
- •2 Типы отношений между классами и объектами
- •2.1 Ассоциация
- •2.2 Агрегация
- •2.3 Композиция
- •2.4 Наследование
- •3 Введение во фреймворк «Коллекции». Обобщения
- •3.1 Коллекции
- •3.2 Перебор элементов коллекций
- •3.3 Обобщения
- •3.3.2 Дженерик-методы и универсальные конструкторы
- •3.3.3 Подстановочные символы (wildcard)
- •4 Потоки ввода-вывода и потоки выполнения. Многопоточное программирование
- •4.1 Потоки
- •InputStream
- •OutputStream
- •Символьные потоки
- •Специализированные потоки
- •Файловые потоки
- •Стандартные потоки ввода-вывода
- •Чтение из стандартного ввода
- •Ввод с консоли
- •Форматированный вывод
- •Класс File
- •Методы класса File
- •4.2 Сериализация и десериализация объектов
- •4.2.1 Сериализация
- •4.2.2 Десериализация
- •4.2.3 Исключение данных из сериализации
- •4.2.4 Сериализация статических полей
- •4.2.5 Сериализация с массивом или коллекцией
- •4.2.6 Сериализация Java с наследованием
- •4.2.7 Сериализация Java с агрегированием
- •4.2.8 SerialVersionUID
- •4.3 Потоки выполнения
- •4.4. Жизненный цикл потока
- •4.5 Многопоточность
- •4.5.1 Главный поток
- •4.5.2 Создание и завершение потоков
- •4.5.3 Завершение потока
- •4.5.4 Управление приоритетами
- •4.5.5 Синхронизация потоков
- •4.5.6 Состояния потока
- •4.5.7 Блокировка
- •5 Лямбда-выражения
- •Заключение
- •Литература
- •Глоссарий
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
ФАКУЛЬТЕТ ДИСТАНЦИОННОГО ОБУЧЕНИЯ (ФДО)
Ю. В. Морозова
ПРАКТИКУМ ПО ОБЪЕКТНО-ОРИЕНТИРОВАННОМУ
ПРОГРАММИРОВАНИЮ
Учебное пособие
Томск
2021
УДК 004.438 C++(076.5)
ББК 32.973я73 М 801
Рецензенты:
В. Ф. Тарасенко, д-р техн. наук, профессор кафедры системного анализа и управления Международного факультета управления
Томского государственного университета; П. В. Сенченко, канд. техн. наук, доцент кафедры автоматизации
обработки информации Томского государственного университета систем управления и радиоэлектроники
Морозова Ю. В.
М 801 Практикум по объектно-ориентированному программированию : учебное пособие / Ю. В. Морозова. – Томск : ФДО, ТУСУР, 2021. –
186 с.
Пособие позволяет систематизировать знания в области объектно-ориен- тированного программирования на языке Java, развить навыки разработки программного кода с использованием современных кросс-платформенных инструментальных средств.
Для студентов направлений «Программная инженерия» и «Бизнес-инфор- матика», а также всех, кто продолжает изучать основы объектно-ориентирован- ного программирования на языке Java.
© Морозова Ю. В., 2021 © Оформление.
ФДО, ТУСУР, 2021
3
Оглавление
Введение ...................................................................................................................... |
5 |
|
1 Концепции объектно-ориентированного программирования ...................... |
7 |
|
1.1 |
Классы и объекты............................................................................................ |
7 |
1.2 Геттеры и сеттеры ......................................................................................... |
12 |
|
1.3 |
Перегрузка методов....................................................................................... |
13 |
1.4 |
Ключевые слова this и super......................................................................... |
15 |
1.5 |
Метод toString() ............................................................................................. |
17 |
1.6 |
Конструкторы ................................................................................................ |
18 |
1.7 |
Определение класса в Java ........................................................................... |
23 |
1.8 |
Принципы ООП ............................................................................................. |
26 |
|
1.8.1 Абстракция.......................................................................................... |
26 |
|
1.8.2 Инкапсуляция ..................................................................................... |
28 |
|
1.8.3 Наследование...................................................................................... |
31 |
|
1.8.4 Полиморфизм ..................................................................................... |
33 |
1.9 |
Переопределение методов............................................................................ |
34 |
1.10 Подстановка ................................................................................................. |
36 |
|
1.11 Апкастинг и даункастинг ........................................................................... |
38 |
|
1.12 Оператор instanceof ..................................................................................... |
39 |
|
1.13 Абстрактные классы и интерфейсы .......................................................... |
40 |
|
|
1.13.1 Абстрактные классы ........................................................................ |
40 |
|
1.13.2 Интерфейсы ...................................................................................... |
44 |
2 Типы отношений между классами и объектами............................................ |
49 |
|
2.1 |
Ассоциация .................................................................................................... |
52 |
2.2 |
Агрегация ....................................................................................................... |
53 |
2.3 |
Композиция.................................................................................................... |
53 |
2.4 |
Наследование ................................................................................................. |
54 |
3 |
Введение во фреймворк «Коллекции». Обобщения...................................... |
56 |
|
|
3.1 |
Коллекции ...................................................................................................... |
56 |
|
3.2 |
Перебор элементов коллекций..................................................................... |
60 |
|
3.3 |
Обобщения ..................................................................................................... |
65 |
|
|
3.3.1 Универсальные классы (generic class) и интерфейсы .................... |
70 |
|
|
3.3.2 Дженерик-методы и универсальные конструкторы ....................... |
78 |
|
|
3.3.3 Подстановочные символы (wildcard)............................................... |
81 |
4 |
Потоки ввода-вывода и потоки выполнения. |
|
|
Многопоточное программирование .................................................................... |
88 |
4 |
|
4.1 Потоки ............................................................................................................ |
88 |
4.2 Сериализация и десериализация объектов ............................................... |
100 |
4.2.1 Сериализация.................................................................................... |
102 |
4.2.2 Десериализация ................................................................................ |
103 |
4.2.3 Исключение данных из сериализации ........................................... |
107 |
4.2.4 Сериализация статических полей................................................... |
108 |
4.2.5 Сериализация с массивом или коллекцией ................................... |
112 |
4.2.6 Сериализация Java с наследованием .............................................. |
114 |
4.2.7 Сериализация Java с агрегированием ............................................ |
116 |
4.2.8 SerialVersionUID............................................................................... |
119 |
4.3 Потоки выполнения .................................................................................... |
121 |
4.4. Жизненный цикл потока............................................................................ |
126 |
4.5 Многопоточность ........................................................................................ |
127 |
4.5.1 Главный поток .................................................................................. |
128 |
4.5.2 Создание и завершение потоков..................................................... |
129 |
4.5.3 Завершение потока........................................................................... |
132 |
4.5.4 Управление приоритетами .............................................................. |
134 |
4.5.5 Синхронизация потоков .................................................................. |
136 |
4.5.6 Состояния потока ............................................................................. |
153 |
4.5.7 Блокировка........................................................................................ |
154 |
5 Лямбда-выражения............................................................................................ |
158 |
Заключение ............................................................................................................. |
180 |
Литература.............................................................................................................. |
181 |
Глоссарий ................................................................................................................ |
183 |
5
Введение
Современные технологии объектно-ориентированного программирования интенсивно развиваются, поэтому на данный момент программисту недостаточно понимать простейшие принципы ООП (инкапсуляцию, абстракцию, полиморфизм, наследование). В настоящее время появилось множество практик, соблюдение которых способствует экономии времени. Но несмотря на прогресс, эти принципы ООП являются основополагающими элементами и составляют основу языка программирования Java. Это означает, что программа, написанная на языке Java, должна строго соответствовать парадигме ООП, т. е. быть основана на использовании в программе объектов и классов.
Целью данного курса является углубленное изучение вопросов объектноориентированного программирования, способов создания и управления состояниями потоков, решение основных проблем при работе с потоками и синхронизацией. Рассмотрены потоки, дженерики и лямбда-выражения, которые были введены в Java 8 и сильно облегчили написание программного кода. Многие современные проекты успешно внедрили нововведения и используют их повседневно.
Для изучения данного учебного пособия необходимо знакомство с основными понятиями языка Java, такими как переменные, типы данных, массивы, методы и т. д. Пособие будет интересно студентам бакалавриата и всем интересующимся объектно-ориентированным программированием и его реализацией на языке Java.
Соглашения, принятые в учебном пособии
Для улучшения восприятия материала в данном учебном пособии используются пиктограммы и специальное выделение важной информации.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Эта пиктограмма означает «Внимание!». Здесь выделена важная информация, требующая акцента на ней. Автор может поделиться с читателем опытом, чтобы помочь избежать некоторых ошибок.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
6
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Эта пиктограмма означает определение или новое понятие.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
В блоке «На заметку» автор может указать дополнительные сведения или другой взгляд на изучаемый предмет, чтобы помочь читателю лучше понять основные идеи.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · |
|
Пример · · · · · · · · · · · · · · · · · · · · · · · · · |
|
|
|
Эта пиктограмма означает пример. В данном блоке автор может привести практический пример для пояснения и разбора основных моментов, отраженных
втеоретическом материале.
·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · |
|
Выводы · · · · · · · · · · · · · · · · · · · · · · · · · |
|
|
|
Эта пиктограмма означает выводы. Здесь автор подводит итоги, обобщает изложенный материал или проводит анализ.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Контрольные вопросы по главе
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·