Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра АСУ
Розрахункова робота №2
на тему:
«Створення проекту із застосуванням
наслідування та поліморфізму»
з дисципліни
«Об'єктно-орієнтоване програмування»
Львів – 2010 р.
Індивідуальне завдання
Варіант 3.
Створити:
Клас “вікно”: координати, розміри, одиниці виміру для координат, одиниці виміру для розмірів.
Дочірні класи:
“вікно у будинку” (матеріал, товщина, спосіб відкривання, стан – відкрите, закрите);
“ вікно у програмі” (стиль, наявність дочірніх вікон, стан – видиме, невидиме).
Перевантажити операції: порівняння – за координатами, розмірами та матеріалом або стилем, інкременту – як зміну матеріалу або стилю, зміни знаку – як зміну стану. Перевизначити метод “малювання”.
Тексти головного файлу проекту, файлів модулів та форм
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, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
RadioGroup1: TRadioGroup;
GroupBox1: TGroupBox;
Label1: TLabel;
ComboBox1: TComboBox;
Label2: TLabel;
ComboBox2: TComboBox;
Button1: TButton;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
Button2: TButton;
Label6: TLabel;
Label7: TLabel;
ComboBox5: TComboBox;
Label8: TLabel;
ComboBox6: TComboBox;
Button3: TButton;
Label9: TLabel;
GroupBox2: TGroupBox;
Label10: TLabel;
Button4: TButton;
Label11: TLabel;
RadioGroup2: TRadioGroup;
Label12: TLabel;
GroupBox3: TGroupBox;
Label13: TLabel;
RadioGroup3: TRadioGroup;
Button5: TButton;
Label14: TLabel;
GroupBox4: TGroupBox;
Button6: TButton;
Label15: TLabel;
procedure RadioGroup1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TWindow=class
x:integer;//координати (x)
y:integer;//координати (y)
height:integer;//розмір (висота)
width_window:integer;//розмір (ширина)
px:String;//одиниці виміру для координат
sm:String;//одиниці виміру для розмірів
constructor Create;overload;
function Compare(height1,width1,height2,width2:Integer):String;overload;
function Compare(height1,width1:real;height2,width2:Integer):String;overload;
function Compare(height1,width1:integer;height2,width2:real):String;overload;
function Compare(height1,width1,height2,width2:Real):String;overload;
function Size(size1,size2,size3,size4:integer):String;overload;
function Size(size1,size2,size3,size4:real):String;overload;
function Size(size1,size2:real;size3,size4:integer):String;overload;
function Size(size1,size2:integer;size3,size4:real):String;overload;
function Style(style1,style2:integer):String;overload;
function Style(style1,style2:real):String;overload;
function Style(style1:real;style4:integer):String;overload;
function Style(style1:integer;style4:real):String;overload;
function Increment:integer;overload;
function Increment(increment:integer):integer;overload;
function Increment(increment:real):integer;overload;
function Stan:integer;overload;
function Stan(znak:integer):integer;overload;
constructor Create(x1,y1,height1,width_window1:integer; sm1,px1:string);overload;
destructor Destroy;override;
function Draw:String;virtual;abstract;
end;
type TWindowHome=class(TWindow)
material:String;//матеріал
width_home:integer;//товщина
method_open:String;//спосіб відкривання
status_home:String;//стан - відкрите, закрите
constructor Create;
function Draw:String;override;
end;
type TWindowProgram=class(TWindow)
style:String;//стиль
home_window:String;//наявність дочірніх вікон
status_program:String;//стан - видиме, невидиме
constructor Create;
end;
var
Form1: TForm1;
Win:TWindow;
WinHome:TWindowHome;
WinProg:TWindowProgram;
implementation
constructor TWindow.Create;
begin
x:=0;
y:=0;
height:=0;
width_window:=0;
px:='px';
sm:='sm';
end;
constructor TWindow.Create(x1,y1,height1,width_window1:integer; sm1,px1:string);
begin
x:=x1;
y:=y1;
height:=height1;
width_window:=width_window1;
px:=px1;
sm:=sm1;
end;
destructor TWindow.Destroy;
begin
MessageBoxA(0,'Виклик деструктора','Деструктор',MB_OK);
inherited;
end;
constructor TWindowHome.Create;
begin
material:='дерево';//матеріал
width_home:=100;//товщина
method_open:='автоматичний';//спосіб відкривання
status_home:='відкрите';//стан - відкрите, закрите
end;
constructor TWindowProgram.Create;
begin
style:='Класичний';
home_window:='Немає';//наявність дочірніх вікон
status_program:='Невидиме';//стан - видиме, невидиме
end;
function TWindowHome.Draw:String;
begin
Result:='Перевизначення методу TWindowHome.Draw';
end;
function TWindow.Compare(height1,width1,height2,width2:Integer):String;
begin
Result:='Метод перевантажено. Координати: '+ IntToStr(height1)+', '+IntToStr(width1)+', '+IntToStr(height2)+', '+IntToStr(width2);
end;
function TWindow.Compare(height1,width1:Real;height2,width2:Integer):String;
begin
Result:='Метод перевантажено. Координати: '+ FloatToStr(height1)+', '+FloatToStr(width1)+', '+IntToStr(height2)+', '+IntToStr(width2);
end;
function TWindow.Compare(height1,width1:integer;height2,width2:real):String;
begin
Result:='Метод перевантажено. Координати: '+ intToStr(height1)+', '+intToStr(width1)+', '+floatToStr(height2)+', '+floatToStr(width2);
end;
function TWindow.Compare(height1,width1,height2,width2:real):String;
begin
Result:='Метод перевантажено. Координати: '+ FloatToStr(height1)+', '+FloatToStr(width1)+', '+FloatToStr(height2)+', '+FloatToStr(width2);
end;
function TWindow.Size(size1,size2,size3,size4:integer):String;
begin
Result:='Метод перевантажено. Розміри: '+ intToStr(size1)+'x'+intToStr(size2)+', '+intToStr(size3)+'x'+intToStr(size4);
end;
function TWindow.Size(size1,size2,size3,size4:real):String;
begin
Result:='Метод перевантажено. Розміри: '+ floatToStr(size1)+'x'+floatToStr(size2)+', '+floatToStr(size3)+'x'+floatToStr(size4);
end;
function TWindow.Size(size1,size2:real;size3,size4:integer):String;
begin
Result:='Метод перевантажено. Розміри: '+ floatToStr(size1)+'x'+floatToStr(size2)+', '+intToStr(size3)+'x'+intToStr(size4);
end;
function TWindow.Size(size1,size2:integer;size3,size4:real):String;
begin
Result:='Метод перевантажено. Розміри: '+ intToStr(size1)+'x'+intToStr(size2)+', '+floatToStr(size3)+'x'+floatToStr(size4);
end;
function TWindow.Style(style1,style2:integer):String;
begin
Result:='Метод перевантажено. Стиль: Windows XP & Windows XP';
end;
function TWindow.Style(style1,style2:real):String;
begin
Result:='Метод перевантажено. Стиль: Windows Vista & Windows Vista';
end;
function TWindow.Style(style1:real;style4:integer):String;
begin
Result:='Метод перевантажено. Стиль: Windows Vista & Windows XP';
end;
function TWindow.Style(style1:integer;style4:real):String;
begin
Result:='Метод перевантажено. Стиль: Windows XP & Windows Vista';
end;
function TWindow.Increment():integer;
begin
Result:=0;
end;
function TWindow.Increment(increment:integer):integer;
begin
Result:=1;
end;
function TWindow.Increment(increment:real):integer;
begin
Result:=2;
end;
function TWindow.Stan:integer;
begin
Result:=0;
end;
function TWindow.Stan(znak:integer):integer;
begin
Result:=-1;
end;
{$R *.dfm}
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex=0 then
begin
Memo1.Clear;
Win:=TWindow.Create;
Memo1.Lines.Add('Конструктор TWindow (без параметрів):');
Memo1.Lines.Add('Координата Х: '+IntToStr(Win.x));
Memo1.Lines.Add('Координата Y: '+IntToStr(Win.y));
Memo1.Lines.Add('Розмір (висота): '+IntToStr(Win.height));
Memo1.Lines.Add('Розмір (ширина): '+IntToStr(Win.width_window));
Memo1.Lines.Add('Одиниці виміру для координат: '+Win.px);
Memo1.Lines.Add('Одиниці виміру для розмірів: '+Win.sm);
Win.Destroy;
end
else
if RadioGroup1.ItemIndex=1 then
begin
Memo1.Clear;
Win:=TWindow.Create(1,2,3,4,'sm','px');
Memo1.Lines.Add('Конструктор TWindow (без параметрів):');
Memo1.Lines.Add('Координата Х: '+IntToStr(Win.x));
Memo1.Lines.Add('Координата Y: '+IntToStr(Win.y));
Memo1.Lines.Add('Розмір (висота): '+IntToStr(Win.height));
Memo1.Lines.Add('Розмір (ширина): '+IntToStr(Win.width_window));
Memo1.Lines.Add('Одиниці виміру для координат: '+Win.px);
Memo1.Lines.Add('Одиниці виміру для розмірів: '+Win.sm);
Win.Destroy;
end
else
if RadioGroup1.ItemIndex=2 then
begin
Memo1.Clear;
WinHome:=TWindowHome.Create;
Memo1.Lines.Add('Конструктор TWindowHome:');
Memo1.Lines.Add('Матеріал: '+WinHome.material);
Memo1.Lines.Add('Товщина: '+IntToStr(WinHome.width_home));
Memo1.Lines.Add('Спосіб відкривання: '+WinHome.method_open);
Memo1.Lines.Add('Стан: '+WinHome.status_home);
WinHome.Destroy;
end
else
if RadioGroup1.ItemIndex=3 then
begin
Memo1.Clear;
WinProg:=TWindowProgram.Create;
Memo1.Lines.Add('Конструктор TWindowProgram:');
Memo1.Lines.Add('Cтиль: '+WinProg.style);
Memo1.Lines.Add('Наявність дочірніх вікон: '+WinProg.home_window);
Memo1.Lines.Add('Статус: '+WinProg.status_program);
WinProg.Destroy;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if (ComboBox1.ItemIndex=0) and (ComboBox2.ItemIndex=0) then
begin
Label3.Caption:=Win.Compare(100,100,200,200);
end
else
if (ComboBox1.ItemIndex=1) and (ComboBox2.ItemIndex=0) then
begin
Label3.Caption:=Win.Compare(100.5,100.5,200,200);
end
else
if (ComboBox1.ItemIndex=0) and (ComboBox2.ItemIndex=1) then
begin
Label3.Caption:=Win.Compare(200,200,100.5,100.5);
end
else
if (ComboBox1.ItemIndex=1) and (ComboBox2.ItemIndex=1) then
begin
Label3.Caption:=Win.Compare(100.5,100.5,200.5,200.5);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (ComboBox3.ItemIndex=0) and (ComboBox4.ItemIndex=0) then
begin
Label6.Caption:=Win.Size(100,100,200,200);
end
else
if (ComboBox3.ItemIndex=1) and (ComboBox4.ItemIndex=0) then
begin
Label6.Caption:=Win.Size(100.5,100.5,200,200);
end
else
if (ComboBox3.ItemIndex=0) and (ComboBox4.ItemIndex=1) then
begin
Label6.Caption:=Win.Size(200,200,100.5,100.5);
end
else
if (ComboBox3.ItemIndex=1) and (ComboBox4.ItemIndex=1) then
begin
Label6.Caption:=Win.Size(100.5,100.5,200.5,200.5);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if (ComboBox5.ItemIndex=0) and (ComboBox6.ItemIndex=0) then
begin
Label9.Caption:=Win.Style(1,1);
end
else
if (ComboBox5.ItemIndex=1) and (ComboBox6.ItemIndex=0) then
begin
Label9.Caption:=Win.Style(1.5,2);
end
else
if (ComboBox5.ItemIndex=0) and (ComboBox6.ItemIndex=1) then
begin
Label9.Caption:=Win.Style(2,1.5);
end
else
if (ComboBox5.ItemIndex=1) and (ComboBox6.ItemIndex=1) then
begin
Label9.Caption:=Win.Style(1.5,2.5);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if RadioGroup2.ItemIndex=2 then
begin
RadioGroup2.ItemIndex:=Win.Increment;
Label12.Caption:='Метод перевантажено';
end
else
if RadioGroup2.ItemIndex=0 then
begin
RadioGroup2.ItemIndex:=Win.Increment(1);
Label12.Caption:='Метод перевантажено';
end
else
if RadioGroup2.ItemIndex=1 then
begin
RadioGroup2.ItemIndex:=Win.Increment(2.0);
Label12.Caption:='Метод перевантажено';
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
if RadioGroup3.ItemIndex=1 then
begin
RadioGroup3.ItemIndex:=Win.Stan;
end
else
RadioGroup3.ItemIndex:=-Win.Stan(1);
end;
procedure TForm1.Button6Click(Sender: TObject);
var WinHome:TWindowHome;
begin
WinHome:=TWindowHome.Create;
Label15.Caption:=WinHome.Draw;
end;
end.
Аналіз отриманих результатів та висновки
Висновок
При виконанні даної розрахункової роботи я ознайомився з побудовою проекту з використанням наслідування і поліморфізму, створив батьківський клас та дочірні до нього класи, перевантажив методи описані у варіанті індивідуального завдання і перевизначив метод малювання.