Главная
страница 1


Министерство образования и науки Российской Федерации

Федеральное автономное государственное образовательное

учреждение высшего профессионального образования

Московский физико-технический институт

(государственный университет)
УТВЕРЖДАЮ

Проректор по учебной работе

__________ Д.А. Зубцов

«____» ____________ 2012г.



ПРОГРАММА
по курсу: ПРАКТИКУМ ПО ОБЪЕКТНО-ОРИЕНТИРОВАННОМУ ПРОГРАММИРОВАНИЮ (по выбору)

по направлению: 010900 “Прикладные математика и физика”

факультеты: ФУПМ, ФРТК, ФАКИ, ФФКЭ, ФПФЭ

кафедра: ИНФОРМАТИКИ

курс: 4(бакалавриат), семестр: 7

Трудоёмкость в зач. ед.: по выбору студента – 1 зач. ед.

лабораторные занятия: по выбору студента – 34 часа.

дифф. зачет: по выбору студента – 8 часов.
ВСЕГО АУДИТОРНЫХ ЧАСОВ: 34 (1 зач. ед.)
Программу составил: к.ф.-м.н., с.н.с. Б.Г. Кухаренко

Программа обсуждена

на заседании кафедры информатики

«29» мая 2011 г.

Заведующий кафедрой, И.Б.Петров

член-корр. РАН



ОБЪЁМ УЧЕБНОЙ НАГРУЗКИ И ВИДЫ ОТЧЁТНОСТИ.


По выбору студента, включая:

1 зач. ед.

Лабораторные работы

34 часа


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

1 зач. ед.

Дифференциальный зачет

8 часов

ВСЕГО

1 зач. ед.

Итоговая аттестация

Дифференцированный зачет



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

Цель курса Целью курса является изучение основ объектно-ориентированного программирования на примере языка С++.

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

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

  • приобретение теоретических знаний в области объектно-ориентированного программирования;

  • оказание консультаций и помощи студентам в создании собственных программных проектов средствами объектно-ориентированного программирования на С++;

  • приобретение навыков работы в среде MicroSoft Visual Studia.




  1. Место дисциплины в структуре ООП бакалавриата

Дисциплина Практикум по ООП, которые могут быть отнесены к части цикла по выбору студента__Б.3__ (шифр цикла).



Дисциплина Практикум по ООП, базируется на материалах курсов бакалавриата: базовая и вариативная часть кода УЦ ООП Б.3 (математический естественнонаучный блок) по дисциплинам «Математика» (математический анализ, высшая алгебра, дифференциальные уравнения и методы математической физики), «Информатика» и региональной составляющей этого блока и относится к профессиональному циклу.


Компетенции обучающегося, формируемые в результате освоения дисциплины
Освоение дисциплины Практикум по объектно-ориентированному программированию направлено на формирование следующих общекультурных и общепрофессиональных интегральных компетенций бакалавра:

а) общекультурные (ОК):

  • способность анализировать научные проблемы и физические процессы, использовать на практике фундаментальные знания, полученные в области естественных и гуманитарных наук (ОК-1);

  • способность осваивать новые проблематику, терминологию, методологию и овладевать научными знаниями, владеть навыками самостоятельного обучения (ОК-2);

  • способность логически точно, аргументировано и ясно формулировать свою точку зрения, владеть навыками научной и общекультурной дискуссией (ОК-3);

  • готовность к творческому взаимодействию с коллегами по работе и научным коллективом, способность и умение выстраивать межличностное взаимодействие, соблюдая уважение к товарищам и проявляя терпимость к иным точкам зрения (ОК-4);

б) профессиональные (ПК):

  • способность применять в своей профессиональной деятельности знания, полученные в области физических и математических дисциплин, включая дисциплины: высшая математика и вычислительная математика (ПК-1);

  • способность применять различные методы исследований в избранной предметной области: экспериментальные методы, статистические методы обработки экспериментальных данных, вычислительные методы, методы математического и компьютерного моделирования объектов и процессов (ПК-2);

  • способность понимать сущность задач, поставленных в ходе профессиональной деятельности, использовать соответствующий математический аппарат для их описания и решения (ПК-3);

  • способность использовать знания в области математических дисциплин для дальнейшего освоения дисциплин в соответствии с профилем подготовки (ПК-4);

  • способность работать с современным программным обеспечением, приборами и установками в избранной области (ПК-5);

  • способность представлять результаты собственной деятельности с использованием современных средств, ориентируясь на потребности аудитории, в том числе в форме отчетов, презентаций, докладов (ПК-6);

  • готовность работать с комплексами программ в избранной предметной области (ПК-7);




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


