- •Лабораторная работа № 1
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 2
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 3
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 4 понятие класса
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 5 статические методы класса
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 6 механизм наследования
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 7 виртуальные методы класса
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 8
- •Теоретические сведения
- •Программа работы
- •Контрольные вопросы
- •Библиографический список
- •Содержание
Программа работы
Создать новый проект и сохранить все его файлы в папке с именем ‘…\Лабораторная работа № 8’.
Создать новый модуль Unit2 и в его секции interface объявить три класса с любыми именами, которые будут содержать только один раздел по умолчанию.
В первом классе объявить одно поле и два метода: виртуальный и динамический.
В секции implementation модуля Unit2 определить эти методы так, чтобы первый присваиваивал полю имя класса, а второй возвращал значение этого поля.
Подключить модуль Unit2 к модулю главной формы Unit1 и создать на ней компоненты RadioGroup1 и Edit1 – Edit3.
В обработчике выбора кнопок компонента RadioGroup1 объявить объектную переменную с типом первого класса, создать объект в зависимости от выбора кнопки в компонентеRadioGroup1 с текущем типом первого, второго или третьего класса. Вывести в компоненты Edit1 имя родительского класса, в Edit2 – имя текущего класса, а в Edit3 – возвращаемое значение динамического метода. Освободить память под объект и запустить программу на выполенение.
Записать в отчет объявленные классы, определенные методы с их таблицами VMTиDMT, обработчик нажатия кнопокRadioGroup1 и результаты выполнения программы.
Переопределить во втором классе виртуальный и динамические методы с помощью директивы overrideтак, чтобы они присваивали полю и возвращали имя второго класса.
Запустить программу на выполенние и записать в отчет результат ее работы, переопределенные методы и их таблицы VMTиDMT.
Повторить пункт 9 при условии, что объектная переменная в обработчике будет иметь заданный тип второго класса.
Повторить пункты 8 – 9 для случая, когда виртуальный и динамический методы переопределяются директивами vertualиdynamic.
Модифицировать и протестировать программу нахождения площади и периметра круга или квадрата с применением виртуальных методов и их переопределения в классах наследниках.
Записать в отчет родительский класс TShapeи его наследниковTCircleиTsquare, а также обработчик нажатия компонентаSphape1.
Контрольные вопросы
Объяснить на примерах различие в переопределении виртуальных методов директивами virtualиoverride.
Объяснить на примерах различие в переопределении динамических методов директивами dynamicиoverride.
Перечислить достоинства и недостатки виртуальных и динамических методов.
Записать таблицы VMTслeдующих классов:
TFruit = class(TObject) procedure Juice; virtual; procedure Jam; dynamic; end; |
TApple = class(TFruit) procedure Jam; reintroduce; dynamic; procedure Preserve; virtual; end; |
TAnis = class(TApple) procedure Juice; reintroduce; virtual; procedure Preserve; override; End; |
Записать таблицы DMTклассов, объявленных в предыдущем задании.
Записать методы каких классов, объявленных в предыдущем задании,. будут вызваны при следующих обращениях:
Var Fruit: TFruit; Begin Fruit := TAnis.Create; Fruit.Juice; Fruit.Jam; Fruit.Preserve; Fruit.Free; end; |
Var Fruit: TFruit; Begin Fruit := TApple.Create; Fruit.Juice; Fruit.Jam; Fruit.Preserve; Fruit.Free; end; |
Записать методы каких классов, объявленных в предыдущем задании,. будут вызваны при следующих обращениях:
Var Fruit: TApple; Begin Fruit := TAnis.Create; Fruit.Juice; Fruit.Jam; Fruit.Preserve; Fruit.Free; end;
|
Var Fruit: TFruit; Begin Fruit := TAnis.Create; Fruit.Juice; Fruit.Jam; Fruit.Preserve; Fruit.Free; end;
|
Найти ошибки, допущенные при объявлении следующих классов.
TFruit = class(TObject) procedure Juice;virtual; procedure Jam; dynamic; end;
|
TApple = class(TObject) Procedure Jam(S: String); dynamic; reintroduce; function Preserve;virtual; end; |
TAnis = class(TApple) procedure Juice; reintroduce; virtual; procedure Preserve(S: String); override; End; |
Записать код программы нахождения площади и периметра различных фигур при использовании механизма наследования и полиморфизма. Объяснить достоинства и недостатки различных методов.
Записать изменения, которые необходимо внести в код программы для нахождения площади и периметра различных фигур при добавлении к ним равностороннего прямоугольника.