Бакалавриат
2023/2024





Введение в программирование на Java
Статус:
Курс обязательный (Бизнес-информатика)
Направление:
38.03.05. Бизнес-информатика
Кто читает:
Базовая кафедра компании 1С
Где читается:
Высшая школа бизнеса
Когда читается:
1-й курс, 3, 4 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для всех кампусов НИУ ВШЭ
Преподаватели:
Гаджимирзаев Шамиль Мусиевич,
Жорниченко Илья Алексеевич,
Леладзе Константин Григорьевич,
Рубаненко Мария
Язык:
русский
Кредиты:
6
Контактные часы:
72
Программа дисциплины
Аннотация
Цель курса – помочь освоить базовые принципы, понятия и навыки программирования, познакомить слушателей курса с языком программирования Java. Лекционный материал включает в себя демонстрацию синтаксиса языка Java, обзор ключевых особенностей языка и описание основных компонент языка Java. Семинарские занятия посвящены демонстрации решений часто встречающих задач с помощью Java и взаимодействию с аудиторией. Большое внимание уделяется практическим заданиям и самостоятельной работе студентов.
Цель освоения дисциплины
- Знание базовых понятий программирования, на которых зиждется решение любой практической задачи
- Понимание основного синтаксиса Java, широко востребованного в индустрии кросплатформенного языка программирования.
- Умение использовать язык программирования Java для решения практических задач.
- Умение придумывать решение часто встречающихся практических задач в процедурном, объектно ориентированном и функциональном стилях.
Планируемые результаты обучения
- Знание базовых понятий программирования, таких как "переменная", "цикл", "функция", на которых зиждется решение любой практической задачи
- Знание основных сетевых протоколов: UDP, TCP, HTTP(S). Понимание устройства UDP и TCP пакетов.
- Понимание базовых принципов функционального программирования, умение применять их на практике с использованием языка программирования Java.
- Понимание и умение использовать механизм исключений в Java.
- Понимание механизма пакетов в Java.
- Понимание основ backend'а: обработка запроса обработчиком, формирование ответа на запрос и его выдача.
- Понимание основ синтаксиса Java, широко востребованного в индустрии кросплатформенного языка программирования.
- Понимание основной принципов ООП: инкапсуляция, наследование, полиморфизм.
- Понимание принципов наследования в языке Java.
- Понимание принципов работы механизма полиморфизма в Java.
- Понимание таких терминов как JVM, JRE, JDK, JIT.
- Понимание термина "сокет". Умение создавать сокетное соединение, с целью получения и выдачи данных посредством сети.
- Умение использования важных компонент стандартной библиотеки языка Java: коллекций.
- Умение использовать IDE для запуска и отладки программ. Владение базовыми навыками отладки.
- Умение использовать модуль взаимодействия с ФС в языке Java. Умение создавать, редактировать, удалять файлы и директории, получать информацию про них.
- Умение использовать стримы.
- Умение использовать функциональные интерфейсы.
- Умение работать с документацией в формате Javadoc: умение чтения и составления документации важно для любого Java программиста, ведь документация является наиболее формальным способом декларирования эталонного поведения того, или иного компонента программы.
- Умение создать абстрактную иерархию объектов с использованием наследования.
- Умение читать базовый псевдокод и мыслись в процедурном стиле программирования.
- Понимает и применяет основные принципы ООП: инкапсуляция, наследование, полиморфизм
- Использует Stream API в Java
- Отличает такие понятия как "интерфейс" и "абстрактный класс"
- Называет виды отношений между классами: композиция, агрегация, наследование
- Отличает друг от друга и применяет статический и динамический полиморфизм
- Отличает такие понятия как "инкапсуляция" и "сокрытие"
- Объясняет каждый из пяти принципов проектирования SOLID
- Определяет понятия "класса" и "'экземпляра"
- Описывает отличия модификаторов доступа в Java: public, private, protected
- Определяет понятие "пакета" в Java
- Определяет понятие "модуля" в Java
- Структурирует программные проекты на Java по модулям и пакетам
- Отличает модификатор доступа package-private в Java от остальных
- Аргументирует важность принципа "Low Coupling, High Cohesion"
- Отличает статическую и динамическую типизацию
- Отличает понятия компиляции и интерпретации
- Определяет термины JVM, JRE, JDK
- Определяет понятие "сборки мусора"
- Описывает и использует примитивные типы данных в Java: byte, short, int, long, char, boolean, float, double
- Применяет базовые арифметические, битовые и логические операции языка Java
- Определяет случаи явного и неявного приведения типов в Java
- Использует условные операторы и циклы
- Определяет понятие области видимости
- Использует строковый тип String в Java
- Использует массивы
- Определяет понятие ссылочных типов данных, стека и кучи в JVM
- Аргументирует полезность и опасность значения null
- Определяет понятие метода/функции/процедуры/подпрограммы
- Определяет и отличает способы передачи параметров в методы
- Определяет понятие сигнатуры
- Определяет понятие рекурсии
- Декомпозирует программные проекты на методы
- Определяет и применяет конструкторы классов
- Определяет понятие перегрузки методов
- Использует статические и нестатические члены классов и интерфейсов
- Использует библиотеку JUnit для модульного тестирования Java-проектов
- Использует assertions в Java
- Использует исключения в программах на Java
- Аргументирует важность тестирования программных проектов
- Использует параметрический полиморфизм
- Различает такие свойства типов как ковариантность, контравариантность, инвариантность
- Использует wildcards в Java
- Использует принцип PECS при использовании обобщённых типов
- Использует Collection API в Java
- Использует анонимные классы и лямбда-выражения в Java
- Использует функциональные интерфейсы стандартной библиотеки языка Java
- Сравнивает объектно-ориентированную и функциональную парадигмы
- Использует стандартную библиотеку языка Java для работы с файловой системой
- Использует Reflection API языка Java
- Применяет аннотации стандартной библиотеки языка Java и разрабатывает свои
Содержание учебной дисциплины
- Основы процедурного программирования
- Основы процедурного программирования на Java
- Использование командной строки, знакомство с компилятором Java и документацией
- Основы объектно ориентированного программирования
- Наследование и абстракции
- Обработка ошибок и логирование
- Дженерики
- Коллекции
- Функциональные интерфейсы
- Стримы
- Рефлексия и аннотации
- Работа с файловой системой
- Потоки данных
- Основы сетевого программирования
Элементы контроля
- Онлайн-Контест с домашними заданиями, блок 1, часть 1Контест представляет из себя курс на Stepik, состоящий из нескольких блоков. Контест с домашними заданиями разделен на несколько блоков. Каждый блок содержит в себе несколько задач.
- Письменный онлайн-экзаменПроцедура сдачи экзамена 1) Экзамен проходит в экзаменационный период. 2) Студенты выполняют письменный экзамен синхронно на платформе Stepik в назначенное заранее время. Экзамен содержит в себе вопросы по теории и задачи, которые нужно решить и отправить строго в отведенное время. 3) На экзамене могут попасться вопросы и задачи по любой из тем, пройденных в семестре. Для подготовки можно прочитать программу курса и план занятий, опубликованные в репозитории. 4) Экзамен проводится без прокторинга, однако списывание и плагиат строго запрещены. Все пары решений, уличенные в плагиате, будут проигнорированы.
- Онлайн-Контест с домашними заданиями, блок 2Контест представляет из себя курс на Stepik, состоящий из нескольких блоков. Контест с домашними заданиями разделен на несколько блоков. Каждый блок содержит в себе несколько задач.
- Онлайн-Контест с домашними заданиями, блок 1, часть 2Контест представляет из себя курс на Stepik, состоящий из нескольких блоков. Контест с домашними заданиями разделен на несколько блоков. Каждый блок содержит в себе несколько задач.
Промежуточная аттестация
- 2023/2024 3rd module0.5 * Онлайн-Контест с домашними заданиями, блок 1, часть 1 + 0.5 * Онлайн-Контест с домашними заданиями, блок 1, часть 2
- 2023/2024 4th module0.666 * Онлайн-Контест с домашними заданиями, блок 2 + 0.334 * Письменный онлайн-экзамен
Список литературы
Рекомендуемая основная литература
- Computer Science : основы программирования на Java, ООП, алгоритмы и струкуры данных, Седжвик, Р., 2018
- Java : руководство для начинающих: пер. с англ., Шилдт, Г., 2009
- Java 8 : полное руководство : пер. с англ., Шилдт, Г., 2015
- Вязовик, Н. А. Программирование на Java : учебное пособие / Н. А. Вязовик. — 2-е изд. — Москва : ИНТУИТ, 2016. — 603 с. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/100405 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.
- Основы программирования, Окулов, С. М., 2012
Рекомендуемая дополнительная литература
- Основы программирования : учебник для вузов, Иванова, Г. С., 2002
- Основы функционального программирования : курс лекций: учеб. пособие, Городняя Л.В., 2004