Курс лекций по дисциплине «Объектно-ориентированное программирование»
(автор к. т.н. )
История возникновения объектно-ориентированного подхода.
ООП получило распространение ввиду осознания трех проблем программирования.
Требовалось не строить каждый раз систему с нуля, а использовать модули.2. Требовалось так изменить способ построения программных систем, чтобы
локальные модификации не могли нарушить работоспособность всей системы.
Требовалось облегчить проектирование систем.Помимо языков программирования, Г. Буч отмечает следующие достижения технологии ООП.
Аппаратная поддержка основных концепций операционной системы. Достижения в методологии программирования, в частности, модульное построениесистем и инкапсуляция информации.
3. Модулирование данных с помощью отношений между объектами.
Развитие механизма абстракций. Развитие философии и теории познания.Понятие объекта.
Задача разработать систему автоматизации банка.
Задача № n: осуществление операции снятия денег через банкомат.
При взаимодействии объектов в схеме используется модель «Клиент – Сервер».
Клиент - это объект, который запрашивает какие-либо действия и выступает инициатором операции. Объект сервер обеспечивает своими ресурсами выполнение этих действий. Сервер выполняет операции в соответствии с контрактом.
Контракт включает:
Интерфейс объекта, то есть набор операций, которые он подрядился выполнять. Качество этих операций.Объект – это сущность, способная сохранять свое состояние и обеспечивающая набор операций для проверки и изменения этого состояния.
Характеристики объектов.
Состояние объекта – текущее значение его атрибутов. Идентификация объекта – как можно отличить объекты, равны ли они,тождественны ли они.
Интерфейс объекта – описание того, как он может взаимодействовать сокружающим миром. Объекты взаимодействуют с помощью сообщений. Принимая
сообщение, объект выполняет действие, которое называется методом.
Время жизни объекта. Композиция объектов.Понятие класса.
Класс – объединение однотипных объектов. Все объекты одного и того же класса обладают одинаковым интерфейсом и реализуют его одним и тем же способом. Два объекта одного класса отличаются только текущим состоянием, причем всегда теоретически, возможно так изменить состояние одного объекта, чтобы он стал равным другому объекту. Индивидуальные объекты называются экземплярами.
Тип – область определения некоторой величины, то есть множество выражений, значений и набор переменных операций.
Свойства классов.
Наследование – отношение между классами, при котором один класс разделяетструктуру или поведение других классов. Механизм наследования позволяет
выделить общие части разных классов.
Полиморфизм – возможность взаимодействия с объектом, не зная к какомуконкретному классу он относится.
Использование свойств.
Наследование – мощное средство специализации. Наследование – способ задания интерфейса. Полиморфизм – обеспечивает правильное выполнение конкретных действий.Отношение между классами.
Включение. Ассоциация – двухсторонняя ссылка. Наследование – выражает соотношение частное-общее между классами. Для тогочтобы считать наследование классификацией, необходимо:
а) наследование методов.
б) ин вариация базовых классов.
Использование – если при выполнении действий один класс опирается на свойстваобъектов другого класса.
Организация разработки программ.
Традиционная модель, организации разработки программ, систем называется каскадной. Недостатком каскадной модели является отсутствие обратной связи. Поэтому на практике используется каскадная модель с обратной связью, либо спиралевидная модель.
Примерная объектно-ориентированная модель организации разработки программ.
При составлении технического задания создается система вариантовиспользования.
На этапе анализа полученная в пункте 1 система преобразуется в объектнуюмодель предметной области.
3. На этапе проектирования объектная модель детализируется.
Этап кодирования – пишется программа. Тестирование и отладка программы. Внедрение и сопровождение программы.Унифицированный язык моделирования UML.
Язык UML позволяет описать, разработать и задокументировать различные проекты в форме программных приложений. Он охватывает все стадии ООП и предназначен для построения моделей описывающих проектируемую систему. Модель UML состоит из элементов, которые являются абстракциями компонентов проектируемой системы и одновременно определяют их графическое представление. Элементы объединяются в семантические связанные группы – пакеты. И классифицируются с помощью стереотипов.
UML позволяет построить следующие модели.
Модель требований к системе на основе вариантов использования. Модель статических отношений между классами. Модель поведения системы. Модель динамического взаимодействия между объектами. Модель последовательностей. Диаграмма состояний. Диаграмма действий. Диаграмма распределения системы. Модель компонентов. Модель реализации системы.Общие принципы построения библиотек функций, библиотек классов и компонент при использовании ООП.
Цель создания библиотек – многократное использование лотовых решений. Единственный способ использование функций в конкретной программе – задание различных аргументов. Это накладывает ограничения: используются либо стандартные математические функции, либо узко специализированные, либо вспомогательные достаточно низкого уровня. По целям использования библиотеки классов делятся: общего назначения и специализированного. По принципам построения выделяют библиотеки шаблонов, библиотеки конкретных классов, библиотеки абстрактных классов и библиотеки сред разработки. В библиотеке классов необходимо соблюдать последовательный способ именования классов, переменных и констант. То есть имена, используемые в библиотеке не должны пересекаться с именами, используемыми в программе. Подключение библиотеки к программе зависит от языка программирования.
Компонента – программный модуль или объект, который готов для использования в качестве составного блока программы и в котором можно визуально манипулировать во время разработки программы. Компонентное построение используется в графическом интерфейсе программы. Компоненты, которые работают только в программе, выполняющиеся на рабочей станции пользователя называются локальными. Локальная компонента существует только как часть вызывающей ее программы. Другой вид компоненты независимый компонент, существует вне используемых прогарам. Чаще всего такие компоненты применяются в распределенных системах.
Delphi 5.0
После запуска Delphi на экране находится четыре окна.
Главное окно (Project). Окно формы (Form1). Окно инспектора объектов (Object Inspector). Окно кодов программы (Unit1). Слева в нем находится окно браузера, с помощьюнего можно просматривать структуру всех объявлений в окне кода. Если на экране
не видно окна кода, нажать клавишу F12 – попеременно показывать окно кода и
формы.
Главное окно – осуществляет основные функции управления проектом создаваемой программы. В нем располагается главное меню, набор пиктограмм, палитра компонентов – средства управления проектом. Пиктограммы по функциональному признаку распределены на 6 групп:
1. Стандартная группа – открывают, закрывают, удаляют файлы и т. д.
2. Группа вид – выбирать форму из списка форм, переключать активность между
окнами, создать новые формы и т. д.
Группа отладки – компиляция, пошаговая трассировка, выполнение программы ит. д.
4. Справочная служба.
5. Служба настройки.
6. Галерея компонентов.
Окно форм – проект Windows – окна будущей программы. Вся рабочая область окна заполнена точками координатной сетки.
Окно инспектора объектов – состоит из двух страниц: свойства, которые служат для установки нужных свойств компонент, и события, позволяющие определить реакцию компонента на то или иное событие. Каждая страница представляется в виде таблицы с двумя колонками: левая содержит название свойства или события, а правая – конкретное значение свойства.
Окно кода программы – предназначен для создания и редактирования текста программы. Совокупность правил записи текста называется языком программирования. В системе Delphi используется язык программирования Object Pascal.
Процесс создания программ в Delphi.
Процесс создания программ в Delphi разбивается на две фазы.
Фаза конструирования формы. Фаза кодирования.Конструирование формы осуществляется выбором компонентов из палитры и размещением их в окне формы. Перемещать любой компонент и изменять его размер можно мышью. Для предания компоненту нужных свойств используется страница «свойства» инспектора объектов. Чтобы компонент мог откликаться на то или иное событие, на странице «события» инспектора объектов указывается имя созданного обработчика события. Обработчик события оформлен в виде процедуры, имеющее составное имя. Первая его часть – имя класса для формы, второе отделяется «.» и может быть любым. Тело самой процедуры ограничивается операторными скобками и состоит из операторов языка Object Pascal. Свойства компонента могут изменяться на этапе прогона программы.
Компоненты.
На странице «стандарт» палитры компонентов сосредоточены стандартные интерфейсные элементы Windows – полосы управления, панель, командная кнопка и т. д. С помощью компонентов страницы «дополнение» можно разнообразить вид диалоговых окон – добавить кромку, вставить командную кнопку с надписью и пиктограммой. На странице «win 32» содержаться интерфейсные элементы 32-х разрядных операционных систем – селектор времени-даты, цифровой регулятор, мультиплексор и т. д. На системной странице представлены компоненты стандартных технологий Windows – таймер, мультимедийный проигрыватель, OLE-контейнер. Девять компонентов страницы «доступ к данным» облегчают работу с базами данных, а компоненты страницы «контроль данных» содержат модификацию интерфейсных элементов, применительно к работе с базами данных. На странице «примеры» содержаться компоненты различного назначения – календарь, таблица цветов и т. д.
Компоненты страницы «интернет» обеспечивают связь с сетью. Компоненты страницы «диалог» реализуют стандартные для Windows диалог окна – печать, поиск, замена и т. д.
Структура программ Delphi.
Любая программа Delphi состоит из файла проекта *.dpr и одного или нескольких файлов с расширением pas. Файл проекта – программа, написанная на языке OP, предназначена для обработки компилятора. Эта программа автоматически создается Delphi. Просмотреть ее можно, используя опцию Vjew / Project Source (Delphi 4). End.-“Терминатор”. Файлы проекта полностью формируются самой Delphi и не предназначены для редактирования.
Модули.
Модули – программные единицы, предназначенные для размещения фрагментов программы.
Структура модуля:
1. Заголовок.
2. Секция интерфейсного объявления.
3. Секция реализаций.
4. Терминатор
В секции интерфейсного объявления описываются те программные элементы, которые будут «видны» другим модулям. В секции реализаций содержаться особенности работы объявленных процедур и функций, не доступные другим модулям.
Элементы программы.
1. Зарезервированные слова.
2. Идентификаторы.
3. Типы.
4. Константы.
5. Переменные.
6. Метки.
7. Подпрограммы (классы функции процедуры).
8. Комментарии.
Составной оператор – последовательность произвольных операторов программы, заключенных в операторные скобки.
Пустой оператор – используется для передачи управления в конец составного оператора (end; - следующий оператор пустой).
Элементы языка Object Pascal.
1. Алфавит языка – буквы, цифры, пары символов, пробелы.
2. Зарезервированные слова.
3. Стандартные директивы – стандартное объявление в программе, которые
программист может переопределить. (объявить одноименный идентификатор).
4. Идентификаторы – начинаются с буквы, пробелы и специальные символы не
используются.
5. Константы:
1. Целые, со знаком или без знака.
2. Вещественные, со знаком или без знака. (с использованием десятичной точки).
3. Шестнадцатеричное число (знак $).
4. Логическая (False, True).
5. Символьная (заключенная в апостроф).
6. Строковая (кроме Enter).
7. Конструктор множества ([ ]).
6. Выражение – правило получения новых значений.
7. Операции:
1. Унарные.
2. Мультипликативные.
3. Аддитивные.
4. Отношение.
Типы данных.
![]()
![]()
![]()
![]()

