ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 18.03.2025
Просмотров: 207
Скачиваний: 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 < имя модуля >;
Объектно-ориентированный подход
При объектно-ориентированном подходе в интерфейсном разделе модуля задаются описания классов, в разделе реализации – тексты методов. Однако средства объектно-ориентированного программирования (ООП) получили в 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.