Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 1.doc
Скачиваний:
33
Добавлен:
13.02.2015
Размер:
689.66 Кб
Скачать

Программа работы

  1. Создать новый проект и сохранить все его файлы в папке с именем ‘…\Лабораторная работа № 8’.

  2. Создать новый модуль Unit2 и в его секции interface объявить три класса с лю­быми именами, которые будут содержать только один раздел по умолчанию.

  3. В первом классе объявить одно поле и два метода: виртуальный и динамический.

  4. В секции implementation модуля Unit2 определить эти методы так, чтобы первый присваиваивал полю имя класса, а второй возвращал значение этого поля.

  5. Подключить модуль Unit2 к модулю главной формы Unit1 и создать на ней компоненты RadioGroup1 и Edit1 – Edit3.

  6. В обработчике выбора кнопок компонента RadioGroup1 объявить объектную переменную с типом первого класса, создать объект в зависимости от выбора кнопки в компонентеRadioGroup1 с текущем типом первого, второго или третьего класса. Вывести в компоненты Edit1 имя родительского класса, в Edit2 – имя текущего класса, а в Edit3 – возвращаемое значение динамического метода. Освобо­дить память под объект и запустить программу на выполенение.

  7. Записать в отчет объявленные классы, определенные методы с их таблицами VMTиDMT, обработчик нажатия кнопокRadioGroup1 и результаты выполнения программы.

  8. Переопределить во втором классе виртуальный и динамические методы с помощью директивы overrideтак, чтобы они присваивали полю и возвращали имя второго класса.

  9. Запустить программу на выполенние и записать в отчет результат ее работы, переопределенные методы и их таблицы VMTиDMT.

  10. Повторить пункт 9 при условии, что объектная переменная в обработчике будет иметь заданный тип второго класса.

  11. Повторить пункты 8 – 9 для случая, когда виртуальный и динамический методы переопределяются директивами vertualиdynamic.

  12. Модифицировать и протестировать программу нахождения площади и периметра круга или квадрата с применением виртуальных методов и их переопределения в классах наследниках.

  13. Записать в отчет родительский класс TShapeи его наследниковTCircleиTsquare, а также обработчик нажатия компонентаSphape1.

Контрольные вопросы

  1. Объяснить на примерах различие в переопределении виртуальных методов директивами virtualиoverride.

  2. Объяснить на примерах различие в переопределении динамических методов директивами dynamicиoverride.

  3. Перечислить достоинства и недостатки виртуальных и динамических методов.

  4. Записать таблицы 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;

  1. Записать таблицы DMTклассов, объявленных в предыдущем задании.

  2. Записать методы каких классов, объявленных в предыдущем задании,. будут вызваны при следующих обращениях:

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;

  1. Записать методы каких классов, объявленных в предыдущем задании,. будут вызваны при следующих обращениях:

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;

  1. Найти ошибки, допущенные при объявлении следующих классов.

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;

  1. Записать код программы нахождения площади и периметра различных фигур при использовании механизма наследования и полиморфизма. Объяснить достоинства и недостатки различных методов.

  2. Записать изменения, которые необходимо внести в код программы для нахождения площади и периметра различных фигур при добавлении к ним равностороннего прямоугольника.