Основы программирования на языке C++

Автор: Пользователь скрыл имя, 17 Декабря 2012 в 21:34, контрольная работа

Краткое описание

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

Оглавление

Введение 3
1. Часть I (Теоретическая) 4
Система классов для описания исключительных ситуаций 4
C++ представляет исключительные ситуации как классы 4
Как заставить С++ проверять исключительные ситуации 4
Использование оператора throw для генерации исключительной ситуации 6
Определение обработчика исключительной ситуации 7
Использование элементов данных исключительной ситуации 10
Обработка неожиданных исключительных ситуаций 11
Объявление генерируемых функцией исключительных ситуаций 12
Исключительные ситуации и классы 13
2. Часть II (Практическая) 15
Задание 1 15
Задание 2 17
Реализация классов 17
Заключение 19
Список использованной литературы 20

Файлы: 1 файл

Контрольная Основы программирования на языке C++.doc

— 153.50 Кб (Скачать)

АЛМАТИНСКИЙ ФИЛИАЛ НЕГОСУДАРСТВЕННОГО ОБРАЗОВАТЕЛЬНОГО

УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО  ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГУМАНИТАРНЫЙ УНИВЕРСИТЕТ ПРОФСОЮЗОВ»


 

 

 

 

Факультет: экономический

Кафедра:

информатики и математики

 

 

 

 

Контрольная работа

По дисциплине:

Объектно-ориентированное  программирование

На тему:

«Основы программирования на языке C++»

 

 

 

 

 

 

 

Выполнил: студент

3-ого курса группы 301 ПИВ

экономического факультета

Балдин Сергей Викторович

 

Проверила: ст.преп.

Харитонова Лариса Сергеевна

 

 

 

 

 

 

 

 

 

 

 

Алматы, 2010

 

Содержание

 

 

Введение

Объектно-ориентированное  программирование – это основная методология программирования 1990-х годов и начала XXI века. Она представляет собой продукт более 35 лет практики и опыта, которые восходят к использованию языка Simula 67, затем Smalltalk и не так давно Objective C, Object Pascal, Turbo Pascal, CLOS, а теперь, например, C++ и Java. В основе объектно-ориентированной парадигмы программирования лежат три принципа: инкапсуляция, наследование, полиморфизм.

Объектно-ориентированный  анализ и проектирование принципиально отличаются от традиционных подходов структурного проектирования: здесь нужно по-другому представлять себе процесс декомпозиции, а архитектура получающегося программного продукта в значительной степени выходит за рамки представлений, традиционных для структурного программирования. Отличия обусловлены тем, что структурное проектирование основано на структурном программировании, тогда как в основе объектно-ориентированного проектирования лежит методология объектно-ориентированного программирования, К сожалению, для разных людей термин "объектно-ориентированное программирование" означает разное. Ренч правильно предсказал: "В 1980-х годах объектно-ориентированное программирование будет занимать такое же место, какое занимало структурное программирование в 1970-х. но всем будет нравиться. Каждая фирма будет рекламировать свой продукт как сданный по этой технологии. Все программисты будут писать в этом стиле, причем все по-разному. Все менеджеры будут рассуждать о нем. И никто не будет знать, что же это такое". Данные предсказания продолжают сбываться и в 1990-х годах.

 

1. Часть I (Теоретическая)

Система классов для описания исключительных ситуаций

C++ представляет исключительные  ситуации как классы

Ваша цель при использовании  исключительных ситуаций C++ состоит в упрощении обнаружения и обработки ошибок в программах. В идеале, если ваши программы обнаруживают неожиданную ошибку (исключительную ситуацию), им следует разумным образом ее обработать вместо того, чтобы просто прекратить выполнение.

В программах вы определяете каждую исключительную ситуацию как класс. Например, следующие ситуации определяют три исключительные ситуации для  работы с файлами:

код C++

 class file_open_error {};

 class file_read_error {};

 class file_write_error {};

Как заставить С++ проверять  исключительные ситуации

Прежде чем ваши программы  могут обнаружить и отреагировать  на исключительную ситуацию, вам следует  использовать оператор C++ try для разрешения обнаружения исключительной ситуации. Например, следующий оператор try разрешает обнаружение исключительной ситуации для вызова функции file_соpy:

код C++

 try

 

 {

 file_copy("SOURCE.ТХТ", "TARGET.ТХТ");

 };

 

Сразу же за оператором try ваша программа должна разместить один или несколько операторов catch, чтобы определить, какая исключительная ситуация имела место (если она вообще была):

