Современные технологии программирования |
Конспект лекций |
Введение.
Лекция 0. Модель ООП Borland. Приложения Delphi
Содержание
Особенности модели ООП Delphi *
Модель ООП Delphi поддерживает принципы ООП
Особенности модели ООП Delphi состоят в следующем:
type
TNotifyEvent = procedure (sender: TObject) of object;
Значениями типа TNotifyEvent являются адреса методов, представленных процедурами с одним параметром-значением типа TObject. Способ реагирования визуального компонента на событие описывается как метод-обработчик события класса формы, на которой находится визуальный компонент. При настройке реакции визуального компонента на событие объект формы, являющийся владельцем компонента, делегирует ему свой метод обработчик события (т.е. свойству типа указатель на метод присваивается указатель на метод обработчик события).
В интегрированной среде разработки (IDE) Delphi вы можете создать два вида приложений (проектов):
При запуске Delphi по умолчанию создаётся заготовка приложения под Windows, в котором вы можете пользоваться библиотекой визуальных компонентов VCL, являющейся средством создания графических интерфейсов (GUI). Однако вы можете создать заготовку приложения под DOS – консольного приложения, для работы в текстовом режиме. Когда ввод данных осуществляется только через клавиатуру, а вывод осуществляется на монитор в текстовом режиме. Манипулятор мышь в этом режиме не используется.
Консольное приложение может состоять:
Все файлы проекта именуются по умолчанию при создании проекта или при добавлении к нему заготовок для новых модулей (ProjectX.dpr – имя проекта, UnitX.pas – имя модуля).
Работа с файлами проекта осуществляется с помощью менеджера проекта. Менеджер проекта позволяет:
Работа с менеджером проекта осуществляется через команды меню интегрированной среды разработки (IDE).
Переименование головной программы и модулей с помощью редактора кода возможно, но оно приведёт к неустранимым ошибкам.
При добавлении модуля в проект его имя и имя файла, в котором он хранится, автоматически добавляются в предложение uses головной программы. Однако, если вы захотите использовать ресурсы одного модуля вашего проекта в другом, вам необходимо самостоятельно подключить к вашему модулю требуемый модуль. Для этого вы можете в редакторе кода добавить в предложение uses (раздела интерфейса или реализации) имя модуля, ресурсами которого вы хотите воспользоваться в данном модуле или воспользоваться командой File|Use Unit..., которая позволяет вам выбрать доступный модуль вашего приложения и сама добавит его в предложение uses раздела реализации.
Просмотреть состав вашего проекта и открыть исходный текст любого входящего в него модуля и головной программы вы можете через меню View|Units. Файл проекта можно просмотреть в редакторе через меню Project|View Source.
Переименование исходного файла проекта (файла с расширением dpr) осуществляется при его сохранении. Сохранение файла проекта (файла с расширением dpr) осуществляется посредством команды меню File|Save Project As… Сохранение исходного файла отдельного модуля с переименованием (модуля, окно которого активно в редакторе) осуществляется командой File|Save As…, а без переименования - File|Save. Сохранение всех файлов проекта осуществляется командой File|Save All. Закрыть отдельный модуль вы можете с помощью команды File|Close, закрыть проект - File|Close All. Добавить к проекту существующий модуль можно с помощью команды Project|Add To Project, а удалить - Project|Remove from Project.
Консольное приложение из одного файла dpr.
Консольное приложение создаётся через меню File|New|Other|Console Application. Заготовка для него имеет следующий вид:
//-----------------------------------------------------------
program PConsole;//этот код хранится в файле с расширением //PConsole.dpr. В IDE он доступен через меню Project|View Source
// по умолчанию имя Project1
{$APPTYPE CONSOLE}//директива компилятору
uses
SysUtils;//библиотека времен выполнения
begin
{ TODO -oUser -cConsole Main : Insert code here }
end.
Консольное приложение из двух и более файлов: dpr, pas.
В консольное приложение можно добавить заготовку для нового файла модуля через меню File|New|Other|Unit или добавить существующий модуль через меню Project|Add to Project…. Количество модулей в приложении ограничено только имеющейся в вашем распоряжении оперативной памятью.
//-----------------------------------------------------------
program PConsole;//этот код хранится в файле с расширением //PConsole.dpr. В IDE он доступен через меню Project|View Source
{$APPTYPE CONSOLE}
uses
SysUtils,
UConsole in 'UConsole.pas';//файл с исходным текстом модуля
begin
{ TODO -oUser -cConsole Main : Insert code here }
end.
//-----------------------------------------------------------
unit UConsole;//этот код хранится в файле с расширением //UConsole.pas. В IDE он доступен через меню View|Units
//по умолчанию имя Unit1
interface
uses UConsole1;//Теперь вам доступны ресурсы подключённого //модуля UConsole1
implementation
end.
//-----------------------------------------------------------
unit UConsole1;
interface
{раздел интерфейса}
implementation
{раздел реализации}
end.
При запуске Delphi автоматически создаётся заготовка приложения (проект) под Windows, состоящего из файла Project1 (Source), содержащего исходный текст головной программы с расширением dpr, файла формы с расширением dfm и файла модуля связанного с формой, в котором хранится тип объекта, созданной формы (Unit1.pas).
Вы можете добавлять в проект как новые формы (вместе с ними будут добавляться модули формы), так и отдельные модули не связанные с формами.
Пример заготовки приложения под Windows из одной формы.
//-----------------------------------------------------------
program PWinApp;//текст головной программы (sourse) – файл с //расширением dpr
//по умолчанию Project1.dpr
uses
Forms,
UWinApp in 'UWinApp.pas' {Form1};
{$R *.res}
begin
Application.Initialize;инициализация объекта типа TApplication
Application.CreateForm(TForm1, Form1);//создание формы //приложения
Application.Run;//запуск приложения на выполнение – //бесконечный цикл обработки сообщений
end.
//-----------------------------------------------------------
unit UWinApp;//файл формы с расширением pas
//по умолчанию Unit1.pas
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)//класс объекта формы
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
Пример приложения из одной формы с визуальным компонентом.
При работе с визуальными компонентами конструкторы и деструкторы вызываются редко. Поскольку за создание и уничтожение компонента отвечает компонент-владелец (owner). У каждого визуального компонента также имеется объект родитель (parent), который предоставляет холст для отображения компонента. Для большинства компонентов это форма, на которую они помещены. За создание и уничтожение форм отвечает объект Application класса TApplication, который представляет приложение и создаётся автоматически при его запуске. Создавать объекты явно приходится только в том случае, если они создаются во время работы приложения (динамически).
//--------------------------Модуль формы---------------------------------------------------------------------
unit UExample1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
//Close;
//Form1.Close;
Application.Terminate;
end;
end.
//---------------Головная программа (source)---------------------------------------------------------------
program PExample1;
uses
Forms,
UExample1 in 'UExample1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Каждый компонент, помещаемый на форму, становится полем класса формы. Каждый обработчик события для компонента становится методом формы. За создание и уничтожение формы отвечает объект Application. При закрытии формы в приложении, состоящем из одной формы, закрывается всё приложение.
Головная программа содержит три оператора: