Аннотация программы учебной дисциплины «Интеллектуальные системы»

Вид материалаДокументы

Содержание


Аннотация программы учебной дисциплины
Тематический план курса
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   12
^

.

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


«Технология разработки программного обеспечения»

Целями дисциплины являются: ознакомление с современными языками программирования, их классификацией и областями их применения; освоение различных методов абстрагирования, обеспечения модульности и других аспектов проектирования программных систем; повышение профессиональной эрудиции.


Для достижения поставленных целей выделяются следующие задачи дисциплины:
  • ознакомить слушателей с возможностями современных динамических языков и областями их применения;
  • ознакомить с методами функционального и аспектно-ориентированного программирования и проектирования;
  • ознакомить с элементами метапрограммирования, включая интроспекцию, управляемую кодогенерацию;
  • дать представление о преимуществах и недостатках различных методах программирования и проектирования, а также о возможностях их комбинированного использования при решении прикладных задач.



Дисциплина входит в базовую часть профессионального цикла М2 образовательной магистерской программы «Компьютерное моделирование» направления подготовки магистров 230100 «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»


С другими частями образовательной программы соотносится следующим образом:

Требования к первоначальному уровню подготовки обучающихся для успешного освоения дисциплины:

Обучающийся должен знать:
  • методы императивного (структурного, объектно-ориентированного программирования);
  • методы объектно-ориентированного проектирования включая принципы и GOF-шаблоны;
  • математическое понятие функции, в том числе высшего порядка (функционал, оператор), основы λ-исчисления или комбинаторной логики.

Обучающийся должен уметь:
  • проводить объектно-ориентированную декомпозицию задачи в соответствии с заданными требованиями;
  • реализовать заданную спецификацию (архитектуру) программной системы на языках Java, С++;
  • оценивать качество спецификации (архитектуры) программной системы и ее кода.


Дисциплины, последующие по учебному плану:
  • Учебная и производственная практики
  • Итоговая государственная аттестация


Изучение дисциплины направлено на формирование следующих компетенций:
  • ОК-10 Способен осваивать новые методы и технологии, опираясь на знания фундаментальных основ становления информатики в ее историческом развитии;
  • ПК-11 Оптимально применять методы, инструменты функциональной декомпозиции для описания проектных решений и бизнес требований при разработке программных систем (частично: методы функциональной декомпозиции применительно к разработке программных систем);
  • ПК-12 Владеть методами и формализмами для идентификации и описания свойств языков и систем программирования (частично: владение методами идентификации свойств языков и систем программирования с целью выбора оптимальной технологической базы для решения поставленной задачи);
  • ПК 14 Владеть современными методологиями и технологиями разработки программных систем (динамическое, функциональное, аспектное программирование и пр.).


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

    Знать:
  • классификацию современных языков программирования по назначению, модели исполнения, парадигмам;
  • методы абстрагирования и обеспечения модульности, используемых в языках различных классов, преимущества и недостатки этих методов, а также их взаимную совместимость;
  • методы проектирования программных систем с применением различных парадигм.

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

    Владеть:
  • рядом современных функциональных, динамических и аспектно-ориентированных языков, а также соответствующими им методами проектирования.
^

Тематический план курса


Раздел 1. Современные динамические языки

1.1.Общая классификация языков по назначению и модели исполнения. Общие свойства динамических языков (динамическая типизация, модель трансляции и исполнения)

1.2. Язык Ruby: основные конструкции языка, коллекции. Функциональный стиль программирования в Ruby: блоки и замыкания. Итераторы.

1.3. Особенности объектной модели Ruby: унифицированность объектного представления, модули и примеси, инкапсуляция. Динамическое изменение классов, элементы Meta-Object Protocol (MOP) в Ruby. JRuby и взаимодействие с Java, Java Scripting API.

1.4. Регулярные выражения


Раздел 2. Современные функциональные языки

2.1. Классификация языков по парадигмам программирования. Функциональное программирование (ФП). Неподвижное состояние объекта как ключевое отличие ФП от ООП. Функции, как объекты первого класса. Чистые функции, функции высших порядков. Лексические контексты, анонимные функции, замыкания. Основные семейства функциональных языков. Историческая связь динамических и функциональных языков.

2.2. Общие характеристики семейства языков Lisp: единое представление кода и данных, S-выражения, модель трансляции и исполнения, REPL. Язык Clojure, как современный представитель семейства Lisp: основные структуры языка.

2.3. Функциональные возможности Clojure: коллекции, отложенные вычисления, бесконечные структуры данных. Абстрагирование данных с помощью функциональных примитивов (пары, числа Черча). Моделирование времени с помощью потоков. Преимущества и недостатки ФП в сравнении с ООП.

2.4. Императивные возможности Clojure. Software Transactional Memory. Многопоточность. Ссылки, атомы, агенты, виды транзакций. Взаимодействие с Java.


Раздел 3. Элементы метапрограммирования, аспектно-ориентированное программирование.

3.1. Управляемая кодогенерация. Макросы в Lisp (на примере Clojure). Модель исполнения макросов. Макросы, как способ расширения языка.

3.2. Понятие о проблемно-специфичных языках (DSL) и языках сценариев. Методы генерации DSL. Символьные вычисления.

3.3. Динамические объектные модели. CLOS: обобщенный динамический полиморфизм, обобщенные функции и мультиметоды, вспомогательные методы. Реализация элементов CLOS в Clojure. Интроспекция, введение в MOP.

3.4. Сквозная функциональность (cross-cutting concerns), проблема модульности. Традиционные методы обеспечения модульности в условиях сквозной функциональности. Контекстный полиморфизм. Механизм binding в Clojure, отличия от let.

Аспектно-ориентированное программирование (АОП). Понятие аспекта. Язык AspectJ, как аспектное расширение Java. Понятия pointcut и advise. Виды перехвата управления. Расширение существующих классов и интерфейсов. Использование интерфейсов Java, как абстрактных классов. Модель компиляции и исполнения AspectJ.

3.5 Применение АОП в проектирование. Преимущества и недостатки по сравнению с традиционными методами проектирования. Примеры задач, эффективно решаемых с помощью АОП.