• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 2019/2020

Промышленное программирование на языке Java

Направление: 01.03.02. Прикладная математика и информатика
Когда читается: 3-й курс, 3, 4 модуль
Формат изучения: без онлайн-курса
Преподаватели: Косолапов Кирилл Александрович, Лепешкин Игорь Александрович
Язык: русский
Кредиты: 6
Контактные часы: 80

Программа дисциплины

Аннотация

Цель курса - ознакомление студентов с основами языка Java, ключевыми подходами при его использовании в промышленной разработке программного обеспечения. Планируется дать понимание того, какие существуют инструменты при разработке на Java, научить использовать основные конструкции языка как при разработке однопоточных, так и многопоточных приложений. Познакомить с наиболее популярными в отрасли способами разработки web приложений.
Цель освоения дисциплины

Цель освоения дисциплины

  • Цель курса - ознакомление студентов с основами языка Java, ключевыми подходами при его использовании в промышленной разработке программного обеспечения
Планируемые результаты обучения

Планируемые результаты обучения

  • знать о существований версий, отличий от С++, назвать 1 среду разработки
  • уметь рассказать про компиляцию приложений или модель памяти
  • уметь рассказать про компиляцию и модель памяти, рассказать про актуальные версии сред разработки и версий
  • уметь запускать простое приложение на java, владеть информацией о версиях языка, способах компиляции и управления памятью
  • знать типы данных, синтаксис языка
  • уметь рассказать про типы, синтаксис, основные конструкции
  • Умеет выбрать наиболее оптимальные типы данных, управляющие конструкции, циклы
  • Уметь грамотно использовать типы, конструкции языка при решении простых задач
  • Знать основную иерархию исключений, уметь объяснить их предназначение
  • Уметь создавать собственные исключения, уметь рассказать про философию исключений в Java
  • "Знать о классе Object, его месте в иерарихии классов, знание о методах equals() hashCode() Знать 4 типа методов, знать отличие интерфейса от класса и абстрактного класса."
  • Уметь рассказать как используются методы класса Object, про отличия и сферы применения типов методов, про отличия и сферы применения интерфейсов, абстрактных классов и обычных классов.
  • "Уметь привести примеры из библиотеки джава интерфейсов и их реализаций, примеры использования методов класса Object и варианты их переопределения. Уметь привести пример использования приватного конструктора, утилитного класса."
  • "Знать об основных способах использования Enum-ов. Знать основные методы работы со строками и символами. Знать концепцию работы со временем и датой в Java"
  • "Уметь рассказать о практиках применения Enum. Уметь рассказать об альтернативных способах конкатенации строки и их особенностей. Уметь рассказать как получить текущее время в любом часовом поясе."
  • "Знать об основных способах использования дженериков, способы их использования в классе, поле и методах. Знать о наличии механизма стирания типов."
  • "Уметь привести пример дженериков из библиотеки джава. Уметь придумать пример использования wildcard и надтипов и подтипов. Уметь написать код, который не компилируется из-за затирания типов."
  • "Знать об основных интерфейсах и реализациях из джава коллекций. Уметь корректно использовать их в программах."
  • "Знать отличия разных реализаций списков, множеств, словарей. Знать как написать свою немодифицируемую версию существующей коллекции. Знать про контракт между hashmap и hashcode+equals"
  • "Знать про ошибки конкурентной работы с итераторами Знать про механизм и алгоритмическую сложность реализации разных стандартных коллекций."
  • Знать о FunctionalInterface, об особенностях использования переменных вне контекста лямбда функции - effectively final, о полном (блочном) и упрощённом формате синтаксиса и ссылке на метод. Уметь привести пример использования функций.
  • Уметь эффективно использовать функциональное программирование при написании кода
  • "Знать о функциях и использовании Optional. Знать о функциях и использовании Streams в джава. Знать несколько вариантов коллекторов. "
  • Знать о parallelStream и особенностях его работы, области применения
  • Знание основных объектов и их назначения в библиотеке джава IO
  • Знание хороших практик работы с ресурсами, try with resources, особенности работы с файлами и сокетами.
  • "Знать что такое атомарная операция, какие операции атомарны, а какие нет. Знать о работе volatile модификатора. "
  • "Знать схему неблокирующих локов, знать отношение happens-before Уметь рассказать принцип работы wait() notify()"
  • знать основные типы сборщиков мусора
  • "Уметь рассказать про особенности и плюсы минусы разных типов сборщика мусора Уметь рассказать концептуальное устройство сборщика мусора "
  • "Знать, что такое аннотации в джава, как используются и зачем нужны. Знать про @Override и её значение."
  • "Знать какие есть способы объявления аннотаций, про параметры аннотаций, про объединение аннотаций в новой аннотации. Знать про @Nullable, @NotNull аннотации. "
  • Знать про конфигурацию, бины. Уметь раскрыть что такое dependency injection, зачем оно нужно.
  • "Знать про разные части спринга, бутстрап, РЕСТ, МВС, работу с базой, Секьюрити. "
  • Знать что такое концепция РЕСТ АПИ, РЕСТ приложения. Уметь описать типичное АПИ рест приложения.
  • Уметь сделать простое рест приложение, знать как его расширять и интегрировать с другими сервисами.
  • Знать про контракт на HTTP методы в REST. Идемпотетность вызова. OPTIONS, линки на себя и другие объекты.
  • "Знать о сущностях работы с базой. Connection, Statement, ResultSet "
  • Знать об ORM, Концепция работы Hibernate.
  • "Знать об основных причинах необходимости автотестов в разработке. Знать о библиотеке JUnit и уметь написать тест в своём приложении. Знать что такое моки, и стратегия их использования."
  • Уметь правильно подбирать тесты и их типы для приложения, уметь их реализовать
  • "Уметь рассказать типичный цикл разработки и поставки приложения "
  • Уметь рассказать типичный водопадный цикл разработки и поставки и типичный agile цикл разработки и поставки. Объяснить плюсы и минусы подходов.
  • "Знать несколько типичных паттернов. Уметь привести пример паттернов в джава библиотеке или в других библиотеках (Spring, ...)"
  • Знать несколько примеров антипаттернов и причин, почему они считаются антипаттернами.
  • "Знать что такое maven, что такое pom.xml. Знать стандартную структуру проекта в maven. Знать о хранилище артефактов maven repository. Знать, что такое gradle, откуда он берёт зависимости, названия основных секций gradle, dependencies, compile."
  • Уметь создать приложение со сборкой с нуля, уметь правильно добавить в нее нужные зависимости
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Введение в Java
    История языка, отличия от С++, существующие версии языка, среды разработки, введение в модели управления памятью, компиляцию приложений
  • Основы языка
    синтаксис языка, типы данных, операции над переменными, управляющие конструкции, циклы
  • Исключения, иерархия, философия
    Checked\unchecked exceptions, иерархия исключений, альтернативы при работе с исключительными ситуациями, try-finally, введение в логирование
  • Объекты и импорты
    Объекты, основные методы Object, импорты, пакеты, конструкторы, типы методов, вложенные и статические классы, интерфейсы, абстрактные классы, утилитные классы
  • Строки, перечислимые типы, даты
    Enum, строки, создание, методы String, строки и байты, кодировки, конкатенация, форматирование, работа с временем, Instant, преобразование, часовые пояса, операции со временем, Duration
  • Параметризация типов
    Дженерики, надтипы и подтипы, wildcard, diamond, параметризация методов и конструкторов, стирание типов, дженерики и массивы
  • Коллекции
    Иерархия коллекций, итератор, массивы, сеты, очереди, хэштаблицы, популярные методы, стратегии использования
  • Функциональное программирование
    Введение в в функциональное программирование в Java, лямбда выражения, ссылка на методы, захват значений, FunctionalInterface
  • Java Streams
    Optional, Stream API, источники, промежуточные операции, терминальные операции, коллекторы
  • Ввод-вывод
    Java.io, работа с ресурсами, finally/finalize(), streams, files, url/uri, sockets
  • Многопоточность
    synchronized, пакет concurrent, примитивы, атомарные типы данных и структур
  • Сборщик мусора
    Типы сборщиков мусора
  • Аннотации
    Механизм аннотаций в джава, особенности объявления и использования. Аннотации в джава библиотеке.
  • Spring
    Введение в фреймворк, основные компоненты, применение
  • Java + Web
    REST приложение, типичные примеры
  • JDBC
    Работа с базой, примеры. ORM, Hibernate как высокоуровневые библиотека работы с базой
  • Автотесты
    автотесты, причины использования, моки, интеграционные тесты
  • CI/CD
    деплой приложений, цикл разработки и поставки
  • Java паттерны
    Singleton, factory, provider etc.
  • "Build Tools, Maven, Gradle "
    Зачем нужны build tools, maven, pom.xml, maven central, .m2 cache. Gradle, build.gradle. Основные отличия.
