Learning the art of programming, like most other disciplines, consist of first learning the rules and then learning when to break them.
Joshua Bloch

Успеваемость 2017-2018

Успеваемость 2018-2019

Лекции

  1. Введение. Базовый синтаксис языка Java. (09.04.19)
  2. IntelliJ IDEA — подключение git и создание проекта на GitHub
  3. Типы даных. Операторы. Введение в шаблоны проектирования. Паттерн DTO.
  4. Наследование. Интерфейсы. Исключения. Паттерны: Интерфейс-маркер, делегирование, декоратор
  5. IO. Проблемы конструкторов. Паттерны: Immutable class, фабричный метод. (09.04.19)
  6. Collections framework overview. Базовые классы. (09.04.19)
  7. Обобщения (Generics). Паттерны: Comparator, Iterator. (09.04.19)
  8. Java Beans. Вложенные классы. Builder. (09.04.19)
  9. Многопоточность. Concurrency framework
  10. Сокеты
  11. Лямда-выражения. Агрегатные функции. Stream API
  12. Аннотации. Рефлексия

Практические задания

Вариант №1Вариант №2Вариант №3Вариант №11Вариант №12Вариант №13Задания для ПП-шников
  1. introduction part 1. JDK, IDE, Запуск первого приложения
    introduction part 2. Компиляция и запуск Java-приложений через консоль (терминал)
    introduction part 3. Git
  2. Создание классов. Базовый синтаксис. Массивы. Задание (fix 20.03.2019 — добавлен метод Vehicle.isEmpty()). Диаграмма классов
  3. Динамические списки. Интерфейсы. Задание. Диаграмма классов
  4. Перечисления. Наследование. Задание. Диаграмма классов
  5. Методы класса Object. Строки. Задание (fix 29.04.2019 — добавлены методы класса Object в интерфейсы interface). Диаграмма классов
  6. Даты. Регулярки. Исключения.Задание (fix 07.08.2019). Диаграмма классов
  7. Вложенные классы. Компаратор. Итератор. Задание (fix 05.05.19 — изменена логика метода compareTo). Диаграмма классов
  8. Динамические коллекции. Задание. Диаграмма классов
  9. IO
  10. Работа с потоками вычисления
  11. Организация взаимодействия по сети
  12. Лямбда-выражения. Stream API
  13. Рефлексия
  1. introduction part 1. JDK, IDE, Запуск первого приложения
    introduction part 2. Компиляция и запуск Java-приложений через консоль (терминал)
    introduction part 3. Git
  2. Создание классов. Базовый синтаксис. Массивы. Задание. Диаграмма классов
  3. Динамические списки. Интерфейсы. Задание(fix 22.03.19 — добавил задание 7). Диаграмма классов
  4. Перечисления. Наследование. Задание. Диаграмма классов
  5. Методы класса Object. Строки. Задание. Диаграмма классов
  6. Даты. Регулярки. Исключения. Задание. Диаграмма классов
  7. Вложенные классы. Компаратор. Итератор. Задание. Диаграмма классов
  8. Динамические коллекции. Задание. Диаграмма классов
  9. IO
  10. Работа с потоками вычисления
  11. Организация взаимодействия по сети
  12. Лямбда-выражения. Stream API
  13. Рефлексия
  1. introduction part 1. JDK, IDE, Запуск первого приложения
    introduction part 2. Компиляция и запуск Java-приложений через консоль (терминал)
    introduction part 3. Git
  2. Создание классов. Базовый синтаксис. Массивы. Задание. Диаграмма классов
  3. Динамические списки. Интерфейсы. Задание. Диаграмма классов
  4. Перечисления. Наследование. Задание (fix. 02.05.19 — изменения в конструкторах класса Service). Диаграмма классов
  5. Методы класса Object. Строки. Задание (fix.02.05.19 — методы класса Object добавлены в интерфейсы). Диаграмма классов
  6. Даты. Регулярки. Исключения. Задание. Диаграмма классов
  7. Вложенные классы. Компаратор. Итератор. Задание. Диаграмма классов
  8. Динамические коллекции. Задание. Диаграмма классов
  9. IO
  10. Работа с потоками вычисления
  11. Организация взаимодействия по сети
  12. Лямбда-выражения. Stream API
  13. Рефлексия
  1. introduction part 1. JDK, IDE, Запуск первого приложения
    introduction part 3. Git
  2. Создание классов. Базовый синтаксис. Массивы. Задание. Диаграмма классов
  3. Динамические списки. Интерфейсы. Задание. Диаграмма классов
  4. Перечисления. Наследование. Задание. Диаграмма классов
  5. Методы класса Object. Строки. Задание (fix 13.03.2019). Диаграмма классов (fix 13.03.2019)
  6. Даты. Регулярки. Исключения.
  7. Вложенные классы. Компаратор. Итератор
  8. Динамические коллекции
  9. IO
  10. Работа с потоками вычисления
  11. Организация взаимодействия по сети
  12. Лямбда-выражения. Stream API
  13. Рефлексия
  1. introduction part 1. JDK, IDE, Запуск первого приложения
    introduction part 3. Git
  2. Создание классов. Базовый синтаксис. Массивы. Задание (fix 10.03.2019). Диаграмма классов (fix 10.03.2019)
  3. Динамические списки. Интерфейсы. Задание. Диаграмма классов
  4. Перечисления. Наследование. Задание. Диаграмма классов
  5. Методы класса Object. Строки. Задание. Диаграмма классов
  6. Даты. Регулярки. Исключения.
  7. Вложенные классы. Компаратор. Итератор
  8. Динамические коллекции
  9. IO
  10. Работа с потоками вычисления
  11. Организация взаимодействия по сети
  12. Лямбда-выражения. Stream API
  13. Рефлексия
  1. introduction part 1. JDK, IDE, Запуск первого приложения
    introduction part 3. Git
  2. Создание классов. Базовый синтаксис. Массивы. Задание. Диаграмма классов
  3. Динамические списки. Интерфейсы. Задание. Диаграмма классов
  4. Перечисления. Наследование. Задание. Диаграмма классов
  5. Методы класса Object. Строки. Задание. Диаграмма классов
  6. Даты. Регулярки. Исключения.
  7. Вложенные классы. Компаратор. Итератор
  8. Динамические коллекции
  9. IO
  10. Работа с потоками вычисления
  11. Организация взаимодействия по сети
  12. Лямбда-выражения. Stream API
  13. Рефлексия
  1. Пакеты. Компилятор. JVM
  2. Базовые конструкции. Диаграммы классов: 1 вариант, 2 вариант
  3. Интерфейсы, наследование, перечисление, методы класса Object: equals(), hashCode(), toString().
  4. Исключительные ситуации. Работа со строками и датами
  5. List, Queue, Set. Comparator, Iterator
  6. IO, фабрика
  7. Concurrency
  8. Организация взаимодействия по сети
  9. Лямбда-выражения. Stream API
  10. А еще мы решили, что виртуальную файловую систему Вы тоже будете делать! За заданием — к Часову Е.А.

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

