Часть 1. Java
Тем: 7
Тема 1. Введение
Содержание
- Структура курса
- Лекции
- Домашние задания
- Дифференцированный зачет
- Hello world
- Класс HelloWorld
- Метод класса main
- Минимальная версия
- Передача имени пользователя в командной строке
- Обработка нескольких имен пользователей
- Cоглашения об именовании
- Основные концепции Java
- Компилятор Java (javac)
- Байт-код и виртуальная машина Java (java)
- Java Runtime Environment
- JIT-компиляция
- Сборка мусора
- Редакции Java-платформы
- Micro Edition
- Standard Edition
- Enterprise Edition
- Cоглашения об именовании
Домашнее задание 1. Hello World
- Установите JDK 17+
-
Скопируйте один из вариантов
HelloWorld
, рассмотренных на практике. -
Откомпилируйте
HelloWorld.java
и получитеHelloWorld.class
. -
Запустите
HelloWorld
и проверьте его работоспособность. -
Создайте скрипт, компилирующий и запускающий
HelloWorld
из командной строки.
Домашнее задание 2. Сумма чисел
-
Разработайте класс
Sum
, который при запуске из командной строки будет складывать переданные в качестве аргументов целые числа и выводить их сумму на консоль. -
Примеры запуска программы:
java Sum 1 2 3
- Результат: 6
java Sum 1 2 -3
- Результат: 0
java Sum "1 2 3"
- Результат: 6
java Sum "1 2" " 3"
- Результат: 6
java Sum " "
- Результат: 0
- цифры;
- знаки
+
и-
; - произвольные пробельные символы.
-
При выполнении задания можно считать, что для представления входных данных
и промежуточных результатов достаточен тип
int
. - Перед выполнением задания ознакомьтесь с документацией к классам String и Integer.
- Для отладочного вывода используйте System.err, тогда он будет игнорироваться проверяющей программой.
Примеры
zipЭкзаменационные вопросы
- Редакции платформы Java. Версии платформы и языка Java. JDK и JRE.
Практические навыки
- Компиляция и запуск программ на Java.
- Реализация простых программ на Java.
Библиография
- Основной сайт по Java
Короткий адрес: java.sun.com - Java Language and Virtual Machine Specifications
- Документация по Java Platform (версия 11)
- Документация по ядру стандартной библиотеки (версия 11)
- Code Conventions for the Java Programming Language
- The Java Tutorials
- Шилдт Г. Java 9. Полное руководство
- Шилдт Г. Java 9. Руководство для начинающих
- Эккель Б. Философия Java (4 издание)
Тема 2. Массивы и ссылки
Содержание
- Одномерные массивы
- Объявление
- Создание
- Длина массива
- Инициализаторы
- Инициализация по-умолчанию
- Итерация
- Многомерные массивы
- Объявление
- Полное и частичное создание
- Непрямоугольные массивы
- Ссылки на массивы
- Ссылки на массивы
- Передача ссылок
- Возврат ссылок
- Ссылки как значения
- Изменения значений по ссылке
- Классы
- Полные имена классов
- Импорт классов
- Создание объектов
- Сборка мусора и уничтожение объектов
- Scanner
- Источники данных
- Строка
- Стандартный ввод
- Получение данных
- Строки
- Числа
- Источники данных
Домашнее задание 3. Реверс
-
Разработайте класс
Reverse
, читающий числа из стандартного ввода, и выводящий их на стандартный вывод в обратном порядке. -
В каждой строке входа содержится некоторое количество целых чисел
(возможно ноль).
Числа разделены пробелами.
Каждое число помещается в тип
int
. - Порядок строк в выходе должен быть обратным по сравнению с порядком строк во входе. Порядок чисел в каждой строке также должен быть обратным к порядку чисел во входе.
- Вход содержит не более 106 чисел и строк.
- Для чтения чисел используйте класс Scanner.
-
Примеры работы программы:
Ввод Вывод 1 2 3
3 2 1
3 2 1
1 2 3
1 2 -3
-3 2 1
1 2 3 4
4 3 2 1
Примеры
zipЭкзаменационные вопросы
- Одномерные массивы
- Многомерные массивы
- Ссылки и работа с ними
Практические навыки
- Умение работать с массивами
Библиография
- Java Tutorial. Arrays
- The Java Language Specification. Arrays
- Шилдт Г. Java 9. Полное руководство (глава 3)
- Эккель Б. Философия Java (4 издание) (глава 16)
Тема 3. Ввод-вывод и исключения
Содержание
- Исключения
- try-catch
- Проверяемые исключения, throws
- Обработка исключений
- Несколько catch-блоков
- Сообщения об ошибках
- Стек исполнения
- Ресурсы
- Закрытие и утечка ресурсов
- try-catch-finally
- Блок использования ресурса
- Использование нескольких ресурсов одновременно
- Кодировки
- Кодировка по-умолчанию
- Явное указание кодировки
- Readers
- Reader
- FileReader
- BufferedReader
- InputStreamReader
- InputStream
- Writers
- Writer
- FileWriter
- BufferedWriter
- OutputStreamWriter
- OutputStream
- PrintWriter
Домашнее задание 4. Статистика слов
-
Разработайте класс
WordStatInput
, подсчитывающий статистику встречаемости слов во входном файле. -
Словом называется непрерывная последовательность букв,
апострофов (
'
) и дефисов (Unicode category Punctuation, Dash). Для подсчета статистики слова приводятся к нижнему регистру. - Выходной файл должен содержать все различные слова, встречающиеся во входном файле, в порядке их появления. Для каждого слова должна быть выведена одна строка, содержащая слово и число его вхождений во входном файле.
- Имена входного и выходного файла задаются в качестве аргументов командной строки. Кодировка файлов: UTF-8.
-
Примеры работы программы:
Входной файл Выходной файл To be, or not to be, that is the question:
to 2 be 2 or 1 not 1 that 1 is 1 the 1 question 1
Monday's child is fair of face. Tuesday's child is full of grace.
monday's 1 child 2 is 2 fair 1 of 2 face 1 tuesday's 1 full 1 grace 1
Шалтай-Болтай Сидел на стене. Шалтай-Болтай Свалился во сне.
шалтай-болтай 2 сидел 1 на 1 стене 1 свалился 1 во 1 сне 1
Примеры
zipПрактические навыки
- Обработка исключений
- Управление ресурсами
- Чтение текстовых файлов
- Запись текстовых файлов
Библиография
- Java Tutorial. Basic IO
- Шилдт Г. Java 9. Полное руководство (главы 10 и 20)
- Шилдт Г. Java 9. Руководство для начинающих (главы 9 и 10)
- Эккель Б. Философия Java (4 издание) (главы 12 и 18)
Тема 4. Классы и объекты
Содержание
- Неизменяемые объекты
- Определение
- Конструкторы
- Методы
- Статические методы
- Изменяемые объекты
- Определение
- Инкапсуляция
Примеры
zipЭкзаменационные вопросы
- Объекты-значения и объекты-сущности
- Поля, конструкторы, методы
Практические навыки
- Умение реализовывать простые неизменяемые объекты
- Умение реализовывать простые изменяемые объекты
Тема 5. Коллекции
Содержание
- Общие понятия
- Интерфейсы
- Параметры типов
- Равенство и equals()
- Хеширование и hashCode()
- Списки
- Класс ArrayList
- Класс LinkedList
- Интерфейс List
- Arrays.asList
- Добавление и удаление элементов
- Индексированный доступ
- Итерация
- Множества
- Класс (Linked)HashSet
- Интерфейс Set
- Добавление и удаление элементов
- Итерация
- Коллекции
- Отображения
- Класс (Linked)HashMap
- Класс TreeMap
- Интерфейс Map
- Отображения как ассоциативные массивы
- Упорядоченные коллекции
- Сравнение и compareTo(..)
- Компараторы
- Класс TreeSet и интерфейс NavigableSet
- Класс TreeMap и интерфейс NavigableMap
Примеры
zipПрактические навыки
- Базовые навыки в использовании стандартных коллекций
Тема 6. Наследование
Содержание
- Интерфейсы
- Определение
- Применение
- Реализация
- Наследование
- Синтаксис
- Применение
- Модификатор protected
- Пакеты
- Синтаксис
- Применение
Примеры
zipПрактические навыки
- Базовое понимание интерфейсов, наследования и связанных концепций
Тема 7. Синтаксис Java
Содержание
- Типы данных
- Примитивные типы данных
- Целочисленные типы
- Символьный тип
- Числа с плавающей точкой
- Обертки примитивных типов
- Ссылочные типы
- Массивы
- Объявления
- Литералы
- Как объекты
- Ковариантность
- Reification
- Объекты
- Класс String
- Метод toString
- Класс StringBuilder
- Массивы
- Примитивные типы данных
- Операции
- Приоритеты
- Ассоциативность
- Операторы
- Простые
- Ветвления
- Циклы
- Переходы
- Структура исходного кода
- Заголовок
- Классы
- Интерфейсы
- Поля
- Конструкторы
- Методы
- Инициализаторы
Экзаменационные вопросы
- Типы данных
- Операции
- Операторы
- Структура исходного кода
Практические навыки
- Реализация программ на Java с применением интерфейсов и абстрактных базовых классов
Часть 2. Объектно-ориентированное программирование
Тем: 4
Тема 8. Пример: крестики-нолики
Содержание
- Игрок
- Интерфейс
- Случайный
- Последовательный
- Живой
- Доска
- Интерфейс игрока
- Интерфейс игры
- Реализация
- Игра
- Игроки и ходы
- Результаты
- Реализация
Примеры
zipЭкзаменационные вопросы
- Пример гибкого дизайна на основе ООП
Практические навыки
- Умение модифицировать существующие ОО-приложения
Тема 9. Введение в ОО дизайн
Содержание
- SOLID
- SRP: Принцип единственной ответственности
- OCP: Принцип открытости/закрытости
- LSP: Принцип подстановки Лисков
- ISP: Принцип разделения интерфейса
- DIP: Принцип инверсии зависимостей
- Квадрат и прямоугольник
- Постановка задачи
- Источник проблем
- Возможные решения
- Отказ от изменений
- Возврат нового значения
- Возврат флага
- Исключения
- Отказ от наследования
- Полный
- Выделение общего базового класса
- Дополнительные действия
- Выделение модифицируемых сущностей
- Отказ от квадратов
- Отказ от изменений
- Равенство
- Свойства равенства
- Метод equals
- Метод hashCode
- Взаимодействие с наследованием
- Наиваная реализация
- Использование сравнения предка
- Сегрегация сравнения
Экзаменационные вопросы
- Принципы SOLID
- Проблема квадрата и прямоугольника
- Равенство объектов
Практические навыки
- Умение определять необходимость наследования
- Умение реализовывать корректное сравнение объектов на равенство
Библиография
- Robert C. M. Design Principles and Design Patterns
- Wikipedia Wikipedia: SOLID
- Robert C. M. The Liskov Substitution Principle
- Wikipedia Circle-Ellipse problem
- Odersky M., Spoon L., Venners B. How to Write an Equality Method in Java
Тема 10. Разбор текста
Содержание
- База
- Источники
- test, take и expect
- Генерация ошибок
- Тестирование
- Метод рекурсивного спуска
- Разбор вариантов
- Рекурсия
- JSON
- Строки
- Числа
- Массивы
- Объекты
Примеры
zipБиблиография
Тема 11. Обработка ошибок и исключения
Содержание
- Методы обработки ошибок
- Не обрабатывать
- Коды возврата
- Установка флага ошибки
- Метод обработки ошибки
- Завершение программы
- Исключения
- Пример исключения
- Классификация исключений
- Проверяемые исключения
- Непроверяемые исключения
- Ошибки
- try-catch-finally
- Применение исключений
- Управление ресурсами
- Управление на исключениях
- Игнорирование исключений
- Разработка исключений
- Проверяемое или не проверяемое?
- Техника обертывания
- Исключения в Java 7+
- Try с ресурсами
- Обработка нескольких исключений одновременно
- Гарантии безопасности
- Отсутствие гарантий
- Отсутствие утечек
- Слабые гарантии
- Сильные гарантии
- Гарантия отсутствия исключений
Часть 3. Разное
Тем: 4
Тема 12. Перечисления
Содержание
- Классы перечислений
- Операции с перечислениями
- Коллекции для перечислений
Тема 13. Улучшения языка
Содержание
- Функциональные интерфейсы (8+)
- Вывод типа переменной (10+)
- Запуск исходного кода (11+)
- Switch-выражения (14+)
- Текстовые блоки (15+)
- Записи (16+)
- Сопоставление с образцом (16+)
- Закрытые классы (17+)
Тема 14. Система контроля версий Git
Содержание
- Введение в системы контроля версии
- Git Workflow
- clone
- add / remove
- commit
- pull
- merge
- push
- Ветки
- Feature branch branch
- Release branch
- Ветки в git
Библиография
Тема 15. Регулярные выражения
Содержание
- Выражения
- Символы и классы символов
- Границы
- Квантификаторы
- Типы квантификаторов
- Жадность квантификаторов
- Группы
- Lookahead/begind
- Специальные конструкции