- •Лекция 1. Методологии программирования
- •Лекция 2. Класс и ключевые понятия
- •Лекция 3. Uml-язык. Диаграммы классов Лекция 4. Архитектура программ в различных ос. Структура приложения в Delphi. Основные категории Delphi
- •Лекция 5. Библиотека визуальных компонентов. Описание компонентов vcl
- •Лекция 6. Библиотека визуальных компонентов. Описание компонентов vcl (продолжение)
- •Лекция 7. Форма. Элементы управления
- •Лекция 8. Описание компонентов vcl (продолжение): Ввод и выбор значений
- •Лекция 9. ModelMaker Список литературы
Лекция 3. Uml-язык. Диаграммы классов Лекция 4. Архитектура программ в различных ос. Структура приложения в Delphi. Основные категории Delphi
Основные определения лекции |
Примечания |
АРХИТЕКТУРА ПРОГРАММ В ОС DOS Программа представляет набор подпрограмм, последовательно вызываемые операторами, обусловленными логическим алгоритмом задачи. Программа сама контролирует процесс своего выполнения. ОС вмешивается лишь по требованию: приостановить выполнение и перенаправить потоки ввода-вывода и др. Программа монопольно использует все ресурсы, вызывая напрямую резидентные программы ОС по мере необходимости. ОС Windows является: многозадачной, многооконной.
Многозадачность - поэтому невозможно монопольно использовать все ресурсы одним приложением. За распределением ресурсов между приложениями следит ядро Windows. Многооконность – каждой программе сопоставляется одно окно, в которое ОС направляет её потоки информации. В любой момент времени активно только одно окно.
В ОС Windows реализована схема программ, управляемых событиями, т.е. программа – набор подпрограмм, обработчиков событий.
Ядро Windows следит за изменениями в системе и генерирует пакет сообщения при их наличии (ссылка на окно, идентификатор сообщения + дополнительная информация: код нажатой клавиши и др.).
Пакеты сохраняются в специальной очереди сообщений Windows , а ядро снова переходит в режим слежения за системой.
Очередь непрерывно разбирается, анализируется ссылка на окно, которому предназначено это событие, и вызывается его оконная функция. Оконная функция – специальная программа, описанная по определенным правилам и зарегистрированная в ОС как объект для сообщений.(см. Фаронов В.В. Delphi. Стр.495)
Оконная функция анализирует сообщение и вызывает соответствующий код обработчика события в приложении. Если его нет, то вызывается обработчик по умолчанию.
Большинство приложений выполняют одни и те же действия при обработке сообщений. Набор обрабатываемых сообщений также примерно одинаков. Поэтому логично инкапсулировать характеристики окна и его поведение в некоторый класс, содержащий методы (обычно пустые). Эти методы вызываются при обработке сообщений.
Данные методы доступны для переопределения и предоставляют возможности для удобной работы с окном. Работа основана на логическом представлении окна как экземпляра класса, а не вызова системных функций. Все процессы связанные с поддержанием работоспособности оконной программы реализованы и в Delphi.
|
|
ПРОГРАММИРОВАНИЕ В DELPHI В основе идеологии Delphi лежит технология визуального проектирования и событийного программирования. Данная технология программирования позволяет существенно сократить время разработки и создания Windows-приложения.
Система Delphi: компилятор с языка Object Pascal, визуальная среда разработки, инструменты взаимодействия с базами данных, библиотека VCL. VCL- Visual Components Library – библиотека визуальных компонентов (можно создавать самим). Система Delphi соответствует концепции RAD. RAD – Rapit Application Development – быстрая разработка приложений.
С 1995 по 2001 гг.– Delphi 1 -6 ( улучшение интегрированной среды разработчика, расширения набора компонентов и увеличение их возможностей, внедрение технологий разработки распределенных приложений). Delphi7 –Delphi Studio – заявлены средства поддержки платформы Microsoft Net, но поддерживает и импорт/экспорт COM-объектов в Net-приложения.
Delphi2005 – содержит много ошибок. Delphi2007 – часть программного комплекса Borland Developer Studio. Borland Developer Studio поддерживает языки: Delphi for MS Win32 c поддержкой и ОС Vista, Delphi for MS .Net Framewotk, C++, C# (усеченный вариант-Turbo Delphi). В 2007 г. - среда Delphi for PHP.
|
|
СТРУКТУРА ПРИЛОЖЕНИЯ Проект – описание файловой структуры исходного текста программного продукта (частей, на которые разбит исходный текст). Проект состоит из нескольких файлов. Каждый файл выполняет строго определенные функции.
Главный файл проекта – текстовый файл с расширением DPR, содержащий главный программный блок. Файл проекта подключает все используемые программные модули и содержит операторы для запуска приложения. Этот файл среда создает и компилирует сама.
Файлы описания форм – двоичные файлы с расширением DFM, описывающие формы с компонентами. В этих файлах запоминаются начальные значения свойств, установленные в Инспекторе Объектов. Количество DFM- файлов равно количеству используемых в приложении форм.
Если вызвать у формы всплывающее меню и выбрать команду View as Text, то можно увидеть, например, следующий текст: object Forms: TForm1 Left = 200 Top = 108 Width = 435 Height = 300 ……………..
Файлы программных модулей – текстовые файлы с расширением PAS, содержащие исходные коды форм на языке Object Pascal. В этих файлах вы пишите методы обработки событий, генерируемых формами и компонентами. Каждой форме соответствует свой программный модуль UNIT, содержащий все относящиеся к форме объявления и методы обработки событий. По умолчанию система сама дает имена: Unit Unit1; Unit Unit2; ….
Delphi сама конструирует структуру модуля, дает ему имя. Программист только вписывает обработчики событий. Не рекомендуется вносить самому изменения в структуру модуля и его имя. Если необходимо удалить метод обработки события и убрать ссылки на него, то просто необходимо сделать метод пустым, убрать весь написанный код и локальные переменные, остальное все сделает Delphi.
Файл ресурсов с расширением RES (RESource). В нем хранится, например, пиктограмма приложения, которая будет видна на панели задач Windows. Создается автоматически. Файл опций с расширением DOF (Delphi Options File), где сохраняются заданные программистом параметры компиляции и компоновки проекта.
Файл с расширения DSK (DeSKtop) - размещены настройки визуальной среды, используемые данным приложением. Чтобы Delphi сохраняла настройки среды, необходимо выбрать команду Tools\Options и в диалоговом окне на странице Preference в группе AutoSave отметить пункт Desktop (не копируйте при переносе).
Файлы DSM – файл с информацией, используемой внутренний отладчиком. Создается при компиляции проекта. Файлы DCU – откомпилированные модули (аналогичен файлу obj).
Подключаемые в модулях объектные obj - файлы, написанные на других языках, например, С++. В проект могут входить также и другие файлы: растровые рисунки (BMP- файлы), значки (ICO- файлы), файлы справочников (HLP- файлы) и др. Этими файлами управляет сам программист.
|
program Project1; uses Forms, Unit1 in ‘Unit1.pas’ {Form1}; {$R *.Res} {подключает ресурсы} begin Application. Initialize; Application. CreateForm (TForm1, Form1); Application. Run; end.
|
ОСНОВНЫЕ ПОНЯТИЯ DELPHI Относятся:
СВОЙСТВА Свойства – атрибут объекта, определяющий то, как он выглядит или как он может вести себя. Например, свойства Left, Top, Width, Height определяют местоположение объекта и его размеры:
Свойства, которые определяют, как объект может вести себя, например: Visible : boolean – видимый. Если свойство имеет значение True, то объект видимый.
Свойство определяется элементами: полем и двумя методами. Например: Set<имя свойства> - устанавливает значение свойства, Get<имя свойства> - возвращает его значение.
Например, чтобы программно установить цвет формы необходимо вызвать метод Form1.SetColor(clBlue); {исп. вызов метода} или написать инструкцию присваивания Form1.Color := clBlue; {исп. поле} которую Delphi откомпилирует как Form1.SetColor(clBlue);
Аналогично, и для получения значения свойства можно использовать оператор присваивания: С := Form1.Color; при компиляции это вызовет метод C := GetColor(Form1);
Видно, что за каждым обращением к полю стоит какое-то действие (у нас - перерисовка формы с изменением цвета). В методах свойств может осуществляться проверка устанавливаемой величины и вызов других процедур, зависящих от вносимых изменений.
Если же потребности в специальных процедурах чтения/записи нет, возможно вместо имен методов применять имена полей.
В этом примере чтение свойства AValue означает просто чтение поля FValue. Затем внутри SetValue вызывается и метод DoSomeThing.
Для присвоения значения свойству по умолчанию используется ключевое слово default: property Visible : boolean read FVisible write SetVisible default True; т.е. по умолчанию свойство устанавливается в значение True.
Свойства, опубликованные в секции Published, отображаются в Инспекторе объектов на странице Properties.
Среда Delphi позволяет изменить свойство: визуально – курсором на форме - значения свойств в Инспекторе объектов будут изменены. программно, записав соответствующий код, например: Form1.Left := 400; путем внесения значений свойств в поля значений Инспектора объектов.
СОБЫТИЯ Среда Windows и написанные для нее программы управляются событиями, возникающими в результате воздействий пользователя, аппаратуры компьютера или других программ: нажатие или опускание клавиши на клавиатуре, нажатие или опускание кнопки мыши, движение мыши и т.п.
В среде ничего не происходит пока не произойдет некоторое событие (event) – только в этом случае будет реакция программы. Программа содержит набор алгоритмов, определяющих ее действия на различные события. Такие программы называются «обработчиками» событий.
Событие – это свойство процедурного типа, предназначенное для создания пользовательской реакции на те или иные входные действия: property OnMyEvent : TMyEvent read FOnMyEvent write FOnMyEvent; Присвоить такому свойству значение – это значит указать объекту адрес метода, который будет вызываться в момент наступления события.
Внутри библиотеки времени выполнения Delphi вызовы обработчиков событий находятся в методах, обрабатывающих сообщения Windows. Выполнив необходимые действия, этот метод проверяет, известен ли адрес обработчика, и, если это так, вызывает его: if Assigned (FOnMyEvent) then FOnMyEvent (Self); Self – указатель на тот объект, который вызвал метод.
События имеют разные типы в зависимости от происхождения и предназначения. Общим для всех является параметр Sender – он указывает на объект-источник события. Самый простой тип TNotifyEvent – не имеет других параметров: TNotifyEvent = procedure (Sender : TObject) of object;
Различают события:
Все события в Delphi принято именовать с «On»: OnClick, OnMouseMove и т.д. Каждый компонент имеет свои события. Под события в Инспекторе объектов отведена страница Event.
СОБЫТИЯ МЫШИ Дважды щелкнув в Инспекторе объектов на странице Event в поле любого события, мы получим программу -заготовку метода нужного типа. При этом имя будет состоять из имени текущего компонента и имени события, а относиться будет к текущей форме, например: TForm1.FormClick
Например, написать обработчик события нажатия кнопки мыши, по которому случайным образом меняется цвет формы: - активизируем форму, - дважды щелкнем в поле значения события OnClick на странице событий Event
procedure TForm1.FormClick(Sender: TObject); begin randomize; Color := random (65535); end;
События можно менять во время выполнения программы. Такая возможность называется делегированием, т.е. можно в любой момент времени взять способы реакции на события у одного объекта и присвоить (делегировать) их другому: Object1.OnMouseMove := Object2.OnMouseMove; Принцип делегирования позволяет избежать трудоемкого процесса порождения новых дочерних классов.
СОБЫТИЯ КЛАВИАТУРЫ Создадим программу перемещения формы по экрану при нажатии клавиш управления курсором:
Форма должна реагировать на нажатие клавиш перемещением на 8 пикселей в соответствующем направлении.
Коды клавиш управления: Vk_Left, Vk_Right, Vk_Up, Vk_Top. Обработаем событие OnKeyDown
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of Vk_Left: Left := Left - 8; Vk_Up : Top := Top - 8; Vk_Right: Left := Left + 8; Vk_Down: Top := Top + 8; end; end; Key - код нажатой клавиши; Sender - источник события
Для завершения работы программы вставим еще один обработчик события клавиатуры: конец работы программы при нажатии на клавишу <Q>. Для этого можно в обработчик события формы OnKeyPress вписать: If UpCase (Key) = ‘Q’ Then Close;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin If UpCase(Key) = 'Q' Then Close; end; end; Функция UpCase возвращает прописную букву.
СОБЫТИЯ МЫШИ Создадим программу, изменяющую вид указателя мыши при каждом нажатии ее кнопки. Если щелкнуть на свойстве формы Cursor, а затем раскрыть список значений, появится список значений от crDefault до crVSplit.
procedure TForm1.FormClick(Sender: TObject); begin if cursor = crDefault Then Cursor := crVSplit else Cursor :=Succ(Cursor); end;
СИСТЕМНЫЕ СОБЫТИЯ Системные события исходят непосредственно от Windows, поэтому их использование не так очевидно.
МЕТОДЫ Метод – это процедура или функция класса, определяющая поведение объекта.
Например: Close – закрыть, например, форму. SetFocus – установить фокус ввода.
СВЯЗЬ СОБЫТИЯ С ОБЪЕКТОМ unit Unit1; interface Uses….; type TForm1 = class(TForm) Button1:TButton; procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin
end; end. (файл Unit1.dfm) object Form1: TForm1 Left = 192 Top = 114 ………………….. end; Object Button1:TButton Left=…… ……….. OnClick = Button1Click
End;
|
Пример: TMyObject = class (TObject) FValuer : Integer; procedure DoSomeThing; procedure SetValue (NewValue : Integer); property AValue : Integer read FValue write SetValue (NewValue : Integer); end;
Implementation ….. procedure TMyObject.SetValue (NewValue : Integer); begin if NewValue <> FValue then FValue := NewValue; DoSomeThing; end;
|