CLASS ları Ne işe yarar uygulayarak anlayalım.

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

CLASS ları Ne işe yarar uygulayarak anlayalım.

Mesaj gönderen husonet »

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.

Kod: Tümünü seç

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.

Kod: Tümünü seç

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.

Kod: Tümünü seç

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.

Kod: Tümünü seç

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

Kod: Tümünü seç

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.
En son husonet tarafından 04 May 2004 08:53 tarihinde düzenlendi, toplamda 2 kere düzenlendi.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

eline sağlık Hüseyin Kardeş :D :D
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Teşekkür Ederim. Umarım Faydalı olur.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
NetZero
Üye
Mesajlar: 136
Kayıt: 14 Ağu 2004 11:12
Konum: Bursa
İletişim:

Mesaj gönderen NetZero »

S.A

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

Allah razi olsun ..

Saygilarimla..
c#

:alsana: :boks:
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Amin. Allah cümlemizden razı olsun. Teşekkür Ederim.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: CLASS ları Ne işe yarar uygulayarak anlayalım.

Mesaj gönderen Lord_Ares »

Emeğinize sağlık. Özür dileyerek konuyu anlayamadığım ve merak ettiğim için sormak istiyorum. Yukarıdaki örneklerinize baktığımda class dışında normal bir prosedür ve fonksiyon tanımlayarak Dizinin max ve toplamını zaten alabiliyoruz. Bunu yapabiliyorsak neden classa ihtiyac duyduk ki zaten aynı şeyi yapıyor. Aradaki fark nedir bize ne kazandırdı ? İnternette bu konuyu çok araştırdım fakat az kaynak ve teknik dil kullanımı yüzünden bu konuyu anlayamadım.
Aklımda deli sorular :D
1) Bir prosedür oluşturup kendini çağıran iç içe prosedürler kullanarak bütün işi halledebiliyor ve istediğim yerden çağırabiliyor sonucu alabiliyorsam, classın farkı ne neden ihtiyacım var ?
2) Classı nerelerde kullanmam gerektiğini anlayamadım.. Class ne zaman nerelerde kullanılır yada kullanılmalıdır ? Örneğin, editboxa girilen iki rakamı toplayıp ekranda göstermek için hadi bir class kullanayım demek mantıklı mı ..
Biliyorum, yukarıdaki örneğinizde bunu gösterdiniz anlattınız ama ben görüp anlayamadım için özür diliyorum.
Bana sade bir dille bunun mantığını anlatır örneklendirir ve öğretirseniz çok sevinirim.
Çok teşekkürler.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: CLASS ları Ne işe yarar uygulayarak anlayalım.

Mesaj gönderen greenegitim »

Lord_Ares yazdı: 11 Tem 2018 11:21 Emeğinize sağlık. Özür dileyerek konuyu anlayamadığım ve merak ettiğim için sormak istiyorum. Yukarıdaki örneklerinize baktığımda class dışında normal bir prosedür ve fonksiyon tanımlayarak Dizinin max ve toplamını zaten alabiliyoruz. Bunu yapabiliyorsak neden classa ihtiyac duyduk ki zaten aynı şeyi yapıyor. Aradaki fark nedir bize ne kazandırdı ? İnternette bu konuyu çok araştırdım fakat az kaynak ve teknik dil kullanımı yüzünden bu konuyu anlayamadım.
Aklımda deli sorular :D
1) Bir prosedür oluşturup kendini çağıran iç içe prosedürler kullanarak bütün işi halledebiliyor ve istediğim yerden çağırabiliyor sonucu alabiliyorsam, classın farkı ne neden ihtiyacım var ?
2) Classı nerelerde kullanmam gerektiğini anlayamadım.. Class ne zaman nerelerde kullanılır yada kullanılmalıdır ? Örneğin, editboxa girilen iki rakamı toplayıp ekranda göstermek için hadi bir class kullanayım demek mantıklı mı ..
Biliyorum, yukarıdaki örneğinizde bunu gösterdiniz anlattınız ama ben görüp anlayamadım için özür diliyorum.
Bana sade bir dille bunun mantığını anlatır örneklendirir ve öğretirseniz çok sevinirim.
Çok teşekkürler.
Scope kavramını araştırın faydalanacağınız düşünüyorum.
Mücadele güzelleştirir!
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: CLASS ları Ne işe yarar uygulayarak anlayalım.

Mesaj gönderen Lord_Ares »

Scope kavramını araştırdım class nedir nerelerde kullanılır sorusuna bağdaştıramadım. Neden bunu önerdiğini anlamadım .. :)) Teşekkürler
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: CLASS ları Ne işe yarar uygulayarak anlayalım.

Mesaj gönderen greenegitim »

Lord_Ares yazdı: 13 Tem 2018 01:33 Scope kavramını araştırdım class nedir nerelerde kullanılır sorusuna bağdaştıramadım. Neden bunu önerdiğini anlamadım .. :)) Teşekkürler
kısaca şöyle diyelim o zaman hastane diye bir şey yoktur hastane diye bir kavram vardır insanları hayvanlardan ayıran en büyük özellik kavram üretebilmesidir hastane bir kavram ama bakırköy hastanesi bir nesnedir.
buradan yolla çıkarak şöyle denilebilir
sınıflar nesne yönelimli programlama tekniğinin en önemli yapı taşlarıdır. sınıflar belli bir konuda işlemleri gerçekleştirmek için oluşturulan içerisinde değişkenleri ve fonksiyonları barındıran bir veriyapısıdır hedefi belli konularda belirli işlemleri yapmak örnek file sınıfının hedefi ile file ile ilgili işlemleri yapmak
tanımladığınız class sizin kavramınız
o sınıfı
var
Bakirkoyhastanesi:THastane;
begin
Bakirkoyhastanesi:=THastane.create;
end;
diyerek siz bakırköy hastanesi oluşturdunuz isterseniz Leventhastanesi:=THastane.create; diyerek levent hastanesi de oluşturabilirsiniz.
Mücadele güzelleştirir!
Cevapla