В результате освоения дисциплины «Практикум по объектно-ориентированному программированию» обучающийся должен:


    1. Знать:

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

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

  • методы стандартизации объектно-ориентированного программирования;

  • принципы организации среды объектно-ориентированного программирования MicroSoft Visual Studia;

    1. Уметь:

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

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

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

  • использовать численные методы;

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

  • видеть в технических задачах научное содержание;

  • осваивать новые предметные области, компьютерные подходы к решению задач;

  • работать на современном, в том числе и уникальном экспериментальном оборудовании;

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

    1. Владеть:

  • навыками освоения значительного объема информации;

  • навыками самостоятельной работы в компьютерном классе и Интернете;

  • культурой постановки, моделирования и компьютерного решения физических и технических задач;

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




  1. Структура и содержание дисциплины

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

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

№ темы и название

Количество часов

1. Принципы объектно-ориентированного программирования: сравнение синтаксиса языка C и С++.

4

2. Адресное пространство приложения: динамические и статические переменные – члены класса.

4

3. Перегрузка унарных и бинарных арифметических операторов. Инкапсуляция массивов объектов и перегрузка оператора индекса.

3

4. Повторное использование классов. Наследование и перегрузка оператора присваивания объектов.

3

5. Шаблоны классов и шаблоны классов-контейнеров.

5

6. Библиотеки STL и Boost.

5

7. Классы с виртуальными функциями.

5

8. Динамическое идентификация и приведение типов.

4

9. Шаблоны арифметических выражений.

4

ВСЕГО (зач. ед.(часов))

34 (1 зач.ед.)



ЛАБОРАТОРНЫЕ ЗАНЯТИЯ

№ п.п.

Темы

Трудоёмкость в зач. Ед.

(количество часов)



1

Принципы объектно-ориентированного программирования: сравнение синтаксиса языка C и С++.

4

2

Адресное пространство приложения: динамические и статические переменные – члены класса.

4

3

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

2

4

Повторное использование классов. Наследование и перегрузка оператора присваивания объектов.

2

5

Шаблоны классов и шаблоны классов-контейнеров.

5

6

Библиотеки STL и Boost.

5

7

Классы с виртуальными функциями.

4

8

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

4

9

Шаблоны арифметических выражений.

4

ВСЕГО ( зач. ед.(часов))

34 час.


ВИДЫ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

№ п.п.

Темы

Трудоёмкость в зач. Ед.

(количество часов)



1

Библиотеки STL и Boost.

2

2

Классы с виртуальными функциями.

2

3

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

1

4

Шаблоны арифметических выражений.

1

5

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

2

ВСЕГО ( зач. ед.(часов))

8час.




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

п/п


Название модулей

Разделы и темы лабораторных занятий

Содержание

Объем

Аудиторная работа

(зачетные

единицы/часы)


Самостоятельная работа

(зачетные

единицы/часы)


1

I

ПРИНЦИПЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ



Принципы объектно-ориентированного программирования: сравнение синтаксиса языка C и С++.

Сравнение синтаксиса языка C и С++. Перегрузка имен (полиморфизм) функций.

Константы времени компиляции и статическая типизация в объектно-ориентированных языках программирования (по Барбаре Лисков). Структуры в С++. Синтаксис классов изолированных (невзаимодействующих) объектов в языке С++. Трансформирование базовых типов языка С++ в классы - основной источник формирования классов в языке С++.Классы-оболочки (Wrappers) с минимальным интерфейсом для базовых типов данных (примитивов). Полиморфизм конструкторов. Методы доступа. Ключевое слово this. Постоянные и модифицируемые члены класса. Массивы объектов.

Классы-оболочки с полным интерфейсом инкапсулированного базового типа. Перегрузка операторов в С++.

Инкапсуляция массивов базовых типов: абстрактные типы данных. Методы доступа. Перегрузка оператора индекса.


Классы, представляющие нормативное знание. Конструкторы и деструкторы. Интерфейс и его реализация. Дружественные функции:

Функции, дружественные классам – функции за пределами классов (нарушение концепции объектно-ориентированного программирования).

Инкапсуляция дружественных функций в класс Visitor. Объектно-ориентированное программирование без использования дружественных функций: классы данных и классы функций.

Потоки ввода-вывода данных в С++. Форматируемый ввод/вывод и манипуляторы ввода/вывода.

Перегрузка пользовательских операторов ввода/вывода, как дружественных функций.

Файловый ввод/вывод. Неформатируемый двоичный ввод/вывод (байтовые потоки).




4

1

2

