- •Объектно-ориентированный подход
- •Val(Edit1.Text,k,sig);
- •Val(Edit2.Text,l,sig);
- •I,j :byte;
- •I,j :integer;
- •Inherited Create (Ni,Nj);
- •Val(Edit1.Text, p, sig1);
- •Val(Edit2.Text, q, sig2);
- •Val(Edit3.Text, r, sig3);
- •Vas :real;
- •Val(Edit4.Text,n,sig);
- •Тестирование и отладка приложений
- •Виды ошибок
- •Отладочные средства Delphi
- •Составление тестов
- •Решение задач обработки данных в Delphi
- •Проектирование структуры файлов
Допустим, что состав необходимых для решения задачи процедур (функций) определен. Возможно, что они использовались уже при решении задачи в среде 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; его можно явно и не задавать}