
- •1.Операционные системы, классификация, функциональные
- •2. Подсистема защиты информации
- •3. Многослойность ос, ядро и вспомогательные функции.
- •4. Управление оперативной памятью: основные подходы.
- •2 Способа преобразования виртуального адреса в физический.
- •Организация виртуальной памяти, стратегии вытеснения страниц
- •6. Преобразование виртуального адреса в физический
- •9. Структурная обработка исключений
- •10. Пример работы с ис (конвертирование графических форматов)
- •11. Создание компонентов, иерархия, области видимости
- •12. Создание свойств
- •13. События компонентов
- •14. Пример создания компонента часы
- •15. Пример создания компонента с опубликованным свойством Tstrings.
- •16. Класс Tstrings
- •17. Свойства и методы Tcanvas
- •18. Встроенные графические классы
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;