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

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 03.03.2018
Размер файла 17,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

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

Структурная обработка исключительных ситуаций - это система, позволяющая программисту при возникновении ошибки (исключительной ситуации) связаться с кодом программы, подготовленным для обработки такой ошибки. Это выполняется с помощью языковых конструкций, которые как бы “охраняют” фрагмент кода программы и определяют обработчики ошибок, которые будут вызываться, если что-то пойдет не так на “охраняемом” участке кода. В данном случае понятие исключительной ситуации относится к языку и не нужно его путать с системными исключительными ситуациями (hardware exceptions), такими, как General Protection Fault. Эти исключительные ситуации обычно используют прерывания и особые состояния “железа” для обработки критичной системной ошибки; исключительные же ситуации в Delphi независимы от “железа”, не используют прерываний и употребляются для обработки ошибочных состояний, с которыми подпрограмма неготова иметь дело. Системные исключительные ситуации, конечно, могут быть перехвачены и преобразованы в языковые исключительные ситуации, но это только одно из применений языковых исключительных ситуаций.

При традиционной обработке, ошибки, обнаруженные в процедуре, как правило передаются наружу (в вызывавшую процедуру) в виде возвращаемого значения функции, параметров или глобальных переменных (флажков). Каждая вызывающая процедура должна проверять результат вызова на наличие ошибки и выполнять соответствующие действия. Часто, это просто выход еще выше, в более верхнюю вызывающую процедуру и т.д.: функция A вызывает B, B вызывает C, C обнаруживает ошибку и возвращает код ошибки в B, B проверяет возвращаемый код, видит, что возникла ошибка и возвращает код ошибки в A, A проверяет возвращаемый код и выдает сообщение об ошибке либо решает сделать что-нибудь еще, раз первая попытка не удалась.

Такая “пожарная бригада” для обработки ошибок трудоемка, требует написания большого количества кода, в котором можно легко ошибиться и который трудно отлаживать.

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

Структурная обработка исключительной ситуации замещает ручную обработку ошибок автоматической, сгенерированной компилятором системой уведомления. В приведенном выше примере процедура A установила бы “охрану” со связанным обработчиком ошибки на фрагмент кода, в котором вызывается B. B просто вызывает C. Когда C обнаруживает ошибку, то создает (raise) исключительную ситуацию. Специальный код, сгенерированный компилятором и встроенный в Run-Time Library (RTL), начинает поиск обработчика данной исключительной ситуации. При поиске “защищенного” участка кода используется информация, сохраненная в стеке. В процедурах C и B нет такого участка, а в A - есть. Если один из обработчиков ошибок, которые используются в A, подходит по типу для возникшей в C исключительной ситуации, то программа переходит на его выполнение. При этом, область стека, используемая в B и C, очищается; выполнение этих процедур прекращается.

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

Без проверки возвращаемого кода после каждого вызова подпрограммы код программы должен быть более простым, а скомпилированный код - более быстрым. При наличии исключительных ситуаций подпрограмма B не должна содержать дополнительный код для проверки возвращаемого результата и передачи его в A. B ничего не должна делать для передачи исключительной ситуации, возникшей в C, в процедуру A - встроенная система обработки исключительных ситуаций делает всю работу.

Данная система называется структурной, поскольку обработка ошибок определяется областью “защищенного” кода; такие области могут быть вложенными. Выполнение программы не может перейти на произвольный участок кода; выполнение программы может перейти только на обработчик исключительной ситуации активной программы.

2. Модель исключительных ситуаций в Delphi

Модель исключительных ситуаций в Object Pascal является невозобновляемой (non-resumable). При возникновении исключительной ситуации Вы уже не сможете вернуться в точку, где она возникла, для продолжения выполнения программы (это позволяет сделать возобновляемая (resumable) модель). Невозобновляемые исключительные ситуации разрушают стек, поскольку они сканируют его в поисках обработчика; в возобновляемой модели необходимо сохранять стек, состояние регистров процессора в точке возникновения ошибки и выполнять поиск обработчика и его выполнение в отдельном стеке. Возобновляемую систему обработки исключительных ситуаций гораздо труднее создать и применять, нежели невозобновляемую.

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

