Міністерство освіти та науки України
Національний університет “Львівська Політехніка”
Кафедра АСУ
Розрахункова робота №2
з предмету
Об'єктно-орієнтоване програмування
на тему:
Створення проекту із застосуванням наслідування та поліморфізму”
Львів - 2009
Зміст
Індивідуальне завдання.
Тексти головного файлу проекту, файлів модулів та форм.
Аналіз отриманих результатів та висновки.
Індивідуальне завдання.
Створити проект Delphi для дослідження основних властивостей ООП – наслідування та поліморфізму:
1. Розробити компоненту на основі класу із полями у відповідності до варіанту. Передбачити конструктори (з параметрами та без), деструктор, селектори і модифікатори. Врахувати необхідність приховання даних.
2. Описати дочірні класи. Визначити та реалізувати необхідні поля та методи.
3. У дочірніх класах перевантажити або перевизначити операції (у відповідності до варіанту), які вводяться у батьківському класі як абстрактні методи (для кожного класу – з різною реалізацією).
4. Передбачити застосування поліморфного присвоєння та динамічного зв’язування.
5. Самостійно продумати і реалізувати спосіб демонстрації отриманих результатів.
Примітка. Опис компонент, класів та реалізацію методів виконати в окремих програмних модулях.
Варіант 12.
Клас “коло”: координати центра, радіус, колір, ознака візуалізації (чи показувати на екрані).
Дочірні класи:
“вписаний многокутник” (кількість сторін);
“описаний многокутник” (кількість сторін).
Перевантажити операції: інкременту – збільшення кількості сторін, зміна знаку – зміна ознаки візуалізації, перетворення типу: вписаний – описаний многокутник. Перевизначити метод “малювання”.
Тексти головного файлу проекту, файлів модулів та форм.
//--------- project1.dpr -------------
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
//--------- unit1.pas -------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Circle, StdCtrls;
type
TForm1 = class(TForm)
Circle1: TCircle;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
M:TOmnoh;
Z:TVmnoh;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Circle1:=TCircle.Create(Circle1.x,Circle1.y,Circle1.rad,1011,1);
Circle1.Draw(Canvas);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Circle1.SizeInc;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Circle1.SizeInc(5);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Circle1.SizeDec;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Circle1.SizeDec(5);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//Circle1:=TCircle.Create;
Circle1.x:=250;
Circle1.Y:=250;
Circle1.rad:=90;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
//M.n:=strtoint(Edit1.text);
M:=TOmnoh.Create(Circle1.x,Circle1.y,Circle1.rad,Circle1.kol,Circle1.viz);
M.Draw(canvas);
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
Z:=TVmnoh. Create(Circle1.x,Circle1.y,Circle1.rad,Circle1.kol,Circle1.viz);
Z.Draw(canvas);
end;
end
unit Circle;
interface
uses
SysUtils, Classes,Controls,Graphics, Windows;
type
TCircle = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
public
x,y,rad,kol,viz:integer;
constructor Create; overload;
constructor Create(x,y,rad,kol,viz:integer); overload;
procedure Draw(canvas:TCanvas); virtual;
procedure SizeInc; overload; virtual;
procedure SizeInc(d:integer); overload; virtual;
procedure SizeDec; overload; virtual;
procedure SizeDec(d:integer); overload; virtual;
{ Public declarations }
published
{ Published declarations }
end;
type
TVmnoh = class(TCircle)
private
protected
public
n:integer;
procedure Draw(canvas:TCanvas); override;
published
end;
type
TOmnoh = class(TCircle)
private
protected
public
n:integer;
procedure Draw(canvas:TCanvas); override;
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Additional', [TCircle]);
end;
{-----------------------------TCircle-----------------------------}
procedure TCircle.Draw(Canvas:TCanvas);
begin
canvas.Brush.color:=kol;
canvas.Ellipse(self.x-self.rad,self.y-self.rad,self.x+self.rad,self.y+self.rad);
End;
constructor TCircle.Create(x,y,rad,kol,viz:integer);
begin
self.x:=x;
self.y:=y;
self.rad:=rad;
self.kol:=kol;
self.viz:=viz;
end;
constructor TCircle.Create;
begin
self.x:=250;
self.y:=250;
self.rad:=90;
self.kol:=1111;
viz:=1;
end;
procedure TCircle.SizeInc;
begin
self.rad:=self.rad+1;
self.rad:=self.rad+1;
end;
procedure TCircle.SizeInc(d:integer);
begin
self.rad:=self.rad+d;
self.rad:=self.rad+d;
end;
procedure TCircle.SizeDec;
begin
self.rad:=self.rad-1;
self.rad:=self.rad-1;
end;
procedure TCircle.SizeDec(d:integer);
begin
self.rad:=self.rad-d;
self.rad:=self.rad-d;
end;
{-----------------------------TVmnoh-----------------------------}
procedure TVmnoh.Draw(canvas:TCanvas);
var m:array[1..6] of TPoint;
r,i:integer;
begin
n:=6;
r:=round(rad/(cos(3.14/n)));
for i:=1 to n do begin
// r:=round(rad/(cos(3.14/n)));//R=r*(cos(2*3.14*i)/n)
m[i].X:=round(x+r*cos((2*3.14*i)/n));
m[i].Y:=round(y+r*sin((2*3.14*i)/n));
end;
canvas.Brush.Color:=clRed;
canvas.Polygon(m);
end;
{-----------------------------TOmnoh-----------------------------}
procedure TOmnoh.Draw(canvas:TCanvas);
var m:array[1..6] of TPoint;
i:integer;
begin
n:=6;
for i:=1 to n do begin
m[i].X:=round(x+rad*cos((2*3.14*i)/n));
m[i].Y:=round(y+rad*sin((2*3.14*i)/n));
end;
canvas.Brush.Color:=clRed;
canvas.Polygon(m);
end;
end.
Аналіз отриманих результатів та висновки.
Висновок: Під час виконання розрахункової я поглибив свої знання з
курсу »Обєктно орієнтовне програмуваня».