- •Методические указания к лабораторным работам
- •Лабораторная работа №1 простые программы с циклами и операторами консольного ввода/вывода
- •Задание
- •Описание примера
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №2 работа с текстовыми файлами, структурами данных и меню
- •Задание
- •Структурное программирование и функциональная декомпозиция системы
- •Функции
- •Организация меню в консольном приложении
- •Структуры данных
- •Операции с файлами
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №3 разработка и спецификация функций и модулей программы
- •Задание
- •Модульная структура программ
- •Параметры командной строки
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №4 разработка и спецификация структур данных, использование указателей и динамических массивов структур
- •Задание
- •Указатели
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №5 использование объектно-ориентированного программирования в разработке приложений
- •Задание
- •Конструкторы и деструкторы
- •Конструктор по умолчанию
- •Конструктор копирования
- •Массивы объектов
- •Friend-конструкции
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №6 использование наследования, полиморфизма и абстрактных классов
- •Задание
- •Наследование данных и методов
- •Полиморфизм и виртуальные функции
- •Абстрактный класс
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №7
- •Сложные структуры из объектов классов
- •Цель работы - изучение организации различных структур данных и разработка методов манипулирования данными.
- •Задание
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №8 разработка windows-интерфейса приложения
- •Задание
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №9 разработка и использование com-сервера
- •Задание
- •Шаблоны классов
- •Использование библиотеки atl для создания серверов сом
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Литература
Структурное программирование и функциональная декомпозиция системы
В самом общем случае программа — это последовательность операций над структурами данных, которые реализуют алгоритм решения задачи. Для большинства задач этот алгоритм достаточно объемен и сложен. Для уменьшения сложности программ, облегчения их понимания и сопровождения используются приемы структурного программирования.
Структурная программа должна удовлетворять следующим основным требованиям:
1 . Текст программы представляет собой композицию трех основных элементов: последовательное соединение (следование), условное предложение (развилка) и повторение (цикл).
2. Употребления GO TO избегают всюду, где это возможно. Наихудшим применением GO TO считается переход на оператор, расположенный выше (раньше) в тексте программы.
3. Текст программы напечатан с правильными сдвигами, так что разрывы в последовательности выполнения легко прослеживаются.
5. Текст программы физически разбит на части, чтобы облегчить чтение. Выполняемые предложения каждого модуля должны умещаться на одной странице печатающего устройства.
6. Программа представляет собой простое и ясное решение задачи.
7. Текст программы сопровождается комментариями, поясняющими назначение переменных и шаги алгоритма.
При структурном подходе главным является принцип разработки ПО сверху-вниз. Все начинается со структурного анализа будущего комплекса ПО и декомпозиции алгоритма на осмысленные части (блоки), которые должны быть максимально автономными, обозримыми (то есть достаточно короткими) и обычно нереализованными в виде программ. Структурированная программа состоит из блок-программы и блоков. Первая не должна содержать вычислений, она содержит обращения к блокам, которые выполняют роль отдельных строительных кирпичиков сложного комплекса. Начинают писать структурированную программу с блок-программы, которую пытаются отладить, даже не имея всех составляющих ее блоков. Блоки заменяют временными программными заглушками. Если какой-то блок оказывается плохо обозримым или появляются трудности в его реализации, то с ним пытаются поступить так же, как и со всей программой, то есть разбить на отдельные более мелкие части. Каждый блок оформляется в виде отдельной функции языка.
Функции
В языке С++ все функции глобальные. Объявление функции имеет вид:
return_type func_name(arg_typel argl, arg_type2 arg2, ...);
Для объявления функции необходимо указать тип возвращаемого значения, который может быть любым, как базовым (int, char*, и т. д.), так и определенным программистом (struct fruit и т. п.). Если функция не возвращает никакого значения, то следует указать тип void. Затем следует имя функции, которое может быть произвольным, но лучше, если оно несет информацию о ее назначении. После имени в круглых скобках перечисляются все ее аргументы с указанием типа каждого. Аргументы могут и отсутствовать. Определение функции содержит код ее реализации (тело функции), заключенный в фигурные скобки. Объявление и определение функции могут быть отделены друг от друга.
В C++ передача параметров осуществляется по значению. При этом внутри функции заводится копия переданного параметра. Копии присваивается значение, равное значению фактического параметра. Если функция в процессе своей работы изменит значение параметра (его копии), то вызывающая процедура никак не сможет это обнаружить. Если необходимо, чтобы функция возвращала измененные значения параметров, то в функцию передается адрес переменной (указатель). Переменная типа указатель объявляется при помощи символа * перед именем переменной:
long factorial(int nNumber) {…}
int swap(float *a, float *b) {…}