- •Лабораторная работа № 1 Программирование на языке Object Pascal
- •1. Введение
- •2. Алфавит языка Object Pascal
- •3. Структура программы
- •4. Типы данных
- •5. Выражения и операции
- •6. Операторы
- •7. Структурированные типы данных
- •8. Организация ввода-вывода
- •Выполнить компиляцию и проверку работы программы, последовательно нажимая кнопки “Операция”, “Проверка”, “Закрыть’.
- •9. Процедуры и функции
- •10. Отчет по лабораторной работе
- •Литература
- •Приложение 1 Стандартные подпрограммы преобразования типов
- •IntToStr(Value) - преобразовать целое число в десятичную символьную форму
- •Val(s, V, Code) - преобразовать символьную форму числа в двоичную
- •Приложение 2 Стандартные подпрограммы для "коротких" и "длинных" строк
- •Insert(Source, s, Index) - поместить в строку другую строку
- •Лабораторная работа № 2 Принципы объектно-ориентированного проектирования программ в среде delphi
- •1. Введение
- •2. Основные понятия ооп
- •2.1. Классы
- •2.2 Объекты
- •2.3. Методы
- •2.4. Инкапсуляция и свойства объекта
- •2.5. Наследование
- •2.6. Области видимости в классах
- •2.7. Полиморфизм и виртуальные методы
- •3. Классы и объекты delphi
- •Литература
- •1. Фаронов в.В. Delphi 3.Учебный курс. – м.: “Нолидж”, 1998. Объектно-ориентированное программирование
- •Часть 1
- •391000, Рязань, ул. Гагарина, 59/1
3. Классы и объекты delphi
DELPHI содержит сложную иерархию классов, которые можно использовать в программе, создавая объекты этих классов или формируя-классы потомки. В начале этой иерархии стоят классы, называемые абстрактными классами. Для них нельзя создать полноценные работающие объекты, но они являются родоначальниками целых семейств классов, для которых такие объекты уже могут быть созданы. Исходя из свойства наследования, в абстрактных классах помещены характеристики, присущие всем классам их семейств.
Структура некоторых абстрактных классов, находящихся в начале иерархии классов, приведена на рисунке.10
Класс TObject является предком всех других классов, используемых в DELPHI. Он включает в себя характеристики, свойственные всем используемым классам. Некоторые методы класса TObject могут использоваться без создания соответствующих объектов с учетом того, что реального объекта такого класса может и не быть. Эти методы позволяют получить общие характеристики класса – адрес таблицы, содержащей характеристики класса, имя класса, имя предка класса, характеристики методов и т. д. Примеры некоторых методов класса TObject:
ClassName – функция класса (типа ShortString) формирует строку, содержащую имя класса, данное ему при создании;
ClassParent – функция, определяющая класс непосредственного предка данного класса;
ClassType – функция возвращает класс конкретного объекта;
InstanceSize – функция (типа Longint) возвращает размер класса или объекта в байтах;
FieldAddress(Name) – функция типа Pointer возвращает адрес поля объекта с именем Name типа ShortString.
Класс TPersistent (Постоянный) является потомком класса TObject и предком всех классов, объекты которых могут быть помещены в память и взяты из памяти. Основными потомками класса TPersistent являются классы TComponent (Компонента) – предок всех компонент проекта; TStrings (Строки) – предок всех списков строк; TCollection (Коллекция) – коллекция (список) элементов; TGraphicObject (Графический объект), TCanvas (Канва – основа для рисования), TGraphic (Графический элемент), TPicture (Изображение) – классы, образующие так называемый графический инструментарий DELPHI.
Класс TControl является родоначальником всех элементов управления, с помощью которых выводится информация на экран и с помощью которых можно вводить информацию в программу, используя клавиатуру и мышь. Его потомок класс TWinControl служит для создания окон Windows. Класс TGraphicControl отличается от класса TWinControl отсутствием у объектов его семейства оконной функции, в связи с чем такие элементы либо служат для вывода на экран информации, либо являются чисто декоративными11.
Методы базового класса Tobject, как отмечалось выше, позволяют легко получать информацию о характеристиках созданного класса и его потомках.
Задание 2. Подготовить и выполнить программу, выводящую сообщение о названии типа созданного класса и названии его непосредственного предка.
Решение задачи выполнить в следующей последовательности:
Открыть новый проект и в качестве заголовка формы ввести текст “Задание 2”.
На форму поместить две кнопки: “Операция” и “Закрыть”.
В интерфейсной части модуля после описания класса TForm1 поместить описание нового класса с именем TNewForm:
TNewForm=class(TForm)
class procedure ClassMessage;
end;
В этом классе введен метод класса ClassMessage (см. п.2.3), который будет формировать строку с требуемой информацией.
В исполнительной части модуля поместить описание этого метода:
class procedure TNewForm.ClassMessage;
var s: string;
begin
s:=’Имя класса:’+ClassName+#13#10’Предок:’+ClassParent.ClassName;
Application.MessageBox(PChar(s),’Информация о классе’,MB_OK);
end;
В этом методе формируются две строки: первая отображает имя класса, для чего используется метод класса ClassName, определенный в классе TObject, вторая отображает имя непосредственного предка.
Для вывода имени предка используются два метода класса – ClassParent и ClassName, определенные в классе TObject. Затем информация с помощью стандартного метода MessageBox объекта Application выводится в информационном окне на экран. Это окно имеет заголовок “Информация о классе” и одну кнопку управления “OK”.
В заготовку обработчика событий кнопки “Операция” поместить оператор обращения к методу класса ClassMessage:
TNewForm.ClassMessage;
Примечание. Метод класса ClassMessage используется в данном случае, несмотря на то, что ни одного объекта класса TNewForm не создано (см.п.2.3).
Подготовить стандартный обработчик событий для кнопки “Закрыть”.
Выполнить сохранение файлов проекта и модуля в текущем каталоге, провести компиляцию и запуск программы на выполнение.
Нажать кнопку “Операция”. На экран должно быть выведено окно с информацией о типе класса и его предка.
Завершить работу программы нажатием кнопки “Закрыть”.
В Object Pascal можно задавать указатель на класс, называемый метаклассом. Для этого в объявлении записываются ключевые слова class of, после чего указывается имя класса, ссылка на который формируется:
type
<имя типа>=class of <базовый класс>;
Примером может быть следующее описание:
type
TControlClass= class of TControl;
Этот тип является стандартным в DELPHI и именно так он определяется в модуле Controls. Введя такой тип данных, далее можно задавать переменные этого типа, например:
var ControlClass: TControlClass;
Значениями такой переменной могут быть классы, входящие в семейство исходного класса TControl: сам класс TControl, класс TForm, класс TButton и т. д. Таким образом, метакласс может быть указателем на любой класс, входящий в семейство исходного класса.
Введение метаклассов удобно для создания универсальных подпрограмм, которые могут работать с объектами из целого семейства классов, причем заранее неизвестно, какой из этих объектов будет использоваться. В ряде случаев это существенно упрощает создаваемую программу.
Задание 3. Подготовить и выполнить программу, выводящую сообщение о характеристиках любого класса – название его типа и название типа его непосредственного предка.
Решение задачи выполнить в следующей последовательности:
Открыть новый проект и в качестве заголовка формы ввести текст “Задание 3”.
На форму поместить три кнопки: “Операция1”, “Операция2” и “Закрыть”. С помощью первых двух кнопок будет получаться информация о форме и помещенной на ней кнопке.
В интерфейсной части модуля после описания класса TForm1 поместить описание нового класса с именем TNew2Form:
TNew2Form=class(TForm)
class procedure ClassMessage(TypeClass:TCass);
end;
В этом классе введен метод класса ClassMessage (см. п.2.3), который будет формировать строку с требуемой информацией.
В исполнительной части модуля поместить описание этого метода:
class procedure TNew2Form.ClassMessage(TypeClass:TCass);
var s: string;
begin
s:=’Имя класса:’+ TypeClass.ClassName+#13#10’Предок:’+
TypeClass.ClassParent.ClassName;
Application.MessageBox(PChar(s),’Информация о классе’,MB_OK);
end;
В отличие от метода класса ClassMessage предыдущего задания в данном случае этому методу передается параметр-метакласс TypeClass, для которого и определяются имя класса и имя его непосредственного предка. При обращении к этому методу в качестве входного параметра можно использовать любой класс, и именно для него будет получена необходимая информация.
Для кнопки “Операция1” создать обработчик события, поместив в его тело следующий оператор:
TNew2Form.ClassMessage(Form1.ClassType);
Этот оператор вызывает метод класса ClassMessage, и ему передается тип формы Form1, который получается для объекта Form1 с помощью метода класса ClassType, определенного в классе TObject.
Для кнопки “Операция2” создать обработчик события, поместив в его тело следующий оператор:
TNew2Form.ClassMessage(Form1.Button1.ClassType);
Этот оператор передает методу класса ClassMessage тип кнопки, для которого и получается необходимая информация.
Подготовить стандартный обработчик событий для кнопки “Закрыть”.
Выполнить сохранение файлов проекта и модуля в текущем каталоге, провести компиляцию и запуск программы на выполнение.
Последовательно нажать кнопки “Операция1”, “Операция2”. При этом на экран должны быть выведены два окна с информацией о типе класса и его предка – либо формы, либо кнопки.
Завершить работу программы нажатием кнопки “Закрыть”.
Задание 4. Дополнить программу задания 1 описаниями класса TNew2Form и метода ClassMessage из программы задания 3. Поместить на форму программы задания 1 кнопки “Операция1” и “Операция2” и с помощью соответствующих обработчиков (по аналогии с обработчиком кнопки “Операция2” в задании 3) получить информацию о классах TStud и TProf.
Задание 5. Подготовить и выполнить программу построения графика функции Y=F(X), которая задается следующим образом:
0 <= X < 50 Y = 0,
50 <= X < 100 Y = X - 50,
100 <= X < 150 Y = 50,
150 <= X < 200 Y = -(X - 200),
200 <= X < 250 Y = 0.
Все размеры заданы в пикселах.
Решение задачи выполнить в следующей последовательности:
Открыть новый проект и в качестве заголовка формы ввести текст “Задание 4”.
На форму поместить кнопки: “Операция”, “Закрыть”, и компоненту Image (Изображение) для размещения на ней графика. Задать ширину компоненты в 300 пикселов, а высоту – в 150 пикселов. Выровнять компоненту относительно центральной вертикальной оси.
Для кнопки “Операция” подготовить текст программы обработчика, рисующего заданный график с использованием свойств и методов графических инструментов DELPHI, в частности объектов класса TCanvas Pen (перо), PenPos и методов LineTo и MoveTo12.
Выполнить сохранение файлов проекта и модуля в текущем каталоге, провести компиляцию и запуск программы на выполнение.
Завершить работу программы нажатием кнопки “Закрыть”.
4. Отчет по лабораторной работе
Отчет должен быть оформлен в соответствии с требованиями, что в лабораторной работе № 1.
