24

Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,
Page 2: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

2

Рабочая программа дисциплины составлена в 2011 году в соответствии с

требованиями ФГОС ВПО по направлению подготовки 230100

«Информатика и вычислительная техника» (квалификация (степень)

«бакалавр») от 09.11.2009 г. № 553.

Пересмотрена в 2013 году на заседании методической комиссии факультета

информационных технологий от 24.06.2013 № 53.

Изменена, дополнена и утверждена в 2014 году в соответствии с

требованиями Порядка организации и осуществления образовательной

деятельности по образовательным программам высшего образования –

программам бакалавриата, программам специалитета, программам

магистратуры (приказ Минобрнауки России от 19.12.2013 г. № 1367).

Разработчик: кафедра систем информатики, Городняя Лидия Васильевна,

к.ф.-м.н., доцент НГУ.

Рабочая программа дисциплины одобрена на заседании Методической

комиссии факультета информационных технологий от 03.02.2014 года,

протокол № 55.

Page 3: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

3

Аннотация рабочей программы дисциплины

Дисциплина «Парадигмы программирования» входит в вариативную часть

профессионального цикла образовательной программы бакалавриата по

направлению подготовки 230100 «Информатика и вычислительная техника».

Дисциплина реализуется на факультете информационных технологий НГУ

кафедрой (кафедрами) «Системы информатики».

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

разнообразием моделей вычислений, включая модели параллелизма, а также

с методами программирования параллельных процессов и проблемами

организации высокопроизводительных вычислений.

Дисциплина нацелена на формирование профессиональных компетенций

ПК-2, ПК-5 выпускника.

Преподавание дисциплины предусматривает проведение следующих видов

учебных занятий: лекции, практические занятия, самостоятельная работа

студента.

Рабочая программа дисциплины предусматривает проведение следующих

видов контроля: текущий контроль успеваемости в форме устного опроса и

приёма заданий по результатам практической работы и промежуточный

контроль в форме дифференцированного зачета.

Объем дисциплины __4__зачетных единиц, в том числе 144 в академических

часах по видам учебных занятий:

Сем

естр

учебные занятия форма

промежуточ

ной

аттестации

(зачет,

дифференци

рованный

зачет,

экзамен)

Общий

объем

в том числе

контактная работа обучающихся с

преподавателем

СРС

Всего

из них

Лекции Лабор

ные

занят

ия

Практи

ческие

занятия

КСР Конс

ульта

ции

6 144 49 16 32 1 95

дифференци

рованный

зачет

Page 4: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

1. Цели освоения дисциплины

Специальный курс «Парадигмы программирования» ориентирован на

усвоение студентами понятий, исторически накопленных в форме языков

программирования и реализованных с помощью доступных для

эксперимента систем программирования. Курс знакомит с разнообразием

моделей вычислений, включая модели параллелизма, а также с методами

программирования параллельных процессов и проблемами организации

высокопроизводительных вычислений. Материал курс иллюстрируется на

языках C# и F# с использованием библиотек .Net.

Дисциплина «Парадигмы программирования» имеет своей целью:

- ознакомление студентов с разнообразием моделей программирования и

параллелизма;

- ознакомление студентов с исторически сложившимся разнообразием

парадигм программирования, определивших развитие современных

информационных технологий;

- изучение практичных подходов к разработке и конструированию

программ на базе информационных и компьютерных технологий (ИКТ);

- подготовку к специализации в области разработки программ для

многопроцессорных систем.

Данный курс знакомит студентов с наиболее распространенными

парадигмами процедурного, объектно-ориентированного программирования

и проектирования, функционального и логического программирования с

экскурсом в проблематику параллельного программирования. Значительное

внимание уделяется эффективной практике моделирования основных

реализационных средств работы с памятью, структурирования данных,

анализа и трансформации программ. Студенты знакомятся с парадигмами

низкоуровневого программирования и программирования на языках сверх

высокого уровня, направленными на параллельное программирование.

Важным шагом в обучении хорошего разработчика программного

обеспечения является ознакомление с возможностями языков и систем

разного уровня, используемых для различных классов программ в процессе

полного жизненного цикла параллельных программ. Для достижения

поставленных целей выделяются задачи курса:

- Обзор средств и методов программирования, поддержанных разными

языками и системами программирования.

- Демонстрация эволюции ключевых идей, обеспечивших поддержку

полного жизненного цикла программ, с проявлением взаимосвязей между

понятиями параллельного программирования в разных парадигмах.

- Анализ конкретных подходов к определению языков

программирования с акцентом на методы описания реализационной

специфики систем параллельного программирования.

- Сравнительный анализ наиболее известных парадигм

программирования и

парадигматическая характеристика языков параллельного

программирования разного уровня.

Page 5: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

5

2. Место дисциплины в структуре образовательной программы

Дисциплина «Парадигмы программирования» входит в вариативную часть

профессионального цикла.

Дисциплина «Парадигмы программирования» опирается на следующие

дисциплины:

Математическая логика и теория алгоритмов (формализация методов

рассуждений, логические связки, аксиоматические модели, понятие

временной сложности алгоритма);