![]()
![]()
![]()

|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Тип «дата-время» определен стандартным идентификатором TdataTime и предназначается для одновременного хранения и даты и времени. Под него отведено 8 байт.
Подпрограммы: | Назначение: |
FunctionData | Возвращает текущую дату |
F: DataToStr (D: TdataTime): string | Преобразует дату в строку символов |
F: DataTimeToStr | Преобразует дату и время в строку символов |
F: Now | Возвращает текущую дату и время |
F: Time | Возвращает текущую дату |
TimeToStr | Преобразует Время в строковую переменную |
Динамические массивы – начиная с Delphi 4.0 при объявлении, которых в программе не указываются границы индексов.
Пример:
А: array of real; // одномерный массив.
В: array of array of Char; // двухмерный массив.
Распределение памяти и указание границ индексов по каждому измерению осуществляется с помощью инициации массива функцией SetLenght(А,3) – в массиве «А» три значения. Для освобождения необходимой памяти идентификатору присваивается значение NIL.
А:=NIL;
Finalize(A);
Нуль терминальная строка – PChar – цепочка символов, максимальная длинна, которой лимитируется только доступной памятью. Конечным ограничителем является символ #0. Необходимость использования нуль терминальных строк возникает при прямом обращении к API функциям операционной системы.
Варианты (Variant).
Разработали для тех случаев, когда на этапе компиляции программист не может указать, какого типа данные будут использоваться в выражении. В переменную Variant можно поместить:
Целое или вещественное число. Логическое выражение. Время или (и) дату. OLE – объект. Массив произвольной размерности и длинны, содержащий элементыперечисленных выше типов.
Пример: программы с использованием варианта.
var
v1,v2,v3,v4: Variant;
I: Integer;
P: Double;
S: String;
begin
v1 := 1;
v2 := 1.23;
v3 := ‘UPS’;
v4 := ‘10’;
v5 := v1 + v2;
I := v1;
P := v2;
S := v3;
end;
Вариантные массивы.
Вариантные массивы – когда значение варианта может быть массив данных. Значение элементов вариантного массива могут быть варианты, что означает возможность хранения в массиве данных разных типов.
Пример:
var
v: Variant;
begin
v := VarArrayCreate([0,4], var variant); // Создание одномерного вариантного массива
с 5 элементами
v [0] := 1;
v [1] := 1.23;
v [2] := ‘Helloy’;
v [3] := True;
v [4] := VarArrayof([1, 10, 100, 120]);
end;
Среди перечисленных типов OLE-объекты – технология связывания объектов и их передачи для Windows. Для создания OLE-объекта используется функция CreatOleObject, в качестве аргумента которой задается имя класса сервера приложения, а возвращается идентификатор интерфейса, который нужно использовать для обращения к серверу.
Файлы.
Файлы – именованная область компьютера.
1. Особенность: у файла есть имя.
2. Особенность: файл содержит компоненты одного типа.
3. Особенность: длина файла, создаваемого вновь, при его объявлении
ограничивается лишь емкостью устройств внешней памяти.
В зависимости от способа объявления выделяют три типа файлов.
1. Типизированные файлы («имя» = File of …;).
2. Текстовые файлы («имя» = TextFile;).
3. Не типизированные файлы («имя» = File;).
Процедура связывания имени файла и файловой переменной – AssignFile (ф. п., «имя файла»);
Процедура для чтения файла - Reset (ф. п.);
Процедура для записи файла – FileExists(«имя»);
Закрыть файл – CloseFile(ф. п.);
С каждой файловой переменной в момент открытия файла связывается специальная структура данных. Благодаря этой структуре с помощью специальных подпрограмм, возможно, получить доступ к группе файлов объединенных общими признаками, эти признаки указываются маской выбора файлов в массиве. Любое обращение к файлу в Object Pascal осуществляется через специальный буфер, что необходимо для согласования внутреннего представления файлового компонента с принятым в операционной системе форматом хранения данных на диске.
Текстовые файлы.
Текстовые файлы связываются с файловыми переменными, принадлежащими к стандартному типу TextFile.
В типизированных файлах read и write (ln нет).
При работе с не типизированными файлами применяются все процедуры и функции доступные типизированным функциям, но read и write изменяют на BlockRead и BlockWrite.
Модули.
Модуль – автономно компилируемая программная единица.
Структура модуля:
unit «заголовок»;
interface «интерфейсная часть»;
implementation «исполняющая часть»;
initiahzation «инициализирующая часть»;
finalization «финальная часть»;
end.
Для правильной работы среды Object Pascal, имя модуля должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Связь с основной программой и другими модулями устанавливается специальным предложением в интерфейсной части (uses и список модулей).
Интерфейсная часть – содержит объявления всех глобальных объектов модуля.
Исполняющая часть – содержит описание подпрограмм объявленных в интерфейсной части, и объявление локальных переменных для модуля.
В инициализирующей части размещаются операторы, которые исполняются при подготовке работы основной программы.
В финальной части указываются операторы, выполняющиеся после завершения работы основной программы.
Типы модулей в Delphi.
1. Форма – модуль со связанным с ним окном (средство создания графического интерфейса).
2. Модули данных – также имеют, связанные сними окна, которые никогда не появляются на экране (применяются при работе с базами данных).
3. Модули динамических библиотек («DLL» используются для согласования программ на разных языках).
4. Пакты – это специальным образом откомпилированные DLL (*.bpl).
5. Модули потоков – это модули таких фрагментов программы, которые исполняются паролельно с другими фрагментами, разделяя с ними время процессора.
Классы и объекты.
Класс – это специальный тип данных Object Pascal содержащий поля, методы и свойства. Класс служит образцом для создания конкретных экземпляров реализации объекта. отличие класса от других типов – расположение объектов в куче, т. е. объект переменная представляет собой указатель на динамическую область памяти.
Принцип инкапсуляции реализуется, объединением полей класса, методов и свойств.
Принцип наследования реализуется тем, что любой класс может быть порожден от другого класса.
Принцип полиморфизма – свойства классов решать схожие по смыслу проблемы разными способами. Поведенческие свойства класса определяются набором входящих в него методов.
Поля – инкапсулированные в классе данные. Они могут быть любого типа в том числе классами. Принцип инкапсуляции требует обращаться к полям только с помощью методов и свойств данного класса, но в Object Pascal разрешено обращаться к полям напрямую.
Методы – процедуры и функции, которые инкапсулированы в классе, которые объявляются как обычные под программы. Методы потомков и родителей могут выполнить разные действия.
Свойства – специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов:
property а read, write – зарезервированы только в контексте объявления свойств классов.
Объявление класса.
Любой создаваемый класс может содержать несколько разделов, определяющих область видимости элементов описания класса.
public – доступные;
published – декларированный, не накладывают ограничений на видимость, но содержат описания свойств, доступных на этапе конструирования программы.
private – минимальная область видимости.
protected – объекты размещенные в данном объекте доступны только методом самого класса и любым его потомкам не зависимо от размещения.
automatod – для работы с OLE объектами.
Классы общего назначения.
exeption – класс обработки исключительных ситуаций.
TList – позволяет создать набор из произвольного количества элементов и организовать индексный способ доступа к ним, но размер диска в отличие от массива может динамически меняться в ходе программы, а кроме того в списках могут храниться элементы разных типов.
TString – абстрактный класс для работы с наборами строк. Свойство: элементами наборов данного класса служат пары типа «строка объект», где строка – строка символов, а объект – объект любого класса Delphi, то есть мы можем сохранять объект с текстовыми примечаниями, сортировать объекты по описанию и т. д.
Разработка интерфейса.
Интерфейсы определяются с помощью зарезервированного слова – interface. Это объявление эквивалентно описанию абстрактного класса интерфейса. Если какой-нибудь класс поддерживает интерфейс, то имя этого интерфейса указывается при объявлении в списке его родителей.
Методы интерфейсного класса могут исполняться под именами, отличными от имен метода интерфейса. Подобно тому, как все классы в Object Pascal порождены от TObject, все интерфейсные объекты порождены от общего класса TInterfaceObject.
К интерфейсному объекту можно применить оператор приведения типов as для того, чтобы применить нужный интерфейс.
Компоненты в Delphi.
Компоненты в Delphi – это потомки класса TComponent. Класс TPersistent, от которого произошел TComponent, дал своим потомкам виртуальный метод, Assign(Source: Tpersistent) с помощью которого поля и свойства объекта Source копируются в объект, вызвавший этот виртуальный метод. Таким образом, обмен данными происходит между наследниками класса Tpersistent независимо от того, находятся ли они в непосредственном родстве по отношению друг к другу или имеют единственного общего предка.
TComponent
1.Видимые компоненты.
2.Невидимые компоненты.
TControl
1.TWinControl – имеют оконный ресурс.
2.TCraphicControl – не имеют оконный ресурс.
Класс TComponent включает в себя свойства и методы общие для всех.
Свойство определяет имя компонента: property Name: TComponent Name;
Свойство определяет произвольный целочисленный параметр и предоставляет его в распоряжение программы: property Tag: Integer;
Свойство определяет произвольный целочисленный параметр: property ComponentCount: Integer;
Для управления списком компонент, существует несколько методов.
function FindComponent (const AName: string): TComponent;
Создание интерфейса Windows-программы.
Типовые приемы использования стандартных компонент.
1. Button – используется для запуска действия.
2. Label – либо надпись либо область ввода информации для чтения.
3. Edit – строка ввода.
Создадим проект суммирования двух чисел, вводимых с клавиатуры.
1. Создадим интерфейс программы.