Адресное пространство приложения: динамические и статические переменные – члены класса.

Адресное пространство приложения. Динамические члены класса. Динамическая память (куча) и статическая память (стек). Операции с динамической памятью (кучей). Конструкторы и деструкторы объектов в динамической памяти. Проблема утечки памяти в С++. Статические переменные - члены класса. Инициализация статических членов класса.

Копирование объектов. Присваивание объектов. Передача и возвращение функциями объектов по значению. Конструкторы копий. Клонирование объектов в С++. Передача и возвращение ссылок на объекты.




4

1

3

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

Перегрузка унарных и бинарных арифметических операторов.

Инкапсуляция массивов объектов. Классы-оболочки контейнеров с расширенным интерфейсом.

Специальные методы создания объектов. Создание объектов посредством статических методов. Класс Singleton.

Косвенное создание объектов и горизонтальное делегирование функций. Класс-заместитель Proxy.

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


2

3

4

Повторное использование классов. Наследование и перегрузка оператора присваивания объектов.

Повторное использование классов. Открытое наследование классов. Распространение и перегрузка наследуемых методов. Вызов конструкторов базового класса (суперкласса). Наследование функций и операций (Inheriting operations and functions). Перегрузка оператора присвоения.

Множественное и виртуальное наследование.

Закрытое наследование классов. Классы-адаптеры.

Классы - композиты, в объекты которых вложены объекты других классов. Делегирование функций.



2

4

5

II

ШАБЛОНЫ КЛАССОВ И ШАБЛОНЫ КЛАССОВ- КОНТЕЙНЕРОВ



Шаблоны классов и шаблоны классов-контейнеров.

Полиморфизм функций и параметризованные функции (шаблоны). Параметризованные классы (шаблоны). Статический полиморфизм. Шаблоны интеллектуальных указателей. Обработка исключительных ситуаций.

Шаблоны классов-контейнеров. Вектор (массив). Строка. Связанный список.

Внутренние и дружественные классы. Реализация двумерного вектора. Перегрузка оператора двойного индекса. Шаблоны итераторов для классов-контейнеров.


4

1

6

Библиотеки STL и Boost.

Стандартная библиотека шаблонов STL (Standard Template Library). Классы-контейнеры и итераторы. Обобщенные алгоритмы. Функторы.

Интеллектуальные указатели в библиотеке и Boost С++. Библиотека Boost/signal.




4

1




III

КЛАССЫ С ВИРТУАЛЬНЫМИ ФУНКЦИЯМИ.




Классы с виртуальными функциями.

Классы с виртуальными функциями. Подстановочный критерий Барбары Лисков. Структура объектов и таблицы виртуальных функций. Динамический полиморфизм.

Чистые виртуальные функции и абстрактные классы.

Полиморфное наследование абстрактных классов в С++.

Производящие функции и фабрики объектов.



4










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

Динамическая идентификация и приведение типов (RTTI) в MSVisual C++.

Наследование классов с расширением интерфейса. Шаблоны оболочек-адаптеров и внешний полиморфизм.




4










Шаблоны арифметических выражений.

Метапрограммирование на основе шаблонов классов. Использование паттерна Composite при проектировании шаблонов арифметических выражений. Использование паттерна Intepreter при проектировании шаблонов арифметических выражений. Отображения типа (трейты).

4







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

№ п/п

Вид занятия

Форма проведения занятий

Цель

1

Лабораторная работа

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

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

2

Лабораторная работа

изложение теоретического материала с помощью презентаций

повышение степени понимания материала

3

Лабораторная работа

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

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

4

самостоятельная работа студента

подготовка к зачету с оценкой

повышение степени понимания материала




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

Контрольные материалы

  1. Комплект компьютерных заданий по изучению объектно-ориентированного программирования;

  2. Перечень контрольных вопросов для сдачи дифференцированного зачета в 7-ом семестре.

    1. Дать определение пространства имен.

    2. Что означает ключевое слово using

    3. Пространство имен std

    4. Что означает ключевое слово this

    5. Какой параметр добавляется к каждой нестатической функции-члену, когда она вызывается.

    6. Может ли функция быть дружественной более чем одному классу

    7. Может ли функция-член класса быть дружественной другому классу

    8. Инициализация статических членов класса.

    9. Вызов статических функций-членов класса

    10. Косвенное создание объектов и горизонтальное делегирование функций.

    11. Открытое наследование классов и вызов конструктора базового класса.

    12. Закрытое наследование классов.

    13. Указатель на производный класс и указатель базовый класс

    14. Полиморфизм функций и параметризованные функции.

    15. Какие типы параметров могут присутствовать в шаблонах классов

    16. Статический полиморфизм

    17. Определение дружественного класса и шаблона

    18. Какая операция перегружается в функторе

    19. Каков механизм виртуальных функций

    20. Что такое полиморфное наследование

    21. Динамический полиморфизм

    22. Зачем нужны виртуальные деструкторы

    23. Отличие абстрактного базового класса от регулярного полиморфного класса

    24. Производящие функции.

    25. Операторы динамической идентификации и приведения типа.

    26. Наследование классов с расширением интерфейса и внешний полиморфизм.



  1. Материально-техническое обеспечение дисциплины

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

    2. Необходимое программное обеспечение: среда программирования MicroSoft Visual Studia

    3. Обеспечение самостоятельной работы Электронные ресурсы, включая доступ в Internet


