Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум по объектно-ориентированному программированию..pdf
Скачиваний:
16
Добавлен:
05.02.2023
Размер:
3.39 Mб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

ФАКУЛЬТЕТ ДИСТАНЦИОННОГО ОБУЧЕНИЯ (ФДО)

Ю. В. Морозова

ПРАКТИКУМ ПО ОБЪЕКТНО-ОРИЕНТИРОВАННОМУ

ПРОГРАММИРОВАНИЮ

Учебное пособие

Томск

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

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Эта пиктограмма означает определение или новое понятие.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

В блоке «На заметку» автор может указать дополнительные сведения или другой взгляд на изучаемый предмет, чтобы помочь читателю лучше понять основные идеи.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · · ·

 

Пример · · · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

Эта пиктограмма означает пример. В данном блоке автор может привести практический пример для пояснения и разбора основных моментов, отраженных

втеоретическом материале.

·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · · ·

 

Выводы · · · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

Эта пиктограмма означает выводы. Здесь автор подводит итоги, обобщает изложенный материал или проводит анализ.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Контрольные вопросы по главе

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·