Программирование (принципы проектирования языков программирования

высокого уровня, навыки реализации алгоритмов на ЯВУ, язык С, работа в

среде Microsoft Visual Studio, принципы ООП и язык С++));

Результаты освоения дисциплины «Парадигмы программирования»

используются в следующих дисциплинах данной ООП:

Распределенные информационные системы.

3. Компетенции обучающегося, формируемые в результате освоения

дисциплины (перечень планируемых результатов обучения)

В результате освоения данной дисциплины обучающийся

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

Код

ком

пет

енц

ии

Формулировка компетенции из

ФГОС

Планируемые результаты обучения (показатели

достижения заданного уровня освоения

компетенций)

ПК-2 осваивать методики

использования программных

средств для решения

практических задач

Умение грамотно применять различные

ПС при решении практических задач

ПК-5 разрабатывать компоненты

программных комплексов и

баз данных, использовать

современные

инструментальные средства

и технологии

программирования

Знать

о роли программной документации и

программы испытаний в разработке

аппаратных и/или программных средств

вычислительной техники.

Page 6: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

4. Объем, структура и содержание дисциплины

4.1. Объем дисциплины составляет 4 зачетных единиц, 144 академических

часов.

4.2. Структура дисциплины

п/п

Раздел (тема)

дисциплины

Сем

естр

з учеб

ного

план

а)

Нед

еля с

емес

тра

(из

учеб

ного

план

а) Контактная работа обучающихся с

преподавателем по видам учебных

занятий (из учебного плана, в

часах)

Сам

ост

ояте

льн

ая р

абота

об

уч

ающ

ихся

(из

учеб

ного

пла

на, в

ча

сах)

Формы

текущего

контроля

успеваемос

ти

(по неделям

семестра)

Форма

промежуто

чной

аттестации

(по

семестрам,

из учебного

плана)

лек

ци

и

Лаб

орат

орн

ые

зан

яти

я

Прак

тичес

ки

е за

няти

я

Кон

троль

сам

ост

ояте

льн

ой

раб

оты

(КС

Р)

Кон

сульта

ци

и

1 Введение. О

классификации

языков и моделей

программирования.

Методы

определения и

спецификации

языков

программирования

6 1 1 2 4

2 Неимперативные

вычисления

Преобразования

программ и

процессов

6 2 1 2 4

3 Семантика

параллелизма

Абстрактные сети

Параллельное

программирование

Временные

отношения

6 3 1 2 10

4 Учебные и

модельные языки

Функциональное

программирование

параллельных

вычислений

Верификация

программ

Полный жизненный

цикл программ

(ЖЦП)

6 4 1 2 4

Page 7: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

7

5 Функции высших

порядков

Процессы в сетях

6 5 1 2 4

6 Взаимодействие

процессов

Макрообработка

данных

Управление

процессами

6 6 1 2 4

7 Векторная

обработка

Распараллеливание

Многоуровневая

память

Типы управления

6 7 1 2 10

8 Модели

параллелизма в

языках

программирования

Языки

параллельного

программирования

6 8-11 4 8 23

9 Параллельное

программирование

на языках F# и С# с

библиотеками .Net

6 12-

16 5 10 28

10 Промежуточная

аттестация

6 17 1 4 дифференц

ированный

зачет

ИТОГО часов: 16 32 1 95

Курс знакомит студентов с разнообразием стилей и языков

программирования. Выбор изучаемых парадигм отражает эволюцию языков,

используемых при решении задач системной и прикладной информатики от

низкоуровневого программирования на стыке с аппаратурой до языков сверх

высокого уровня и параллельного программирования. Особое внимание

уделено исторически значимым и концептуальным языкам, в которых видна

ключевая идея и практические следствия ее реализации. Кроме того, курс

знакомит с разнообразием моделей параллелизма, а также с методами

программирования параллельных процессов и проблемами организации

высокопроизводительных вычислений. Материал курс иллюстрируется на

языках C# и F# с использованием библиотек .Net.

Курс носит ознакомительный характер и представляет интерес как обзор

основных подходов к программированию. Проанализированы особенности

языков программирования разного уровня от ассемблера до языков

параллельного программирования. Дана характеристика функционального

подхода к сравнительному описанию реализационной семантики основных

парадигм. Предложена схема описания и определения парадигматических

Page 8: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

8

характеристик языка программирования. В качестве иллюстрации

использованы фрагменты языков программирования разного уровня,

относящиеся к парадигмам машинно-ориентированного, системного,

императивного, функционального, логического, объектно-ориентированного

и высокопроизводительного программирования. В центре внимания –

разнообразие моделей параллельных вычислений, включая разные подходы

и стили, представленные в современных системах программирования

параллельных вычислений, на фоне изучения основных проблем

организации параллельных процессов и постановки задач для

высокопроизводительных вычислений.

Парадигмы программирования различаются нишей в жизненном цикле

программ, приоритетами при оценке качества программ, выбором

инструментов и методов обработки данных. Значимость используемых при

этом критериев по существу зависит от условий применения

программируемых решений. Упорядочение критериев нередко претерпевает

изменения по мере развития сферы применения программы, роста

квалификацией пользователей, модернизации оборудования,

информационных технологий и техники программирования, что и приводит

к появлению новых парадигм. Первые парадигмы автоматного и машинно-