2. Листинг программы.
// двойной щелчок по кнопке запускает окно кода программы
unit Unit1
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tform1 class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 Tform1
implementation
{$R *.dfm}
procedure Tform1Button1Click(Sender: TObject);
var
a, b, c: real;
s: string;
code: integer;
begin
val(edit1.Text, a, code); // запрашиваем значение из поля
val(edit2.Text, b, code); // запрашиваем значение из поля
c := a+b;
str(c: -10:4,s);
label5.Caption := s;
end;
end.
Для того чтобы усовершенствовать проект, т. е. предусмотреть реакции на ввод ненужных данных символов и принажать клавиши Enter, после завершения ввода определим методы OnKeyPress – e1 и e2.
procedure TForm1.е1(Sender: Tobject var Key: char);
begin
case key of
‘0’..’9’, chr(8):
‘.’: if pas(‘.’, edit1.text) > 0
then Key := chr(0);
‘-‘: if length(edit1.text) > 0
then Key := chr(0);
chr(13): edit2.SetFocus;
else Key := chr(0);
end;
end;
на e2: подкрассим кнопочку в крассный.
chr(13): edit2.font. color := clRed;
Ведем кнопку очистки полей ввода и вывода результата для новых полей ввода.
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text := ‘’; // очищаем поле
edit2.Text := ‘’;
label5.Caption := ‘’;
edit1.SetFocus; // устанавливаем курсор на edit1.
end;
Процедура завершения приложения.
procedure TForm1.Button3Click(Sender: TObject);
begin
form1.Close
end;
Обработка исключительных ситуаций.
Ошибки, возникающие в процессе разработки и выполнения программы, бывают:
1. Синтаксические.
2. Логические.
3. Динамические (run time along –ошибки времени выполнения).
Исключение (исключительная ситуация) – нарушение условий выполнения программы, вызывающее прерывание или полное прекращение ее работы. Обработка исключения состоит в нейтрализации динамической ошибки. В Delphi для обработки динамических ошибок в выполняемый файл приложения встраиваются специальные фрагменты кода, предназначенные для реагирования на исключительные ситуации. Каждую исключительную ситуацию обрабатывает специализированный локальный обработчик. Если такой обработчик отсутствует, то исключение взаимодействует с глобальным обработчиком приложения.
Механизмы обработки исключений инкапсулированы в класс Exeption.
Класс исключительных ситуаций.
Исключительные ситуации в Delphi являются объектами класса Exeption описанный в модули SysUnits. Потомки класса Exeption начинаются с буквы {E}. Класс Exeption содержит два свойства и восемь методов, так как объекты исключительных ситуаций создаются при выполнении приложения, то их свойства доступны только в это время.
Название: | Описание: |
Свойства: 1.Message: string; 2.HelpContext: ThelpContext; | 1.Описание исключительных ситуаций. 2.Хранится №, указывающий на раздел контекстной помощи, для объекта исключения. |
Методы: 1.Cpeate(const Message: string); 2. CpeateFmt(const Message: string; Ar: array of const); 3. CpeateHelp(const Message: string; AHC: integer); 4. CpeateHelpFmt(const Message: string; Ar: array of const); | 1. Служит для создания объекта исключительной ситуации. Причем в строке Message, указывается текст свойства Message создаваемого объекта. 2.Анологично предыдущему методу, но позволяет задать текст в форматированном виде. 3..4. Позволяет помимо создания объекта исключения задать для него номер раздела контекстной помощи. |
Класс EAbort = class(Exeption) – делает не возможным дальнейшее выполнение программы.
Класс EMathError = class(EExternal) – является базовым для обработки ситуации, связанной с плавающей точкой.
EOutofMemory – нехватка оперативной памяти для выполнения операции.
EInOutError – ошибка памяти файла любого типа. Является базовым для ошибок, связанных с целочисленными вычислениями.
EIntOverflow – переполнение операций с целочисленными переменными.
EDivByZero – деление на ноль.
ERangeError – присваивание целочисленной переменной значение выходящее за пределы допустимого диапазона или попытка обращения к элементам массива по индексу выходящему за границу.
EInvalidPointer – некорректная операция с указателем.
EPointerError – ошибка преобразования типа.
EFCreatError – ошибка создания файла.
EFOpenError – ошибка открытия файла.
EPrinter – ошибка печати.
EMenyError – ошибка, возникающая при попытке динамически настроить меню приложения.
EInvalidCraphicOperation – ошибка при работе с графическим объектом.
Глобальная обработка исключений.
Механизм глобальной обработки исключений реализуется через объект Application, с которым работает файл проекта (*.DPR). Событие OnExeption является глобальным обработчиком. Программист имеет возможность выполнить более развитую обработку исключений, создав, свой собственный обработчик OnExeption ApplicationEvents.
Локальная обработка исключений.
Для создания локальных обработчиков исключений, в состав языка в ведены две конструкции.
1. try
.
.
finally
2. try
.
.
except
В блоке try включены операторы программы, при выполнении которых может сгенерироваться исключение. Если необходимо выполнение оператора даже в случае возникновения ошибки применяется конструкция №1. Во втором блоке finally перечисляются необходимые действия перед передачей управления на следующий уровень или глобальному обработчику.
Правило работы конструкции №1.
Если в любом из операторов блока try возникает исключительная ситуация, то управление передается первому оператору блока finally, если исключительная ситуация не возникла последовательно выполняются операции обоих блоков.
В конструкции №2 блок except содержит операторы, которые должны быть выполнены только в случае ошибки.
Правило работы конструкции №2.
Если в операторах блока try возникает исключительная ситуация, то управление передается первому оператору блока except, если исключительная ситуация не возникла то операторы блока except не выполняются.
Для исключений объявляемых в конструкциях try except глобальный обработчик не вызывается. Обработку ошибок должен обеспечить программист.
Блок except может быть разбит на несколько частей с помощью конструкции on..do.
Эта конструкция применяется, когда действия по обработке ситуации зависят от класса исключений:
on{идентификатор: класс исключений}
do {операторы}
else {оператор}
Идентификатор произвольное имя, которое создает программист, - локальная переменная представляющая собой экземпляр класса исключения, который можно использовать для доступа к объекту возникшего исключения. Если в блоке except использовано несколько конструкций on..do, то else располагается в конце блока и относится ко всей совокупности конструкции on..do.
Пример обработки исключительной ситуации.
procedure Tform1. btn AddClick(Sender: Tobject);
var
x, y, res: real;
begin
try
x := StrToInt(Edit1.Text);
y := StrToInt (Edit2.Text);
res := x/y;
Edit3. Text := FloattoStr(res);
except
On EdivByZero do
begin
Message Dlg(‘__’, mt Error,[mb OK], 0);
Edit2.SetFocus;
Edit3. Text := ‘Ошибка’;
end;
On EO: EconvertError do
begin
Message Dlg(‘__’, mt Error,[mb OK], 0);
Edit1.SetFocus;
Edit3. Text := ‘Ошибка’;
end;
else
begin
Edit1.SetFocus;
Edit3. Text := ‘Ошибка не определена, повторите ввод.’;
end;
end.
Конструкции try могут быть вложенными. При этом внешние и внутренние конструкции могут быть любого типа, но внутренний блок должен быть полностью размещен внутри внешнего.
Вызов исключительных ситуаций.
При необходимости сгенерировать исключительную ситуацию, программно используется оператор raise. Для создания объектов исключения используются методы Create и CreateFmt классов исключений. Особенностью синтаксиса оператора raise является отсутствие знака «:=».
Например:
raise Exeption. Create(‘Новая ошибка’);
Оператор raise можно использовать, и для обработки исключений вызванных ранее.
В таком случае raise;
1. Если оператор raise стоит в блоке except, то он предписывает не обрабатывать возникшее исключение, а передать его на более высокий уровень.
2. В блоке try внешней конструкции оператор raise генерирует исключительную ситуацию закрытия файла.
3. Совместное использование оператора raise и тихого исключения.
Сохранение проекта.
В проект входят:
1. .dpr – файл проекта;
2. .pas – файл главного модуля;
3. .res – ресурсный файл;
4. .dfm – файл описания формы;
5. .cpp – файл описания функций.
Из меню File выбираем Save project as … . Если проект еще ни разу не был сохранен, то Delphi вначале предложит сохранить модуль. pas и на экране появиться окно Save Unit1 as … . После выполнения сохранения главного модуля необходимо сохранить файл проекта. Имена файла модуля и файла проекта должны быть разными. В общем случае т. к. проект – это набор файлов, то для каждого проекта необходимо создать отдельную папку.
Компиляция.
Компиляция: project compale.
В диалоговом окне выводится: количество Errors, количество предупреждений, количество подсказок. Списки ошибок, предупреждений и подсказок выводятся в нижней части окна редактора кода.
Чтобы перейти к фрагменту кода, содержащему ошибку, курсор устанавливается в строке с сообщением об ошибке, из консольного меню выбирается команда edit source.
exe файл помещается в тот же каталог, что и файл проекта.
Трассировка.
Трассировка – процесс выполнения программы пошаговый, инструкция за инструкцией.
Delphi обеспечивает два режима:
1. Без захода в процедуру.
2. С заходом в процедуру.
Чтобы начать трассировку, необходимо выбрать из Run либо Step over, либо Traceinto.
В результате в окне редактора кода будет выделена инструкция, выполняемая первой. Точки остановки программы – помеченное программистом в коде место, дойдя до которого, программа останавливается. Для того чтобы поставить в программу точку останова необходимо из меню Run выбрать Add Breacpoint / Source Rreacpoind.
Диалоговое окно Add Source Rreacpoint:
1. имя файла, куда добавляем точку останова.
2. № строки, в которую добавляем точку останова.
Для точки останова можно задать условие, при выполнении которого программа останавливается (в поле Condition).
Наблюдение значения переменных.
1. Добавить имя переменной в список WatehList наблюдаемых элементов.
Run AddWateh /свойства/ expussion имя переменной.
2. Способ наблюдения после того, как программа достигнет точки останова и откроется окно редактора кода, установить курсор мыши на имя переменной, значение которой нужно проверить.
Списки.
Для того чтобы программа могла работать со списком необходимо:
1. Определить тип компонентов списка.
2. Определить переменную указателя на первый элемент списка.
Добавлять данные можно в любое место списка, для этого необходимо проектировать указатели.
Пример.
Формируем список студентов группы, добавляя фамилии в начало списка.
1. Определим вид интерфейса программы.

