План курса

Часть 1. Java

Тем: 7

Тема 1. Введение

Содержание

  1. Структура курса
    1. Лекции
    2. Домашние задания
    3. Дифференцированный зачет
  2. Основные концепции Java
    1. Компилятор Java (javac)
    2. Байт-код и виртуальная машина Java (java)
    3. Java Runtime Environment
    4. JIT-компиляция
    5. Сборка мусора
    6. Редакции Java-платформы
      1. Micro Edition
      2. Standard Edition
      3. Enterprise Edition
    7. Соглашения об именовании
  3. Hello world
    1. Класс HelloWorld
    2. Метод класса main
    3. Минимальная версия
    4. Передача имени пользователя в командной строке
    5. Обработка нескольких имен пользователей
    6. Метод capitalizeFirst

Домашнее задание 1. Hello World

Тесты к домашним заданиям

  1. Установите JDK 21+.
  2. Скопируйте исходный код HelloWorld.java из архива с примерами к лекции intro.zip.
  3. Откомпилируйте HelloWorld.java и получите HelloWorld.class.
  4. Запустите HelloWorld и проверьте, что он выводит Hello, World!.
  5. Создайте скрипт, компилирующий и запускающий HelloWorld из командной строки. Если вы не умеете писать скрипты, воспользуйтесь одной из инструкций: Windows, Linux, MacOS.
  6. Измените HelloWorld.java так, чтобы он выводил Hello, prog-intro! и проверьте это запуском вашего скрипта.

Слайды

HTML

Примеры

zip

Экзаменационные вопросы

  1. Редакции платформы Java. Версии платформы и языка Java. JDK и JRE.

Практические навыки

  1. Компиляция и запуск программ на Java.
  2. Реализация простейших программ на Java.

Тема 2. Массивы и ссылки

Содержание

  1. Одномерные массивы
    1. Объявление
    2. Создание
    3. Длина массива
    4. Инициализаторы
    5. Инициализация по умолчанию
    6. Итерация
  2. Многомерные массивы
    1. Объявление
    2. Полное и частичное создание
    3. Непрямоугольные массивы
  3. Ссылки на массивы
    1. Ссылки на массивы
    2. Передача ссылок
    3. Возврат ссылок
    4. Ссылки как значения
    5. Изменения значений по ссылке
  4. Классы
    1. Полные имена классов
    2. Импорт классов
    3. Создание объектов
    4. Сборка мусора и уничтожение объектов
  5. Scanner
    1. Источники данных
      1. Строка
      2. Стандартный ввод
    2. Получение данных
      1. Строки
      2. Числа

Слайды

HTML

Примеры

zip

Экзаменационные вопросы

  1. Одномерные массивы
  2. Многомерные массивы
  3. Ссылки и работа с ними

Практические навыки

  1. Умение работать с массивами

Тема 3. Ввод-вывод и исключения

Содержание

  1. Исключения
    1. try-catch
    2. Проверяемые исключения, throws
    3. Обработка исключений
      1. Несколько catch-блоков
      2. Сообщения об ошибках
      3. Стек исполнения
  2. Ресурсы
    1. Закрытие и утечка ресурсов
    2. try-catch-finally
    3. Блок использования ресурса
    4. Использование нескольких ресурсов одновременно
  3. Кодировки
    1. Кодировка по умолчанию
    2. Явное указание кодировки
  4. Readers
    1. Reader
    2. FileReader
    3. BufferedReader
    4. InputStreamReader
    5. InputStream
  5. Writers
    1. Writer
    2. FileWriter
    3. BufferedWriter
    4. OutputStreamWriter
    5. OutputStream
    6. PrintWriter

Примеры

zip

Практические навыки

  1. Обработка исключений
  2. Управление ресурсами
  3. Чтение текстовых файлов
  4. Запись текстовых файлов

Библиография

  1.  Java Tutorial. Basic IO
  2. Шилдт Г. Java. Полное руководство (12-е издание) (главы 10 и 20)
  3. Шилдт Г. Java 12. Руководство для начинающих (9-е издание) (главы 9 и 10)
  4. Эккель Б. Философия Java (4 издание) (главы 12 и 18)

Тема 4. Классы и объекты

