| husonet | 04.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. | |
| oguzozturk74 | 04.05.2004 - 18:58:11 |
| eline sağlık Hüseyin Kardeş :D :D | |
| husonet | 04.05.2004 - 20:34:32 |
| Teşekkür Ederim. Umarım Faydalı olur. | |
| NetZero | 21.10.2004 - 03:04:20 |
| S.A
huso bey siz varya supersiniz..Cok acik bir dilde anlatmis unuttuklarimizida hatirlatmissiniz.. Allah razi olsun .. Saygilarimla.. | |
| husonet | 21.10.2004 - 08:34:54 |
| Amin. Allah cümlemizden razı olsun. Teşekkür Ederim. | |