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





Конструирование программного обеспечения
Лучший по критерию «Полезность курса для Вашей будущей карьеры»
Лучший по критерию «Полезность курса для расширения кругозора и разностороннего развития»
Статус:
Курс обязательный (Программная инженерия)
Направление:
09.03.04. Программная инженерия
Кто читает:
Департамент программной инженерии
Когда читается:
2-й курс, 1-4 модуль
Формат изучения:
без онлайн-курса
Язык:
русский
Кредиты:
8
Программа дисциплины
Аннотация
Курс "Конструирование программного обеспечения" предназначен для студентов 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)Разработка приложения по заданию с загрузкой результата для проверки
- Компьютерное тестирование (Mod1Test)Тест в компьютерной классе по материалам модуля 1
- Домашнее задание (HW2)Домашнее задание по материалам модуля 2
- Компьютерное тестирование (Exam1)Экзаменационный тест по материалам 1-го семестра
- Домашнее задание (HW3)Домашнее задание на конструирование многопоточного приложения с использованием средств синхронизации
- Домашнее задание (HW4)Домашнее задание на конструирование приложения с визуализацией поведения
- Домашнее задание (HW5)Разработка сетевого приложения
- Работа на семинаре (Seminars)оценка активности работы на практических занятиях (семинарах)
Промежуточная аттестация
- Промежуточная аттестация (1 модуль)Итоговая оценка: FinalGrade = min (Accumulated; 10), где: - Accumulated – это накопленная оценка за курс. Accumulated = 0.4 * Semester1 + 0.5 * Semester2HW + 0.3 * Seminars, где: - Semester1 = min (0.3 * Mod1Test + 0.5 * Exam1 + 0.4 * Semester1HW; 10); - Mod1Test – это оценка за тест 1-го модуля; - Exam1 – это оценка за экзаменационный тест в конце 1-го семестра; - Semester1HW - оценка домашних заданий первого семестра. В первом семестре предусмотрены два домашних задания: в первом модуле (HW1) и во втором модуле (HW2). При этом Semester1HW = (HW1 < HW2)? (0.6 * HW1 + 0.4 * HW2) : (0.4 * HW1 + 0.6 * HW2). - Semester2HW - средняя оценка домашних заданий второго семестра: Semester2HW = (HW3 + HW4 + HW5) / 3. - Seminars - это оценка работы студента на семинарских занятиях, выставляемая преподавателем по 10 бальной шкале на последнем семинаре второго семестра. При выставлении оценки учитывается активность студента на практических занятиях и выполнение практических заданий. При посещении всех практических занятий (семинаров) студенту гарантируется оценка «1». Присутствие на занятиях без активности не является поводом для выставления высокой оценки. Оценки Semester1 и FinalGrade округляются до целого числа по обычным правилам округления. Все оценки, кроме Semester1 и FinalGrade, не округляются и могут не быть целыми числами.
- Промежуточная аттестация (2 модуль)Итоговая оценка: FinalGrade = min (Accumulated; 10), где: - Accumulated – это накопленная оценка за курс. Accumulated = 0.4 * Semester1 + 0.5 * Semester2HW + 0.3 * Seminars, где: - Semester1 = min (0.3 * Mod1Test + 0.5 * Exam1 + 0.4 * Semester1HW; 10); - Mod1Test – это оценка за тест 1-го модуля; - Exam1 – это оценка за экзаменационный тест в конце 1-го семестра; - Semester1HW - оценка домашних заданий первого семестра. В первом семестре предусмотрены два домашних задания: в первом модуле (HW1) и во втором модуле (HW2). При этом Semester1HW = (HW1 < HW2)? (0.6 * HW1 + 0.4 * HW2) : (0.4 * HW1 + 0.6 * HW2). - Semester2HW - средняя оценка домашних заданий второго семестра: Semester2HW = (HW3 + HW4 + HW5) / 3. - Seminars - это оценка работы студента на семинарских занятиях, выставляемая преподавателем по 10 бальной шкале на последнем семинаре второго семестра. При выставлении оценки учитывается активность студента на практических занятиях и выполнение практических заданий. При посещении всех практических занятий (семинаров) студенту гарантируется оценка «1». Присутствие на занятиях без активности не является поводом для выставления высокой оценки. Оценки Semester1 и FinalGrade округляются до целого числа по обычным правилам округления. Все оценки, кроме Semester1 и FinalGrade, не округляются и могут не быть целыми числами.
- Промежуточная аттестация (4 модуль)Итоговая оценка: FinalGrade = min (Accumulated; 10), где: - Accumulated – это накопленная оценка за курс. Accumulated = 0.4 * Semester1 + 0.5 * Semester2HW + 0.3 * Seminars, где: - Semester1 = min (0.3 * Mod1Test + 0.5 * Exam1 + 0.4 * Semester1HW; 10); - Mod1Test – это оценка за тест 1-го модуля; - Exam1 – это оценка за экзаменационный тест в конце 1-го семестра; - Semester1HW - оценка домашних заданий первого семестра. В первом семестре предусмотрены два домашних задания: в первом модуле (HW1) и во втором модуле (HW2). При этом Semester1HW = (HW1 < HW2)? (0.6 * HW1 + 0.4 * HW2) : (0.4 * HW1 + 0.6 * HW2). - Semester2HW - средняя оценка домашних заданий второго семестра: Semester2HW = (HW3 + HW4 + HW5) / 3. - Seminars - это оценка работы студента на семинарских занятиях, выставляемая преподавателем по 10 бальной шкале на последнем семинаре второго семестра. При выставлении оценки учитывается активность студента на практических занятиях и выполнение практических заданий. При посещении всех практических занятий (семинаров) студенту гарантируется оценка «1». Присутствие на занятиях без активности не является поводом для выставления высокой оценки. Оценки Semester1 и FinalGrade округляются до целого числа по обычным правилам округления. Все оценки, кроме Semester1 и FinalGrade, не округляются и могут не быть целыми числами.
Список литературы
Рекомендуемая основная литература
- 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