Современные технологии программирования
Конспект лекций
содержание | вперед

Введение.

Лекция 0. Модель ООП Borland. Приложения Delphi

Содержание

Особенности модели ООП Delphi *

Проекты Delphi *

Консольное приложение *

Приложение под Windows *

Особенности модели ООП Delphi

Модель ООП Delphi поддерживает принципы ООП

Особенности модели ООП Delphi состоят в следующем:

  1. Для описания классов используется зарезервированное слово class.
  2. Описание класса может содержать поля, методы и свойства (property). Поля могут иметь произвольный тип, в том числе быть переменными типа класс. Методы в описании класса представлены заголовками подпрограмм. Свойства предназначены для обработки полей через специально описанные в классе методы для записи и чтения поля.
  3. Допустимо опережающее описание классов.
  4. В классе можно организовать разделы с разными уровнями доступа. Для этой цели служат директивы управления областью доступа – published, protected, automated.
  5. В Delphi допускается только одиночное наследие. То есть класс может наследовать только от одного родительского класса.
  6. Все классы являются наследниками класса Tobject.
  7. Введены новые операции is и as для приведения и проверки совместимости классовых типов.
  8. Объекты (экземпляры класса) – только динамические переменные. Переменная типа класс – это указатель на объект класса. Память под объекты (в куче свободно распределяемой памяти) выделяет программист вызовом конструктора класса. Поскольку все объекты динамические разыменовывать переменные типа класс при обращении к их полям, методам и свойствам не надо.
  9. Каждый объект при создании связывается с RTTI (run time type information - информация о типе времени выполнения) своего класса конструктором. В памяти, выделяемой под объект, выделяется поле “указатель на класс”, в которое конструктор заносит адрес RTTI класса объекта.
  10. RTTI класса содержит
  11. В течение всего времени выполнения приложения в памяти хранятся RTTI всех используемых в нём классов, представляющих собой дерево, отражающее иерархию соответствующих им классов приложения.
  12. Для работы с RTTI класса в классе Tobject имеются методы: InstanceSize, ClassName, ClassNameIs, ClassType, ClassParent, InheritsFrom. Кроме того, в язык добавлен тип данных указатель на класс (TClass = class of TObject).
  13. Программист освобождён от необходимости обработки большого количества сообщений системы, возникающих при взаимодействии пользователя с графическим интерфейсом. Вместо этого ему необходимо определить реакцию визуальных компонентов на небольшое количество стандартных событий, инициируемых пользователем.
  14. Для настройки реакции визуальных компонентов графического интерфейса на события, возбуждаемые действиями пользователя, визуальные компоненты наделены опубликованными свойствами (помещёнными в раздел published класса визуального компонента) типа указатель на метод. Тип указатель на метод описываются в разделе описания типов. Например:
  15. type

    TNotifyEvent = procedure (sender: TObject) of object;

    Значениями типа TNotifyEvent являются адреса методов, представленных процедурами с одним параметром-значением типа TObject. Способ реагирования визуального компонента на событие описывается как метод-обработчик события класса формы, на которой находится визуальный компонент. При настройке реакции визуального компонента на событие объект формы, являющийся владельцем компонента, делегирует ему свой метод обработчик события (т.е. свойству типа указатель на метод присваивается указатель на метод обработчик события).

  16. В языке определены методы:

Проекты Delphi

В интегрированной среде разработки (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.

Приложение под Windows

При запуске 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. При закрытии формы в приложении, состоящем из одной формы, закрывается всё приложение.

Головная программа содержит три оператора:

 

 

наверх


содержание | вперед