Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры [4747 вопросов].doc
Скачиваний:
83
Добавлен:
15.06.2014
Размер:
407.04 Кб
Скачать

36. Абстрактные типы данных. Способы реализации.

37 Объектно-ориентированные языки программирования. Способы реализации.

Структура данных «класс», представляющая собой объектный тип данных, внешне похожа на типы данных процедурно-ориентированных языков, такие как структура в языке Си или запись в Паскале или QuickBasic, в которой поля могут сами быть не только данными, но и методами (то есть процедурами или функциями). Таким образом, в простейшем случае объектно-ориентированное программирование получается добавлением к процедурно-ориентированному процедурного типа данных, то есть, переменных, способных принимать значение функций и процедур. Вдобавок класс поддерживает такие свойства как наследование, полиморфизм и отчасти — инкапсуляцию. Объектное программирование противопоставляется процедурному программированию, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Кроме того, в объектно-ориентированном программировании часто большое значение имеет понятие события.

38 Обработка исключительных ситуаций. Способы реализации.

Исключения позволяют построить “безопасную” программу. В зависимости от места положения решается вопрос о видимости. Язык Ada использует программные модули или блоки для указания области видимости обработчиков исключительных ситуаций. Язык C++ для этой цели использует специальную конструкцию, которая начинается зарезервированным сло­вом try. Конструкция try содержит составной оператор, называемый оператором try, и список обработчиков исключительных ситуаций. Составной оператор определяет область видимости последующих обработчиков.

Каждая функция catch представляет собой обработчик исключительной ситуации. Функция catch может иметь только один формальный параметр, подобный формаль­ному параметру в определении функции в языке C++, включая возможность указания в качестве формального параметра эллипсиса (...). Формальный параметр может быть про­сто спецификатором типа, например, float, как в прототипе функции. Когда информа­ция об исключительной ситуации передается в обработчик, параметр содержит тип и имя переменной, используемой для этой цели. Например, пользователь может определить в качестве исключительной ситуации некий класс и включить в него столько данных-членов, сколько необходимо. В противном случае формальный параметр является просто типом, и его предназначение заключается в однозначной идентификации обработчика. Обработчик с эллипсисом в качестве формального параметра является универсальным (catch-all handler); он активизируется при любых исключительных ситуациях, если ранее не был выбран другой обработчик.

В языке C++ обработчики исключительных ситуаций могут содержать любой код на этом языке.

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

Исключительные ситуации в языке C++ возбуждаются только явным оператором throw, имеющим следующий общий вид: throw[выражение]

Квадратные скобки являются метасимволами, используемыми для того, чтобы указать на необязательность выражения. Оператор throw без операнда может появляться только в обработчике. При этом он повторно возбуждает исключительную ситуацию, которая за­тем обрабатывается где-нибудь в другом месте. Это в точности повторяет использование оператора raise в языке Ada без указания имени исключительной ситуации.

Ключевое слово throw было выбрано потому, что слова signal и raise являются именами функций в стандартной библиотеке функций ANCI С.

По типу выражения throw выбирается конкретный обработчик, который, конечно, должен иметь "соответствующий" тип формального параметра. В этом случае слово "соответствующий" означает следующее: обработчик с формальным параметром типа Т, const Т, Т& (ссылка на объект типа Т) или const T& соответствует оператору throw с выражением, имеющим тип Т. Если тип Т является классом, "соответствующим" являет­ся обработчик, параметр которого имеет тип Т, или любой класс, являющийся предком класса Т. Существуют более запутанные ситуации, в которых выражение throw соот­ветствует формальному параметру, но здесь они не рассматриваются.

Исключительная ситуация, возбужденная конструкцией try, приводит к немедленному завершению выполнения кода в данной конструкции try. Поиск соответствующего обра­ботчика начинается с обработчика, непосредственно следующего за конструкцией try, и выполняется последовательно, пока не будет найден подходящий обработчик. Это означа­ет, что если некоторый другой подходящий обработчик предшествует обработчику, точно соответствующему данному выражению throw, то точно соответствующий обработчик не будет использован. Если в программе есть оператор catch с эллипсисом в качестве формального параметра, он будет подходить для любого выражения throw, так что беспо­лезно помещать такие операторы catch где угодно, кроме конца списка обработчиков.

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