Содержание

  1. Неизменяемые объекты
    1. Определение
    2. Конструкторы
    3. Методы
    4. Статические методы
  2. Изменяемые объекты
    1. Определение
    2. Инкапсуляция

Примеры

zip

Экзаменационные вопросы

  1. Объекты-значения и объекты-сущности
  2. Поля, конструкторы, методы

Практические навыки

  1. Умение реализовывать простые неизменяемые объекты
  2. Умение реализовывать простые изменяемые объекты

Тема 5. Коллекции

Содержание

  1. Общие понятия
    1. Интерфейсы
    2. Параметры типов
    3. Равенство и equals()
    4. Хэширование и hashCode()
  2. Списки
    1. Класс ArrayList
    2. Класс LinkedList
    3. Интерфейс List
    4. Arrays.asList
    5. Добавление и удаление элементов
    6. Индексированный доступ
    7. Итерация
  3. Множества
    1. Класс (Linked)HashSet
    2. Интерфейс Set
    3. Добавление и удаление элементов
    4. Итерация
  4. Коллекции
  5. Отображения
    1. Класс (Linked)HashMap
    2. Класс TreeMap
    3. Интерфейс Map
    4. Отображения как ассоциативные массивы
  6. Упорядоченные коллекции
    1. Сравнение и compareTo(..)
    2. Компараторы
    3. Класс TreeSet и интерфейс NavigableSet
    4. Класс TreeMap и интерфейс NavigableMap

Слайды

HTML

Примеры

zip

Практические навыки

  1. Базовые навыки в использовании стандартных коллекций

Тема 6. Наследование

Содержание

  1. Интерфейсы
    1. Определение
    2. Применение
    3. Реализация
  2. Наследование
    1. Синтаксис
    2. Применение
    3. Модификатор protected
  3. Пакеты
    1. Синтаксис
    2. Применение

Примеры

zip

Практические навыки

  1. Базовое понимание интерфейсов, наследования и связанных концепций

Тема 7. Синтаксис Java

Содержание

  1. Типы данных
    1. Примитивные типы данных
      1. Целочисленные типы
      2. Символьный тип
      3. Числа с плавающей точкой
      4. Обертки примитивных типов
    2. Ссылочные типы
      1. Массивы
        1. Объявления
        2. Литералы
        3. Как объекты
        4. Ковариантность
        5. Reification
      2. Объекты
        1. Класс String
        2. Метод toString
        3. Класс StringBuilder
  2. Операции
    1. Приоритеты
    2. Ассоциативность
  3. Операторы
    1. Простые
    2. Ветвления
    3. Циклы
    4. Переходы
  4. Структура исходного кода
    1. Заголовок
    2. Классы
    3. Интерфейсы
    4. Поля
    5. Конструкторы
    6. Методы
    7. Инициализаторы

Слайды

HTML

Экзаменационные вопросы

  1. Типы данных
  2. Операции
  3. Операторы
  4. Структура исходного кода

Практические навыки

  1. Реализация программ на Java с применением интерфейсов и абстрактных базовых классов

Часть 2. Объектно-ориентированное программирование

Тем: 4

Тема 8. Пример: крестики-нолики

Содержание

  1. Игрок
    1. Интерфейс
    2. Случайный
    3. Последовательный
    4. Живой
  2. Доска
    1. Интерфейс игрока
    2. Интерфейс игры
    3. Реализация
  3. Игра
    1. Игроки и ходы
    2. Результаты
    3. Реализация

Примеры

zip

Экзаменационные вопросы

  1. Пример гибкого дизайна на основе ООП

Практические навыки

  1. Умение модифицировать существующие ОО-приложения

Тема 9. Введение в ОО дизайн

Содержание

  1. SOLID
    1. SRP: Принцип единственной ответственности
    2. OCP: Принцип открытости/закрытости
    3. LSP: Принцип подстановки Лисков
    4. ISP: Принцип разделения интерфейса
    5. DIP: Принцип инверсии зависимостей
  2. Квадрат и прямоугольник
    1. Постановка задачи
    2. Источник проблем
    3. Возможные решения
      1. Отказ от изменений
        1. Возврат нового значения
        2. Возврат флага
        3. Исключения
      2. Отказ от наследования
        1. Полный
        2. Выделение общего базового класса
      3. Дополнительные действия
      4. Выделение модифицируемых сущностей
      5. Отказ от квадратов
  3. Равенство
    1. Свойства равенства
    2. Метод equals
    3. Метод hashCode
    4. Взаимодействие с наследованием
      1. Наивная реализация
      2. Использование сравнения предка
      3. Сегрегация сравнения