Элементы контроля

Элементы контроля

  • неблокирующий Домашняя работа
  • неблокирующий Домашняя работа
  • неблокирующий Домашняя работа
  • неблокирующий Домашняя работа
  • неблокирующий Экзамен
    Устный экзамен через Zoom. Через Zoom. На одного студента выделяется 30 минут: 2 теоретических вопроса и небольшая задача, пользоваться можно только средой для совместного написания кода, ссылку на которую пришлет экзаменатор Если у студента случился обрыв связи продолжительностью менее пяти минут, он может продолжить сдачу экзамена (дополнительное время при этом не предоставляется), но теоретический вопрос или задача могут быть заменены. Если случился обрыв связи продолжительностью дольше 5 минут, то считается, что студент пропустил экзамен
Промежуточная аттестация

Промежуточная аттестация

  • Промежуточная аттестация (4 модуль)
    0.15 * Домашняя работа + 0.15 * Домашняя работа + 0.15 * Домашняя работа + 0.15 * Домашняя работа + 0.4 * Экзамен
Список литературы

Список литературы

Рекомендуемая основная литература

  • Sharan, K. (2017). Beginning Java 9 Fundamentals : Arrays, Objects, Modules, JShell, and Regular Expressions (Vol. Second edition). [Berkeley, CA]: Apress. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=1632186

Рекомендуемая дополнительная литература

  • Вязовик Н.А. - Программирование на Java - Национальный Открытый Университет "ИНТУИТ" - 2016 - 603с. - ISBN: - Текст электронный // ЭБС ЛАНЬ - URL: https://e.lanbook.com/book/100405