1) Зачет длится 4 часа.
2) Получаем задание, пишем код в IDE, показываем код. Если выполнили задание, получаете зачет. Не выполнили — не получаете.
3) Можно гуглить API.
4) Можно выйти в туалет 1 раз.
5) С собой можно принести воду, но не забываем про пункт 4
6) Основное правило, контроль знаний — индивидуальный процесс. 3-м лицам здесь не место.

Пример задачи на зачет

Задача «Фитнес»

Эта задача имитирует приложение для расчета платежей клиентам фитнес-центра.

  1. Создайте класс Client, описывающий клиента, оплачивающего разовое посещение. Такие клиенты могут посещать тренажерный зал, и бассейн с 8 до 22.
    a. Клиент характеризуется фамилией, именем, годом рождения, датой регистрации.
    b. Все атрибуты должны быть приватными, а доступ к ним осуществляется через гетеры и сеттеры.
    c. Конструктор с параметрами Фамилия, имя, год рождения. В этом случае, дата регистрации – текущая дата.
    d. Конструктор со всеми 4-мя параметрами.
  2. Создайте класс DayClient – дневного абонемента, расширяющий (наследующий от) класс Client. Особенность этого класса состоит в том, что по данному абонементу можно посещать тренажерный зал и групповые занятия только с 8 до 16 часов. Плавать в бассейне по данному абонементу нельзя.
    a. Этот класс добавляет поле – дату окончания регистрации.
    b. Конструктор с параметрами Фамилия, имя, год рождения. В этом случае, дата регистрации – текущая дата, дата окончания регистрации – ровно через год после регистрации.
    c. Конструктор с параметрами фамилия, имя, год рождения, дата регистрации, число месяцев, через которое регистрация заканчивается.
  3. Создайте класс FullDayClient – абонемента, расширяющий (наследующий от) класс DayClient. Особенность этого класса состоит в том, что по данному абонементу получить все виды услуг фитнес-центра с 8 до 22 часов.
  4. Создайте перечисление FitnessServiceEnumeration. Возможные значения: Gym, Group, Pool (тренажерка, групповые занятия, бассейн).
  5. Создайте класс FitnessRegistrator. Этот класс содержит информацию о находящихся в данный момент в фитнес-центре клиентах. Класс содержит:
    a. Коллекцию клиентов, находящихся в данный момент в тренажерном зале
    b. Коллекцию клиентов, находящихся в данный момент в бассейне
    c. Коллекцию клиентов, находящихся в данный момент на групповых занятиях (аля йога)
    d. Метод, принимающий 2 параметра – ссылку на клиента (тип Client) и одно из значений перечисления FitnessServiceEnumeration. Этот метод добавляет, в зависимости от значения переменной перечислимого типа клиента в соответствующий список. Если Клиент в данный момент времени не имеет права находится в фитнес-центре или не может посетить указанный вид занятия, выбрасывается, определяемое студентом, исключение NoAccessException. Если клиентов в нужном списке больше 20, метод выбрасывает, определяемое студентом, исключение QueueException.
    e. Метод удаления клиента из всех списков.
    f. Метод, выводящий в стандартный поток вывода Фамилии и имена всех клиентов, находящихся в данный момент в фитнес-центре. Сначала выводятся посетители тренажерного зала, затем бассейна, затем групповых занятий. Вывод сортируется по фамилии и имени клиентов. Для сортировки используйте компаратор. Формат вывода информации о клиенте:
    <фамилия> <имя> <тип клиента> <место нахождения>
  6. Создайте класс FitnessLogger. Назначение класса – запись информации о посещениях клиентов в текстовый файл. Каждый раз, когда клиент посещает фитнес происходит запись Фамилии и Имени клиента, вида занятия и времени посещения (рассчитывается как текущее время при вызове метода добавления клиента класса FitnessRegistrator. Добавьте вызовы методов класса FitnessLogger в соответствующие методы класса FitnessRegistrator.
  7. Для теста созданных классов и их методов создайте тестовый класс, в котором определите несколько различных клиентов и повызывайте методы экземпляра класса FitnessRegistrator.

Дополнительная инфа

Видосик с описанием того, как подключить git и расшарить проект на GitHub
Гетеры и сеттеры
Базовые сведения по конвенциям программирования

Где взять информацию о JavaSE

Патрик Нимейер, Дэниэл Леук. «Программирование на Java»
Герберт Шилдт.  «Java 8. Полное руководство»
Брюс Эккель. «Философия Java», 4-е издание
Кей С. Хорстманн, Гари Корнелл. «Java. Библиотека профессионала» 2 тома.
«Домашняя» страничка JavaSE
Туториалы от Oracle
Описание API от Oracle

Leave a Reply