• A
  • A
  • A
  • АБВ
  • АБВ
  • АБВ
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Бакалаврская программа «Прикладная математика и информатика»

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

2019/2020
Учебный год
RUS
Обучение ведется на русском языке
4
Кредиты
Статус:
Курс по выбору
Когда читается:
4-й курс, 3 модуль

Преподаватели


Буланов Артём Андреевич


Лепешкин Игорь Александрович

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

Аннотация

Цель курса - ознакомление студентов с основами языка 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, особенности работы с файлами и сокетами.
  • "Знание основных объектов синхронизации и способов синхронизации в джава. Знать какое поведение обеспечивает AtomicInteger.incrementAndGet() и в чём отличие от var++. Знать о многопоточном способе работы с коллекциями. Знать о работе с локами. Знать о работе synchronized на методе и synchronized блока. Знать о проблеме deadlock."
  • "Знать что такое атомарная операция, какие операции атомарны, а какие нет. Знать о работе volatile модификатора. "
  • "Знать схему неблокирующих локов, знать отношение happens-before Уметь рассказать принцип работы wait() notify()"
Содержание учебной дисциплины

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

  • Введение в Java
    История языка, отличия от С++, существующие версии языка, среды разработки, введение в модели управления памятью, компиляцию приложений
  • Основы языка
    синтаксис языка, типы данных, операции над переменными, управляющие конструкции, циклы
  • Объекты и импорты
    Объекты, основные методы Object, импорты, пакеты, конструкторы, типы методов, вложенные и статические классы, интерфейсы, абстрактные классы, утилитные классы
  • Исключения, иерархия, философия
    Checked\unchecked exceptions, иерархия исключений, альтернативы при работе с исключительными ситуациями, try-finally, введение в логирование
  • Строки, перечислимые типы, даты
    Enum, строки, создание, методы String, строки и байты, кодировки, конкатенация, форматирование, работа с временем, Instant, преобразование, часовые пояса, операции со временем, Duration
  • Параметризация типов
    Дженерики,надтипы и подтипы, wildcard, diamond, параметризация методов и конструкторов, стирание типов, дженерики и массивы
  • Коллекции
    Иерархия коллекций, итератор, массивы, сеты, очереди, хэштаблицы, популярные методы, стратегии использования
  • Функциональное программирование
    Введение в в функциональное программирование в Java, лямбда выражения, ссылка на методы, захват значений, FunctionalInterface
  • Java Streams
    Optional, Stream API, источники, промежуточные операции, терминальные операции, коллекторы
  • Ввод-вывод
    Java.io, работа с ресурсами, finally/finalize(), streams, files, url/uri, sockets
  • Многопоточность
    synchronized, пакет concurrent, примитивы, атомарные типы данных и структур
Элементы контроля

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

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

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

  • Промежуточная аттестация (3 модуль)
    0.3 * Домашняя работа + 0.3 * Домашняя работа + 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