ВУЗ: Университет управления «ТИСБИ»
Категория: Учебное пособие
Дисциплина: Объектно-ориентированное программирование
Добавлен: 20.10.2018
Просмотров: 1819
Скачиваний: 9
public Circle (int ax, int ay, int ar)
{ Center = new Point (ax, ay); r = ar;} // создание объекта-точки
public Circle (Point aCenter, int ar)
{ Center = aCenter; r = ar;} // использование существующей точки
public void SetRad (int ar) {…}
public int GetRad ( ) {…}
public void Show( ) { // прорисовка окружности с использованием
// методов доступа Center.GetX( ) и Center.GetY( ) }
public void MoveTo (int ax, int ay)
{ Show( ); Center.SetXY(ax, ay); Show( ); }
};
Схема взаимодействия объектов:
Аналогично можно определить составной класс прямоугольников в
одном из двух вариантов:
через координаты верхнего левого угла, ширину и высоту (одно
объектное свойство-указатель на точку)
через координаты верхнего левого и правого нижнего углов (два
объектных свойства-указателя на две точки)
TRect = сlass // первый способ
private
TopLeft : TPoint; // объектное свойство для координат угловой точки
h, w : integer;
public
координата х
координата у
объект-окружность
объект-точка
объектное свойство-указатель
на объект-точку
радиус
constructor Create (ax, ay, ah, aw : integer); overload;
constructor Create (aTL : TPoint; ah, aw : integer); overload;
// не забыть: методы доступа к полям h и w
procedure Show; // реализация - через методы доступа
procedure MoveTo (ax, ay : integer); // аналогично
end;
Реализация конструкторов:
constructor TRect.Create (ax, ay, ah, aw : integer);
begin
TopLeft := TPoint.Create (ax, ay); // создание объекта-точки
h := ah; w := aw;
end;
constructor TCircle.Create (aTL : Tpoint; ah, aw : integer);
begin
TopLeft := aTL; // использование ранее созданной точки
h := ah; w := aw;
end;
сlass Rect {
private Point TopLeft; // объектное свойство для координат угла
private int h, w;
public Rect (int ax, int ay, int ah, int aw)
{ TopLeft = new Point (ax, ay); // создание объекта для угловой точки
h = ah; w = aw;}
public Rect (Point aTL, int ah, int aw) // использование объекта-точки
{ TopLeft = aTL; h = ah; w = aw;}
public . . . . . // методы доступа к полям h и w
public void Show( ) { // прорисовка прямоугольника с использованием
// методов доступа TopLeft.GetX( ), TopLeft.GetY( ) }
public void MoveTo (int ax, int ay)
{ Show( ); TopLeft.SetXY(ax, ay); Show( ); }
};
После создания классов для окружностей и прямоугольников можно
легко собирать объекты этих классов в рамках более сложных графических
объектов. Например, можно объединить окружность и прямоугольник в
рамках составного объекта «Простая деталь», причем практически вся
функциональность такого объекта будет обеспечена ранее реализованными
методами соответствующих классов. Для этого достаточно в класс «Простая
деталь» включить два объектных свойства для адресации объектов
«Окружность» и «Прямоугольник».
TDetal = сlass
private
Circ : TCircle; // поле для связи с объектом-окружностью
Rect : TRect; // поле для связи с объектом-прямоугольником
public
constructor Create (aCx, aCy, ar, aRx, aRy, ah, aw : integer); overload;
constructor Create (aCir : TCircle; aRect : TRect); overload;
procedure Show;
procedure MoveTo (ax, ay : integer);
end;
Реализация методов:
constructor TDetal.Create (aCx, aCy, ar, aRx, aRy, ah, aw : integer);
begin
Circ := TCircle.Create (aCx, aCy, ar); // создание объекта-окружности
Rect := TRect.Create (aRx, aRy, ah, aw); //создание прямоугольника
end;
constructor TDetal.Create (aCir : TCircle; aRect : TRect);
begin
Circ := aCir; // использование ранее созданной окружности
Rect := aRect; // использование прямоугольника
end;
procedure TDetal.Show; // аналогично - метод перемещения
begin
Circ.Show; Rect.Show; // и все, больше ничего не надо!
end;
сlass Detal {
private Circle circ; // поле для связи с объектом-окружностью
private Rect rect; // поле для связи с объектом-прямоугольником
public Detal (int aCx, int aCy, int ar, int aRx, int aRy, int ah, int aw)
{ circ = new Circle (aCx, aCy, ar); // создание окружности
rect = new Rect (aRx, aRy, ah, aw);} // и прямоугольника
public Detal (Circle aCirc, Rect aRect) // использование
{ circ = aCirc; rect = aRect;} // существующих объектов
public void Show( ) { circ.Show( ); rect.Show( ); } // очень просто!
public void MoveTo (int ax, int ay)
{ circ.MoveTo(ax, ay); rect.MoveTo(ax, ay); }
};
Схема взаимодействия объектов при выполнении программы:
объект-окружность
объекты-точки
координата х
координата у
объектное
свойство-точка
радиус
объектное свойство
« окружность»
объектное свойство
«прямоугольник»
объект «Деталь»
Ниже приводятся фрагменты демонстрационных программ, в которых
разными способами создаются объекты описанных выше классов.
var
MyPoint1, MyPoint2 : TPoint;
MyCirc1, MyCirc2 : TCircle;
MyRect : TRect;
MyDetal : TDetal;
begin
MyCirc1 := TCircle.Create (100, 100, 50); // создание окружности «с нуля»
MyPoint1 := TPoint.Create (100, 100); // создание точки
MyCirc2 := TCircle.Create (MyPoint1, 50); // окружность: второй способ
MyPoint2 := TPoint.Create (300, 200); // еще одна точка
MyRect := TRect.Create (MyPoint2, 200, 100); // прямоугольник
MyDetal := TDetal.Create (100, 100, 50, 50, 50, 200, 300); // деталь «с нуля»
MyDetal := TDetal.Create (MyCirc1, MyRect); // используем созданные
MyDetal.Show;
MyDetal.MoveTo (200, 200);
Point MyPoint1, MyPoint2;
Circle MyCirc1, MyCirc2;
Rect MyRect;
координата х
координата у
объектное
свойство-точка
объектное
свойство-точка
координата х
координата у
объект-прямоугольник