ориентированного императивного программирования сформировались как

кодирование готовых алгоритмов, сложившихся и отлаженных в

докомпьютерную эпоху. Системное и функциональное программирование

появляются при расширении класса задач, требующих разработки и отладки

новых алгоритмов и приведения их в удобную для обычного,

непосредственного, программирования форму. Затем пришла пора языков

представления знаний и, соответственно, декларативного (логического)

программирования рецептов решения новых задач, где факт существования

решений важнее их эффективной реализации. Профессионализация

программирования приводит к объектно-ориентированному

программированию, поддерживающему повторное использование

запрограммированных готовых решений в разных системах. На повестке дня

– создание удобных языков параллельного программирования.

Новые возможности компьютерных сетей, суперкомпьютеров,

общедоступных баз данных, массовое распространение мобильных

устройств – все это меняет сферу применения информационных технологий

и влечет кристаллизацию новых и более общих парадигм компьютерных

языков. В данной работе представлена попытка характеризовать парадигмы

программирования взаимодействием четырех основных семантических

систем: обработки данных, их хранения и структурирования, управления

обработкой данных. В курсе приведен аналитический обзор парадигм

программирования, рассмотрены особенности применения языков

программирования, отражающие методы их реализации и класс решаемых

на их основе задач. Отмечены ключевые моменты развития парадигм

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

Page 9: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

9

обработки данных посредством реализации систем программирования и

других информационных систем. Определен ряд опорных языков для

сравнительного анализа языков программирования при определении их

соответствия конкретным парадигмам.

Изложение начинается с пояснений к терминологическим системам,

сложившимся в разных направлениях и подходах к параллельным

вычислениям. Отмечена роль неимперативных моделей вычислений при

организации параллельных процессов. Приведен обзор основных идей

современных языков, поддерживающих подготовку надежных программ на

базе символьной обработки данных и программ, использующих списки и

множества в качестве универсальных структур данных. Рассматриваются

простейшие методы оптимизации и преобразования программ и процессов, а

также средства спецификации программ на базе формальных языков и

сетевых граф-схем. В частности изучается сетевое представление семантики

параллелизма, приспособленное для алгебраического подхода к описанию

процессов. При изложении материала естественно выделяются уровни

определений и понятий, соответствующие уровню языков и систем

программирования. Изучается проблема синхронизации и остановки и

методы ее решения в разных моделях параллелизма, реализованных в

наиболее известных и интересных языках программирования, давших

исторически ценный опыт представления параллельных вычислений. В их

числе языки Microsoft .Net F# и C#, а также языки Haskell, Python и Sisal,

предлагающие интересные подходы к реализации ряда новых понятий и

уточняющих технику реализации привычных понятий программирования с

учетом специфики параллелизма.

Анализируются проблемы разработки, отладки, тестирования и верификации

параллельных программ, рассматриваются обычные пути их решения или

смягчения на протяжении полного жизненного программ от постановки

задачи до создания переносимого программного продукта, устойчивого

относительно смены архитектуры.

Page 10: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

4.3. Содержание дисциплины, структурированное по темам (разделам)

Лекции – 32 часов (из учебного плана)

Раздел

(тема),

Код

компете

нции № з

ан

яти

я

Содержание занятий и ссылки на рекомендуемую

литературу

Кол-во

часов

всего

В

интер

актив

ной

форме

Раздел

1.

(ПК-2,

ПК-5)

1 О классификации языков и моделей параллельного

программирования.

Начинается изложение с необходимых пояснений к терминам,

т.к. исторически сложилась весьма пёстрая речевая практика,

дающая пищу техническим разночтениям общеизвестных

понятий (поток, процесс, действие, операция и т.д.).

Рассматриваются такие понятия как условие готовности и

срабатывание, завершение и оттеснение, время и длительность,

пропускная способность и производительность, события и

исключения, одновременность, ускорение вычислений. Понятия

«параллелизм» и «параллельные алгоритмы» рассматриваются с

точки зрения измеримости производительности систем.

Проводится предварительный инструктаж по практике на C# и

F# с библиотекой .Net. (установка интерпретатора и

компилятора, прогон программ, диагностика ошибок)

Методы определения и спецификации языков

программирования

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

программирования и техника символьной обработки разных

структур данных, включая списки и множества, используемые

при реализации программ и организации вычислений (очереди,

протоколы и др.). Символьные вычисления рассматриваются как

важный этап разработки эффективных и надежных программ и

удобных языков программирования.

1

Раздел 2.

(ПК-2,

ПК-5)

2 Неимперативные вычисления.

Небольшой обзор парадигм программирования, показывающий

разнообразие подходов к программированию вообще и к

параллельному программированию в частности. Особое

внимание уделено неимперативным вычислениям,

преимущественно функциональному программированию,

показавшему свои преимущества в параллельном

программировании. Парадигмы программирования

анализируются в русле функционального подхода к

определению семантики языков программирования.

.Преобразования программ и процессов.

Краткий обзор средств и методов представления программ и

процессов в форме определения языков и изображения

эквивалентных им сетевых граф-схем с целью демонстрации

возможностей декомпозиции параллельных программ и

реорганизации процессов их выполнения, включая