код C++

try

 

 {

 file_copy("SOURCE.ТХТ", "TARGET.ТХТ");

 };

 

 catch (file_open_error)

 

 {

 cerr << "Ошибка открытия исходного или целевого файла" << endl;

 exit(1);

 }

 

 catch (file_read_error)

 

 {

 cerr << "Ошибка чтения исходного файла" << endl;

 exit(1);

 }

 

 catch (file_write_error)

 

 {

 cerr << "Ошибка записи целевого файла" << endl;

 exit(1);

 }

 

Как видите, приведенный  код проверяет возникновение  исключительных ситуаций работы с файлами, определенных ранее. В данном случае независимо от типа ошибки код просто выводит сообщение и завершает программу. В идеале ваш код мог бы отреагировать и не так — возможно, попытаться исключить причину ошибки и повторить операцию. Если вызов функции прошел успешно и исключительная ситуация не выявлена, C++ просто игнорирует операторы catch.

Использование оператора throw для генерации исключительной ситуации

Сам C++ не генерирует исключительные ситуации. Их генерируют ваши программы, используя оператор C++ throw. Например, внутри функции file_copy программа может проверить условие возникновения ошибки и сгенерировать исключительную ситуацию:

код C++

void file_copy(char *source, char *target)

 

 {

 char line[256];

 ifstream input_file(source);

 ofstream output_file(target);

 if (input_file.fail())

 throw(file_open_error);

 else

 if (output_file.fail()) throw(file_open_error);

 else

 

 {

 while ((! input_file.eof()) && (! input_file.fail()))

 

 {

 input_file.getline(line, sizeof(line));

 if (! input_file.fail()) output_file << line << endl;

 else throw(file_read_error);

 if (output_file.fail()) throw (file_write_error);

 }

 }

 }

 

Как видите, программа  использует оператор throw для генерации  определенных исключительных ситуаций.

Как работают исключительные ситуации

Когда вы используете  исключительные ситуации, ваша программа  проверяет условие возникновения  ошибки и, если необходимо, генерирует исключительную ситуацию, используя оператор throw. Когда C++ встречает оператор throw, он активизирует соответствующий обработчик исключительной ситуации (функцию, чьи операторы вы определили в классе исключительной ситуации). После завершения функции обработки исключительной ситуации C++ возвращает управление первому оператору, который следует за оператором try, разрешившим обнаружение исключительной ситуации. Далее, используя операторы catch, ваша программа может определить, какая именно исключительная ситуация возникла, и отреагировать соответствующим образом.

Определение обработчика  исключительной ситуации

Когда ваша программа  генерирует исключительную ситуацию, C++ запускает обработчик исключительной ситуации (функцию), чьи операторы  вы определили в классе исключительной ситуации. Например, следующий класс исключительной ситуации nuke_meltdown определяет операторы обработчика исключительной ситуации в функции nuke_meltdown:

код C++

class nuke_meltdown

 

 {

 public:

 nuke_meltdown(void){ cerr << "\а\а\аРаботаю! Работаю! Работаю!" << endl; }

 };

 

В данном случае, когда программа  сгенерирует исключительную ситуацию nuke_meltdown, C++ запустит операторы функции nuke_meltdown, прежде чем возвратит управление первому оператору, следующему за оператором try, разрешающему обнаружение исключительной ситуации. Следующая программа MELTDOWN.CPP иллюстрирует использование функции nuke_meltdown. Эта программа использует оператор try для разрешения обнаружения исключительной ситуации. Далее программа вызывает функцию add_u232 c параметром amount. Если значение этого параметра меньше 255, функция выполняется успешно. Если же значение параметра превышает 255, функция генерирует исключительную ситуацию nuke_meltdown:

код C++

 #include <iostream.h>

 class nuke_meltdown

 {

 public:

 nuke_meltdown(void){ cerr << "\а\а\аРаботаю! Работаю! Работаю!" << endl; }

 };

 

 void add_u232(int amount)

 {

 if (amount < 255) cout << "Параметр add_u232 в порядке" << endl;

 else throw nuke_meltdown();

 }

 

 void main(void)

 

 {

 try

 

 {

 add_u232(255);

 }

 catch (nuke_meltdown)

 

 {

 cerr << "Программа устойчива" << endl;

 }

 }

 

Если вы откомпилируете и запустите  эту программу, на экране дисплея  появится следующий вывод:

код C++

 С:\> MELTDOWN <ENTER>

 Работаю! Работаю! Работаю!

 Программа устойчива

 

