cheap fioricet
funny ringtones
free mp3 ringtones
cheap ultracet
cheap ativan
verizon ringtones
cheap diazepam
ericsson ringtones
rivotril online
free ringtone
cheap carisoprodol
xanax online
free ringtones
free tracfone ringtones
buy vicodin
free wwe ringtones
buy phentermine
cyclobenzaprine online
free verizon ringtones
hydrocodone online
buy xenical
cheap levitra
cheap hydrocodone
meridia online
nokia ringtones
cheap ultram
cheap soma
order propecia
buy ativan
cheap adipex
lorazepam online
samsung ringtones
free mono ringtones
free sprint ringtones
soma online
cheap celexa
buy vicodin
cialis online
free sonyericsson ringtones
canadian casino online
cyclobenzaprine online
qwest ringtones
polyphonic ringtones
ultram online
order xanax
free tracfone ringtones
free qwest ringtones
lipitor online
cheap ultram
nexium online
free sony ericsson ringtones
cheap ativan
cheap xenical
generic cialis
carisoprodol online
sagem ringtones
meridia online
free nextel ringtones
tramadol
buy carisoprodol
mixing valium and xanax
cheap norco
valium online
cyclobenzaprine online
clonazepam online
kyocera ringtones
adipex online
free sonyericsson ringtones
carisoprodol online
cheap hydrocodone
free sony ericsson ringtone
cheap meridia
zanaflex online
cingular ringtones
cheap viagra
wwe ringtones
free nokia ringtone
free mtv ringtones
cheap vicodin
meridia online
free sony ericsson ringtones
sagem ringtones
free qwest ringtones
sony ringtones
cheap tramadol
free qwest ringtones
free polyphonic ringtones
cheap xanax
sagem ringtones
free funny ringtones
sony ericsson ringtones
cheap viagra
free ringtones
free samsung ringtones
ambien online
valium half life
ultram online
sony ericsson ringtones
cheap phentermine
valium side effects
cheap valium
cheap diazepam
free samsung ringtone
cheap hoodia
diazepam online
free mp3 ringtones
viagra online
xanax
soma online
but adipex
cialis online
cheap pharmacy online
soma online
order hydrocodone
didrex online
cheap lorazepam
funny ringtones
sildenafil online
levitra online
free tracfone ringtones
casino craps online
free ringtones
didrex online
cialis online
free mp3 ringtone
nextel ringtones
jazz ringtones
free motorola ringtones
punk ringtones
wellbutrin online
cool ringtones
free alltel ringtones
free alltel ringtones
buy tramadol
free nokia ringtones
but viagra
adipex online
norco online
wellbutrin online
cheap lorazepam
cheap propecia
sprint ringtones
online ultracet
cheap zoloft
cool ringtones
free tracfone ringtones
free motorola ringtones
cheap cialis
generic levitra
buy norco
order phentermine
cheap carisoprodol
cheap cialis
injecting valium
free music ringtones
motorola ringtones
clonazepam online
free polyphonic ringtones
viagra online
sagem ringtones
alltel ringtones
cheap diazepam
adipex online
buy xanax
diazepam online
cheap meridia
verizon ringtones
viagra online
carisoprodol online
generic vicodin
cheap viagra
fioricet online
cheap flexeril
adipex online
soma online
mono ringtones
free sony ericsson ringtones
buy meridia
verizon ringtones
cingular ringtones
valium online
nextel ringtones
free polyphonic ringtone
nextel ringtones
norco online
midi ringtones
meridia online
free real ringtones
diazepam online
but ultram
mp3 ringtones
cheap alprazolam
free samsung ringtones
sprint ringtones
xenical
free samsung ringtones
alprazolam online
cheap nexium
buy xanax
motorola ringtones ==Факультативный спецкурс «Программирование на C »==
Антон Дедов
Дмитрий Иртегов
Никита Каменский
отдельно благодарим за участие в обсуждении преподавателя ФИТ В. Рылова
Цели и задачи
Цели курса:
- Ознакомление с культурой и принятыми практиками программирования в сообществе C, знакомство с современным состоянием языка.
- Получение знаний, необходимых для создания более качественного и безопасного кода.
- Формирование сознательного отношения к использованию тех или иных средств языка, а не изучение «крутых» трюков.
Основные темы курса:
* проектирование классов;
* использование стандартной библиотеки и ее признанных расширений;
* безопасность исключений и требования, которые это налагает на дизайн.
Содержание курса
Курс условно разбит на несколько модулей. Каждый модуль логически объединяет смежные темы.
Модули содержат специфические примеры кода, которые, демонстрируют распространенные техники написания программ на C, а так же использование стандартной библиотеки.
Список модулей:
- Введение в язык
- Объектно-ориентированное программирование на C
- Исключения
- Шаблоны
- Введение в стандартную библиотеку C
Модули естественным образом разбиваются на части, минимальная единица – лекция. Лекции разных модулей могут перемежаться для облегчения понимания смежных тем из других модулей.
Введение в язык
Лекция 1
Длительность: 2часа
- Назначение языка, краткая история, основные возможности.
- Объявления и определения.
- Встроенные типы данных. Переменные; квалификаторы const.
- Выражения, операторы и управляющие структуры.
- Указатели. Массивы. Строковые литералы. Ссылки.
- Области видимости переменных.
- Структуры как средство группирования данных.
- Функции.
Объявление и определение. Аргументы и возвращаемые значения. Аргументы по умолчанию. Указатели на функцию. Inline.
- Перегрузка функций и операторов. Разрешение имен функций при перегрузке.
- Структура программы. Понятие единицы трансляции. Понятие о правиле одного определения.
Лекция 2
Длительность: 2часа
- Классы.
- Члены класса.
Ограничения доступа как средство для поддержки инкапсуляции. Дружба.
- Объекты. Определение переменных-объектов.
- Конструкторы и деструкторы классов. Порядок инициализации и уничтожения членов.
- Способы размещения объектов в памяти: автоматический, динамический, статический.
- Динамическая память. Операторы new, delete, delete[].
- Генерируемые компилятором определения членов классов.
- Использование объектов: вызов методов, передача объекта в качестве параметра функции. Понятие временного объекта.
- Передача объектов по значению и по ссылке.
Лекция 3
Длительность: 1час, как и все последующие лекции.
- Пространства имен.
Пространства имен как область видимости. Открытость пространств имен. Безымянные пространства имен. Квалификаторы using. Fully specified name.
- Поиск и разрешение имен. Поиск Кёнига.
- Иерархии классов.
Уровни доступа наследования. Иерархии is-a, и реализован посредством. Агрегирование как альтернатива наследованию.
- Конструкторы и деструкторы.
Порядок инициализации классов предков. Порядок вызовов деструкторов. Виртуальные деструкторы.
- Виртуальные функции. Абстрактные классы.
- Различие между перегрузкой, замещением и сокрытием функций.
- Введение в множественное наследование.
Исключения (часть I)
Лекция 1
- Назначение механизма исключений.
- Группировка исключений.
- Поимка исключений, порядок. Поимка по константной ссылке. Re-throw.
- Ресурсы и исключения.
Исключения в конструкторах. Использование std::auto_ptr и boost::shared_ptr. Идиома RAII.
- Исключения и деструкторы.
Объектно-ориентированное программирование
Лекция 1
- Основные принципы ООП.
- Проектирование классов для разного назначения: объекты-значения, базовые классы, классы исключений, шаблоны классов и т.п.
- Open-Close Principle как одна из целей объектно-ориентированной архитектуры.
- Принцип подстановки Лисковой.
Лекция 2
- Принцип интерфейса.
Какие функции составляют интерфейс класса. Какие функции должны быть членами класса, какие нет.
- Использование абстрактных классов.
Делайте нетерминальные классы абстрактными. Dependency Inversion Principle. Interface Segregation Principle.
- Инкапсуляция и проектирование интерфейса.
Классы обладающие поведением должны скрывать данные. Смешивание открытых и закрытых членов вредно.
- Паттерн невиртуального интерфейса (NVI pattern).
Лекция 3
- Вопросы перегрузки операторов:
- Перегрузка new, delete.
- Перегрузка операторов, ->, [] и т.п.
- Перегрузка операторов, >>, <<.
- Какие операторы не рекомендуется перегружать.
- Вложенные классы.
- Идиома Pimpl.
- Паттерн Proxy.
Шаблоны (часть I)
Лекция 1
- Понятие шаблона. Инстанцирование.
- Шаблонные функции. Перегрузка.
- Шаблоны классов.
- Шаблоны членов классов.
Стандартная библиотека (часть I)
Лекция 1
- Обзор и организация стандартной библиотеки.
- Использование строк.
- Контейнеры. Типы контейнеров.
Последовательности, ассоциативные контейнеры, адаптеры контейнеров. Требования к стандартным контейнерам.
Шаблоны (часть II)
Лекция 1
- Специализация шаблонов классов.
- Частичная специализация шаблонов классов и шаблонов функций.
- Примеры использования шаблонов: классы свойств; паттерн стратегия.
Стандартная библиотека (часть II)
Лекция 1
- Алгоритмы.
Описание наиболее популярных алгоритмов STL: find, for_each, copy, transform. Что делает алгоритм remove. Идиома erase(remove).
- Итераторы.
Что такое стандартный итератор STL. Типы итераторов. Как создавать итераторы совместимые со стандартными.
Лекция 2
- Введение в потоки STL.
- Потоковые итераторы.
Исключения (часть II)
Лекция 1
- Разработка кода безопасного с точки зрения исключений.
- Гарантии безопасности исключений (гарантии Абрамса).
- Стратегии обработки ошибок и исключительных ситуаций.
Литература
Список литературы составлен в алфавитном порядке.
- Андрей Александреску. Современное проектирование на С. Обобщенное программирование и прикладные шаблоны проектирования. // 2002
- Гради Буч. Объектно-ориентированный анализ и проектирование. С примерами приложений на C . // 2000;
В библиотеке НГУ
- Дэвид Вандевурд, Николаи М. Джосаттис. Шаблоны C. Справочник разработчика. // 2003;
В библиотеке НГУ
- Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. // 2001;
В библиотеке НГУ
- Скотт Мейерс. Эффективное использование C . 50 рекомендаций по улучшению ваших программ и проектов. // 2000
В библиотеке НГУ
- Скотт Мейерс. Наиболее эффективное использование C . 35 новых рекомендаций по улучшению ваших программ и проектов. // 2000
В библиотеке НГУ
- Скотт Майерс. Эффективное использование STL. // 2002
- Герб Саттер. Решение сложных задач на C . // 2002
- Герб Саттер. Новые сложные задачи на C : 40 новых головоломных примеров с решениями. // 2005;
В библиотеке НГУ
- Герб Саттер и Андрей Александреску. Стандарты программирования на C : 101 правило и рекомендация. // 2005;
В библиотеке НГУ
- Бьерн Страуструп. Язык программирования C . // 2001;
В библиотеке НГУ
- Бьерн Страуструп. Дизайн и эволюция языка C . // 2000
- ISO/IEC 14882:1998(E), Programming Languages??? C (ISO and ANSI C standard).
- Robert C. Martin. Design Principles and Design Patterns. // objectmentor.com 2000
Полезные ссылки