распараллеливание.

1

Page 11: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

11

Раздел 3

(ПК-2,

ПК-5)

3 Семантика параллелизма. Абстрактные сети

Ознакомление с аппаратом сетей, приспособленном к достаточно

тонкой детализации семантики параллелизма. Изучается алгебра

процессов, иерархические сети, уровни определений и

конкретизация понятий. Рассматривается проблема

синхронизации независимых сетей. Представление сетевых и

распределенных систем рассматриваются как обоснование к

выбору единого сетевого представления семантики программ,

процессов, языков и систем программирования.

Параллельное программирование. Временные отношения

Изучаются простейшие средства представления временных

отношений между процессами. Рассматриваются процессы

уровня ОС, допускающие явное и неявное задание времени и

приоритетов. Время как ресурс. Распределение времени. В

качестве примеров используются автоматы Т.Хоара, при

программировании которых используются потоки, счетчики,

барьеры. Отмечается подобие средств управления очередностью

процессов и управления памятью.

1

Раздел 4

(ПК-2,

ПК-5)

4 Учебные и модельные языки

Рассматриваются примеры языков, конструируемых специально

в целях изучения отдельных идей, стилей, техник

программирования.

Функциональное программирование параллельных

вычислений

Изучаются особенности функционального программирования,

позволяющие рассматривать его как базовую парадигмы

параллельного программирования.

1

Раздел 5

(ПК-2,

ПК-5)

4

Верификация программ

Ознакомление с результатами исследований в области

верификации и моделирования программ, способными дать

перспективу надежности параллельного программирования через

разработку верифицирующих компиляторов.

Полный жизненный цикл программ (ЖЦП)

Рассматривается схема ЖЦП и его конкретизация на случай

разработки параллельных программ.

Раздел 6

(ПК-2,

ПК-5)

5 Функции высших порядков

Изучается методика программирования с использованием

функций высших порядков в качестве конструкторов программ.

Процессы в сетях

Объектно-ориентированный подход к программированию сделал

популярным представление программ в виде компонент,

взаимосвязанных с помощью событий и сообщений.

Рассматривается техника декомпозиции программ на такие

компоненты и доопределения программ обработчиками

исключений. Используются в качестве примеров задачи на

клетчатой доске (взаимодействие процессов). Управление

памятью рассматривается как доминирующая линия в

определении семантики программ.

1

Page 12: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

12

Раздел 7

(ПК-2,

ПК-5)

6 Взаимодействие процессов Изучаются альтернативные подходы к определению условий готовности компонент к срабатыванию. Пространства имен (барьеры) как инструмент синхронизации. Завершение или готовность результата. Бесконечные и пошаговые процессы. Совмещение и слияние процессов. Управление памятью и контроль типов данных при разработке программ и компиляторов для языков программирования.

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

Управление процессами Рассматриваются проблемы организации асинхронных процессов, возникающие при разработке распределенных систем. Анализ «живучести». Ленивые и энергичные вычисления. Синхросети и мониторы. Иллюстративные примеры (задачи о философах, читателях-писателях и т.п.) Представление сетевых и распределенных систем рассматриваются как основа для разработки сложных информационных систем и языков программирования.

1

Раздел

8

(ПК-2,

ПК-5)

7 Векторная обработка Изучаются модели параллелизма для матричных вычислений. Идеальный параллелизм. Генерация параллельных итераций. Локальные обмены данными. Неограниченное число процессоров над одноуровневой общей памятью. Оценка ускорения вычислений и производительности систем в рамках программ над системами типов, допускающими статический контроль. (Примеры программ: сортировка, умножение матриц, факториал.)

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

Многоуровневая память Изучается влияние дисциплины работы с памятью на характеристики параллельных процессов. Защищенная и размазанная память. Решения, принятые в разных языках программирования, по работе с многоуровневой и разнородной памятью (доступ, побочный эффект, дубли и копии). Обработка транзакций становится одной из типовых семантик работы с памятью в языках программирования.

Типы управления Рассматриваются средства и методы типизации управления процессами, удобными для подготовки программ, ориентированных на исполнение с помощью Open MP или MPI. Идеи языков программирования по сетевому представлению типов управления и дисциплины работы с памятью. Компонентно-ориентированная разработка ПО может следовать единому сетевому определению семантики языков программирования и процесса разработки программ

1

Page 13: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

13

Раздел 9

(ПК-2,

ПК-5)

8-

11 Модели параллелизма в языках программирования

Рассматриваются модели параллелизма, встроенные в наиболее

известные языки программирования. Рассмотрены языки APL,

Algol-68, Setl, Ada и др. Кроме того, рассмотрены guarded-

command Э.Дейкстры и модели взаимодействующих процессов

Т.Хоара и Р.Милнера, дающие теоретическую основу языковым

и системным исследованиям. Имеется и небольшой экскурс в

отечественные разработки в области языков параллельного

программирования (БАРС, Поляр, Норма, mpC и др.).

Языки параллельного программирования

Параллельное программирование на языка F# с библиотеками

.Net Изучаются средства организации параллельных процессов

средствами языка функционального программирования F# с

библиотеками .Net. На этом языке рассматривается возможность

реорганизация программ, что поддержано в языке специальными