Если вы проследите исходный код, который  генерирует каждое из сообщений, то сможете  убедиться, что поток управления при возникновении исключительной ситуации проходит в обработчик исключительной ситуации и обратно к оператору catch. Так, первая строка вывода генерируется обработчиком исключительной ситуации, т.е. функцией nuke_meltdown. Вторая строка вывода генерируется в операторе catch, который обнаружил исключительную ситуацию.

Определение обработчика исключительной ситуации

Когда C++ обнаруживает в программе исключительную ситуацию, он запускает специальную функцию, которая называется обработчиком исключительной ситуации. Для определения обработчика исключительной ситуации вы просто создаете функцию в классе исключительной ситуации, которая имеет такое же имя, как и сама исключительная ситуация (подобно конструктору). Когда ваша программа в дальнейшем сгенерирует исключительную ситуацию, C++ автоматически вызовет соответствующий обработчик. В идеале обработчик исключительной ситуации должен выполнить операции, которые бы исправили ошибку, чтобы ваша программа могла повторить операцию, ставшую причиной ошибки. После завершения обработки исключительной ситуации выполнение вашей программы продолжается с первого оператора, следующего за оператором try, разрешившего обнаружение исключительной ситуации.

Использование элементов  данных исключительной ситуации

В предыдущих примерах ваши программы, используя оператор catch, могли определить, какая именно исключительная ситуация имела место, и отреагировать  соответствующим образом. В идеале, чем больше информации об исключительной ситуации могут получить ваши программы, тем лучше они смогут отреагировать на ошибку. Например, в случае с исключительной ситуацией file_open_error вашей программе необходимо знать имя файла, который вызвал ошибку. Аналогично, для файловых исключительных ситуаций file_read_error или file_write_error программа, возможно, захочет узнать расположение байта, на котором произошла ошибка. Чтобы сохранить подобную информацию об исключительной ситуации, ваши программы могут просто добавить элементы данных в класс исключительной ситуации. Если в дальнейшем ваша программа сгенерирует исключительную ситуацию, она передаст эту информацию функции обработки исключительной ситуации в качестве параметра, как показано ниже:

код C++

 throw file_open_error(source);

 throw file_read_error(344);

 

В обработчике исключительной ситуации эти параметры могут  быть присвоены соответствующим  переменным класса (очень похоже на конструктор). Например, следующие операторы изменяют исключительную ситуацию file_open_error, чтобы присвоить имя файла, который вызвал ошибку, соответствующей переменной класса:

код C++

 class file_open_error

 

 {

 public:

 file_open_error(char *filename) { strcpy(file_open_error::filename, filename); }

 char filename[255];

 };

Обработка неожиданных  исключительных ситуаций

Компиляторы C++ предоставляют функции библиотеки этапа выполнения, которые вы можете использовать в своих программах. Если вы читали документацию по этим функциям, то могли обратить внимание на функции, которые генерируют определенные исключительные ситуации. В таких случаях ваши программы должны проверять соответствующие исключительные ситуации. По умолчанию если ваша программа генерирует исключительную ситуацию, которая не улавливается (программа не имеет соответствующего обработчика исключительной ситуации), то запустится стандартный обработчик, предоставляемый языком C++. В большинстве случаев стандартный обработчик завершит вашу программу. Следующая программа UNCAUGHT.CPP иллюстрирует, как стандартный обработчик исключительной ситуации завершает выполнение вашей программы:

код C++

#include <iostream.h>

 

 class some_exception { };

 

 void main(void)

 

 {

 cout << "Перед генерацией исключительной ситуации" << endl;

 throw some_exception();

 cout << "Исключительная ситуация сгенерирована" << endl;

 }

 

В данном случае, когда  программа генерирует исключительную ситуацию (которая не улавливается программой), C++ вызывает стандартный  обработчик исключительной ситуации, который завершает программу. Поэтому последний оператор программы, который выводит сообщение о генерации исключительной ситуации, никогда не выполняется. Вместо использования стандартного обработчика исключительной ситуации C++ ваши программы могут определить свой собственный стандартный обработчик (обработчик по умолчанию). Чтобы сообщить компилятору C++ о своем стандартном обработчике, ваши программы должны использовать функцию библиотеки этапа выполнения set_unexpected. Прототип функции set_unexpected определен в заголовочном файле except.h.

Объявление генерируемых функцией исключительных ситуаций

Информация о работе Основы программирования на языке C++