ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 18.03.2025

Просмотров: 206

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Допустим, что состав необходимых для решения задачи процедур (функций) определен. Возможно, что они использовались уже при решении задачи в среде Borland Pascal и возникла необходимость разработать новую реализацию в Delphi. Как их включить в Delphi и использовать? В Delphi реализован алгоритмический язык Object Pascal, он отличается несущественно от традиционного. Поэтому процедуры (функции), написанные для Borland Pascal, могут быть использованы и здесь. Надо иметь в виду, что в них не должно быть традиционных для операционной системы MS DOS операторов ввода/вывода. Ввод/вывод необходимо обеспечить средствами Delphi (через различные диалоговые окна).

Необходимые процедуры (функции) должны быть оформлены в виде модулей (Unit). Структура модулей в Delphi расширена по сравнению с Borland Pascal, но мы не будем на этом останавливаться. В Delphi каждой (без исключений!) форме соответствует свой модуль. Но модуль может существовать и без формы. Для создания нового модуля необходимо выбрать из меню Delphi: File – New – Unit. В ответ откроется пустой модуль, куда по традиционным правилам можно записать все необходимое.

unit Unit3;

interface

{Место для заголовков процедур и функций}

implementation

{Место для реализаций процедур и функций}

end.

Если модули в виде файлов с расширением *.pas уже имеются, то используется другой способ их подключения: выбрать из меню Delphi: View – Project Manager. Появится знакомое нам окно. В нем выбирайте Add: откроется диалоговое окно, в котором выбирается подключаемый модуль. Допускается подключение модулей как в исходном (расширение *.pas), так и в оттранслированном виде (расширение *.tpu).

Вызов процедур и функций из модуля выполняется как обычно, не забудьте только включить в нужном месте оператор Uses < имя модуля >;

    1. Объектно-ориентированный подход

При объектно-ориентированном подходе в интерфейсном разделе модуля задаются описания классов, в разделе реализации – тексты методов. Однако средства объектно-ориентированного программирования (ООП) получили в Delphi дальнейшее развитие по сравнению c Borland Pascal 7.0, и поэтому мы остановимся на них подробнее. В Delphi имеется два подхода к ООП:

  • “классический”, заимствованный из Borland Pascal 7.0;

  • подход Delphi.

При классическом подходе для описания объектов используется ключевое слово Object. Создание и использование переменных типа объект ничем не отличается от аналогичных действий в Borland Pascal 7.0.


В Delphi разработан новый подход, похожий на применяемый в языке С++. Введены понятия “класс” и “объект”. Объект – это конкретный предмет в окружающем нас мире. Например, прямоугольный треугольник ABC с катетами 4 и 5. Класс – это совокупность объектов с одинаковыми свойствами (задаются переменными) и одинаковым поведением (пове­де­ние задается методами). Например, класс “прямоугольные треугольники”. Необходимо отметить, что и в теоретических работах по ООП используется, как правило, такая терминология. Важно запомнить разное содержание понятия “объект” в этих двух подходах, что показано в табл. 3.1.

Таблица 3.1

Borland Pascal

Delphi

Object

Class

Экземпляр объекта, переменная типа объект

Объект

Кроме этой, терминологической, разницы имеется и существенная разница в реализации, в зависимости от того, объявлен ли Class или Object. Рассмотрим это на примерах.

Пример 1. Классический подход.

Пусть наше приложение состоит из одной формы и двух модулей: первый модуль соответствует форме, а второй содержит объявление объекта. Форма приведена на рис. 3.1.

Рис. 3.1. Окно приложения

Реализация модуля формы. Требуется дополнительное объявление

Var

MyObj :Calc6;

procedure TForm1.Button1Click(Sender: TObject);

Var

k,l :byte;

sig :integer;

begin

Val(Edit1.Text,k,sig);

if sig<>0 then

ShowMessage ('Требуется ввести положительное целое число');

Val(Edit2.Text,l,sig);

if sig<>0 then

ShowMessage ('Требуется ввести положительное целое число');

MyObj.Init(k,l);

Edit3.Text:=IntToStr(MyObj.Res);

end;