средствами типа Quotation – доступ к внутреннему

представлению программ в виде структуры данных.

Анализируется вклад типизации данных в построение

эффективных программ. Использование модифицируемой и

защищенной памяти. Прикладные аспекты работы с

информацией, отражающей специфику области приложения

программ (measure)

4

Раздел

10

(ПК-2,

ПК-5)

12-

16

Параллельное программирование на языке C#. C# дает возможность встраивать функциональные построения в контекст привычных императивных программ Рассматривается стыковка программ на новых языках с производственными системами, разрабатываемыми на базе библиотек .Net. Возможность оперирования деревом разбора программы и ее исполнимым кодом. Вопросы защиты программ и данных. Управление дисциплиной доступа к памяти и представление запросов к базам данных Параллельное программирование на языке Haskell. Рассматривается строго функциональный подход к спецификации параллельных программ и типов данных в языке с предпочтением так называемой «ленивой» схемы вычислений. Сопоставление достоинств и недостатков ленивых и энергичных методов вычислений. Концепция «монад» в строго функциональном языке программирования. Особенности определения семантики языковых конструкций. Методика обеспечения удобочитаемости программ и их отладки. Мемоизация как практичный инструмент снижения сложности вычислений. Параллельное программирование на языке Python. Язык Python зарекомендовал себя как удобное средство разработки распределенных систем и сетевого программирования. Рассматриваются особенности представления программ на языке Python и реализованные в нем решения по организации процессов в сетях и доступа к базам данных. История языка и особенности быстрой разработки программ Параллельное программирование на языке Sisal. Авторы строго типизированного функционального языка параллельного программирования Sisal создали интересный прецедент по расширению и уточнению системы понятий программирования

5

Page 14: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

14

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

Разработка параллельных программ и распределенных систем

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

Итого:

Практические занятия – 32 часов (из учебного плана)

Раздел

(тема),

Код

компете

нции № з

ан

яти

я

Содержание занятий и ссылки на рекомендуемую

литературу

Кол-во

часов

всего

В

интер

актив

ной

форме

Разделы

1 - 6

(ПК-2,

ПК-5)

1-5 Практическая работа 1.

Программирование макета, демонстрирующего проблемы

синхронизации процессов (дедлоки и их исключение) на примере

простой задачи управления автоматами.

10

Разделы

7-8.

(ПК-2,

ПК-5)

6-7 Практическая работа 2.

Разработка макетных образцов отдельных фрагментов языков и

моделей вычислений и параллельного программирования.

4

Разделы

9-10

(ПК-2,

ПК-5)

8-

16

Практическая работа 3.

Экспериментальные макеты тренажеров для обучения

программированию, включая параллельное.

18

Итого: 32

Материал курса сопровождается практической работой на базе мульти-

парадигматических языков программирования Clisp, C# и F#.

Используются учебные тренажеры, разрабатываемые студентами и на

других языках.

Практическая работа сводится к программированию этюдов с

использованием разных систем программирования на различных языках,

Page 15: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

15

позволяющих почувствовать различия в подходах к подготовке программ и

постановке задач на параллельное программирование в форме трёх

практических работ.

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

языка и следующим заданиям:

Реализовать модель интерпретатора небольшого подъязыка.

Реализовать модель компилятора небольшого подъязыка.

Написать программу синтаксического анализа для фрагмента заданного

языка программирования.

Написать макет синтаксически управляемой кодогенерации программы.

Реализовать конструктор анализатора по формулам БНФ.

Реализовать генератор языка по формулам БНФ.

Написать конвертор с одного языка на другой, ему эквивалентный, по их

отображениям в общий абстрактный синтаксис.

Подготовить макет семантической системы работы со стековой памятью.

Реализовать процедуру отладки подсистем управления процессами в

заданном языке.

Запрограммировать один из известных алгоритмов обхода графа,

нагруженный некоторыми действиями.

Самостоятельная работа – 95 часов (из учебного плана) предусматривает:

Раздел

(тема),

Код

компетен

ции № з

аняти

я Вид работы Норма

времени на

выполнение

(в часах)

Раздел 1.

(ПК-2, ПК-

5)

1 Ознакомление с литературой по разным парадигмам

программирования 2

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 2

Программирование этюдов с использованием разных

систем программирования на различных языках, -

Раздел 2.

(ПК-2,

ПК-5)

2 Ознакомление с литературой по разным парадигмам

программирования 2

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 2

Программирование этюдов с использованием разных

систем программирования на различных языках, -

Раздел 3.

(ПК-2, ПК-

5)

3 Ознакомление с литературой по разным парадигмам

программирования 4

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 6

Программирование этюдов с использованием разных

систем программирования на различных языках, -

Раздел 4.

(ПК-2, ПК-4 Ознакомление с литературой по разным парадигмам

программирования 1

Page 16: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

16

5) Поиск в Интернете дополнительной информации по

изучаемым парадигмам 1

Программирование этюдов с использованием разных

систем программирования на различных языках, -

Раздел 5.

(ПК-2, ПК-

5)

4 Ознакомление с литературой по разным парадигмам

программирования 1

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 1

Программирование этюдов с использованием разных

систем программирования на различных языках, -