Теперь, когда мы рассмотрели, что такое исключительные ситуации, давайте дадим ясную картину, как они применяются. Новое ключевое слово, добавленное в язык Object Pascal - try. Оно используется для обозначения первой части защищенного участка кода. Существуют два типа защищенных участков:

try..except,

try..finally.

Первый тип используется для обработки исключительных ситуаций. Его синтаксис:

try
 Statement 1;
 Statement 2;
 ...
except
 on Exception1 do Statement;
 on Exception2 do Statement;
 ...
else
 Statements; {default exception-handler}
end;

Для уверенности в том, что ресурсы, занятые вашим приложением, освободятся в любом случае, Вы можете использовать конструкцию второго типа. Код, расположенный в части finally, выполняется в любом случае, даже если возникает исключительная ситуация. Соответствующий синтаксис:

try
 Statement1;
 Statement2;
 ...
finally
 Statements; { These statements always execute }
end;

Примеры обработки исключительных ситуаций.

Ниже приведены процедуры A, B и C, обсуждавшиеся ранее, воплощенные в новом синтаксисе Object Pascal:

type

ESampleError = class(Exception);
var
ErrorCondition: Boolean;
procedure C;
begin
 writeln('Enter C');
 if (ErrorCondition) then
 begin
 writeln('Raising exception in C');
 raise ESampleError.Create('Error!');
 end;
 writeln('Exit C');
end;
procedure B;
begin
 writeln('enter B');
 C;
 writeln('exit B');
end;
procedure A;
begin
 writeln('Enter A');
 try
 writeln('Enter A''s try block');
 B;
 writeln('After B call');
 except
 on ESampleError do
 writeln('Inside A''s ESampleError handler');
 on ESomethingElse do
 writeln('Inside A''s ESomethingElse handler');
 end;
 writeln('Exit A');
end;
begin
 writeln('begin main');
 ErrorCondition := True;
 A;
 writeln('end main');
end.

При ErrorCondition = True программа выдаст:

begin main

Enter A

Enter A's try block

enter B

Enter C

Raising exception in C

Inside A's ESampleError handler

Exit A

end main

Возможно, вас удивила декларация типа 'ESampleError =class' вместо '=object'; это еще одно новое расширение языка. Delphi вводит новую модель объектов, доступную через декларацию типа '=class'.

Процедура C проверяет наличие ошибки (в нашем случае это значение глобальной переменной) и, если она есть (а это так), C вызывает(raise) исключительную ситуацию класса ESampleError.

Процедура A помещает часть кода в блок try..except. Первая часть этого блока содержит часть кода, аналогично конструкции begin..end. Эта часть кода завершается ключевым словом except, далее следуют один или более обработчиков исключительных ситуаций on xxxx do yyyy, далее может быть включен необязательный блок else, вся конструкция заканчивается end;. В конструкции, назначающей определенную обработку для конкретной исключительной ситуации (on xxxx do yyyy), после резервного слова on указывается класс исключительной ситуации, а после do следует собственно код обработки данной ошибки. Если возникшая исключительная ситуация подходит по типу к указанному после on, то выполнение программы переходит сюда (на код после do). Исключительная ситуация подходит в том случае, если она того же класса, что указана в on, либо является его потомком. Например, в случае on EFileNotFound обрабатываться будет ситуация, когда файл не найден. А в случае on EFileIO - все ошибки при работе с файлами, в том числе и предыдущая ситуация. В блоке else обрабатываются все ошибки, до этого необработанные.

Приведенные в примере процедуры содержат код (строка с writeln), который отображает путь выполнения программы. Когда C вызывает exception, программа сразу переходит на обработчик ошибок в процедуре A, игнорируя оставшуюся часть кода в процедурах B и C.

После того, как найден подходящий обработчик ошибки, поиск оканчивается. После выполнения кода обработчика программа продолжает выполняться с оператора, стоящего после слова end блока try..except (в примере - writeln('Exit A')).

Конструкция try..except подходит, если известно, какой тип ошибок нужно обрабатывать в конкретной ситуации. Но что делать, если требуется выполнить некоторые действия в любом случае, произошла ошибка или нет? Это тот случай, когда понадобится конструкция try..finally.

