Рабочая учебная программа по курсу «Технологии программирования»

составил Сорокоумов П.С.

Аннотация

В настоящее время навык программирования жизненно необходим для технического специалиста, чтобы автоматизировать или ускорить работу, выполнять её более качественно. Однако, с развитием программных средств возрастает цена ошибочных или непродуманных решений. Практика показывает, что во многих случаях специалисты неправильно или не полностью понимают значение тех или иных методов программирования, некорректно сочетают их, применяют их вне рекомендуемой предметной области, что приводит к громоздким, неподдерживаемым или некорректным решениям. В связи с этим желательно давать будущим специалистам общее представление о распространённых приёмах программирования, областях их применения, а также ознакомить их с примерами правильных и ошибочных программных решений.

Данная программа описывает учебный курс, предназначенный для обучения студентов 2-3 курса современным технологиям программирования. Изучение данного курса позволит освоить широкий класс современных методов программирования сложных систем. Благодаря использованию нескольких языков программирования разных типов учащиеся получат достаточно полное представление о существующих точках зрения на разработку ПО, о типичных моделях программных систем, о взаимодействии компонентов этих моделей на разных уровнях представления. Охват тем позволит студентам в дальнейшем успешнее изучать новые языки программирования, рационально применять и сочетать их выразительные средства. Программа рассчитана на 2 семестра.

1. ЦЕЛИ И ЗАДАЧИ

Цель курса изучение общих принципов программирования сложных систем, методов выбора типа программной модели системы, получение навыков программирования при создании сложных гетерогенных программных комплексов.

Этот курс является составной частью цикла специальных дисциплин, определяющих подготовку студентов в области современных информационных технологий.

Задачами данного курса являются:

2. МЕСТО ДИСЦИПЛИНЫ В СТРУКТУРЕ ООП БАКАЛАВРИАТА

Дисциплина включает в себя разделы, которые могут быть отнесены к базовой и вариативным частям цикла кода УЦ ООП Б3.

Дисциплина базируется на материалах курса бакалавриата: дисциплинах цикла Б2, Б3 "Основы информатики", базовой и вариативных частях курсов "Информатика (языки программирования)" и относится к профессиональному циклу.

3. КОМПЕТЕНЦИИ ОБУЧАЮЩЕГОСЯ, ФОРМИРУЕМЫЕ В РЕЗУЛЬТАТЕ ОСВОЕНИЯ ДИСЦИПЛИНЫ

Освоение дисциплины направлено на формирование следующих общекультурных и общепрофессиональных интегральных компетенций бакалавра:

  1. общекультурные (ОК):
  2. профессиональные (ПК):

4. КОНКРЕТНЫЕ ЗНАНИЯ, УМЕНИЯ И НАВЫКИ, ФОРМИРУЕМЫЕ В РЕЗУЛЬТАТЕ ОСВОЕНИЯ ДИСЦИПЛИНЫ