Обеспечение образовательного процесса лабораторным оборудование

Тема

Название лабораторной работы

Часы

Шаблоны классов и шаблоны классов-контейнеров.

Лабораторная работа № 6. Шаблоны классов и шаблоны классов-контейнеров.

4

Библиотеки STL и Boost.

Лабораторная работа № 7. Библиотеки STL и Boost

4

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


Лабораторная работа № 8. Классы с виртуальными функциями. Динамическая идентификация и приведение типов.

4

Шаблоны арифметических выражений.

Лабораторная работа № 9. Шаблоны арифметических выражений.

4




  1. Наименование возможных тем курсовых работ –учебным планом не предусмотрены

9. ТЕМАТИКА И ФОРМЫ ИНДИВИДУАЛЬНОЙ РАБОТЫ

  1. На основе базового класса Array построить класс циклических очередей с удалением из очереди в случае ее переполнения.

  2. На основе базового класса LinkedList реализовать разреженный массив.

  3. Реализовать двумерный массив, колонки (или строки) которого имеют не одинаковую длину.

  4. Для базовых классов Array и String установить запрет на создание объектов в куче.

  5. Для базового класса Array реализовать Proxy-класс, реализующий использование operator []() в качестве lvalue (присваивание значения ) и rvalue (присваиваемое значение ).

  6. Определить класс String, сохраняющий только уникальные записи с последующим формированием ссылок на них. Реализовать в String механизм подсчета числа ссылок.

  7. Используя статические переменные и методы и закрытое наследование, реализовать некоторый класс подсчитываемых объектов как производный от базового класса – счетчика этих объектов.

  8. Используя интеллектуальные указатели, построить классы Proxy для базовых классов Array и String.

  9. Реализовать фабрику случайным образом генерируемых объектов следующих классов: точки на плоскости (x, y); точки, приводимые к первому квадранту (x, y)->(abs(x), abs(y)); точки, повернутые на р-радиан (x, y)->(-x, -y); точки, смещенные на заданный вектор (x, y)->(x+dx, y+dy). Для хранения фабричных объектов использовать класс LinkedList.

  10. Для наблюдаемого объекта – счетчика с датчиком случайных чисел реализовать два наблюдателя Observer: объект, накапливающий сумму случайных чисел, объект – финализатор.

  11. Используя синхронизованные методы внутри класса, представляющего очередь, реализовать схему: поточный объект “производитель натурального ряда чисел” – “очередь” – поточный объект “потребитель натуральных чисел”.

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

  13. На основе классов StackAsArray и StackAsArray::Iterator реализовать калькулятор арифметических выражений в постфиксной (обратной польской) нотации. Для передачи вычислений в выходной поток использовать метод Accept(Visitor&).

  14. На основе классов StackAsLinkedList и StackAsLinkedList::Iterator реализовать калькулятор арифметических выражений в постфиксной (обратной польской) нотации. Для передачи вычислений в выходной поток использовать метод Accept(Visitor&).

  15. На основе класса HashTable реализовать счетчик слов, вводимых во входной поток. Использовать Wrapper. Пары объектов классов String и Counter: public Int хранить в HashTable в виде объектов класса Association.

  16. Для ChainedHashTable определить класс ChainedHashTable: Iterator.

  17. Для класса SetAsArray перегрузить operator+() для добавления элемента и объединения множеств и operator-() для удаления элемента и разности множеств. Определить operator&() пересечения множеств и operator^() симметричной разности. Реализовать метод Accept(Visitor&).

  18. На основе PartitionAsForest построить класс эквивалентности.

  19. Используя представление алгебраических выражений в виде деревьев разбора класса BinaryTree, реализовать преобразователь этих выражений из постфиксной в префиксную нотацию используя класс StackAsArrayList и метод Tree::DepthFirstTraversal(Visitor&).

  20. На основе BinaryTree построить класс Dictionary, хранящий иерархию ключей – имен классов для канонических структур данных и ассоциированных с ними значений – дефиниций этих классов.




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

  2. Учебно-методическое и информационное обеспечение дисциплины



    1. Основная литература.

  1. Страуструп Б. Язык программирования С++. СПб.: Бином. 2008. 1104 с.

  2. Шилдт Г. Самоучитель С++. СПб.: БХВ-Петербург. 2002. 688 с.

  3. Шилдт Г. Искусство программирования на С++. СПб.: БХВ-Петербург. 2005. 474 с.

  4. Лафоре Р. Объектно-ориентированное программирование в С++. СПб.: Питер. 2004. 928 с.

  5. Элджер Д. С++. СПб.: Питер. 2001. 320 с.

  6. Майерс С. Наиболее эффективное использование С++. М.: ДМК. 2000. 296 с.

  7. Майерс С. Эффективное использование STL. СПб.: Питер. 2002. 224 с.

  8. Саттер Г. Решение сложных задач на С++. Серия C++ In-Depth. М.: Вильямс. 2002. 400 с. 

  9. Саттер Г. Новые сложные задачи на С++. М.: Вильямс. 2005. 272 с.

  10. Саттер Г., Александреску А. Стандарты программирования на С++. Серия C++ In-Depth. М.: Вильямс. 2008. 223 с.

  11. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. СПб.: Питер. 2007. 366 с.

  12. Александреску А. Современное проектирование на С++. Обобщенное программирование и прикладные шаблоны проектирования. Серия C++ In-Depth.М.: Вильямс. 2004. 335 с.

  13. Влиссидес Дж. Применение паттернов проектирования. Дополнительные штрихи. М.: Вильямс. 2003. 136 с.

  14. Шефферд Д. Программирование на Microsoft Visual C++ .NET. М.: Издательство «Русская Редакция». 2005. 928 с. 

    1. Дополнительная литература.

  1. Soulie J. C++ Language Tutorial. 2006. http://www.cplusplus.com/doc/introduction.html

  2. C++ Programming Tutorials. 2005. http://www.CoderSource.net:

  3. Электронное пособие по языку С++. http://www.find-info.ru/doc/cpp

  4. Huston V. Design Patterns. http://home.earthlink.net/~huston2/dp/patterns.html



    1. Пособия и методические указания.

  1. Кухаренко Б.Г. Алгоритмы и структуры данных: Методические указания. М.: МФТИ, 2007. 48 с.

  2. Кухаренко Б.Г. Алгоритмы и структуры данных: Методические указания. Приложение. М.: МФТИ, 2007. 56 с.

  3. Кухаренко Б.Г. Объектно-ориентированное программирование: Методические указания. М.: МФТИ, 2007. 52 с.

  4. Кухаренко Б.Г. Объектно-ориентированное программирование: Методические указания. Приложение. М.: МФТИ, 2007. 64 с.




