Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Традиционный подход к обработке ошибок



Традиционный подход к обработке динамических ошибок унаследован Delphi от Turbo Pascal и заключается в вызове функций, возвращающих коды завершения подпрограмм, например функции lOResuit. Обычно подпрограмма, завершенная с нулевым кодом, считается успешно выполненной, а ненулевые коды говорят об каких-либо ошибках. Однако Windows имеют место и функции, возвращающие нулевое значение в случае ошибки.

Возврат кода завершения подпрограммы характерен, например, для системных API-функций Windows. Определение ошибки при работе с такими функциями вызывает существенное затруднение по двум причинам. Во-первых, кодов ошибок для каждой функции множество, а потому немалое время уходит на изучение справочной информации, тем более что каждая функция возвращает свой набор ошибок. Во-вторых, при проверке возвращаемых значений, к каждой строке исходного текста программы добавляется одна или несколько строк с проверками кода завершения, что отрицательно сказывается на читабельности исходных текстов программ.

С помощью исключений стандартные подпрограммы и методы классов Delphi сообщают об ошибках, происходящих внутри них. Преимущество такого подхода состоит в том, что программист не должен анализировать значение, возвращаемое подпрограммами, а может сосредоточиться на логике собственной программы, считая, что каждый фрагмент программы работает корректно, а в случае ошибки управление будет передано в соответствующее место автоматически.

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

Листинг 3.18. Обработка ошибок

Unit Checking;

Interface

eKoordNonCorrect = class(Exception)

end; {Описания класса-наследника Exception для использования в

процедуре собственного исключения}

Procedure CheckKoordinates (X, Y: Integer);

{Заголовок процедуры указан в интерфейсной секции,

следовательно, данная процедура доступна фрагментам

программы, подключающим модуль}

Implementation

Procedure CheckKoordinates(X, Y: Integer);

Begin

If (X < 0) Or (Y < 0)

{Проверка, не является ли один из параметров отрицательным... }

Then