Слайды

HTML

Экзаменационные вопросы

  1. Принципы SOLID
  2. Проблема квадрата и прямоугольника
  3. Равенство объектов

Практические навыки

  1. Умение определять необходимость наследования
  2. Умение реализовывать корректное сравнение объектов на равенство

Библиография

  1. Robert C. M. Design Principles and Design Patterns
  2. Wikipedia Wikipedia: SOLID
  3. Robert C. M. The Liskov Substitution Principle
  4. Wikipedia Circle-Ellipse problem
  5. Odersky M., Spoon L., Venners B. How to Write an Equality Method in Java

Тема 10. Разбор текста

Содержание

  1. База
    1. Источники
    2. test, take и expect
    3. Генерация ошибок
    4. Тестирование
  2. Метод рекурсивного спуска
    1. Разбор вариантов
    2. Рекурсия
  3. JSON
    1. Строки
    2. Числа
    3. Массивы
    4. Объекты

Примеры

zip

Тема 11. Обработка ошибок и исключения

Содержание

  1. Методы обработки ошибок
    1. Не обрабатывать
    2. Коды возврата
    3. Установка флага ошибки
    4. Метод обработки ошибки
    5. Завершение программы
  2. Исключения
    1. Пример исключения
    2. Классификация исключений
      1. Проверяемые исключения
      2. Непроверяемые исключения
      3. Ошибки
    3. try-catch-finally
  3. Применение исключений
    1. Управление ресурсами
    2. Управление на исключениях
    3. Игнорирование исключений
  4. Разработка исключений
    1. Проверяемое или не проверяемое?
    2. Техника обертывания
  5. Исключения в Java 7+
    1. Try с ресурсами
    2. Обработка нескольких исключений одновременно
  6. Гарантии безопасности
    1. Отсутствие гарантий
    2. Отсутствие утечек
    3. Слабые гарантии
    4. Сильные гарантии
    5. Гарантия отсутствия исключений

Слайды

HTML

Часть 3. Разное

Тем: 5

Тема 12. Generics

Содержание

  1. Введение в Generics
    1. Полиморфизм и его типы
    2. Generics и templates
    3. Применение Generics
  2. Реализация Generics
    1. Wildcards и ограниченные wildcards
    2. Параметры типов и ограниченные параметры типов
    3. Ограничения Generics и reifables
  3. Generics и вариантность
    1. Ко- и контрвариантность
    2. Источники и приемники
    3. Правило выбора extends и super
  4. Смешение Generic и не Generic кода
    1. Стирание информации о типе и сырые типы
    2. Добавление информации о типе и UncheckedWarning

Слайды

HTML

Тема 13. Перечисления

Содержание

  1. Классы перечислений
  2. Операции с перечислениями
  3. Коллекции для перечислений

Слайды

HTML

Тема 14. Улучшения языка

Содержание

  1. Функциональные интерфейсы (8+)
  2. Вывод типа переменной (10+)
  3. Запуск исходного кода (11+)
  4. Switch-выражения (14+)
  5. Текстовые блоки (15+)
  6. Записи (16+)
  7. Сопоставление с образцом (16+)
  8. Закрытые классы (17+)

Слайды

HTML

Тема 15. Система контроля версий Git

Содержание

  1. Введение в системы контроля версии
  2. Git Workflow
    1. clone
    2. add / remove
    3. commit
    4. pull
    5. merge
    6. push
  3. Ветки
    1. Feature branch branch
    2. Release branch
    3. Ветки в git

Библиография

  1.  Git SCM
  2.  Pro Git
  3.  Git Workflow

Тема 16. Регулярные выражения

Содержание

  1. Выражения
  2. Символы и классы символов
  3. Границы
  4. Квантификаторы
    1. Типы квантификаторов
    2. Жадность квантификаторов
  5. Группы
  6. Lookahead/behind
  7. Специальные конструкции