Смотрите также:
Программа по курсу: практикум по объектно-ориентированному программированию (по выбору) по направлению
205.07kb.
1 стр.
Программа по курсу: оъектно-ориентированное программирование (факультетский) по направлению
226.09kb.
1 стр.
Программа по курсу: Методы параллельной обработки данных (базовый) по направлению
355.91kb.
1 стр.
Рабочая программа по курсу «Объектно-ориентированное программирование» для специализации «Компьютерные технологии в образовании и научной деятельности»
55.49kb.
1 стр.
Программа по курсу: современные технологии программирования на языке java (по выбору) по направлению
39.86kb.
1 стр.
Программа является рабочей по учебной дисциплине «Сольфеджио», «Музыкальный практикум: вокальная импровизация»
55.56kb.
1 стр.
Программирование потоком данных Сжатие данных
223.56kb.
1 стр.
Практикум по курсу "Электронный маркетинг" Технологии создания Web-сайтов Москва 2003 Составители: Н. Б. Завьялова
643.92kb.
1 стр.
Рабочая программа дисциплины объектно-ориентированное программирование
292.06kb.
1 стр.
4. основные понятия объектно-ориентированного подхода. Разработка объектно-ориентированных программ
386.08kb.
3 стр.
Практикум по программированию: обработка числовых данных. Учебное пособие. М., изд. Мгту им. Н. Э. Баумана, 2008. 288 с
117.19kb.
1 стр.
Практикум по курсу "Коммерческое право" для студентов юридического факультета. Казань: Центр инновационных технологий, 2001. 135с
1858.51kb.
8 стр.