Бакалавриат
2020/2021





Конструирование программного обеспечения
Статус:
Курс обязательный (Программная инженерия)
Направление:
09.03.04. Программная инженерия
Кто читает:
Департамент программной инженерии
Где читается:
Факультет компьютерных наук
Когда читается:
2-й курс, 1-4 модуль
Формат изучения:
без онлайн-курса
Преподаватели:
Гринкруг Ефим Михайлович,
Заведеев Денис Владиславович,
Кучук Александр Александрович,
Проценко Александр Сергеевич,
Фомичев Михаил Игоревич
Язык:
русский
Кредиты:
8
Контактные часы:
132
Программа дисциплины
Аннотация
Курс "Конструирование программного обеспечения" предназначен для студентов 2-го курса образовательной программы «Программная инженерия» факультета компьютерных наук НИУ ВШЭ (г.Москва) в целях изучения и освоения современных методов и средств создания программного обеспечения. Курс базируется на использовании Java-платформы - наиболее популярной среды разработки современного программного обеспечения. В результате освоения курса студенты приобретают знания современных подходов к разработке программного обеспечения и овладевают средствами совремменной Java-платформы в рамках Java SE (Java Standard Edition).
Цель освоения дисциплины
- формирование у студентов профессиональных компетенций, связанных с использованием математических и алгоритмических основ конструирования современных программных продуктов, технологий их разработки, внедрения и сопровождения
- развитие умений, основанных на полученных теоретических знаниях, позволяющих на творческом и репродуктивном уровне создавать и применять эффективные методы создания программного обеспечения
- получение студентами навыков самостоятельной исследовательской работы, предполагающей изучение специфических библиотек, инструментов и средств, необходимых при разработке современного программного обеспечения
- получение практических навыков использования современных инструментальных средств при конструировании программного обеспечения.
- По окончании курса студент должен уметь определять требования к разработке и реализации программных продуктов, уметь оценивать программное обеспечение, быть специалистом в области программирования на современной Java-платформе.
Планируемые результаты обучения
- умение применять пройденный материал на практике
- знание основных конструкций языка Java
- умение применять основы языка Java при конструировании консольных приложений
- умение конструировать программы с использованием Java Collection Framework
- знание основных средств Java-платформы для обработки коллекций
- умение разрабатывать многопоточные приложения с использованием базовых средств синхронизации
- умение разрабатывать приложения с визуализацией (GUI)
- знание возможностей конструирования программного обеспечения с использованием Java SE
- умение использовать базовые средства организации сетевого взаимодействия
- знание основных приемов проектировании программ
Содержание учебной дисциплины
- Введение: конструирование программного обеспечения и использование Java-платформыОбзор методологий программирования. Объектно-ориентированное программирование. Сопоставление class-based и prototype-based программирования объектов. История и эволюция Java-программирования. Инструментальные средства Java-программирования.
- Основные программные конструкции в JavaОбъекты и типы. Типы и классы. Примитивные типы. Массивы. Хранение объектов. Создание новых типов объектов. Лексические основы языка. Исходные файлы и их содержимое. Правила кодирования и документирования в исходных файлах. Комментарии. Пакеты и их именование. Поля и правила их инициализации. Литералы. Методы, параметры и возвращаемые значения. Операторы.
- Объекты и классы в языке JavaСоздание объектов. Загрузка и инициализация классов и объектов. Финализация объектов и сборка мусора.
- Повторное использование классовКомпозиция. Агрегация. Наследование. Сравнение композиции и наследования. Инициализация объектов при наследовании. Делегирование. Спецификаторы доступа.
- Разновидности классов и интерфейсов.Абстрактные классы. Интерфейсы. Вложенные классы и интерфейсы. Локальные и анонимные классы. Функциональные интерфейсы. Лямбда-выражения. Аннотации и интерфейсы аннотаций.
- Использование информации о типах.Reflection. Dynamic Proxy. Enumerations.
- Обработка ошибок и исключительных ситуаций.Объекты – исключения. Ловушки исключений и обработка исключений. Спецификация исключений. Трассировка стека. Перевозбуждение исключений. Цепочки исключений. Стандартные исключения и их классификация. Выполнение finally-блока.
- Универсальные и параметризованные типыGeneric programming в языке Java. Ограничения при работе с generic-типами в Java.
- Контейнеры и коллекции объектовJava Collection Framework. Основные интерфейсы и их реализации.
- Параллельное выполнение и средства синхронизацииМногопоточность. Объекты - потоки, их состояния и управление их выполнением. Синхронизация. Mutable и Immutable объекты. Java Memory Model. Synchronized методы и блоки. Атомарные действия (atomic methods).
- Низкоуровневые и высокоуровневые средства организации параллельных вычисленийПараллелльное выполнение с использованием методов класса Object (wait/notify). Расширенные средства организации параллельной обработки: синхронизаторы, исполнители, параллельно обрабатываемые коллекции.
- Параллелизм данных. Fork/Join FrameworkПаралльная и одновременная обработка данных. Виды параллелизма вычислений и средства их поддержки. Параллельное программирование с использованием Fork/Join framework.
- Потоковые вычисленияОбработка потоков дынных. Stream API.
- Основы организации ввода-выводаПотоки ввода-вывода и их разновидности. Бинарный и символьный ввод-вывод. Базовые средства сериализации и десериализации объектов.
- Расширенные средства ввода-вывода.Синхронный и асинхронный ввод-вывод. Пакет nio. Работа с файлами.
- Программирование GUI. AWT и SwingОбзор средств программимрования GUI в Java. Исторические аспекты. Обзор средств AWT. Обзор средств библиотеки Swing.
- Программирование GUI. JavaFXОбзор архитектруры и средств программирования GUI библиотеки JavaFX.
- Основные шаблоны проектирования. Приемы создания объектовCreational Design Patterns.
- Основные шаблоны проектирования. Приемы структуризацииStructural Design Patterns.
- Основные шаблоны проектирования. Приемы организации поведенияBehavior Design Patterns.
- Основы сетевого программированияCети и элементы сетей. Сетевые протоколы. Уровни протоколоы модели OSI. Connection-oriented и connection-less протоколы. Уровние сетевого программирования в Java. Интернет и адресация в Интернете. URI и URL.
- Использование сокетовРазновидности Socket'ов и их использование для организации работы в сети.
- HTTP и его использованиеКлиент-серверное взаимодействие с использованием HTTP.
- Основы взаимодействия с реляционными базами данных. JDBСПринципы организации взаимодействия с базами данных с помощью JDBC. Основы SQL. Операторы JDBC.
- Сервлеты и их использование при создании web-приложений.Обзор базовых средств конструирования web-приложений с помощью сервлет-контейнера Apache Tomcat.
- Средства сборки программных проектовОбзор инструментальных средств сборки программных проектов (Maven, Gradle).
- Развитие средств конструирования ПО на Java-платформеВнедрение и использование модульности. Java Platform Module System. Развитие различных парадигм и языков программирования с использованием Java-платформы: компонентно-ориентированное программирование, декларативное программирование, функциональное программирование. Примеры и средства использования.
Элементы контроля
- Домашнее задание (HW1)Разработка приложения по заданию с загрузкой результата для проверки
- Домашнее задание (HW2)Домашнее задание по материалам модуля 2
- Домашнее задание (HW3)Домашнее задание на конструирование многопоточного приложения с использованием средств синхронизации
- Домашнее задание (HW4)Домашнее задание на конструирование приложения с визуализацией поведения
- Домашнее задание (HW5)Разработка сетевого приложения
- Работа на семинаре (Seminars)оценка активности работы на практических занятиях (семинарах)
- Домашнее задание (HW6)
- Домашнее задание (HW7)
Промежуточная аттестация
- Промежуточная аттестация (2 модуль)Оценка за первый семестр S1 вычисляется как среднее арифметическое оценок трех домашних заданий: S1 = (HW1 + HW2 + HW3) / 3
- Промежуточная аттестация (4 модуль)Итоговая оценка за курс (FinalGrade) вычисляется (с обычным округлением) так: FinalGrade = min (0.3 * S1 + 0.6 * S2 + 0.25 * S3 ; 10). Здесь: o S1 – оценка за первый семестр: S1 = (HW1 + HW2 + HW3) / 3 o S2 – оценка за второй семестр: S2 = (HW4 + HW5 + HW6 + HW7) / 4 o S3 – оценка за работу на практических занятиях в течение курса o HWn – оценка за домашнее задание n (n = 1, 2, 3, 4, 5, 6, 7) На пересдачах – устный экзамен.
Список литературы
Рекомендуемая основная литература
- Java 2. Т.1: Основы, Хорстманн, К. С., 2011
Рекомендуемая дополнительная литература
- 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