
- •Лабораторная работа № 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
2.7. Полиморфизм и виртуальные методы
Полиморфизм — это возможность использовать одинаковые имена для методов, входящих в различные классы.
Концепция полиморфизма обеспечивает при применении метода к объекту использование именно того метода, который соответствует классу объекта.
Пусть определены три класса, один из них является базовым для двух других:
type
// базовый класс
TPerson=class
fname:string;{ имя }
constructor Create(name:string);
function info: string; virtual;
end;
// производный от базового TPerson
TStud=class(TPerson)
fgr:integer; { номер группы }
constructor Create(name:string;gr:integer);
function info: string; override;
end;
// производный от базового TPerson
TProf=class(TPerson)
fdep:string; { название кафедры }
constructor Create(name:string;dep:string);
function info: string; override;
end;
В каждом из этих классов определен метод info. В базовом классе с помощью директивы virtual метод info объявлен виртуальным. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. В каждом дочернем классе определен свой метод info, который замещает соответствующий метод родительского класса. При этом метод порожденного класса, замещающий виртуальный метод родительского класса, помечается директивой override. Ниже приведено определение метода info для каждого класса.
function TPerson.info:string;
begin
result:=’’;
end;
function TStud.info:string;
begin
result:=fname+' гp.'+IntTostr(fgr);
end;
function TProf.info:string;
begin
result:=fname+'каф.'+fdep;
end;
В программе список людей можно представить массивом объектов класса TPerson, например
1ist:array[1..SZL] of TPerson; // SZL — размер массива
Здесь следует отметить, что объект list— это массив указателей. Объявить подобным образом список можно потому, что Object Pascal позволяет указателю на родительский класс присвоить значение указателя на дочерний класс. Поэтому элементами массива list могут быть как объекты класса TStud, так и объекты класса TProf.
Вывод списка можно осуществить применением метода info к элементам массива, например, так:
st:=’’;
for i:=l to SZL do
if list[i] <> NIL
then st:=st+info.list[i]+#13;
ShowMessage(st);
Во время работы программы каждый элемент массива может содержать как объект типа TStud, так и объект типа TProf. Концепция полиморфизма обеспечивает возможность применения к объекту именно того метода, который соответствует типу объекта.
Задание 1. Подготовить и выполнить программу, в которой формируется и выводится список студентов и преподавателей с использованием рассмотренных выше объявлений классов TPerson, TStud и TProf.
Решение задачи выполнить в следующей последовательности:
Открыть новый проект командой главного меню File|New Application и в качестве заголовка ввести текст “Студенты и преподаватели”.
Создать главную форму, поместив на нее со страницы Standard следующие компоненты:
две компоненты типа Edit, разместив их в правой верхней части окна формы. Исходное содержимое компонент удалить. Первая компонента будет использоваться для ввода фамилии студента или преподавателя, а вторая – для ввода номера группы или названия кафедры;
слева от каждой строки ввода поместить по компоненте типа Label. Первой метке задать значение “Фамилия”, а второй – “Группа или кафедра’;
в левой нижней части формы поместить компоненту типа GroupBox без названия, задав ей размеры, соответствующие примерно 1/5 площади формы;
внутри компоненты GroupBox поместить две компоненты типа RadioButton (переключатели) с названиями: первая – “студент”, вторая – “преподаватель”;
справа от компоненты GroupBox поместить две кнопки с названиями “Добавить в список” и “Вывести список”.
В интерфейсной части модуля ввести следующие разделы:
раздел описания типов (помимо основного, автоматически создаваемого средой), в котором разместить описания классов TPerson, TStud и TProf из п. 2.7;
раздел констант, задав в нем максимальный размер списка-массива элементов типа TPerson (не более 10-12);
в раздел var добавить описание массива объектов класса TPerson (см. п. 2.7) и описание переменной, определяющей текущее число людей в списке.
В исполнительную часть модуля поместить описания следующих методов:
метода класса TPerson, обеспечивающего создание объекта этого класса и доступ к его свойствам (см. п. 2.4);
методов классов TStud и TProf c использованием обращения к конструктору родительского класса TPerson (см. п. 2.5);
метода info для классов TPerson, TStud и TProf (см. п. 2.7).
В эту же часть модуля поместить описания следующих обработчиков:
обработчика, который запускается нажатием кнопки “Добавить в список”. Он должен в зависимости от состояния переключателей “студент”, “преподаватель” формировать массив элементов класса TStud или TProf. При этом фамилии должны вводиться в первой строке ввода, а номер группы или название кафедры – во второй. Ввод должен выполняться в соответствии с заданным максимальным размером списка;
обработчика, который выполняется в результате нажатия на кнопку “Вывести список” Он должен применять метод info к каждому объекту списка и выводить список (см. п. 2.7).
Выполнить сохранение и компиляцию файла программы.
Проверить работу программы в двух случаях:
формирование и вывод списка студентов (на примере своей группы);
формирование и вывод списка преподавателей кафедры (например, ЭВМ).