2. Листинг программы.
unit dlist1_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit; // фамилия
Edit2: TEdit; // имя
Button1: TButton; // кнопка Добавить
Button2: TButton; // кнопка Показать
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
type
TPStudent=^TStudent; //указатель на тип TStudent
TStudent = record
f_name:string[20]; // фамилия
l_name: string[20]; // имя
next: TPStudent; // следующий элемент списка
end;
var
head: TPStudent; // начало (голова) списка
// добавить элемент в начало списка
procedure TForm1.Button1Click(Sender: TObject);
var
curr: TPStudent; // новый элемент списка
begin
new(curr); // выделить память для элемента списка
curr^.f_name := Edit1.Text;
curr^.l_name := Edit2.Text;
// добавление в начало списка
curr^.next := head;
head := curr;
// очистить поля ввода
Edit1.text:='';
Edit2.text:='';
end;
// вывести список
procedure TForm1.Button2Click(Sender: TObject);
var
curr: TPStudent; // текущий элемент списка
n:integer; // длина (кол-во элементов) списка
st:string; // строковое представление списка
begin
n := 0;
st := '';
curr := head; // указатель на первый элемент списка
while curr <> NIL do
begin
n := n + 1;
st := st + curr^.f_name + ' ' + curr^.l_name +#13;
curr := curr^.next; // указатель на следующий элемент
end;
if n <> 0
then ShowMessage('Список:' + #13 + st)
else ShowMessage('В списке нет элементов.');
end;
end.
Справочная система.
Процесс создания справочной системы состоит из двух шагов.
1. Подготовка справочной информации (создание файла документа в формате. rtf).
2. Преобразование документа в файл справочной информации (x. hlp – файл).
Для того чтобы во время работы программы, пользователь, нажав клавишу F1, получил справку, необходимо проработать со свойством Helpfile главного окна. Надо указать имя справочного файла (hlp). Свойство HelpContext должно содержать идентификатор раздела справочной информации.
Пример.
Создадим программу вычисления стоимости поездки на авто.
Исходные данные.
1. Расстояние.
2. Цена литра бензина.
3. Расход топлива на сто километров.
1. Определим вид интерфейса программы.

2. Листинг программы.
unit fazenda_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit; // расстояние
Edit2: TEdit; // цена литра бензина
Edit3: TEdit; // потребление бензина на 100 км
CheckBox1: TCheckBox; // True - поезда туда и обратно
Button1: TButton; // кнопка Вычислить
Label4: TLabel; // поле вывода результата расчета
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
// проверяет, является ли символ допустимым
// во время ввода дробного числа
function IsFloat(ch : char; st: string) : Boolean;
begin
if (ch >= '0') and (ch <= '9') // цифры
or (ch = #13) // клавиша <Enter>
or (ch = #8) // клавиша <Back Space>
then
begin
IsFloat := True; // символ верный
Exit; // выход из функции
end;
case ch of
'-': if Length(st) = 0 then IsFloat := True;
',': if ( Pos(',',st) = 0)
and (st[Length(st)] >= '0')
and (st[Length(st)] <= '9')
then // разделитьель можно ввести только посе цифры
// и если он еще не введен
IsFloat := True;
else // остальные символы запрещены
IsFloat := False;
end;
end;
{$R *.dfm}
// нажатие клавиши в поле Расстояние
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Char(VK_RETURN)
then Edit2.SetFocus // переместить курсор в поле Цена
else If not IsFloat(Key, Edit2.Text) then Key := Chr(0);
end;
// нажатие клавиши в поле Цена
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Char(VK_RETURN)
then Edit3.SetFocus // переместить курсор в поле Потребление
else If not IsFloat(Key, Edit2.Text) then Key := Chr(0);
end;
// нажатие клавиши в поле Потребление
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Char(VK_RETURN)
then Button1.SetFocus // // сделать активной кнопку Вычислить
else If not IsFloat(Key, Edit2.Text) then Key := Chr(0);
end;
// щелчок на кнопке Вычислить
procedure TForm1.Button1Click(Sender: TObject);
var
rast : real; // расстояние
cena : real; // цена
potr : real; // потребление на 100 км
summ : real; // сумма
mes: string;
begin
rast := StrToFloat(Edit1.Text);
cena := StrToFloat(Edit2.Text);
potr := StrToFloat(Edit3.Text);
summ := rast / 100 * potr * cena;
if CheckBox1.Checked then
summ := summ * 2;
mes := 'Поездка на дачу';
if CheckBox1.Checked then
mes := mes + ' и обратно';
mes := mes + 'обойдется в ' + FloatToStrF(summ, ffGeneral,4,2)
+ ' руб.';
Label4.Caption := mes;
end;
end.


