Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра автоматизованих систем управління
Звіт
до лабораторної роботи № 4
з дисципліни «Об’єктно-орієнтоване програмування»
на тему «Створення власних класів та об'єктів»
Львів – 2010
Лабораторна робота №4
з курсу «Об’єктно-орієнтоване програмування»
Створення власних класів та об'єктів
Мета: засвоїти основні поняття об'єктно-орієнтованого програмування, навчитися створювати свої об'єкти і будувати програми, засновані на об'єктному підході.
Короткі теоретичні відомості
У 80-х роках стали з'являтися перші комерційні системи розробки, у яких була реалізована нова парадигма програмування, так званий об'єктний підхід, що дозволило різко підвищити продуктивність праці програмістів. Підхід був заснований на понятті об'єкта, як екземпляра (представника) певного класу. Клас розглядається як тип даних, у якому поєднуються як поля даних, так і методи їхньої обробки. Об'єкт є змінною цього типу.
Фактично об'єкт став відбивати реальні та абстрактні поняття навколишнього світу. Наприклад, автомобіль характеризується такими полями як марка, тип двигуна, наявність коліс і керма, а файл - назвою та розміром. "Методи" автомобіля визначають його здатність рухатися в потрібному напрямку у відповідності зі значеннями своїх полів: обсягом наявного бензину, кутом повороту керма. З файлу за допомогою методів можна зчитувати дані, змінювати їх і записувати назад.
Використовуючи об'єктно-орієнтоване програмування можна створювати програми, ґрунтуючись на поняттях класу та об'єкта. Працювати зі звичними поняттями людині легше, ніж з абстрактними числами. При цьому можна виділити певний набір класів, що потрібні при створенні найрізноманітніших програм. Ці класи використовуються повторно, без витрати часу на їх програмування. Саме такий підхід і реалізований у системі програмування C++ Builder.
Використання класів та об'єктів у програмах
Клас у C++ Builder описується у складі модуля (unit) або в складі заголовочних файлів(header files). Модулі - це частини на які розбивається програма. Кожен модуль складається з двох розділів – загловочного файлу і файлу реалізації.
Опис класів
Формат опису класу такий:
type <ім’я класу> = class (<ім’я батьківського класу>)
private
{поля, методи}
protected
{поля, методи, властивості}
public
{поля, методи, властивості}
published
{поля, методи, властивості}
end;
Ім’я класу – будь-який ідентифікатор; як правило, починається з великої літери Т. Ім’я надкласу може не вказуватись, тоді вважається, що клас є безпосереднім нащадком класу TObject. В ObjectPascal клас TObject є базовим класом для усіх об’єктів.
В описі класу визначають поля і методи.
Поля – це певні характеристики об’єктів класу (описують як змінні).
Методи – це операції над об’єктами класу (описують як процедури та функції).
Наступні директиви керують правами доступу до елементів класу.
Private (особистий, закритий) містить поля та методи, які використовуються лише об’єктами цього класу.
Protected (захищений) містить поля та методи, доступні також для всіх нащадків цього класу.
Public (відкритий) – поля та методи, а також властивості, доступні для зовнішнього використання, у тому числі з об’єктів інших класів.
Published (для публікації) містить поля, методи, які є відкритими, а також властивості які будуть доступні під час проектування у інспекторі об’єктів Delphi (для перегляду і зміни).
Якщо директиви не вказані, то за замовчуванням вважається, що встановлено директиву Published.
Завдання: Описати клас для одномірних масивів цілих чисел (векторів). Передбачити можливість звертання до окремого елемента масиву з контролем виходу за межі масиву, можливість завдання довільних границь індексів при створенні об’єкта та виконання операцій поелементного додавання та віднімання масивів з однаковими границями індексів, множення та ділення всіх елементів масиву на скаляр, вивід на екран елемента масиву по заданому індексу і всього масиву
Програма:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid2: TStringGrid;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Button3: TButton;
Edit3: TEdit;
Label2: TLabel;
Button4: TButton;
StringGrid1: TStringGrid;
StringGrid3: TStringGrid;
Button5: TButton;
Button6: TButton;
Edit4: TEdit;
Button7: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMas = class //створюємо клас TMas
mas:array[1..10] of integer;
constructor create;
destructor destroy;
procedure Show_Mas(F:TStringGrid); //створимо 5 методів для цього класу
procedure perezapus(M:TMas;F:TStringGrid);
procedure Suma1(M2:TMas;F:TStringGrid);
procedure Div1(n:integer);
procedure Rizn(M2:TMas;F:TStringGrid);
end;
var
Form1: TForm1;
M,M2:TMas; //глобальна змінні
i,j,kilk,n:integer;
implementation
constructor TMas.create; //заповнити масив початковими значеннями
begin
for i:=1 to kilk do
mas[i]:=i;
end;
destructor TMas.destroy;
begin
end;
procedure TMas.Show_Mas(F:TStringGrid); //процедура виводить вектор на екран
begin
for i:=0 to kilk-1 do
F.cells[i,0]:=inttostr(M.mas[i+1]);
end;
{$R *.dfm}
procedure TMas.perezapus(M:TMas;F:TStringGrid); //перезаписує масиви
begin
for i:=0 to kilk-1 do
M.mas[i+1]:=strtoint(F.cells[i,0]);
end;
procedure TMas.Suma1(M2:TMas;F:TStringGrid); //сумує елементи 2 векторів
begin
for i:=1 to kilk do
F.Cells[i-1,0]:=inttostr(M.mas[i]+M2.mas[i]);
end;
procedure TMas.Div1(n:integer); //ділення на скаляр
begin
for i:=1 to kilk do
M.mas[i]:=round(M.mas[i]/n);
end;
procedure TForm1.Button1Click(Sender: TObject); //показати масиви
begin
M.Show_Mas(StringGrid2);
M2.Show_Mas(StringGrid1);
end;
procedure TMas.Rizn(M2:TMas;F:TStringGrid); //процедура, яка обчислює різницю масивів
begin
for i:=0 to kilk- do
F.Cells[i,0]:=inttostr(M.mas[i+1]-M2.mas[i+1]);
end;
procedure TForm1.Button2Click(Sender: TObject); //перезапис масиву
begin
M.perezapus(M,StringGrid2);
M2.perezapus(M2,StringGrid1);
end;
procedure TForm1.Button3Click(Sender: TObject); //вивід ел. По заданому індексу
var n:integer;
begin
n:=strtoint(Edit1.Text);
if(n>kilk)
then
begin
edit2.Text:='немає такого елемента';
exit;
end;
edit2.text:=inttostr(M.mas[n]);
end;
procedure TForm1.Button4Click(Sender: TObject); //створити масиви
begin
kilk:=strtoint(edit3.text);
M:=TMas.create;
M2:=TMas.create;
end;
procedure TForm1.Button5Click(Sender: TObject); //сума масивів
begin
M.Suma1(M2,StringGrid3);
end;
procedure TForm1.Button6Click(Sender: TObject); //ділення на скаляр
var n:integer;
begin
n:=strtoint(edit4.text);
M.Div1(n);
M.Show_Mas(StringGrid2);
end;
procedure TForm1.Button7Click(Sender: TObject); //різниця масивів
begin
M.Rizn(M2,StringGrid3);
end;
end.
Висновок: На цій лабораторній роботі я засвоїв основні поняття об'єктно-орієнтованого програмування, навчитися створювати свої об'єкти і будувати програми, засновані на об'єктному підході.