Raise eKoordNonCorrect.Create('Положение объекта указано

неверно');

{... если один из параметров отрицателен, то создается

и выбрасывается объект исключения}

end;

End.

Заметим, что создание и возбуждение исключения произведено в одну строку, при этом в конструктор объекта исключения передается сообщение для пользователя. Использование описанной процедуры может выглядеть следующим образом:

Uses Checking; {Подключение модуля Checking}

Begin

CheckKoordinates(180, 0);

{Вызов процедуры с передачей ей неотрицательных

параметров. Процедура выполняется без возникновения

исключительной ситуации}

CheckKoordinates(-30, 10);

{Вызов процедуры с передачей ей в качестве одного

параметра отрицательного значения. Процедура возбуждает

исключение}

Если фрагмент программы, вызывающий процедуру CheckKoordinates не обрабатывает исключительную ситуацию, то пользователю выдается диалоговое окно, содержащее строку, заданную в качестве параметра конструктору исключительной ситуации в процедуре CheckKoordinates. В данном случае на экране появится окно с сообщением «Положение объекта указано неверно».

Заметим, что класс исключения eKoordNonCorrect, описанный в модуле Checking, ничего не добавляет к классу Exception и предусмотрен исключительно для того, чтобы вызывающая подпрограмма могла обработать именно это исключение в случае его возникновения:

Uses Checking; {Подключение модуля Checking}

Begin

Try {Начало защищенного блока}

CheckKoordinates(180, 0);

CheckKoordinates(-30, 1 0);

{Вызов подпрограмм, которые могут вызвать

исключительную ситуацию}

except

On eKoordNonCorrect Do

begin

{Обработка некорректности координат}

end;

end; {Окончание защищенного блока}

При выполнении такой программы пользователю не будет выдано сообщение об ошибке, так как исключительная ситуация локализуется с помощью обработчика Try..Except.

Литература

1. Сухарев, М.В. Основы Delphi. Профессиональный подход / Под редакцией М.В. Финкова — СПб.: Наука и Техника, 2004. — 600 с.: ил.

2. Фаронов, В. В. Turbo Pascal 7.0: Начальный курс: Учебное пособие.- М.: Нолидж, 2000. - 576 с.

3. Епанешников, А. М., Епанешников, В. А. Delphi 5. Язык Object Pascal.- М.: Диалог - МИФИ, 2000. - 368 с.

4. Фаронов, В.В. Turbo Pascal.- СПб.: БХВ-Петербург, 2003.-1056 с.

5. Немнюгин С. А. Turbo Pascal: Учебник.- СПб.: Питер, 2001.-496с.

6. Архангельский А. Я. Object Pascal в Delphi. - М.: Бином, 2002. - 384 с.

7. Васильев П.П. Паскаль в примерах и задачах: Учебное пособие. - М.: Финансы и статистика, 2002.- 496 с.

8. Попов В.Г. Основы технологии программирования: Учебное пособие. - Челябинск: ЧИПС УрГУПС, 2001. - 36 с.

9. Попов В.Г. Object Pascal и DELPHI. Часть I: Руководство к самостоятельной работе. - Челябинск: ЧИПС УрГУПС, 2004.- 57 с.

10. Попов В.Г. Object Pascal и DELPHI. Часть II: Руководство к курсовому проектированию. - Челябинск: ЧИПС УрГУПС, 2004.- 49 с.

Содержание

1 Введение. 3

2 СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ В DELPHI. 3

2.1 Структура программы.. 3

2.1.1 Основные элементы программы и алфавит языка. 3

2.1.2 Основная часть программы.. 5

2.1.3 Модули. 6

2.1.4 Проект. 8

2.2 Структуры данных в Delphi 9

2.2.1 Стандартные типы данных. 9

2.2.1.1 Числовые типы.. 9

2.2.1.2 Строковые типы данных. 11

2.2.1.3 Другие стандартные типы данных. 12

2.2.2 Описание структур данных. 13

2.2.2.1 Описание и использование переменных. 13

Описание переменных. 13

Оператор присваивания. 13

2.2.2.2 Описание констант. 13

2.2.2.3 Описание нестандартных типов данных. 14

2.2.3 Сложные типы данных. 15

2.2.3.1 Интервальные типы данных. 15

2.2.3.2 Перечислимые типы данных. 16

2.2.3.3 Множества. 17

2.2.3.4 Записи. 19

2.2.3.5 Массивы.. 20

2.2.4 Динамические структуры данных. 24

2.2.4.1 Нетипизированные указатели. 24

2.2.4.2 Типизированные указатели. 24

2.2.4.3 Динамические массивы.. 26

2.2.5 Вариантные структуры данных. 28

2.2.5.1 Общие понятия. 28

2.2.5.2 Обращение к вариантным переменным.. 29

2.2.6 Выражения в Object Pascal 29

2.3 Структурные операторы.. 32

2.3.1 Организация ветвления. 32

2.3.1.1 Условный оператор If..Then..Else. 32

2.3.1.2 Условный оператор множественного выбора Case. 33

2.3.2 Составной оператор. 35

2.3.3 Операторы цикла. 35

2.3.3.1 Оператор цикла с параметром For 36

Стандартный вариант. 36

Цикл с обратным отсчетом.. 37

2.3.3.2 Условные операторы цикла. 38

Оператор цикла с предварительным условием While..Do. 38

Условный оператор цикла с последующим условием Repeat..Until 39

2.4 Использование подпрограмм.. 39

2.4.1 Виды подпрограмм. Процедуры и функции. 39

2.4.2 Подпрограммы с параметрами. 42

2.4.2.1 Описание параметров. 42

2.4.2.2 Механизмы передачи параметров в подпрограммы.. 42

Передача параметров по значению.. 42

Передача параметров по ссылке. Параметры-переменные. 44

2.5 Вопросы с ответами для повторения по разделу 2. 45

2.5.1 Опишите структуру исходных текстов программы на языке Object Pascal в Delphi 45

2.5.2 Приведите пример описания констант в программе на Object Pascal 46

2.5.3 Приведите пример описания переменных. 46

2.5.4 Приведите пример описания пользовательских типов данных. 46

2.5.5 Приведите пример описания переменных интервального типа, перечислимого типа и множеств. 47

2.5.6 Расскажите о массивах в Object Pascal 48

2.5.7 Назовите структурные операторы, применяемые в Object Pascal, и их особенности. 48

2.5.8 Расскажите об использовании подпрограмм в Object Pascal и их разновидностях. 49

2.5.9 Опишите правила (синтаксис) описания параметров в подпрограммах. 50

2.5.10 Расскажите о различных механизмах передачи параметров в подпрограммы Delphi 50

3 ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В DELPHI. 51

3.1 Основные механизмы и положения объектно-ориентированного программирования. 51

3.1.1 Инкапсуляция. 51

3.1.1.1 Понятие класса и объекта. 51

3.1.1.2 Структура класса. 51

Описание класса. Свойства и методы.. 51

Методы класса. 54

Перегружаемые методы.. 55

Области видимости элементов класса. 56

Property-свойства. 61

3.1.2 Наследование. 65

3.1.2.1 Основы наследования. 65

3.1.2.2 Переопределение методов. 66

Механизм переопределения. 66

Переопределение методов с сохранением функциональности. 68

3.1.3 Жизненный цикл экземпляра класса. 69

3.1.3.1. Создание экземпляра класса. Конструктор. 69

Описание и вызов конструктора. 70

Переопределение конструктора. 70

3.1.3.2. Использование экземпляра класса. 72

3.1.3.3. Разрушение объекта. Деструктор. 73

3.1.4 Полиморфизм.. 75

3.1.4.1 Совместимость объектов. 75

3.2 Особенности архитектуры программы в ОС Windows. 77

3.2.1. Архитектура программы в ОС DOS. 78

3.2.2. Архитектура программы в ОС Windows. 79

Многозадачность. 79

Многооконность. 80

Программа, управляемая событиями. 80

Взаимодействие программы с операционной системой. 82

3.3 Объектно-ориентированный подход к обработке ошибок. 83

3.3.1. Понятие исключительной ситуации. 83

3.3.2 Принудительное создание исключительной ситуации. 84

«Тихие» исключения. 84

Эмуляция ошибок. 84

3.3.3 Обработка исключений. 84

Блок обработки исключений Try..Except 85

Блок обработки исключений Try..Finally. 86

Различия в работе блоков обработки исключений. 87

3.3.4. Традиционный подход к обработке ошибок. 89

Литература. 91

Содержание. 92





Дата публикования: 2014-11-02; Прочитано: 609 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с)...