Раздел 6.

(ПК-2, ПК-

5)

5 Ознакомление с литературой по разным парадигмам

программирования 2

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 2

Программирование этюдов с использованием разных

систем программирования на различных языках, -

Раздел 7.

(ПК-2, ПК-

5)

6 Ознакомление с литературой по разным парадигмам

программирования 2

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 2

Программирование этюдов с использованием разных

систем программирования на различных языках, -

Раздел 8.

(ПК-2, ПК-

5)

7 Ознакомление с литературой по разным парадигмам

программирования -

Поиск в Интернете дополнительной информации по

изучаемым парадигмам -

Программирование этюдов с использованием разных

систем программирования на различных языках, 10

Раздел 9.

(ПК-2, ПК-

5)

8-11 Ознакомление с литературой по разным парадигмам

программирования 4

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 6

Программирование этюдов с использованием разных

систем программирования на различных языках, 13

Раздел 10.

(ПК-2, ПК-

5)

12-16 Ознакомление с литературой по разным парадигмам

программирования 10

Поиск в Интернете дополнительной информации по

изучаемым парадигмам 10

Программирование этюдов с использованием разных

систем программирования на различных языках, 8

17 Подготовка к дифференцированному зачету 4

Итого 95

5. Образовательные технологии

Основные виды работы – лекции и самостоятельные эксперименты

студентов с разными системами программирования.

Дополнительно предполагаемая форма отчетности – выполнение

упражнений и решение задач с применением систем программирования,

преимущественно на F# и C#.

Page 17: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

17

6. Перечень учебно-методического обеспечения для самостоятельной

работы обучающихся по дисциплине

Методические рекомендации по самостоятельной работе обучающихся

приводятся в приложении к рабочей программе дисциплины (Приложение А).

7. Фонд оценочных средств для проведения текущей и промежуточной

аттестации обучающихся по дисциплине

7.1. Перечень компетенций с указанием этапов их формирования приведен в

описании образовательной программы

Компетенция Знания, умения, навыки Процедура оценивания

ПК-2 Умение грамотно применять

различные ПС при решении

практических задач

Доклад по реферату

ПК-5 Знать

о роли программной документации

и программы испытаний в

разработке аппаратных и/или

программных средств

вычислительной техники.

Практическая работа

7.2. Описание показателей и критериев оценивания компетенций, описание

шкал оценивания

Выделяются три показателя уровня сформированности компетенции:

ПК-2 «Осваивать методики использования программных средств для

решения практических задач»

Уровен

ь

Показатели (что

обучающийся

должен

продемонстриро

вать)

Оценочная шкала

удовлетворитель

но

хорошо отлично

баз

овы

й

Умение

грамотно

применять

различные ПС

при решении

практических

задач

Может описать

особенности

применения ПС

при решении

практических

задач

Способен оценить

преимущества и

недостатки

используемых ПС

при решении

практических задач.

Умеет добиться

успешного и

эффективного

применения ПС при

решении

практических задач

Page 18: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

18

ПК-5 «Разрабатывать компоненты программных комплексов и баз данных,

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

программирования» У

ровен

ь

Показатели (что

обучающийся

должен

продемонстриро

вать)

Оценочная шкала

удовлетворитель

но

хорошо отлично

баз

овы

й

Представление о

роли

программной

документации и

программы

испытаний в

разработке

аппаратных

и/или

программных

средств

вычислительной

техники.

Может описать

особенности

технического

проекта в

разработке

аппаратных

и/или

программных

средств

вычислительной

техники

Способен оценить

неувязки в

программной

документации

разработке

аппаратных и/или

программных

средств

вычислительной

техники

Имеет успешный

опыт

самостоятельного

решения этюдов по

программированию

на базе разных

средств.

Если хотя бы одна из компетенций не сформирована, то положительной

оценки по дисциплине быть не может.

7.3. Типовые контрольные задания

Примеры контрольных вопросов к дифференцированному зачету:

1. Примеры различных направлений, стилей и техник программирования

2. Общая характеристика императивного программирования

3. Общая характеристика функционального программирования

4. Общая характеристика логического программирования

5. Общая характеристика объектно-ориентированного

программирования

6. Операционная семантика языков программирования.

7. Абстрактная машина и интерпретатор

8. С# - механизмы функционального программирования в императивном

языке

9. F# - функционально-поизводственный язык программирования

10. HomeLisp – интерфейс, язык, система

11. Haskell – основные идеи

12. Язык теоретико-множественного программирования SETL как пример

языка сверхвысокого уровня.

13. Параллельное программирование на языке APL

Page 19: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

19

Примеры задач к дифференцированному зачёту

1) Написать рекурсивную функцию построения множества слов,

встречающихся в двух заданных предложениях.

2) Написать рекурсивную функцию построения множества слов,

встречающихся в каждом из двух заданных предложений.

3) Написать рекурсивную функцию построения множества слов,

встречающихся в первом, но не во втором из двух заданных

предложений.

Перечень примерных контрольных вопросов и заданий для устного опроса.

Провести сравнительный анализ работы с памятью в разных парадигмах

программирования, привести примеры на разных языках.

Описать специфику вычислений в языках императивного и