В результате освоения курса обучающийся должен:

  1. Знать:
  2. Уметь:
  3. Владеть:
  4. 5. СТРУКТУРА И СОДЕРЖАНИЕ ДИСЦИПЛИНЫ

    Структура преподавания дисциплины: дисциплина делится на разделы, в разделах располагаются темы.

    Перечень разделов дисциплины и распределение времени

    NНазвание разделаКоличество часов
    1Введение2
    2Основные принципы объектно-ориентированного программирования24
    3Основные принципы программирования высокопроизводительных вычислительных систем24
    4Основные принципы функционального программирования24
    5Абстрактное представление программ и данных22
    6Сравнение программных моделей28
    7Практические аспекты разработки ПО4
    ВСЕГО (зач. ед. (часов))128

    ВИД ЗАНЯТИЙ: лекции

    NРазделТемыТрудоемкость(количество часов)
    1Введение1.1. Цели и задачи курса
    1.2. Характеристики языка программирования
    2
    2Основные принципы объектно-ориентированного программирования2.1 История создания объектно-ориентированного программирования. История создания Smalltalk
    2.2 Сообщения
    2.3 Классы
    2.4 Переменные
    2.5 Управляющие конструкции
    2.6 Типичные методы взаимодействия объектов
    2.7 Контейнеры
    2.8 Контейнеры
    10
    3Основные принципы программирования высокопроизводительных вычислительных систем3.1 История создания C++
    3.2 Общие сведения о C-подмножестве C++
    3.3 Классы и объекты
    3.4 Управление ресурсами
    3.5 Особенности создания и уничтожения объектов
    3.6Наследование. Полиморфизм
    3.7 Виртуальные функции
    10
    4Основные принципы функционального программирования4.1 История создания функциональных языков программирования. ML и Ocaml
    4.2 Базовый синтаксис
    4.3 Тип в Ocaml
    4.4 Объектная система
    4.5 Система модулей
    4.6 Ввод-вывод в функциональных языках
    10
    5Абстрактное представление программ и данных5.1 История создания LISP
    5.2 Базовый синтаксис и семантика. Абстрактное синтаксическое дерево
    5.3 Функции, переменные. Гомогенность программ и данных
    5.4 Рекурсия. Связывание переменных. Функции высших порядков
    10
    6Сравнение программных моделей6.1 Типизация
    6.2 Связывание имён
    6.3 Порядок вычислений
    6.4 Полиморфизм
    6.5 Метапрограммирование
    6.6 Модульность
    6.7 Управление ресурсами
    6.8 Обработка ошибок
    6.9 Декларативное программирование
    6.10 Логическое программирование
    6.11 Автоматное программирование
    22
    7Практические аспекты разработки ПО-0
    ВСЕГО (часов)64

    ВИД ЗАНЯТИЙ: семинары

    NРазделТемыТрудоемкость (количество часов)
    1Введение-0
    2Основные принципы объектно-ориентированного программирования2.1 Сообщения. Унарные и бинарные селекторы
    2.2 Классы. Задание классов. Методы. Вызов методов через сообщения. Иерархия классов. Метаклассы
    2.3 Переменные: временные, переменные экземпляра, переменные класса, глобальные и общие переменные. Псевдопеременные. Булевы величины
    2.4 Условные конструкции. Циклические конструкции. Оператор блока
    2.5 Создание новых объектов. Наследование и полиморфизм. Рекурсия
    2.6 Контейнеры
    2.7 Параллельная работа. Синхронизация процессов
    2.8 Примеры программ
    5
    3Основные принципы программирования высокопроизводительных вычислительных систем3.1 Разработка ПО на C++. Единица трансляции. Препроцессинг, компиляция, связывание
    3.2 Повтор сведений о C: функции, указатели, управление памятью, ввод-вывод, структуры
    3.3 Классы и объекты. Поля и методы классов. Вызов методов. Области видимости переменных, полей, методов. Дружественные функции
    3.4 Управление ресурсами: управление памятью. RAII. Ссылки на переменные
    3.5 Создание и уничтожение объектов. Конструкторы, деструкторы
    3.6 Наследование. Перегрузка функций, операторов
    3.7 Множественное наследование. Виртуальные функции. Абстрактные классы
    3.8 Примеры программ
    6
    4Основные принципы функционального программирования4.1. Выражения, функции, понятие побочного эффекта и чистоты функции. Ввод-вывод
    4.2 Тип выражения, тип функции. Вывод типов. Отсутствие неявных преобразований типов. Сопоставление с образцом
    4.3 Объектная система OСaml
    4.4 Модули. Интерфейсы модулей
    4.5 Примеры программ
    5
    5Абстрактное представление программ и данных5.1 Представление выражений в виде абстрактного синтаксического дерева. S-выражения. Исполнение S-выражений в Common Lisp. Стандартная библиотека функций
    5.2 Объявление функций, переменных, констант. Лямбда-выражения. Функции для работы со списками. Связывание переменных. Циклы и условия
    5.3 Рекурсия. Хвостовая рекурсия. Функции высших порядков
    5.4 Примеры программ
    4
    6Сравнение программных моделей6.1 Типизация: явная/неявная, статическая/динамическая, строгая/нестрогая. Вывод типов. Явные и неявные преобразования типов. Опасности неявного преобразования типов в C++
    6.2 Связывание имён. Замыкания в CommonLisp
    6.3 Порядок вычисления. Понятие ленивых вычислений. Мемоизация. Связь чистоты функций и возможностей оптимизации
    6.4 Сравнение полиморфизма в рассматриваемых языках. Статический и динамический полиморфизм. Диспетчеризация в C++, Ocaml, CLOS
    6.5 Метапрограммирование в Common Lisp: макросы, особенности реализации и применения. Метапрограммирование в C++: шаблоны функций и классов. Вычисления на этапе компиляции
    6.6 Модульность. Пространства имён C++, недостатки концепции "единиц трансляции"
    6.7 Управление памятью: ручное выделение, сборка мусора. Стратегии сборки мусора
    6.8 Обработка ошибок. Понятие исключения, корректная обработка исключений, влияние на RAII в C++
    6.9 Декларативное программирование. Общие понятия и примеры
    6.10 Логическое программирование. Prolog. Общие понятия и примеры.
    6.11 Автоматное программирование
    8
    7Практические аспекты разработки ПО7.1 Автоматизация сборки и запуска ПО
    7.2 Контроль версий. Основные методики контроля и распараллеливания работы
    7.3 Тестирование. Юнит-тестирование, интеграционное тестирование
    7.4 Таймирование. Средства таймирования в ОС семейства UNIX
    4
    Всего (часов)32

    ВИД ЗАНЯТИЙ: лабораторные работы

    NРазделТемыТрудоемкость (количество часов)
    1Введение-0
    2Основные принципы объектно-ориентированного программирования2.1 Арифметические вычисления в Smalltalk
    2.2 Иерархии объектов
    2.3 Параллелизм
    8
    3Основные принципы программирования высокопроизводительных вычислительных систем3.1 Классы
    3.2 Иерархии классов
    3.3 Метапрограммирование
    8
    4Основные принципы функционального программирования4.1 Арифметические вычисления в Ocaml
    4.2 Классы и объекты
    4.3. Функции высших порядков
    8
    5Абстрактное представление программ и данных5.1 Арифметические вычисления в Common Lisp
    5.2 Рекурсия
    5.3 Метапрограммирование
    8
    6Сравнение программных моделей-0
    7Практические аспекты разработки ПО-0
    Всего (часов)32

    Содержание дисциплины

    Развернутые темы и вопросы по разделам

    NРазделТема‹СодержаниеОбъем
    1Введение1.1. Цели и задачи курса




    1.2. Характеристики языка программирования
    1.1 Цели и задачи курса. Ограничения, накладываемые языком. Сложность процесса программирования
    1.2 Примерный план характеристики языка программирования
    1


    1
    0
    2Основные принципы объектно-ориентированного программирования2.1 История создания объектно-ориентированного программирования. История создания Smalltalk
    2.2 Сообщения

    2.3 Классы




    2.4 Переменные






    2.5 Управляющие конструкции

    2.6 Типичные методы взаимодействия объектов
    2.7 Контейнеры
    2.8 Параллелизм
    2.1 История создания языка Smalltalk




    2.2 Сообщения. Унарные и бинарные селекторы
    2.3 Классы. Задание классов. Методы. Вызов методов через сообщения. Иерархия классов. Метаклассы
    2.4 Переменные: временные, переменные экземпляра, переменные класса, глобальные и общие переменные. Псевдопеременные. Булевы величины
    2.5 Условные конструкции. Циклические конструкции. Оператор блока
    2.6 Создание новых объектов. Наследование и полиморфизм. Рекурсия
    2.7 Контейнеры
    2.8 Параллельная работа. Синхронизация процессов
    1





    3

    4




    4






    3


    3


    3
    3
    0
    3Основные принципы программирования высокопроизводительных вычислительных систем3.1 История создания C++
    3.2 Общие сведения о C-подмножестве C++

    3.3 Классы и объекты



    3.4 Управление ресурсами

    3.5 Особенности создания и уничтожения объектов
    3.6 Наследование. Полиморфизм
    3.7 Виртуальные функци
    3.1 История создания и развития языка C++
    3.2 Повтор сведений о C: функции, указатели, управление памятью, ввод-вывод, структуры
    3.3 Классы и объекты. Поля и методы классов. Вызов методов. Области видимости переменных, полей, методов. Дружественные функции
    3.4 Управление ресурсами: управление памятью. RAII. Ссылки на переменные
    3.5 Создание и уничтожение объектов. Конструкторы, деструкторы
    3.6 Наследование. Перегрузка функций, операторов
    3.7 Виртуальные функции. Абстрактные классы
    1

    3



    4





    4


    4



    4


    4
    10
    4Основные принципы функционального программирования4.1 История создания функциональных языков программирования. ML и Ocaml
    4.2 Базовый синтаксис

    4.3 Тип в Ocaml



    4.4 Объектная система
    4.5 Система модулей
    4.6 Ввод-вывод в функциональных языках
    4.1 История создания языков ML и Ocaml



    4.2 Выражения, функции, понятие побочного эффекта и чистоты функции
    4.3 Тип выражения, тип функции. Вывод типов. Отсутствие неявных преобразований типов. Сопоставление с образцом
    4.4 Объектная система Ocaml
    4.5 Модули. Интерфейсы модулей
    4.6 Организация ввода вывода: инкапсуляция состояния, типизацияЏ
    1




    5



    5





    5

    4

    4
    10
    5Абстрактное представление программ и данных5.1 История создания LISP

    5.2 Базовый синтаксис и семантика. Абстрактное синтаксическое дерево





    5.3 Функции, переменные. Гомогенность программ и данных



    5.4 Рекурсия. Связывание переменных. Функции высших порядков
    5.1 История создания языка Lisp. Диалекты Lisp'а
    5.2 Представление выражений в виде абстрактного синтаксического дерева. S-выражения. Исполнение S-выражений в Common Lisp. Стандартная библиотека функций
    5.3 Объявление функций, переменных, констант. Лямбда-выражения. Функции для работы со списками. Связывание переменных. Циклы и условия
    5.4 Рекурсия. Хвостовая рекурсия. Функции высших порядков
    1


    7







    7






    7
    10
    6Сравнение программных моделей6.1 Типизация










    6.2 Связывание имён

    6.3 Порядок вычислений




    6.4 Полиморфизм







    6.5 Метапрограммирование







    6.6 Модульность



    6.7 Управление ресурсами


    6.8 Обработка ошибок




    6.9 Декларативное программирование





    6.10 Логическое программирование


    6.11 Автоматное программирование
    6.1 Типизация: явная/неявная, статическая/динамическая, строгая/нестрогая. Вывод типов. Явные и неявные преобразования типов. Опасности неявного преобразования типов в C++


    6.2 Связывание имён. Замыкания
    6.3 Порядок вычисления. Понятие ленивых вычислений. Мемоизация. Связь чистоты функций и возможностей оптимизации
    6.4 Сравнение полиморфизма в рассматриваемых языках. Статический и динамический полиморфизм. Диспетчеризация в C++, Ocaml, CLOS
    6.5 Метапрограммирование в Common Lisp: макросы, особенности реализации и применения. Метапрограммирование в C++: шаблоны функций и классов. Вычисления на этапе компиляции
    6.6 Модульность. Пространства имён C++, недостатки концепции "единиц трансляции"
    6.7 Управление памятью: ручное выделение, сборка мусора. Стратегии сборки мусора
    6.8 Обработка ошибок. Понятие исключения, корректная обработка исключений, влияние на RAII в C++
    6.9 Общее понятие о декларативных методах программирования. Примеры моделей, использование в предметно-ориентированных языках
    6.10 Логическое программирование. Сферы применения, примеры
    6.11 Автоматное программирование: спектр проблем, методы, способы реализации
    3










    3

    3




    3







    3








    3



    2



    2



    2









    2

    2
    0
    7Практические аспекты разработки ПО7.1 Сборка. Контроль зависимостей
    7.2 Контроль версий




    7.3 Автоматизация тестирования


    7.4 Измерение производительности
    7.1 Автоматизация сборки и запуска ПО
    7.2 Контроль версий. Основные методики контроля и распараллеливания работы
    7.3 Тестирование. Юнит-тестирование, интеграционное тестирование
    7.4 Таймирование. Средства таймирования в ОС семейства UNIX
    1

    1




    1



    1
    0
    Итого:1280

    6. ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ

    NВид занятияФорма проведения занятийЦель
    1лекцияизложение теоретического материалаполучение теоретических знаний по дисциплине
    2лекцияизложение теоретического материала с помощью презентацийповышение степени понимания материала
    3семинарызакрепление знаний путём разбора примеровосознание связей между теорией и практикой, а также взаимозависимостей разных дисциплин
    4лабораторные работырешение задач по заданию преподавателя – решаются задачи, выданные преподавателем по итогам лекционных занятий и сдаются в конце семестра, используются конспект (электронный) лекций, учебники, рекомендуемые данной программой, а также учебно-методические пособия получение навыков практического применения знаний по дисциплине

    7. ОЦЕНОЧНЫЕ СРЕДСТВА ДЛЯ ТЕКУЩЕГО КОНТРОЛЯ УСПЕВАЕМОСТИ, ПРОМЕЖУТОЧНОЙ АТТЕСТАЦИИ ПО ИТОГАМ ОСВОЕНИЯ ДИСЦИПЛИНЫ И УЧЕБНО-МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТОВ

    Контрольные вопросы к зачету:

    1. Программирование на рассматриваемых языках: структура программы, основные конструкции и примеры.
    2. Программные конструкции
    3. Модели работы программ
    4. Примеры эффективного описания систем на языках программирования

    8. МАТЕРИАЛЬНО-ТЕХНИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ДИСЦИПЛИНЫ

    Необходимое оборудование для лекций и практических занятий: компьютер и мультимедийное оборудование (проектор).

    Необходимое программное обеспечение: трансляторы рассматриваемых языков, средства контроля версий, автоматизации тестирования, таймирования.

    Обеспечение самостоятельной работы – предполагается наличие у студентов персональных компьютеров с доступом в Сеть и возможностью установки на нем необходимого программного обеспечения.

    9. НАИМЕНОВАНИЕ ВОЗМОЖНЫХ ТЕМ КУРСОВЫХ РАБОТ учебным планом не предусмотрено.

    10. ТЕМАТИКА И ФОРМЫ ИНДИВИДУАЛЬНОЙ РАБОТЫ учебным планом не предусмотрено.

    11. ТЕМАТИКА ИТОГОВЫХ РАБОТ учебным планом не предусмотрено.