Реализация дополнительного модуля с объектом.

unit modul2;

interface

Type

Calc6=Object

I,j :byte;

Procedure Init(Newi,Newj:byte);


Function Res :byte;

End;

implementation

Procedure Calc6.Init(Newi,Newj :byte);

Var

sig:integer;

Begin

i:=Newi;

j:=Newj;

end;

Function Calc6.Res:byte;

begin

Res:=2*i+6*j;

end;

end.

При классическом подходе в Delphi как и в Borland Pascal объявление переменной типа объект (Var MyObj:Calc6;) означает выделение памяти для MyObj . Обратим здесь внимание на это обстоятельство потому, что в следующем примере будет по-другому.

Пример 2. Подход Delphi.

Пусть наше приложение состоит из одной формы и двух модулей: первый модуль соответствует форме, а второй – содержит объявление классов. Форма приведена на рис. 3.2.

Рис. 3.2. Окно приложения

Модуль объявления классов.

unit Modul2A;

interface

Type

Esimene=Class(TObject)

{Объявим класс, по умолчанию предшественником всех классов }

{является класс Delphi TObject; его можно явно и не задавать}


I,j :integer;

Constructor Create (Ni,Nj :integer);

{При работе с классами конструктор обязателен }

{его имя–дань традициям}

Function Geti :integer;

Function Getj :integer;

End;

Teine=Class(Esimene)

{ Esimene –имя класса – предшественника}

K :integer;

Constructor Create(Ni,Nj,Nk :integer);

Procedure Matem(var res :real);

End;

Implementation {Далее следуют тексты методов}

Constructor Esimene.Create(Ni,Nj: integer);

Begin

i:=Ni;

j:=Nj;

End;

Function Esimene.Geti :integer;

Begin

Geti:=i;

End;

Function Esimene.Getj :integer;

Begin

Result:=j;

End;

Constructor Teine.Create(Ni,Nj,Nk :integer);

Begin

Inherited Create (Ni,Nj);

{Конструктор класса – наследника должен инициализировать}

{и переменные класса предшественника, путем вызова }

{его конструктора }

k:=Nk;

End;

Procedure Teine.Matem(var res :real);

Begin

res:=(i+j)/k; {Простейшее вычисления, только для иллюстрации }

End;

end.

Модуль формы

var

Form1: TForm1; {Вставит Delphi}

Dan : Tlist; {Будет создан список объектов; описание TList см. выше}

MyObj:Teine; {Обявим объект MyObj классаTeine}

implementation

procedure TForm1.Button3Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.FormCreate(Sender: TObject);

{Выполняется при запуске приложения, см. п.2.4.2}

begin

Dan:=TList.Create;

Dan.Capacity:=10;

end;

procedure TForm1.Button1Click(Sender: TObject);

{Реализация кнопки “Ввод исходных данных”}

Var

p,q,r,sig1,sig2,sig3 :integer;

begin

Val(Edit1.Text, p, sig1);

Val(Edit2.Text, q, sig2);

Val(Edit3.Text, r, sig3);

if (sig1+sig2+sig3)<>0 then

ShowMessage('Надо ввести целые числа')

else

begin

Edit1.Text:='';

Edit2.Text:='';


Edit3.Text:='';

Dan.Add (Teine.Create(p,q,r));

{Создается очередной объект, для этого вызывается}

{ конструктор Create класса Teine}

{указатель на созданный объект будет добавлен в список Dan типаTList}

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

{Реализация кнопки “Вычисляй”}

Var

sig,n :integer;

Vas :real;

MyRes :Teine;

s6 :string;

begin

Val(Edit4.Text,n,sig);

if sig<>0 then

ShowMessage('Введите целое число')

else

begin

if n>Dan.Count then

ShowMessage('Заданное число не должно быть больше '+IntToStr(Dan.Count))

else

begin

{Извлекаем из списка объект по заданному номеру,}

{ номера начинаются с нуля}

MyRes:=Dan.Items[n-1];

MyRes.Matem(vas);

{MyRes – указатель на i-й объект }

str(vas:6:2,s6);

Edit5.Text:=s6;

end;

end;

end;

end.