- •Учебное пособие по дисциплине «программирование»
- •11.03.02 «Инфокоммуникационные технологии и системы связи»
- •1. Основные структуры управления 8
- •12. Стандартная библиотека шаблонов 264
- •13. Обработка исключительных ситуаций. 284
- •15. Многопоточное программирование, thread-safety 298
- •19. Работа с базой данных 400
- •20. Разработка сетевых приложений 435
- •21. Жизненный цикл программы 449
- •22. Методы отладки и тестирования программы 478
- •Введение
- •Основные структуры управления
- •Краткая теория Описание среды разработки Microsoft Visual Studio
- •Создание простейшего приложения
- •Этапы компиляции
- •Цель и порядок работы
- •Примеры
- •Контрольные вопросы
- •Задание
- •Содержание отчета
- •Краткая теория
- •Идентификатор
- •Константы и переменные
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Основные типы данных
- •Операторы языка программирования
- •1 Присваивание
- •2 Ввод-вывод данных с использованием библиотеки потокового ввода вывода
- •3 Манипуляторы и форматирование ввода-вывода
- •4 Ввод вывод с использованием стандартной библиотеки ввода-вывода stdio.H
- •5 Математические функции
- •Операции
- •Приоритеты операций в выражениях
- •Примеры программ Пример программы нахождения среднего арифметического из двух целых чисел и одного вещественного числа:
- •Программа вычисления значения выражения:
- •Лабораторная работа № 2. Проектирование программ линейной структуры Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •Содержание отчета
- •Операторы ветвления и выбора Краткая теория
- •Оператор ветвления
- •Оператор выбора
- •Оператор switch
- •2 Цикл с предусловием (do while)
- •3 Цикл с параметром (for)
- •2 Операторы передачи управления
- •1 Оператор безусловного перехода (goto)
- •2 Оператор возврата из функции (return)
- •3 Оператор выхода из цикла (break)
- •4 Оператор перехода к следующей итерации цикла (continue)
- •2 Вложенные циклы
- •3 Итерационные циклы
- •Лабораторная работа № 5. Итерационные и арифметические циклы. Вложенные циклы Цель и порядок работы
- •Контрольные вопросы
- •Содержание отчета
- •Массивы
- •Массивы.
- •Базовый_тип имя_массива [размерность];
- •Int a[100];//массив из 100 элементов целого типа
- •2 Многомерные массивы
- •3. Сортировка массивов
- •3.1. Сортировка с помощью включения
- •3.2. Сортировка методом простого выбора
- •3.3. Сортировка методом простого обмена
- •2 Многомерные массивы (матрицы)
- •Операции с указателями
- •Указатели и массивы
- •Динамические массивы
- •Примеры программ
- •Лабораторная работа № 7. Указатели и ссылки. Имя массива как указатель. Динамические массивы Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •1 Указатели
- •2 Имя массива как указатель
- •Содержание отчета
- •Функции Краткая теория
- •1 Описание функций
- •2 Параметры функции
- •3 Передача массивов в функцию
- •4 Указатели на функции
- •Лабораторная работа № 8. Функции Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •1 Функции, параметры функций
- •2 Передача массивов в функцию (одномерные массивы)
- •3 Передача массивов в функцию (многомерные массивы)
- •Содержание отчета
- •Краткая теория
- •1 Понятие отладки
- •2 Разновидности ошибок
- •2.1 Ошибки этапа компиляции
- •2.2 Ошибки этапа выполнения
- •2.3 Логические ошибки
- •3 Методы отладки
- •3.1 Установка точки прерывания
- •3.2 Выполнение программы до точки прерывания
- •3.3 Прекращение отладки
- •3.4 Пошаговое выполнение программы и трассировка
- •3.5 Выполнение программы до курсора
- •3.6 Отслеживание значений переменных во время выполнения программы
- •3.7 Создание условной точки останова
- •4 Работа с отладчиком
- •4.1 Выполнение программы по шагам без захода в функцию
- •4.2 Выполнение программы по шагам с заходом в функцию (трассировка)
- •Цель и порядок работы
- •Контрольные вопросы
- •Задание
- •Задание для выполнения работы
- •1 Часть первая
- •2 Часть вторая
- •2 Перечисления (enum)
- •3 Структуры (struct)
- •4 Объединения (union)
- •5 Битовые поля
- •6 Пример
- •Лабораторная работа № 10. Типы данных, определяемые пользователем. Структуры и объединения Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •Содержание отчета
- •Краткая теория
- •1.1 Ввод-вывод строк
- •1.2 Операции со строками
- •Ввод и вывод русских букв в консоли можно сделать разными способами.
- •1.3 Некоторые Стандартные функции работы со троками
- •Режимы открытия файлов
- •Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •2 Рекурсивные функции
- •3 Шаблоны функций
- •4 Функции с переменным количеством параметров
- •Лабораторная работа № 12. Перегрузка функций. Шаблоны функций Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •1 Перегрузка функций
- •2 Добавление новых файлов в проект в среде разработки Visual Studio 2008
- •3 Пример работы с многофайловыми проектами
- •4 Препроцессор
- •Лабораторная работа № 13. Модули. Многофайловые проекты. Препроцессор. Цель и порядок работы
- •Контрольные вопросы
- •Задание
- •Варианты заданий
- •Содержание отчета
- •Введение в OpenGl.
- •Работа с OpenGl при помощи
- •Библиотеки glut
- •Создание консольного приложения, использующего OpenGl
- •Лабораторная работа №14. Создание приложения с использованием OpenGl. Рисование примитивов. Цель работы:
- •Задания
- •Примеры рисования многоугольников:
- •Конструктор копирования и операция присваивания Конструктор копирования
- •Перегруженная операция присваивания
- •Лабораторная работа № 15. Классы Цель работы:
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Перегрузка операций и дружественные функции. Указатели на функции, методы и члены данных Перегрузка операций и дружественные функции.
- •Указатели на функции
- •В заданиях 11 – 20 перегрузить операции ввода и вывода исходных данных.
- •Виртуальные функции. Абстрактные классы.
- •Пространства имен
- •Лабораторная работа № 17. Наследование. Открытое и закрытое наследование. Цель работы:
- •Контрольные вопросы
- •Задания на самостоятельное выполнение
- •Содержание отчета
- •Шаблоны (На самостоятельное изучение)
- •Шаблон класса
- •Шаблонные функции.
- •Шаблонные методы
- •Стандартная библиотека шаблонов
- •Stl Строки
- •Строковые потоки
- •Итераторы
- •Итераторы обеспечивают доступ к элементам в коллекции
- •Алгоритмы
- •Предикаты
- •Заключение
- •Лабораторная работа № 18. Стандартная библиотека шаблонов Цель.
- •Порядок выполнения работы.
- •Содержание отчета.
- •Варианты заданий.
- •Обработка исключительных ситуаций. Теория
- •Введение
- •"Создание" исключений
- •Операторы throw без параметров
- •Заключение
- •Цель работы:
- •Контрольные вопросы
- •Задание
- •Содержание отчета
- •Краткая теория
- •Многопоточное программирование, thread-safety
- •Инициализация потока
- •Id потока
- •Пространство имен this_thread
- •Одновременный доступ к ресурсам
- •Содержание отчета
- •Механизмы синхронизации Вводные понятия синхронизации потоков
- •Работа с потоками с помощью функций WinApi Несинхронизированные потоки
- •Критические секции
- •Мьютексы (взаимоисключения)
- •События
- •Потокобезапасность
- •Типовые задачи синхронизации
- •Механизм семафоров
- •Семафорное решение задачи о философах
- •Лабораторная работа № 21. Семафоры: защита критических секций, условная синхронизация Цели и задачи:
- •Порядок выполнения лабораторной работы
- •Варианты заданий
- •Содержание отчета
- •Создание проекта библиотеки динамической компоновки (dll)
- •Добавление класса в библиотеку динамической компоновки
- •Создание приложения, ссылающегося на библиотеку динамической компоновки
- •Использование функциональных возможностей библиотеки классов в консольном приложении
- •Запуск приложения
- •Создание проекта статической библиотеки
- •Добавление класса в статическую библиотеку
- •Создание приложения, ссылающегося на статическую библиотеку
- •Использование функциональных возможностей статической библиотеки в консольном приложении
- •Запуск приложения
- •Создание нового проекта библиотеки классов
- •Добавление класса в библиотеку классов
- •Создание приложения, ссылающегося на библиотеку классов
- •Использование функциональных возможностей библиотеки классов в консольном приложении
- •Запуск приложения
- •Создание dll
- •Использование dll без библиотеки импорта. Динамическое подключение.
- •Результаты работы dllrun02.Exe
- •Цель работы:
- •Постановка задачи
- •Варианты
- •Методические указания
- •Содержание отчета
- •Краткая теория
- •Метасимволы в регулярных выражениях
- •Поиск в тексте по шаблону
- •Редактирование текста
- •Цель работы:
- •Задание
- •Содержание отчета
- •Краткая теория Философия .Net Framework
- •Библиотека Windows Forms
- •Класс Form, MessageBox и компоненты Класс Form
- •Диалог MessageBox
- •Компоненты и панель ToolBox
- •Работа с элементами управления
- •Цель работы:
- •Задания
- •Содержание отчета
- •Пример 1.
- •Пример 2.
- •Редактирование таблицы базы данных ms Access в среде Visual Studio без написания программного кода
- •Чтение всех записей из таблицы бд ms Access на консоль с помощью объектов классов Command и DataReader
- •Создание базы данных ms Access в программном коде
- •Добавление записей в таблицу базы данных ms Access
- •Чтение всех записей из таблицы базы данных c помощью объектов классов Command, DataReader и элемента управления DataGridView
- •Чтение данных из бд в сетку данных DataGridView с использованием объектов классов Command, Adapter и DataSet
- •Обновление записей в таблице базы данных ms Access
- •Удаление записей из таблицы базы данных с использованием sql-запроса и объекта класса Command
- •Лабораторная работа № 25. Работа с базой данных Цель работы:
- •Порядок выполнения работы
- •Методические указания
- •Варианты заданий
- •1. Библиотека
- •2. Университет
- •3. Оптовая база
- •4. Производство
- •5. Сеть магазинов
- •6. Авторемонтные мастерские
- •7. Деканат
- •8. Договорная деятельность организации
- •9. Поликлиника
- •10. Телефонная станция
- •11. Спорт
- •12. Сельскохозяйственные работы
- •13. Городской транспорт
- •14. География
- •15. Домоуправление
- •16. Аэропорт
- •7. Прикладной
- •1. Аппаратный (Физический)
- •Общая схема работы с сокетами в Windows
- •Пример. Клиентское и серверное приложение
- •Клиент:
- •Сервер:
- •Лабораторная работа № 26. Разработка сетевых приложений Цель работы:
- •Порядок выполнения работы
- •Задания:
- •Варианты
- •Содержание отчета
- •Жизненный цикл программы
- •Программный продукт и определение требований к продукту Программный продукт
- •Определение требований к продукту
- •Требования к функционированию продукта
- •Требования к надежности продукта
- •Условия эксплуатации продукта
- •Требования к техническим средствам
- •Требования к установке продукта
- •Техническое задание
- •Упражнения
- •Лабораторная работа №27. Разработка технического задания на программный продукт Цель работы:
- •Задание
- •Варианты заданий
- •Контрольные вопросы
- •Содержание отчета
- •Проектирование программного продукта
- •Разработка эскизного проекта
- •Разработка технического проекта
- •Рабочий проект
- •Упражнения
- •Задание
- •Отладка
- •Тестирование
- •Сопровождение продукта
- •Модификация продукта
- •Цикличность разработки продукта
- •Контрольные вопросы
- •Лабораторная работа №29. Проектирование структуры приложения Цель работы:
- •Задание
- •Методические указания Контрольные вопросы
- •Лабораторная работа №30. Разработка пользовательского интерфейса Цель работы:
- •Задание
- •Методические указания Контрольные вопросы
- •Методы отладки и тестирования программы Теоретические сведения
- •Обнаружение ошибки
- •Программа не дает результатов
- •Программа дает неверные результаты
- •Программа дает правдоподобные результаты
- •Устранение ошибки
- •Средства отладки
- •Упражнения
- •Тестирование
- •Unit-тестирование
- •Методики тестирования
- •Функциональное тестирование
- •Тестирование обращений к базам данных
- •Тестирование бизнес-логики программы
- •Нагрузочное тестирование
- •Стрессовое тестирование
- •Тестирование интерфейса пользователя
- •Тестирование безопасности и прав доступа
- •Тестирование инсталляции программного продукта
- •Наборы тестов
- •Процесс тестирования
- •Особенности тестирования объектно-ориентированных программ
- •Средства тестирования
- •Обеспечение качества программного продукта
- •Упражнения
- •Контрольные вопросы
- •Лабораторная работа № 31. Тестирование и отладка приложения Цель работы:
- •Задание
- •Методические указания Контрольные вопросы
- •Boost::threads. Многопоточное программирование Создание потока
- •Мьютексы
- •Условные переменные
- •Локальная память потока
- •Однократно вызываемые функции
- •Инициализация параметров
- •Основные алгоритмы
- •Небольшое отступление от алгоритма, для описания его параметров. Эти параметры используются во всех алгоритмах, но рассмотрим их только здесь.
- •Вспомогательные средства
- •Содержание отчета
- •Boost::bind (на самостоятельное изучение) Использование с глобальной функцией
- •Использование с указателями на функции члены
- •Использование с указателем на член данных
- •Каскадное использование связывателей
- •Перегруженные операторы
- •Использование ссылок
- •Пример использования.
- •Boost::asio (::io_service) (Самостоятельное изучение) boost::asio основы
- •Boost::asio асинхронный
- •Использование boost::asio
- •Асинхронное программирование
- •Необходимость работать асинхронно
- •Список источников
Контрольные вопросы
Перечислите этапы разработки программных продуктов.
Для чего необходимо техническое задание?
Кто занимается разработкой технического задания?
Какие пункты включает техническое задание?
Содержание отчета
Титульный лист.
Наименование и цель работы.
Краткое теоретическое описание.
Задание на лабораторную работу.
Листинг программы.
Результаты выполнения программы.
Проектирование программного продукта
После определения всех требований, составления и утверждения технического задания можно переходить к следующему этапу — проектированию разработки программного продукта. На этом этапе набирается команда разработчиков и назначается менеджер проекта (project manager). Разработчики под руководством менеджера проекта, прежде всего, анализируют техническое задание и формулируют записанные в нем требования к продукту на своем языке. Это может быть более детальное описание в терминах программирования, запись на псевдокоде или на специальном языке описания интерфейсов. Затем они выбирают удобную для себя среду разработки, язык программирования, подыскивают или конструируют алгоритм решения задачи, подбирают структуры данных, способы хранения и представления данных. В результате возникает проект создания программного продукта, в котором отражается план необходимых для этого работ.
Редко удается сразу разработать полный и всеобъемлющий проект. Обычно разработка проходит несколько этапов, на которых проект уточняется и детализируется. Многие стандарты разработки различают эскизный проект, технический проект и рабочий проект. Но работа по созданию проекта начинается с анализа поставленной задачи.
Анализ
Классический метод анализа рассматривает создаваемый продукт как информационную систему или систему управления. Слово "система" очень общее, ему трудно дать точное определение. Для анализа системы важно, что она состоит из нескольких относительно независимых подсистем. Например, информационная система факультета может состоять из подсистемы, обеспечивающей учебный процесс во главе с деканатом, подсистемы, обеспечивающей научную деятельность факультета во главе с ученым советом, подсистемы, обеспечивающей социальные нужды студентов и сотрудников.
Подсистема состоит из одного или нескольких модулей. Каждый модуль обеспечивает решение одной или нескольких задач, взаимодействуя при этом с другими модулями подсистемы. Например, подсистема учебного процесса факультета может состоять из модулей "деканат", "кафедра", "библиотека", "компьютерный класс", "методическая комиссия".
В результате такого анализа выявляется структура системы, поэтому он носит название структурного анализа (structured analysis). Есть несколько десятков различных методик структурного анализа, приспособленных к анализу систем разного типа. Наиболее широкое распространение получила методика SADT (Structured Analysis and Design Technique), разработанная в конце шестидесятых годов Дугласом Россом в Массачусетском технологическом институте. В начале семидесятых годов она была с успехом применена в крупном аэрокосмическом проекте. Затем методика SADT использовалась в проектировании телефонных сетей, в системах автоматизированного проектирования (САПР), в разработке автоматизированных систем управления различными производственными процессами. Она до сих пор применяется для анализа самого широкого круга задач и реализации многих проектов.
Методика SADT была применена ВВС США для реализации программы компьютеризации промышленности, названной ICAM (Integrated Computer Aided Manufacturing). В ходе выполнения этой программы потребовалось разработать стандарт взаимодействия промышленных систем. Этот стандарт получил название IDEF (ICAM DEFinition). Оказалось, что он хорошо подходит для анализа и проектирования самых разных деловых и производственных процессов. Стандарт IDEF быстро развивался. На его основе появились разновидности IDEFO, IDEF1, IDEF1X, IDEF3, IDEF4, IDEF5, ABC, приспособленные для решения специфических задач. Каждая разновидность стандарта IDEF уже выпушена в нескольких версиях
Результаты структурного анализа оформляются графически в виде нескольких диаграмм. Каждая методика предлагает свой набор диаграмм и свои правила их оформления, но почти во всех методиках есть диаграммы потоков данных DFD (Data Flow Diagrams), диаграммы переходов состояний STD (State Transition Diagrams), диаграммы сотрудничества ERD (Entity- Relationship Diagrams). Фирмы, вырабатывающие методики, предлагают и свои графические инструменты для их вычерчивания. Большое распространение получили программные продукты ERWin, BPWin фирмы Computer Associates, Rational Rose фирмы Rational Software Corporation, серия программных продуктов SILVERRUN одноименной фирмы.
В последнее время все большее распространение получает объектно- ориентированный анализ (ООА, Object-Oriented Analysis), активно развиваемый фирмой Rational Software Corporation. Этот метод анализа опирается на RUP (Rational Unified Process). Он начинает с составления всех возможных прецедентов (use cases) работы будущего программного продукта и создает аналитическую модель. Аналитическая модель, как следует из названия методики, определяет объекты, с которыми будут работать сценарии, входящие во все прецеденты. В число этих объектов, прежде всего, попадают сущности, которыми оперирует программа. Примерами сущностей могут служить списки сотрудников учреждения, его штатное расписание, банковские счета, каталог библиотеки и т. д. Действующие лица (actors) сценариев тоже становятся объектами. Кроме них, выделяются объекты, реализующие действия (actions), выполняемые действующими лицами, и объекты, связывающие действующие лица между собой.
Далее, объекты описываются классами. Выделяются классы сущностей, граничные классы, описывающие взаимодействия различных объектов, управляющие классы, описывающие объекты управления другими объектами. При этом сразу рисуются диаграммы классов, а также диаграммы взаимодействий объектов. В объектно-ориентированном анализе выработано много разновидностей диаграмм, но наиболее часто создаются диаграммы кооперации объектов и диаграммы последовательностей.
Для облегчения и автоматизации анализа разработаны различные программные продукты. Например, фирма Rational Software Corporation предлагает средство анализа и проектирования Rational Rose. С его помощью можно быстро нарисовать нужные диаграммы и даже создать исходный текст программы на одном из наиболее распространенных языков программирования.
