CLASS ları Ne işe yarar uygulayarak anlayalım.
husonet04.05.2004 - 12:01:17
Bu makale Class lara giriş seviyesindedir.

Programlama da programcıların en zorlandığı olaylardan biride Nesneye Dayalı Programlamanın kavramını anlamaktır. Class Nedir? Nesne Nedir? Constuructor(Kurucu) nedir? Vb…

Öncelikle Temelden başlayarak ilkel yöntemleri kullanalım sonra da Modern (Sosyete) kodlama yöntemlerine geçelim. Bakın ben bu yöntemleri Java da öğrenmiştim. :)

Bir integer dizisinin elemanlarını ListBox’a basan bir program yapalım.


procedure TForm1.Button1Click(Sender: TObject);
var
dizi: Array[0..9]of Integer;
i:Integer;
begin
dizi[0]:= 5;
dizi[1]:= 1;
dizi[2]:= 3;
dizi[3]:= 4;
dizi[4]:= 6;
dizi[5]:= 7;
dizi[6]:= 8;
dizi[7]:= 5;
dizi[8]:= 9;
dizi[9]:= 6; //Dizilere atanan değerler kullanıcıdan alınabilir.

For i:=0 to high(dizi) do
ListBox1.Items.Add(intToStr(Dizi[i]));
End;


Bir dizi oluşturduk. Bir döngü açıp ekrana bastırdık. İkinci bir dizi daha ekrana bastırmamız gerektiğini düşünelim. Aşağıdaki gibi yapılabilir.


procedure TForm1.Button1Click(Sender: TObject);
var
dizi1: Array[0..9]of Integer;
dizi2: Array[0..9]of Integer;
i:Integer;
begin
dizi1[0]:= 5;
dizi1[1]:= 1;
dizi1[2]:= 3;
dizi1[3]:= 4;
dizi1[4]:= 6;
dizi1[5]:= 7;
dizi1[6]:= 8;
dizi1[7]:= 5;
dizi1[8]:= 9;
dizi1[9]:= 6; //Dizilere atanan değerler kullanıcıdan alınabilir.

dizi2[0]:= 7;
dizi2[1]:= 7;
dizi2[2]:= 4;
dizi2[3]:= 3;
dizi2[4]:= 6;
dizi2[5]:= 7;
dizi2[6]:= 8;
dizi2[7]:= 5;
dizi2[8]:= 9;
dizi2[9]:= 9; //Dizilere atanan değerler kullanıcıdan alınabilir.

For i:=0 to high(dizi1) do
ListBox1.Items.Add('Dizi1 ' + intToStr(Dizi1[i]));

For i:=0 to high(dizi2) do
ListBox1.Items.Add('Dizi2 '+intToStr(Dizi2[i]));

End;


Yukarıda görüldüğü gibi iki for döngüsü yaptık. Halbuki bir int dizisinin ekrana basılması olayı tek seferde yapılabilirdi. Burada devreye fonksiyon ve Procedure kavramı girer. Bir Procedure ile bu işi yapsak daha kullanışlı olurdu.


Procedure Listele(Dizi: Array of Integer);
var
i:Integer;
begin


For i:=0 to high(dizi) do
Form1.ListBox1.Items.Add(' ' + intToStr(Dizi[i]));
Form1.ListBox1.Items.Add('________');

End;

procedure TForm1.Button1Click(Sender: TObject);
var
Dizi1: Array[0..9]of Integer;
Dizi2: Array[0..9]of Integer;
Begin
dizi1[0]:= 5;
dizi1[1]:= 1;
dizi1[2]:= 3;
dizi1[3]:= 4;
dizi1[4]:= 6;
dizi1[5]:= 7;
dizi1[6]:= 8;
dizi1[7]:= 5;
dizi1[8]:= 9;
dizi1[9]:= 6; //Dizilere atanan değerler kullanıcıdan alınabilir.

dizi2[0]:= 7;
dizi2[1]:= 7;
dizi2[2]:= 4;
dizi2[3]:= 3;
dizi2[4]:= 6;
dizi2[5]:= 7;
dizi2[6]:= 8;
dizi2[7]:= 5;
dizi2[8]:= 9;
dizi2[9]:= 9; //Dizilere atanan değerler kullanıcıdan alınabilir.

Listele(dizi1);
Listele(dizi2);
End;



Programımız daha basitleşmiş olduğunu görüyoruz. 3 ncü 4 ncü 5 nci dizimizi listelemek artık bizim için daha basit. Diyelimki Dizimizde ki indislerimizin taşıdığı değerlerin toplamını almamız gerekiyor bunu bir fonksiyonla halledebiliriz. Programımız dizimizin hem indislerini ekrana bassın hemde toplamını alsın.


