
Курс «Технологии программирования (Java)» (2021/2022 год, весна)
Даты устных собеседований по теории:
- Устные собеседования назначаются по запросу (написать письмо лектору, если сделано 2 практических задания из трёх)
- Основные собеседования пройдут на экзаменах
Информация о курсе
- Занятия в рамках цикла "Программирование" (2-й семестр).
- Преподаватели:
- Глухих М.И.
- Ахин М.Х. (группа 3)
- Абдуллин А.М. (группа 6)
- Егорова И. (группа 5)
- Алексюк А.О. (группа 1)
- Соболь В. (группа 4)
- Степанов Д.С. (группа 2)
- Слушатели:
- Студенты, обучающиеся по направлению бакалавриата "Информатика и вычислительная техника"
Основные задачи курса
Курс предоставляет базовые знания по программированию на языке Java, объектно-ориентированном программировании и GUI-программировании и является продолжением курса Алгоритмизация и программирование.
Отчетность
- оценка по итогам упражнений (практика, ставится оценка за курсовой проект, подробности ниже)
- экзамен по теории (проходит в форме устного собеседования, вопросы внизу страницы, ставится оценка)
Основная литература
- Хорстманн К., Корнелл Г. Java2. Библиотека профессионала. Том1. Основы. Том2. Тонкости программирования / Пер. с англ.-М.: Вильямс, 2010.
- Монахов В. Язык программирования Java и среда NetBeans.- СПб.: БХВ-Петербург, 2011.
Дополнительная литература
- Ноутон П., Шилдт Г. Java 2: наиболее полное руководство / Пер. с англ.- СПб.: БХВ-Петербург, 2008.
- Хабибуллин И. Java 7.- СПб.: БХВ-Петербург, 2012.
- Эккель Б. Философия Java / Пер. с англ.- СПб.: Питер, 2011.
- Пышкин Е.В. Основные концепции и механизмы объектно-ориентированного программирования. Учеб. пособие.- СПб.:«БХВ-Петербург», 2005.
- Арнольд К., Гослинг Дж., Холмс Д. Язык программирования Java, 3-е издание. М.: Издательский дом «Вильямс», 2001.
- James Gosling, Bill Joy, Guy Steele, Gilad Bracha. The Java Language Specification, Second Edition.
- Joshua Bloch. Effective Java: Programming Language Guide, third edition. ISBN: 9780134686097, 2017.
Электронные ресурсы
JRE / JDK
Среды разработки (IDE)
Онлайн-курсы
- Java. Базовый курс (подготовлен Computer Science Center на платформе Stepic)
Документация
Интересные задачи
- ICFP Programming Contest 2016
- ICFP Programming Contest 2015
- ICFP Programming Contest 2013
- ICFP Programming Contest 2012
Ссылки:
УПРАЖНЕНИЯ И КУРСОВОЙ ПРОЕКТ
Внимание: варианты заданий раздают преподаватели практики!
Все задания по умолчанию сдаются в виде репозитория на GitHub с собирающимся проектом и проходящими тестами. Наличие тестов и соблюдение JavaCodeStyle обязательно.
Формальный отчёт оформляется только по третьему заданию (курсовой проект). Состав отчёта: титульный лист, раздел "Задание" с текстом задания (в тексте должна быть однозначно указана требуемая функциональность, обсудите это с преподавателем), раздел "Описание программы" с кратким описанием имеющимся в программе классов (несколько абзацев), раздел "Испытания программы" про автоматизированные тесты, которые вы сделали (их наличие обязательно!) и дополнительные ручные проверки, которые вы делали в GUI. При наличии содержательных выводов добавляется раздел "Заключение". В последнем разделе "Список использованных источников" привести, как минимум, ссылку на ваш GitHub-репозиторий.
- Проектирование класса. Либо одно задание на Java (с нуля), либо два задания на Kotlin из проекта KotlinAsFirst: одно по выбору из урока 11, другое из урока 12. Задания UnsignedBigInteger и FixedPointNumber из урока 11 могут быть приняты за два. Задания на Kotlin из KotlinAsFirst, в отличие от всех прочих (пп. 2, 3), сдаются через систему Kotoed.
- Проектирование консольного приложения. Задание выполняется на Java или Kotlin по выбору студента.
- Проектирование GUI-приложения (курсовой проект). Задание выполняется на Java или Kotlin по выбору студента.
Дедлайны:
- 11 марта -- первое задание.
- 8 апреля -- второе задание.
- 20 мая -- третье задание.
Финальная оценка за курсовой проект формируется с учётом всех трёх оценок за выполненные задания. Точный порядок формирования финальной оценки определяет преподаватель практики.
Важно: студент, получивший финальную оценку "5" до начала сессии (в этом году предложение действует до 20 мая включительно), получает бонус в виде +1 балла к экзаменационной оценке. Бонус действует на основной экзамен и все переэкзаменовки. Бонусный балл не прибавляется к оценке "2" (двойка остаётся двойкой). Вместе с тем он позволяет превратить "3" в "4", а "4" в "5".
ПРЕЗЕНТАЦИИ ЛЕКЦИЙ
Презентации, отмеченные 2021, прошлогодние.
- вводная лекция
- разработка классов, см. также электронный конспект (Kotlin): часть 1, часть 2
- библиотека коллекций: итераторы, коллекции, потоки, списки
- библиотека коллекций: множества, ассоциативные массивы
- консольные приложения, командная строка, обработка исключений, см. также электронный конспект
- шаблонные типы, см. также электронный конспект
- GUI: общие принципы
- GUI: создание JavaFX-приложений -- JavaFX-представление, см. также электронный конспект (NB: на данный момент электронный конспект и презентация дополняют друг друга!)
- GUI: JetPack Compose
- JVM: за занавесом -- байткод + связанные особенности Java
- Основы многопоточного программирования
- Web+Java: общие принципы (2021)
- Последние версии Java (12-13-...) (2021)
Доп. лекции (2018/2019 год) по GUI:
- GUI: создание Swing-приложений (2019) -- модель-представление-контроллер, пример, модель, Swing-представление
- GUI: отрисовка (2018)
- GUI: компоненты и события (2018)
- MVC: model-view-controller (2018) -- также сериализация, XML, меню, стандартные диалоги, Undo / Redo, ...
ВОПРОСЫ К ЭКЗАМЕНУ
Экзамен проходит в виде устной беседы преподавателя со студентом на предмет понимания вопросов, рассмотренных в курсе. Беседа имитирует собеседование при приёме на работу. Экзаменатор выбирает вопросы по своему усмотрению, студент отвечает в меру своего знания и понимания. Время на размышление предоставляется, но не слишком много (вся беседа в норме занимает 20-30 минут). Экзаменатор может просить студента написать небольшие кусочки кода на бумаге для оценки степени знания синтаксиса языка (знание синтаксиса является обязательным для получения положительной оценки).
NB: при досрочной сдаче затрагиваются только те вопросы, которые уже были рассмотрены на лекциях минимум за неделю до сдачи (но не менее первых пятнадцати).
- Типы в Java: примитивные / ссылочные, обёртки примитивных типов, массивы, null
- Класс Object: equals / hashCode / toString
- Видимость в языке Java: public / protected / private / package private
- Сравнение классов, абстрактных классов и интерфейсов
- Статические и не-статические члены класса
- Финальные и не-финальные члены класса
- SAM-интерфейсы и лямбды в Java
- Исключения: контролируемые и нет, Throwable / Exception / RuntimeException / Error
- Перечисления, поля и методы перечислений
- Итераторы и их применение
- Разновидности коллекций: Collection / List / Set / Deque
- Реализации коллекций: List / ArrayList / LinkedList
- Реализации коллекций: Set / HashSet / TreeSet / EnumSet
- Реализации коллекций: Map / HashMap / TreeMap / EnumMap
- Реализации коллекций: Queue / Deque / ArrayDeque / LinkedList
- Шаблонные типы, сырые типы, wildcard типы
- GUI: общая организация приложения
- GUI: model-view-controller
- GUI: механизмы и методы отрисовки
- GUI: обработка событий, механизм слушателей
- GUI: контейнеры и менеджеры размещения
- JVM: вычисление выражений
- JVM: виды вложенных классов
- JVM: ветвления
- JVM: вызовы методов
- JVM: массивы
- Runnable и Thread
- synchronized и volatile
- Object: wait / notify / notifyAll
- Коллекции и Concurrency
Архив за предыдущие годы
- лекции за весну 2020-21 (автор Глухих М.И.) можно посмотреть здесь
- лекции за весну 2019-20 (автор Глухих М.И.) можно посмотреть здесь
- лекции за весну 2018-19 (автор Глухих М.И.) можно посмотреть здесь
- лекции за весну 2017-18 (автор Глухих М.И.) можно посмотреть здесь
- лекции за весну 2016-17 (автор Глухих М.И.) можно посмотреть здесь
- лекции за осень 2016-17 (автор Глухих М.И.) можно посмотреть здесь
- лекции за год 2015-16 (автор Глухих М.И.) можно посмотреть здесь
- лекции за год 2014-15 (авторы Пышкин Е.В., Кузнецов А.Н.) можно посмотреть здесь
- лекции за год 2012-13 (авторы Глухих М.И., Кузнецов А.Н.) можно посмотреть здесь
- лекции за год 2011 (автор Пышкин Е.В.) можно посмотреть здесь
- лекции за год 2009 (автор Глухих М.И.) можно посмотреть здесь