Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
738.3 Кб
Скачать

9. Структурная обработка исключений

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

Функции обработки:

  • вывести сообщение об ошибке

  • удалить исключение из памяти

Программа останавливается на определенном месте но вы сможете продолжить ее дальше (например ввести другое число, если оно было введено некорректно)

У стандартной обработки исключений два недостатка:

  • плохая информативность (сообщение выводится на «непонятном языке»)

  • возможны ситуации, когда обработчик не отлавливает все исключения (ищет арифметическую ошибку, а не логическую)

Программа, в которой исключение не обработано завершается аварийно.

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

Exception – исключение, message — свойство (выводит сообщение)

Виды исключений:

  • EdivByZero – деление на ноль

  • ErangeError — вне диапазона

  • Einvalid – неправильный указатель

Способы работы исключений:

try try

… …

Except Finally

… …

end; end;

Если в try задается конструктор, то необходимо вызвать деструктор.

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

Внутри секции try — except можно написать другие try – except

try

try

finally

end;

except

end;

Анализ исключений

В секции Except можно написать ShowMessage

try

except

on EconvertError do

ShowMessage('Ошибка ввода');

on EdivByZero do

showmessage('деление на ноль');

else //другой вариант

raise //повторная операция того же исключения

end;

raise исключение — генерация указанного исключения

Создание собственных исключений

Например введение недопустимых, для данного алгоритма данных

Type EmyEx = class(exception)

try

…..

if value<0 then

raise EmyEx.Create('Отрицательная цена');

except

on E:EMyEx do

MessageDlg(EMessage, mterror, [mbOK],0);

end;

10. Пример работы с ис (конвертирование графических форматов)

Uses ….Jpeg;

Var B:TBitMap;

J:TJpegImage;

Begin

Try

Try

B:=TBitmap.create;

J:=TJpegImage.Create;

If OPD.Execute then

Begin

B.LoadFromFile(OPD.FIleName);

J.CompressionQuality:=100;

J.Assign(B);

If SPD.Execute then

J.SaveToFile(SPD.FileName);

End;

Finally

B.Free;

J.Free;

End;

Except

ShowMessage(‘Ошибка Преобразования’);

End;

11. Создание компонентов, иерархия, области видимости

Компонент — это разновидность класса, обладающая способностью взаимодействовать с интегрированной средой разработки (IDE) Delphi во время проектирования приложений.

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

Особенности построения компонентов:

  • компоненты имеют других конечных пользователей

  • компоненты являются инструментами и используются разработчиками приложений

  • написание компонентов является объектно=ориентированным невизуальным процессом.

Процесс разработки компонента:

  • формулировка требований к компоненту и выбор класса-предка

  • написание кода компонента

  • отладка и предварительное тестирование компонента

  • включение компонента в среду Delphi

  • окончательное тестирование

VLC – библиотека визуальных компонентов

Компоненты:

  • визуальные

    • графические (от TGraphicControl)

    • оконные (от TwinControl, имеют свойство Handle, которое хранит дескриптор оконного объекта Windows)

  • невизуальные

К омпоненты имеют разные программные интерфейсы:

  • интерфейс времени выполнения

  • интерфейс времени проектирования

  • интерфейс разработчика

Private (располагаются объявления полей класса)

Личные

Невидимы вне модуля или программы, в которой класс объявлен

Protected (методы чтения-записи значений свойств, объявления неопубликованных свойств)

Защищенные

Видимы везде в модуле, в котором класс объявляется, и из любого класса потомка, независимо от модуля, где класс потомка появляется, то есть для разработчиков других компонентов. В секциях Private и Protected “скрываются” детали реализации

Public (методы, в том числе конструкторы и деструкторы, свойства, доступные во время выполнения)

Общие

Объекты данного уровня видимы везде, где возможна ссылка на класс

Published (опубликованные свойства)

Опубликованные

Нет никаких ограничений по доступу. Свойства попадают в Инспектор объектов во время проектирования. Класс должен происходить от TComponent

type

TMyComponent = class(<Предок>)

private

//Внутренние поля, содержащие значение нового свойства

FNewProp : TPropType;

//Внутренний указатель на метод-обработчик события

FOnNewEvent : TEventType;

protected

//Методы чтения-записи свойства

function GetNewProp : TpropType;

procedure SetNewProp(Value : TpropType);

public

//Конструктор и деструктор

constructor Create (AOwner : TComponent); override;

destructor Destroy; override;

//Новый метод

procedure NewMethod;

//Метод диспетчеризации нового события OnNewEvent

procedure NewEvent;

published

//Определение нового свойства

property NewProp : TPropType read GetNewProp write SetNewProp;

//Опубликование унаследованных свойств,

//находившихся у предка в секции Protected

property Height;

property Width;

//Новое событие

property OnNewEvent : TEventType read FOnNewEvent write FOnNewEvent;

//Опубликование унаследованного события

property OnClick;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]