Рассмотрим модифицированную процедуру B:

procedure NewB;
var
 P: Pointer;
begin
 writeln('enter B');
 GetMem(P, 1000);
 C;
 FreeMem(P, 1000);
 writeln('exit B');
end;

Если C вызывает исключительную ситуацию, то программа уже не возвращается в процедуру B. А что же с теми 1000 байтами памяти, захваченными в B? Строка FreeMem(P,1000) не выполнится и Вы потеряете кусок памяти. Как это исправить? Нужно ненавязчиво включить процедуру B в процесс, например:

procedure NewB;
var 
 P: Pointer;
begin
 writeln('enter NewB');
 GetMem(P, 1000);
 try
 writeln('enter NewB''s try block');
 C;
 writeln('end of NewB''s try block');
finally
 writeln('inside NewB''s finally block');
 FreeMem(P, 1000);
 end;
 writeln('exit NewB');
end; 

Если в A поместить вызов NewB вместо B, то программа выведет сообщения следующим образом:

begin main

Enter A

Enter A's try block

enter NewB

enter NewB's try block

Enter C

Raising exception in C

inside NewB's finally block

Inside A's ESampleError handler

Exit A

end main

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

Почему вызов GetMem не помещен внутрь блока try? Этот вызов может окончиться неудачно и вызвать exception EOutOfMemory. Если это произошло, то FreeMem попытается освободить память, которая не была распределена. Когда мы размещаем GetMem вне защищаемого участка, то предполагаем, что B сможет получить нужное количество памяти, а если нет, то более верхняя процедура получит уведомление EOutOfMemory.

А что, если требуется в B распределить четыре области памяти по схеме «все»-или-«ничего»? Если первые две попытки удались, а третья провалилась, то как освободить захваченную памятью область? Можно так:

procedure NewB;
var
 p,q,r,s: Pointer;
begin
 writeln('enter B');
 P := nil;
 Q := nil;
 R := nil;
S := nil;
 try
 writeln('enter B''s try block');
 GetMem(P, 1000);
 GetMem(Q, 1000);
 GetMem(R, 1000);
 GetMem(S, 1000);
 C;
 writeln('end of B''s try block');
 finally
 writeln('inside B''s finally block');
 if P <> nil then FreeMem(P, 1000);
 if Q <> nil then FreeMem(Q, 1000);
 if R <> nil then FreeMem(R, 1000);
 if S <> nil then FreeMem(S, 1000);
 end;
 writeln('exit B');
end;

Поначалу установив указатели в NIL, далее можно определить, успешно ли прошел вызов GetMem.

Оба типа конструкции try можно использовать в любом месте, допускается вложенность любой глубины. Исключительную ситуацию можно вызывать внутри обработчика ошибки, конструкцию try можно использовать внутри обработчика исключительной ситуации.

Вызов исключительной ситуации.

Из примера в процедуре C мы уже могли видели, как должна поступать программа при обнаружении состояния ошибки - она вызывает исключительную ситуацию:

