Объектно-ориентированное программирование(ооп)
Методические указания к лабораторной работе №1
Задание.
Имеется 4 вида фигуры: точка, круг, квадрат и правильный треугольник. Требуется создать программу, которая содержала бы список из выше приведенных фигур и рисовала бы их на экране. Каждый экземпляр какого-либо вида фигуры обладает координатами центра, относительно которого экземпляр будет рисоваться. Если список не пуст, то один элемент списка обязательно должен быть активным, то есть:
1. при отображении он должен каким-либо образом выделяться
2. с данным элементом пользователь может проводить различные операции:
а. удалить
b. подвинуть на экране (влево, вправо, вверх, вниз)
с. повернуть на какой-либо угол (для квадрата и треугольника)
d. изменить размер
e. изменить цвет
Программа должна позволять пользователю выбирать вид фигуры и создавать фигуру текущего вида, которая будет добавляться в список.
Первое, что требуется, - это правильно создать дерево иерархии классов. Иными словами, каждый вид фигуры (точка, круг, квадрат и правильный треугольник) - это класс. Самая простая фигура - это точка, она и будет базовым классом. Логично предположить, что дочерним классом для точки будет круг. От класса Круг можно перейти к классу Правильный многоугольник, потомками которого будут классы Квадрат и Правильный треугольник.
Наше дерево:
TPset
|
TCircle
|
TRightFigure
/ \
TSquare Triangle
Опишем базовый класс.
1. Класс Точка (TPset)
Поля: координаты, цвет
Методы: создать точку - конструктор, удалить - деструктор, нарисовать, подвинуть, показать и стереть.
TPset = object
private { приватные поля }
X : integer; { координата X }
Y : integer; { координата Y }
Color : integer; { цвет }
public
constructor Create(aX, aY, aColor : integer); {создать}
procedure Paint(aColor : integer); {нарисовать}
procedure Show; {показать}
procedure Hide; {стереть}
destructor Destroy; {удалить}
procedure Shift(dX, dY : integer); {подвинуть}
end;
Так как данный класс базовый, то мы должны определить в классе TPset виртуальные методы и поля для наследуемых классов.
Поля :размер и угол
Методы для полей : установить размер фигуры и повернуть ее.
Виртуальные методы - методы, которые переопределяются в наследуемых классах. К таким методам в нашем случае относится рисование фигуры, то есть:
type
PPset = ^TPset;
TPset = object
private { приватные поля и методы }
X : integer; { координата X }
Y : integer; { координата Y }
Color : integer; { цвет }
Size : integer; { размер }
Angle : integer; { угол }
{!!!} procedure Paint(aColor : integer); virtual; {нарисовать }
publiс
procedure Show; {показать }
procedure Hide {стереть }
constructor Create(aX, aY, aColor :integer); {создать }
destructor Destroy; {удалить }
procedure Shift(dX, dY : integer); {подвинуть }
procedure ChangeSize(ToLarge : boolean);
{изменить размер }
procedure Rotate(aAngle : Integer); {повернуть }
end;
2. Класс Круг
PCircle = ^TCircle;
TCircle = object(TPset)
private { приватные поля методы }
{!!!} procedure Paint(aColor : integer); virtual; {нарисовать }
public
constructor Create(aX, aY, aColor, aSize: integer); { создать }
end;
3. Класс Правильная Фигура
PRightFigure = ^TRightFigure;
TRightFigure = object(TCircle)
private { приватные поля методы }
SumSides : integer;
{!!!} procedure Paint(aColor : integer); virtual; {нарисовать }
public
constructor Create(aX, aY, aColor, aSize, aSumSides: integer); {создать }
end;
4. Класс Квадрат
PSquare = ^TSquare
TSquare = object(TRightFigure)
public
constructor Create(aX, aY, aColor, aSize : integer); {создать }
end;
5. Класс Правильнный треугольник
PTriangle = ^TTriangle;
TTriangle = object(TRightFigure)
public
constructor Create(aX, aY, aColor, aSize : integer); {создать }
end;