Function DiziTopla(Dizi: Array of Integer):Integer;
var
Top:Integer;
i:Integer;
begin
Top := 0;

For i:=0 to high(dizi) do
Begin
Top := Top + Dizi[i];
Form1.ListBox1.Items.Add(' ' + intToStr(Dizi[i]));
End;
Form1.ListBox1.Items.Add('________');
Result := Top;
End;


procedure TForm1.Button1Click(Sender: TObject);
var
Dizi1: Array[0..9]of Integer;
Dizi2: Array[0..9]of Integer;
Begin
dizi1[0]:= 5;
dizi1[1]:= 1;
dizi1[2]:= 3;
dizi1[3]:= 4;
dizi1[4]:= 6;
dizi1[5]:= 7;
dizi1[6]:= 8;
dizi1[7]:= 5;
dizi1[8]:= 9;
dizi1[9]:= 6; //Dizilere atanan değerler kullanıcıdan alınabilir.

dizi2[0]:= 7;
dizi2[1]:= 7;
dizi2[2]:= 4;
dizi2[3]:= 3;
dizi2[4]:= 6;
dizi2[5]:= 7;
dizi2[6]:= 8;
dizi2[7]:= 5;
dizi2[8]:= 9;
dizi2[9]:= 9; //Dizilere atanan değerler kullanıcıdan alınabilir.

ShowMessage(intToStr(DiziTopla(dizi1)));

End;


Evet Programımız tek bir fonksiyon ile dizimizi ListBox’a hem listeledik hem de dizimizin indislerinin toplamını aldık. Peki dizimizin üstünde başka işlem yapmamız gerekebilirmi tabikide kullanım alanlarımız genişleyecektir. Örneğin küçükten büyüye sıralama Dizimizin en büyük indisli elamanın bulma vb.. bu tip işlemlerin hepsi bir integer dizi si üzerinde yapılacaktır. Ve her Fonksiyonumuzu çağırdığımızda bu dizimisi geçmek zorunda kalıyoruz. Artık Class kavramına girme zamanı geldi.

Class veriler ve bu veriler üzerinde yapılacak işlemleri tutan birimdir.
Yukarıdaki örneklere dikkat ettiyseniz hep integer dizisi üzerinde işlem yapmaktadır. O halde bizim class'ın amacı integer dizisi üzerinde işlemler yapmalıdır. Class integer dizisini başlangıçta ister. Böylece hep aynı dizi üzerinde işlem yapar

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TDiziClass = Class
Function DiziSum(dizi:Array of Integer):Integer;
Function DiziMax(dizi:Array of Integer):Integer;
End;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
Function TDiziClass.DiziSum(dizi:Array of Integer):Integer;
var
i, Top:Integer;
Begin
Top := 0;
For i := 0 To high(Dizi) do
Begin
Top := Top + Dizi[i];
End;
Result := Top;
End;

Function TDiziClass.DiziMax(dizi:Array of Integer):Integer;
var
i, k, Max, Tmp:Integer;
Begin
i := 0;
MAX := dizi[0];
For i := 0 To high(Dizi)- 1 do
Begin
if max < dizi[i + 1] Then
Begin
max := dizi[i + 1];
End;
End;
Result := Max;
End;
procedure TForm1.Button1Click(Sender: TObject);
var
Dizi:Array[0..9] Of Integer;
i:Integer;
DiziClass:TdiziClass;
begin
DiziClass := TDiziClass.Create;

Dizi[0] := 300;
Dizi[1] := 301;
Dizi[2] := 302;
Dizi[3] := 303;
Dizi[4] := 170;
Dizi[5] := 304;
Dizi[6] := 1210;
Dizi[7] := 1600;
Dizi[8] := 1700;
Dizi[9] := 10000;

ShowMessage(IntToStr(DiziClass.DiziMax(Dizi)));
ShowMessage(IntToStr(DiziClass.DiziSum(Dizi)));
end;

end.


Yukarıda görüldüğü gibi dizinin elemanlarının toplamlarını ayrıca dizinin enbüyük indisli elamanını yakaladık. Aynı işi class ve fonksiyon kullanmadan yapsaydık bir hayli karışık ve uzun olurdu.
 
oguzozturk7404.05.2004 - 18:58:11
eline sağlık Hüseyin Kardeş :D :D
 
husonet04.05.2004 - 20:34:32
Teşekkür Ederim. Umarım Faydalı olur.
 
NetZero21.10.2004 - 03:04:20
S.A

huso bey siz varya supersiniz..Cok acik bir dilde anlatmis unuttuklarimizida hatirlatmissiniz..

Allah razi olsun ..

Saygilarimla..
 
husonet21.10.2004 - 08:34:54
Amin. Allah cümlemizden razı olsun. Teşekkür Ederim.
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com