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

Конструирование программного обеспечения

Лучший по критерию «Полезность курса для Вашей будущей карьеры»
Лучший по критерию «Полезность курса для расширения кругозора и разностороннего развития»
Статус: Курс обязательный (Программная инженерия)
Направление: 09.03.04. Программная инженерия
Когда читается: 2-й курс, 1-4 модуль
Формат изучения: Full time
Язык: русский
Кредиты: 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