функционального программирования, поддерживающих распараллеливание

программ или подготовку асинхронных процессов.

Представить отличия императивной и функциональной модели

параллельных вычислений.

Дать характеристику особенностей параллельного программирования в

сравнении с функциональным и императивно-процедурным.

Привести примеры преимуществ ООП в сравнении с другими основными

парадигмами при разработке эволюционирующих систем.

Показать особенности логического программирования, определяющие его

парадигматическую специфику, выделяющую из других парадигм.

7.4. Методические материалы, определяющие процедуры оценивания

знаний, умений, навыков и (или) опыта деятельности, характеризующих

этапы формирования компетенций

При оценивании знаний, умений, навыков и (или) опыта деятельности,

характеризующих этапы формирования компетенций, используется приём на

компьютере результатов выполнения этюдов на базе разных систем

программирования и качество ответов на вопросы при дифференцированном

зачёте.

8. Перечень основной и дополнительной учебной литературы,

необходимой для освоения дисциплины

а) основная литература:

1. Воеводин В.В. "Вычислительная математика и структура алгоритмов" //М.

МГУ, серия Суперкомпьютерное образование, 2010, 168 с.

2. Городняя, Л.В. Основы функционального программирования / Л.В.

Городняя ; Национальный Открытый Университет "ИНТУИТ". - М. :

Page 20: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

20

Интернет-Университет Информационных Технологий, 2004. - 217 с. ; То

же [Электронный ресурс]. - URL:

http://biblioclub.ru/index.php?page=book&id=233773

б) дополнительная литература:

3. Иртегов, Д.В. Многопоточное программирование с использованием

POSIX Threads / Д.В. Иртегов ; Национальный Открытый Университет

"ИНТУИТ". - М. : Интернет-Университет Информационных Технологий,

2010. - 149 с. ; То же [Электронный ресурс]. - URL:

http://biblioclub.ru/index.php?page=book&id=233996

4. Непейвода, Н.Н. Стили и методы программирования / Н.Н. Непейвода. -

М. : Интернет-Университет Информационных Технологий, 2005. - 320 с. -

(Основы информационных технологий). - ISBN 5-9556-0023-Х ; То же

[Электронный ресурс]. - URL:

http://biblioclub.ru/index.php?page=book&id=233198

5. Таненбаум Э., ван Стеен М. Распределенные системы. Принципы и

парадигмы. − СПб.: Питер, 2003. – 877 с.

6. Хендерсон П. Функциональное программирование. Применение и

реализация. М.: Мир, 1983. – 349 с.

в) учебно-методическая литература:

7. Городняя, Л.В. Парадигмы программирования / Л.В. Городняя. - М. :

Интернет-Университет Информационных Технологий, 2007. - 280 с. ; То

же [Электронный ресурс]. - URL:

http://www.intuit.ru/studies/courses/1109/204/info

8. Городняя Л.В. Парадигмы программирования. Часть 1. Сравнение

парадигм программирования / Новосибирск, ИСИ СО РАН, 2014. 114 с.

9. Перечень ресурсов информационно-телекоммуникационной сети

«Интернет», необходимых для освоения дисциплины

http://ccfit.nsu.ru – сайт Факультета информационных технологий НГУ

http://ershov.iis.nsk.su – научный архив академика А.П. Ершова

http://www.hpcu.ru/ - Интернет-Университет Суперкомпьютерных

Технологий

http://setl.org/setl/ About GNU SETL

http://haskell.org/aboutHaskell.html - Материалы по языку Haskell

http://www.intuit.ru – сайт Интернет-Университета Информационных

Технологий

http://www.gnu.org – сайт добровольческого движения по разработке

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

http://www.cons.org/cmucl/ - Сайт с материалами по особо эффективной

реализации языка CLisp - CMUCL

http://www.smalltalk.ru – сайт с материалами по языку SmallTalk

Page 21: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

21

http://www.parallel.ru - сайт Вл.В Воеводина по суперкомпьютерам и

параллельным вычисления

http://refal.org/rf5_frm.htm – Материалы по языку Рефал.

http://www.top500.org/ - TOP500 Supercomputer Sites – мировой рейтинг

пятисот самых мощных компьютеров мира

10. Методические указания для обучающихся по освоению дисциплины

Освоение дисциплины предусматривает восприятие лекционного материала

и практическую работу по выполнению упражнений и этюдов на разных

системах программирования с использование разных парадигм

программирования.

11. Перечень информационных технологий, используемых при

осуществлении образовательного процесса по дисциплине, включая

перечень программного обеспечения и информационных справочных

систем (при необходимости)

При осуществлении образовательного процесса предусмотрено

использование электронной почты и сети Интернет.

Практическая и самостоятельная работа выполняются с использованием

свободно распространяемых систем программирования для разных языков.

12. Описание материально-технической базы, необходимой для

осуществления образовательного процесса по дисциплине

Лекционная аудитория

Ноутбук, медиа-проектор, экран.

Программное обеспечение для демонстрации слайд-презентаций.

Компьютерный класс.

Page 22: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

22

Приложение А (обязательное)

Методические рекомендации по самостоятельной работе обучающихся

по дисциплине «Парадигмы программирования »

1. План-график выполнения СРС по дисциплине