raise ESampleError.Create(`Error!');

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

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

3. Доступ к экземпляру объекта exception

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

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

Рассмотрим модифицированную процедуру A в нашем примере:

procedure NewA;
begin
 writeln('Enter A');
 try
 writeln('Enter A''s try block');
 B;
 writeln('After B call');
 except
 on E: ESampleError do writeln(E.Message);
 on ESomethingElse do
 writeln('Inside A''s ESomethingElse handler');
 end;
 writeln('Exit A');
end;

Здесь все изменения внесены в строку

on ESE: ESampleError do writeln(ESE.Message);

Пример демонстрирует еще одно новшество в языке Object Pascal - создание локальной переменной. Таковой в нашем примере является ESE - это тот самый экземпляр класса ESampleError, который был создан в процедуре C в момент вызова исключительного состояния. Переменная ESE доступна только внутри блока do. Свойство Message объекта ESE содержит сообщение, которое было передано в конструктор Create в процедуре C.

Есть еще один способ доступа к экземпляру exception - использовать функцию ExceptionObject:

on ESampleError do 
 writeln(ESampleError(ExceptionObject).Message);

4. Предопределенные обработчики исключительных ситуаций

исключительный код программирование

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

Exception - базовый класс-предок всех обработчиков исключительных ситуаций.

EAbort - “скрытое” исключение. Используйте его тогда, когда хотите прервать тот или иной процесс с условием, что пользователь программы не должен видеть сообщения об ошибке. Для повышения удобства использования в модуле SysUtils предусмотрена процедура Abort, определенная, как:

procedure Abort;
begin
raise EAbort.CreateRes(SOperationAborted) at ReturnAddr;
end;

EComponentError - вызывается в двух ситуациях:

1) при попытке регистрации компоненты за пределами процедуры Register;

2) когда имя компоненты не уникально или не допустимо.

EConvertError - происходит в случае возникновения ошибки при выполнении функций StrToInt и StrToFloat, когда конвертация строки в соответствующий числовой тип невозможна.

EInOutError - происходит при ошибках ввода/вывода при включенной директиве {$I+}.

EIntError - предок исключений, случающихся при выполнении целочисленных операций.

ERangeError - вызывается при попытке обращения к элементам массива по индексу, выходящему за пределы массива, как результат RunTime Error 201 при включенной директиве {$R+}.

EInvalidCast - происходит при попытке приведения переменных одного класса к другому, несовместимому с первым (например, приведение переменной типа TListBox к TMemo).

EInvalidGraphic - вызывается при попытке передачи в LoadFromFile файла, несовместимого графического формата.

EInvalidGraphicOperation - вызывается при попытке выполнения операций, неприменимых для данного графического формата (например, Resize для TIcon).

EInvalidObject - реально нигде не используется, объявлен в Controls.pas.

EInvalidOperation - вызывается при попытке отображения или обращения по Windows-обработчику (handle) контрольного элемента, не имеющего владельца (например, сразу после вызова MyControl:=TListBox.Create(...) происходит обращение к методу Refresh).

EInvalidPointer - происходит при попытке освобождения уже освобожденного или еще неинициализированного указателя, при вызове Dispose(), FreeMem() или деструктора класса.

EListError - вызывается при обращении к элементу наследника TList по индексу, выходящему за пределы допустимых значений (например, объект TStringList содержит только десять строк, а происходит обращение к одиннадцатому).

EMathError - предок исключений, случающихся при выполнении операций с плавающей точкой.

· EInvalidOp - происходит, когда математическому сопроцессору передается ошибочная инструкция. Такое исключение не будет до конца обработано, пока Вы контролируете сопроцессор напрямую из ассемблерного кода.

· EDivByZero - вызывается в случае деления на ноль, как результат RunTime Error 200.

· EIntOverflow - вызывается при попытке выполнения операций, приводящих к переполнению целых переменных, как результат RunTime Error 215 при включенной директиве {$Q+}.

· ERangeError - вызывается при попытке обращения к элементам массива по индексу, выходящему за пределы массива, как результат RunTime Error 201 при включенной директиве {$R+}.

· EInvalidCast - происходит при попытке приведения переменных одного класса к другому классу, несовместимому с первым (например, приведение переменной типа TListBox к TMemo).

EInvalidGraphic - вызывается при попытке передачи в LoadFromFile файла, несовместимого графического формата.

EInvalidGraphicOperation - вызывается при попытке выполнения операций, неприменимых для данного графического формата (например, Resize для TIcon).

EInvalidObject - реально нигде не используется, объявлен в Controls.pas.

EInvalidOperation - вызывается при попытке отображения или обращения по Windows-обработчику (handle) контрольного элемента, не имеющего владельца (например, сразу после вызова MyControl:=TListBox.Create(...) происходит обращение к методу Refresh).

EInvalidPointer - происходит при попытке освобождения уже освобожденного или еще неинициализированного указателя, при вызове Dispose(), FreeMem() или деструктора класса.

EListError - вызывается при обращении к элементу наследника TList по индексу, выходящему за пределы допустимых значений (например, объект TStringList содержит только десять строк, а происходит обращение к одиннадцатому).

EMathError - предок исключений, случающихся при выполнении операций с плавающей точкой.

EInvalidOp - происходит, когда математическому сопроцессору передается ошибочная инструкция. Такое исключение не будет до конца обработано, пока Вы контролируете сопроцессор напрямую из ассемблерного кода.

EOverflow - происходит как результат переполнения операций с плавающей точкой при слишком больших величинах. Соответствует RunTime Error 205.

Underflow - происходит как результат переполнения операций с плавающей точкой при слишком малых величинах. Соответствует RunTime Error 206.

EZeroDivide - вызывается в результате деления на ноль.

EMenuError - вызывается в случае любых ошибок при работе с пунктами меню для компонент TMenu, TMenuItem, TPopupMenu и их наследников.

EOutlineError - вызывается в случае любых ошибок при работе с TOutLine и любыми его наследниками.

EOutOfMemory - происходит в случае вызовов New(), GetMem() или конструкторов классов при невозможности распределения памяти. Соответствует RunTime Error 203.

EOutOfResources - происходит в том случае, когда невозможно выполнение запроса на выделение или заполнение тех или иных Windows ресурсов (например таких, как обработчики - handles).

EParserError - вызывается когда Delphi не может произвести разбор и перевод текста описания формы в двоичный вид (часто происходит в случае исправления текста описания формы вручную в IDE Delphi).

EPrinter - вызывается в случае любых ошибок при работе с принтером.

EProcessorException - предок исключений, вызываемых в случае прерывания процессора- hardware breakpoint. Никогда не включается в DLL, может обрабатываться только в “цельном” приложении.

· EBreakpoint - вызывается в случае останова на точке прерывания при отладке в IDE Delphi. Среда Delphi обрабатывает это исключение самостоятельно.

· EFault - предок исключений, вызываемых в случае невозможности обработки процессором тех или иных операций.

· EGPFault - вызывается, когда происходит “общее нарушение защиты” - General Protection Fault. Соответствует RunTime Error 216.

· EInvalidOpCode - вызывается, когда процессор пытается выполнить недопустимые инструкции.

· EPageFault - обычно происходит как результат ошибки менеджера памяти Windows, вследствие некоторых ошибок в коде Вашего приложения. После такого исключения рекомендуется перезапустить Windows.

· EStackFault - происходит при ошибках работы со стеком, часто вследствие некорректных попыток доступа к стеку из фрагментов кода на ассемблере. Компиляция Ваших программ со включенной проверкой работы со стеком {$S+} помогает отследить такого рода ошибки.

· ESingleStep - аналогично EBreakpoint, это исключение происходит при пошаговом выполнении приложения в IDE Delphi, которая сама его и обрабатывает.

EPropertyError - вызывается в случае ошибок в редакторах свойств, встраиваемых в IDE Delphi. Имеет большое значение для написания надежных property editors. Определен в модуле DsgnIntf.pas.

EResNotFound - происходит в случае тех или иных проблем, имеющих место при попытке загрузки ресурсов форм - файлов .DFM в режиме дизайнера. Часто причиной таких исключений бывает нарушение соответствия между определением класса формы и ее описанием на уровне ресурса (например,вследствие изменения порядка следования полей-ссылок на компоненты, вставленные в форму в режиме дизайнера).

EStreamError - предок исключений, вызываемых при работе с потоками.

· EFCreateError - происходит в случае ошибок создания потока (например, при некорректном задании файла потока).

· EFilerError - вызывается при попытке вторичной регистрации уже зарегистрированного класса (компоненты). Является, также, предком специализированных обработчиков исключений, возникающих при работе с классами компонент.

· EClassNotFound - обычно происходит, когда в описании класса формы удалено поле-ссылка на компоненту, вставленную в форму в режиме дизайнера. Вызывается, в отличие от EResNotFound, в RunTime

· EInvalidImage - вызывается при попытке чтения файла, не являющегося ресурсом, или разрушенного файла ресурса, специализированными функциями чтения ресурсов (например, функцией ReadComponent).

· EMethodNotFound - аналогично EClassNotFound, только при несоответствии методов, связанных с теми или иными обработчиками событий.

· EReadError - происходит в том случае, когда невозможно прочитать значение свойства или другого набора байт из потока (в том числе ресурса).

· EFOpenError - вызывается когда тот или иной специфированный поток не может быть открыт (например, когда поток не существует).

· EStringListError - происходит при ошибках работы с объектом TStringList (кроме ошибок, обрабатываемых TlistError).

Заключение

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

Литература

1. Ален Э. Типичные ошибки проектирования. Библиотека программиста. Питер. - 2004. - 284 .

2. Брауде Э. Технология разработки программного обеспечения. Питер - 2004. - 325 с.

3. Бобров И.С. Delphi 7. Учебный курс. Москва. Санкт-Петербург, Нижний Новгород, Воронеж, Питер.- 2003.- 625

4. Гради Буч. Объектно - ориентированный анализ и проектирование с примерами приложений на С++. Бином · 1998

5. Джон Влиссидес, Эрих Гамма, Ричард Хелм, Ральф Джонсон. Приемы объектно - ориентированного проектирования. Паттерны проектирования. - Питер. 2003. - 256 с.

6. Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектно - ориентированное программирование. - М. Издательство МГТУ имени Н.Э. Баумана. 2003.- 320с.

7. Кьоу Дж., Джеанини М. Объектно-ориентированное программирование. Просто и понятно.- Питер. 2005. - 403с.

8. Лесневский А.С. Объектно-ориентированное программирование для начинающих. - М. Бином. Лаборатория знаний. 2005. - 382 с.

9.Майер Б. Объектно-ориентированное программирование. Концепции разработки. М. Русская редакция. 2004. - 456 с.

10.Синтес Антони. Освой самостоятельно объектно-ориентированное программирование за 21 день. Вильямс - 2002. - 284с.

11. Шпак Ю.А. "Delphi 7 на примерах" - М. Русская редакция 2005. - 207с.

Размещено на Allbest.ru


Подобные документы

  • Обработка прерываний - сигналов о совершении некоторых событий в компьютере. Механизм обработки прерываний. Обработка исключений, описание реакции программы на ошибки выполнения. Общее понятие и виды исключительных ситуаций во время выполнения программы.

    реферат [192,2 K], добавлен 10.11.2014

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

    лекция [387,6 K], добавлен 09.12.2013

  • Виртуальные функции, статические и абстрактные классы, шаблоны: элементы и члены класса, их роль в объектно-ориентированном программировании; механизм осуществления виртуального вызова при выполнении программы; обработка исключительных ситуаций в C++.

    реферат [27,2 K], добавлен 06.12.2010

  • Описания объектов, свойств, методов, формы и основных модулей текста программы в среде Delphi. Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования. Анализ результатов тестирования программного продукта.

    курсовая работа [2,4 M], добавлен 27.08.2012

  • Предмет объектно-ориентированного программирования и особенности его применения в средах Паскаль, Ада, С++ и Delphi. Интегрированная среда разработки Delphi: общее описание и назначение основных команд меню. Процедуры и функции программы Delphi.

    курсовая работа [40,8 K], добавлен 15.07.2009

  • Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.

    курсовая работа [1,5 M], добавлен 08.02.2011

  • Калькулятор как устройство для арифметических вычислений. Разработка алгоритма, его перевод в программный код. Выбор языка, опции компилятора при сборке программы. Обработка ошибок и исключительных ситуаций в коде. Тестирование программы, файл помощи.

    курсовая работа [1,2 M], добавлен 19.02.2015

  • Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.

    курсовая работа [506,5 K], добавлен 21.02.2011

  • Borland Delphi 7 как универсальный инструмент разработки, применяемый во многих областях программирования, функции: добавление информации об абитуриентах в базу данных, формирование отчетов. Рассмотрение и характеристика основных компонентов Delphi.

    контрольная работа [3,6 M], добавлен 18.10.2012

  • Delphi - среда быстрой разработки, в которой в качестве языка программирования используется типизированный объектно-ориентированный язык Delphi. Варианты программного пакета. Особенности работы, вид экрана после запуска. Описание структуры программы.

    курсовая работа [1,3 M], добавлен 25.11.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.