Лабораторная работа №15
Лабораторная работа № 15.
Программная реализация принципов наследования, полиморфизма и разработка конструкторов/деструкторов
Цель работы
Изучение принципов объектно-ориентированного программирования: наследования, полиморфизма, разработка конструкторов и деструкторов.
Теоретические сведения
Наследование — механизм создания нового класса на основе существующего, при котором новый класс перенимает свойства и методы базового класса.
Полиморфизм — возможность объектов с одинаковым интерфейсом иметь различную реализацию.
Конструкторы — специальные методы для создания и инициализации объектов.
Деструкторы — методы для корректного удаления объектов.
Задания
Задание 1. Реализация наследования
Создать иерархию классов:
· Базовый класс Animal
· Производный класс Dog
· Производный класс Cat
pascal
type
Animal = class
private
name: string;
public
constructor Create(n: string);
procedure Speak; virtual;
end;
Dog = class(Animal)
public
constructor Create(n: string);
procedure Speak; override;
end;
Cat = class(Animal)
public
constructor Create(n: string);
procedure Speak; override;
end;
constructor Animal.Create(n: string);
begin
name := n;
end;
procedure Animal.Speak;
begin
writeln('Животное издает звук');
end;
constructor Dog.Create(n: string);
begin
inherited Create(n);
end;
procedure Dog.Speak;
begin
writeln('Гав-гав');
end;
constructor Cat.Create(n: string);
begin
inherited Create(n);
end;
procedure Cat.Speak;
begin
writeln('Мяу-мяу');
end;
Задание 2. Реализация полиморфизма
Создать систему классов с переопределением методов:
· Базовый класс Shape
· Производный класс Circle
· Производный класс Rectangle
pascal
type
Shape = class
public
procedure Draw; virtual;
end;
Circle = class(Shape)
private
radius: real;
public
constructor Create(r: real);
procedure Draw; override;
end;
Rectangle = class(Shape)
private
width, height: real;
public
constructor Create(w, h: real);
procedure Draw; override;
end;
procedure Shape.Draw;
begin
writeln('Рисуем фигуру');
end;
constructor Circle.Create(r: real);
begin
radius := r;
end;
procedure Circle.Draw;
begin
writeln('Рисуем круг радиусом ', radius);
end;
constructor Rectangle.Create(w, h: real);
begin
width := w;
height := h;
end;
procedure Rectangle.Draw;
begin
writeln('Рисуем прямоугольник ', width, 'x', height);
end;
Задание 3. Разработка конструкторов и деструкторов
Создать класс с различными типами конструкторов:
pascal
type
Person = class
private
name: string;
age: integer;
public
constructor Create; overload;
constructor Create(n: string); overload;
constructor Create(n: string; a: integer); overload;
destructor Destroy; override;
procedure ShowInfo;
end;
constructor Person.Create;
begin
name := 'Неизвестно';
age := 0;
end;
constructor Person.Create(n: string);
begin
name := n;
age := 0;
end;
constructor Person.Create(n: string; a: integer);
begin
name := n;
age := a;
end;
destructor Person.Destroy;
begin
writeln('Объект уничтожен');
inherited;
end;
procedure Person.ShowInfo;
begin
writeln('Имя: ', name, ', Возраст: ', age);
end;
Порядок выполнения работы
1. Изучить теоретические сведения.
2. Разработать алгоритмы для каждого задания.
3. Написать программы с учетом требований к реализации ООП.
4. Протестировать программы на различных наборах данных.
5. Оформить отчет.
Требования к отчету
1. Титульный лист
2. Цель работы
3. Теоретическая часть
4. Листинги программ
5. Результаты тестирования
6. Ответы на контрольные вопросы
Контрольные вопросы
1. Что такое наследование в ООП?
2. Какие виды наследования существуют?
3. Что такое полиморфизм и для чего он используется?
4. Какие модификаторы доступа существуют в Pascal?
5. Что такое конструктор и для чего он нужен?
6. Какие типы конструкторов существуют?
7. Что такое деструктор и когда он вызывается?
8. Как происходит наследование конструкторов?
9. Что такое виртуальные методы?
10. Как реализуется переопределение методов?
11. В чем разница между абстрактным и конкретным классом?
12. Как работает механизм динамического связывания?
13. Какие проблемы решает инкапсуляция?
14. Как правильно организовать иерархию классов?
15. Какие существуют способы создания объектов?
16. Как происходит управление памятью при работе с объектами?
17. Что такое интерфейс класса?
18. Как реализовать множественное наследование?
19. В чем преимущества использования ООП?
20. Какие существуют ограничения при работе с классами?