В процессе изучения дисциплины предусмотрено выполнение следующих

видов самостоятельной работы: Вид самостоятельной

работы Номер недели семестра

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Ознакомление с

литературой по

разным

парадигмам

программирования

2 2 4 2 2 2 2 2 2 2 2 2 2

Поиск в Интернете

дополнительной

информации по

изучаемым

парадигмам

2 2 6 2 2 2 2 2 2 2 2 2 2 2

Программирование

этюдов с

использованием

разных систем

программирования

на различных

языках,

10 3 6 2 2 2 2 2 2 4

Итого

в неделю

часов

4 4 10 4 4 4 10 5 6 6 6 6 6 6 6 4 4

2. Характеристика и описание заданий на СРС

В процессе изучения дисциплины предусмотрены следующие

контрольные точки:

Контрольная точка Срок сдачи (номер

недели семестра)

Практическая работа 1.

Программирование макета, демонстрирующего проблемы

синхронизации процессов (дедлоки и их исключение) на примере

простой задачи управления автоматами.

5

Практическая работа 2.

Разработка макетных образцов отдельных фрагментов языков и

моделей вычислений и параллельного программирования. 7

Page 23: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

23

Практическая работа 3.

Экспериментальные макеты тренажеров для обучения

программированию, включая параллельное. 15

3. Примерные нормы времени на выполнение заданий контрольных точек

Контрольная точка Норма времени на

выполнение (в часах)

Практическая работа 1. 10 Практическая работа 2. 10 Практическая работа 3. 10

4. Рекомендуемая литература (основная и дополнительная)

а) основная литература:

1. Воеводин В.В. "Вычислительная математика и структура алгоритмов" //М.

МГУ, серия Суперкомпьютерное образование, 2010, 168 с.

2. Городняя, Л.В. Основы функционального программирования / Л.В.

Городняя ; Национальный Открытый Университет "ИНТУИТ". - М. :

Интернет-Университет Информационных Технологий, 2004. - 217 с. ; То

же [Электронный ресурс]. - URL:

http://biblioclub.ru/index.php?page=book&id=233773

б) дополнительная литература:

3. Иртегов, Д.В. Многопоточное программирование с использованием

POSIX Threads / Д.В. Иртегов ; Национальный Открытый Университет

"ИНТУИТ". - М. : Интернет-Университет Информационных Технологий,

2010. - 149 с. ; То же [Электронный ресурс]. - URL:

http://biblioclub.ru/index.php?page=book&id=233996

4. Непейвода, Н.Н. Стили и методы программирования / Н.Н. Непейвода. -

М. : Интернет-Университет Информационных Технологий, 2005. - 320 с. -

(Основы информационных технологий). - ISBN 5-9556-0023-Х ; То же

[Электронный ресурс]. - URL:

http://biblioclub.ru/index.php?page=book&id=233198

5. Таненбаум Э., ван Стеен М. Распределенные системы. Принципы и

парадигмы. − СПб.: Питер, 2003. – 877 с.

6. Хендерсон П. Функциональное программирование. Применение и

реализация. М.: Мир, 1983. – 349 с.

в) учебно-методическая литература:

7. Городняя, Л.В. Парадигмы программирования / Л.В. Городняя. - М. :

Интернет-Университет Информационных Технологий, 2007. - 280 с. ; То

же [Электронный ресурс]. - URL:

http://www.intuit.ru/studies/courses/1109/204/info

8. Городняя Л.В. Парадигмы программирования. Часть 1. Сравнение

парадигм программирования / Новосибирск, ИСИ СО РАН, 2014. 114 с.

Page 24: Рабочая программа дисциплины/30584/Б3.В.ДВ.4.2_Парадигмы... · числе языки Microsoft .Net F# и C#, а также языки Haskell,

24

г) Интернет-ресурсы

http://ccfit.nsu.ru – сайт Факультета информационных технологий НГУ

http://ershov.iis.nsk.su – научный архив академика А.П. Ершова

http://www.hpcu.ru/ - Интернет-Университет Суперкомпьютерных

Технологий

http://setl.org/setl/ About GNU SETL

http://haskell.org/aboutHaskell.html - Материалы по языку Haskell

http://www.intuit.ru – сайт Интернет-Университета Информационных

Технологий

http://www.gnu.org – сайт добровольческого движения по разработке

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

http://www.cons.org/cmucl/ - Сайт с материалами по особо эффективной

реализации языка CLisp - CMUCL

http://www.smalltalk.ru – сайт с материалами по языку SmallTalk

http://www.parallel.ru - сайт Вл.В Воеводина по суперкомпьютерам и

параллельным вычисления

http://refal.org/rf5_frm.htm – Материалы по языку Рефал.

http://www.top500.org/ - TOP500 Supercomputer Sites – мировой рейтинг

пятисот самых мощных компьютеров мира

5. Требования к представлению и оформлению результатов СРС

Результаты СРС представляются в форме демонстрации на компьютере

реализованной программы и ответов на возникшие вопросы студентов и

преподавателя.

6. Оценка выполнения СРС

Результаты СРС оцениваются по успешности обработки тестов

разработанной студентом программой и соответствием разработки заданной

парадигме.