Loading...

10 Haziran 2007 Pazar

Visual C# ile Programlamaya Giriş || C#

htt://www.csharpnedir.com adresinden alıntıdır.

Visual C#, Visual
Studio ailesinin yeni üyesidir, bu yeni dil c ve c++ temelleri üzerine kurulmasına
rağmen komponent temelli programlama tekniğini geliştirmek için birtakım yeni
özellikler eklenmiştir. C# dilinin sentaksı C ve C++ programcılarına çok tanıdık
gelecektir. Bundan şüpheniz olmasın.






Genel Açıklamalar


Bu yazıda göreceğimiz
basit uygulamada QuickSort algoritmasını kullanarak nasıl basit bir C# projesinin
oluşturulduğunu göreceğiz. Bu uygulamada bir c# programında en sık kullanılan
yapılardan olan dosyaya ve console ekranına okuma/yazma, fonksiyon oluşturma ve
basit dizilerin kullanımı açıklanacaktır.



Bu yazı kesinlikle C# dilinin tüm özelliklerinin anlatıldığı yazı değildir. Bu
yazı C# dilini öğrenmek için sizlere bir başlangıç noktası sunar.


Önerilen Kaynaklar


Visual Studio.NET
(Beta 2 veya sonrası) örnek kaynak kodu derlemeniz için gereklidir. C/C++ bilgisi
size bu yazıyı anlamanızda yardımcı olabilir ama gerekli değildir.


Adım
1. Projeye Başlama


Visual Studio ile
program geliştirme organizasyonu solution(çözüm) çalışma alanları üzerindendir. Solution
dediğimiz ortam bir veya daha fazla projeyi içerebilir. Bu makale için tek bir
C# projesi içeren bir solution oluşturacağız.



Yeni bir proje
oluşturmak



  1. Visual Studio.NET
    ortamından, class=command>File | New | Project menülerini
    seçin.



  2. Soldan(Project
    Types) Visual C#, sağdan(Templates) ise Console
    Application
    butonlarını seçin.



  3. Projenizin
    adını belirleyin ve projenizin hangi klasörde saklanacağını belirleyin.Bu
    klasör Visual Studio tarafından otomatik oluşturulur.Proje adı olarak ben
    quicksort yazıyorum.Siz istediğiniz adı verebilirsiniz.



  4. OK tuşuna basalım
    ve yola koyulalım.


"Visual C#
Solution" ortamımız


Visual Studio.NET
içinde bir Visual C# projesi bulunan bir solution oluşturdu. Proje assemblyinfo.cs
ve class1.cs adlı iki tane dosya içermektedir.

Bundan sonraki
adımlarda projemizi nasıl derleyeceğimizi ve bu iki dosya hakkında detaylı bilgiyi
öğreneceğiz.




Adım
2. Hello, World!


Kusura
bakmayın ama geleneği
bozmadan ilk defa C programlama dili ile yazılmış olan "Hello, World!" programını
c# ile yazacağız. Bu bir gelenektir ve her yeni bir dili öğrenmeye başladığınızda
bunu siz de göreceksiniz.



Kaynak Kodu Değiştirme



  1. Solution Explorer
    'da bulunan 'class1.cs'dosyasına çift tıklayın. Solution Explorer 'ı göremiyorsanız,
    view menüsünü kullanarak görünür hale getirebilirsiniz.

  2. Şablonla oluşturulmuş
    koda aşağıda kırmızı ile yazılmış kısmı ekleyin (class1.cs).

    using
    System;



    namespace quicksort

    {

        ///



        /// Summary description for Class1.
        ///


        class Class1

        {

            static void Main(string[]
    args)

            {

                //

                // TODO: Add code to start application
    here

                //

                Console.WriteLine
    ("Hello, C#.NET World!");


            }

        }

    }


  3. Dikkat edin
    siz kodunuzu yazdıkça Visual Studio size sınıflar ve fonksiyon adları hakkında
    bilgi verir, çünkü .NET Framework tip bilgisini yayınlamaktadır.








Uygulamamızı Derleyelim



  1. Programımızda
    değişiklik yaptığımıza göre artık Build menüsünden Build 'ı seçerek programımızı
    derleyebiliriz.



  2. Hata ve mesajlar
    en altta bulunan "Output Window" denilen pencerede görünür. Eğer
    herhangi bir hata yoksa uygulamamızı Debug menüsü altında bulunan 'Start
    without Debugging
    ' menüsüne tıklayarak çalıştırabiliriz.






Programımızın
Çıktısı


Aşağıda programımızın
Visual C# içinden çalıştırılarak oluşturulmuş çıktısının ekran görüntüsü mevcuttur.



Değişiklikleri
Anlamak


class=keyword>System.Console sınıfına ait WriteLine()
fonksiyonu
kendisine argüman olarak gönderilen dizgeyi sonuna satır sonu karakteri de
ekleyerek ekrana yazar.
Bu
fonksiyon integer ve floating-point gibi diğer veri tiplerini de argüman olarak
alabilir.



Program belleğe
yüklendiğinde programın kontrolu Main() fonksiyonuna gelir. class=keyword>WriteLine() fonksiyonunu oraya yazmamızın
sebebi budur.



Adım
3. Programın Yapısı


Şimdi basit bir Hello World
uygulaması geliştirmiş olduk, şimdi de bir Visual C# uygulamasının basit
componentlerini inceleyelim.



Kaynak Kod Yorumları


// karakterlerinden
sonra gelen ve satırın sonuna kadar olan sözcükler yorum satırlarıdır ve C# derleyicisi
tarafından görünmezler. Aynı zamanda birden fazla satıra yorum eklemek istiyorsak
/* */ karakterleri arasına yorum yazarız.


// Bu satır derleyici
tarafından görülmez

/* Aynı zamanda bu blok da

derleyici tarafından görünmez*/



Using Komutu


.NET Framework geliştiricilere
yüzlerce yararlı sınıflar sunar. Mesela, Console sınıfı, console ekranına ait
girdi ve çıktıları işler. Bu sınıflar hiyerarşik bir ağaç içinde organize edilmiştir.
Aslında Console sınıfının tam ismi System.Console ' dur. Diğer sınıflar ise System.IO.FileStream
ve System.Collections.Queue. içindedirler.




using komutu bize
sınıfın ismini namespace(isim alanı) kullanmadan kullanabilmemizi sağlar.

Aşağıda kırmızı ile yazılan yazılar using komutunun uygulamasının sonucudur.

using
System;


class Class1

{

    static void Main(string[]
args)

    {

        System.Console.WriteLine ("Hello, C#.NET World!");

        Console.WriteLine
("Hello, C#.NET World!");


    }

}




Sınıf Bildirimi


C++ ve Visual Basic
'den farklı olarak C# 'da bütün fonksiyonlar bir sınıf içerisinde olmalıdır. C#
'da bir sınıf tanımlamak için class anahtar sözcüğü kullanılır.Bu durumda bizim
uygulamamızda, Class1 sınıfı Main() adında bir fonksiyon içerir. Eğer sınıf bildirimini
bir isim alanı blokları içine alırsak sınıflarımızı CSharp.QuickSortApp şeklinde
bir hiyerarşi içine alabiliriz.



Sınıflar hakkında çok derin bir bilgi vermeyi düşünmüyorum.Fakat bizim örneğimizin
neden bir parçası olduğunu açıklamakta fayda gördüm.


Main() Fonksiyonu


Program belleğe yüklendiğinde
Main() fonksiyonu programın kontrolünü eline alır, bu yüzden başlangıç kodlarımızı
daima Main() fonksiyonu içinde yazmalıyız. Komut satırı argümanları ise bir string
dizisi olan args dizisine aktarılır.(mesela: delete x ) Burada programımızın adı
delete ise x bir komut satırı argümanıdır.


Adım
4. Console Girişi


Şimdi işlemlerimize
bir QuickSrot uygulaması geliştirerek devam edelim. İlk yapmamız gereken kullanıcya
hedef ve kaynak dosyasının isimlerini sormak olacaktır.


Source Code Modifications



  1. class1.cs dosyasına
    aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
    bizim için çok önemli değildir.

    // namespaces
    ekleme

    using System;



    // namespace tanımlama

    namespace MsdnAA

    {

        // uygulama sınıfı tanımlama

        class QuickSortApp

        {

            // uygulama oluşturma

            static void Main (string[] szArgs)

            {

                // Programın
    hakkında

                Console.WriteLine ("QuickSort
    C#.NET Sample Application\n");



                // kullanıcıdan bilgi alma

                Console.Write
    ("Source: ");

                string szSrcFile = Console.ReadLine
    ();

                Console.Write ("Output: ");

                string szDestFile = Console.ReadLine
    ();


            }

        }

    }





Console'dan Okuma


class=keyword>Console sınıfının ReadLine() metodu
kullanıcıya bir giriş ekranı sunar ve geriye kullanıcının girdiği dizgeyi(string)
geri döndürür.Bu metod bellek tahsisatını otomatik olarak kendi içinde yapmaktadır
ve .NET garbage collector mekanizması sayesinde iade etmeniz gereken herhangi
bir alan yoktur.


Program Çıktısı


Programı Debug
| Start Without Debugging
menülerini kullanarak çalıştırın.

Aşağıda programımızın son halinin çıktısını görüyorsunuz.





Adım

5. Dizilerin Kullanımı



Programımız
sıralama yapmadan önce girişten satırları alarak bir dizi içinde saklaması gerekir.
Şimdi .NET temel sınıflarından olan ArrayList sınıfını inceleyeceğiz.


Kaynak Kod Değişikliği



  1. class1.cs dosyası
    içinde aşağıda kırmızı ile gösterilen yerleri ekleyin.

    // isim alanı
    ekleme

    using System;

    using System.Collections;



    // isimalanı tanımlama

    namespace c#nedircom

    {

        // uygulama sınıfı tanımlama

        class QuickSortApp

        {

            // uygulama başlangıcı

            static void Main (string[] szArgs)

            {

               

                Console.WriteLine ("QuickSort
    C#.NET Sample Application\n");



                // Dosya isimlerini almak için
    komut yaz

                Console.Write ("Source: ");

                string szSrcFile = Console.ReadLine
    ();

                Console.Write ("Output: ");

                string szDestFile = Console.ReadLine
    ();



             
      // TODO: Read contents of source file

                ArrayList szContents = new ArrayList
    ();


            }

        }

    }




ArrayList sınıfının
kullanımı


ArrayList sınıfına
direkt ulaşabilmek için System.Collections isimalanını projemize using komutuyla
ekliyoruz. Bu sınıf dinamik olarak büyüyüp küçülebilen nesne dizileri için kullanılır.
Yeni bir eleman eklemek için basit bir şekilde Add() metodunu kullanabilirsiniz.
Bu diziye eklenen yeni eleman orijinal nesne için referans olarak kullanılır, ve
garbage collector alan iadesi için hazır olacaktır.


string szElement
= "insert-me";

ArrayList szArray = new ArrayList ();

szArray.Add (szElement);

Dizinin var olan bir
elemanına ulaşabilmek için, diziye ait Item() metoduna ulaşmak istediğimiz elemanın
sıra(index) numarasını geçebiliriz.Kısaca [] operatörlerini kullanarak da
istediğimiz elemana Item() metodunu kullanmadan da ulaşabiliriz.




Console.WriteLine
(szArray[2]);

Console.WriteLine (szArray.Item (2));

ArrayList
sınıfının daha birçok metodu vardır, ancak biz bu uygulamada sadece ekleme ve okuma yapacağız.
ArrayList sınıfına ait tüm metod ve özellikleri öğrenmek için MSDN kitaplığına
başvurabilirsiniz.




Adım
6. File Girdi/Çıktı(Input/Output)


Şimdi isterseniz dosyadan
okuma ve dosyaya yazma işlemlerini gerçekleştirelim. Dosyadaki her satırı okuyup,
bir string dizisinin her elemanını bir satır gelecek şekilde ekleyeceğiz.Sonraki
aşamada ise QuickSort algoritmasını kullanarak diziyi sıralı bir şekilde yazacağız.



Kaynak Kod Değişikliği



  1. class1.cs dosyasına
    aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
    bizim için çok önemli değildir.

    // isimalanı
    ekleme

    using System;

    using System.Collections;

    class=newcode>using System.IO;





    namespace MsdnAA

    {



        class QuickSortApp

        {



            static void Main (string[] szArgs)

            {

             
      string szSrcLine;

                ArrayList szContents = new ArrayList
    ();

                FileStream fsInput = new FileStream
    (szSrcFile, FileMode.Open,FileAccess.Read);

                StreamReader srInput = new StreamReader
    (fsInput);

                while ((szSrcLine = srInput.ReadLine
    ()) != null)

                {

                    // dizinin sonuna
    ekleme 
                    szContents.Add (szSrcLine);

                }

                srInput.Close ();

                fsInput.Close ();



                // TODO: Buraya QuickSort fonksiyonu
    gelecek



                // sıraları satırları yazma

                FileStream fsOutput = new FileStream
    (szDestFile,FileMode.Create, FileAccess.Write);

                StreamWriter srOutput = new StreamWriter
    (fsOutput);

                for (int nIndex = 0; nIndex <
    szContents.Count; nIndex++)

                {

                    // hedef dosyaya
    satır yazma

                    srOutput.WriteLine
    (szContents[nIndex]);

                }

                srOutput.Close ();

                fsOutput.Close ();



                // başarıyı kullanıcıya bildirme

                Console.WriteLine ("\nThe sorted
    lines have been written.\n\n");


            }

        }

    }




Kaynak Dosyadan
Okuma


Kaynak dosyayı açmak
için FileStream sınıfını ve StreamReader sınıfını kullanarak ReadLine() metodu
ile dosyayı okuyoruz. ReadLine() metodunu dosyanın sonunu ifade eden NULL değerine
geri dönene kadar çağırıyoruz.Döngü içinde okunan satırları dizinin içine ekliyoruz
ve sonrada tüm nesneleri kapatıyoruz.




Hedef Dosyaya
Yazma


Dosyaya yazarken dizinin
sıralanmış olduğunu varsaydık ve öyle devam ettik. Aynı şeklide FileStream nesnesini
ve StreamWriter sınıfını kullanarak hedef dosyaya yazma işlemini yaptık.




Adım
7. Fonksiyon Yaratma


Son aşamada diziyi
QuickSort algoritması ile sıralayan fonksiyonu yazmaya geldi. Bu fonksiyonu uygulamamızın
ana sınıfının içine koyacağız.



Kaynak Kod Değişikliği



  1. class1.cs dosyasına
    aşağıda kırmızı ile yazılanları yazın. Burada sınıf ismi ve isimalanı ismi
    bizim için çok önemli değildir.

    // isim alanı
    ekleme

    using System;

    using System.Collections;

    using System.IO;





    namespace c#nedircom

    {



        class QuickSortApp

        {



            static void Main (string[] szArgs)

            {

                ... ... ...



             
      // QuickSort fonksiyonuna parametrelerin geçişi

                QuickSort (szContents, 0, szContents.Count
    - 1);




                ... ... ...

            }



            //
    QuickSort fonksiyonu

            static void QuickSort (ArrayList szArray, int
    nLower, int nUpper)

            {



                if (nLower < nUpper)

                {

                    // Ayırma ve sıralama
    işlemi

                    int nSplit = Partition
    (szArray, nLower, nUpper);

                    QuickSort (szArray,
    nLower, nSplit - 1);

                    QuickSort (szArray,
    nSplit + 1, nUpper);

                }

            }



            // QuickSort bölmelere ayırma

            static int Partition (ArrayList szArray, int
    nLower, int nUpper)

            {

                // İlk elemanı bulma

                int nLeft = nLower + 1;

                string szPivot = (string) szArray[nLower];

                int nRight = nUpper;



                // Dizi elemanlarını bölme

                string szSwap;

                while (nLeft <= nRight)

                {

                   

                    while (nLeft <=
    nRight)

                    {

                        if
    (((string) szArray[nLeft]).CompareTo (szPivot) > 0)

                         
      break;

                        nLeft
    = nLeft + 1;

                    }

                    while (nLeft <=
    nRight)

                    {

                        if
    (((string) szArray[nRight]).CompareTo (szPivot) <= 0)

                         
      break;

                        nRight
    = nRight - 1;

                    }



                    // Eğer uygunsa
    yer değiştirme işlemi yap

                    if (nLeft < nRight)

                    {

                        szSwap
    = (string) szArray[nLeft];

                        szArray[nLeft]
    = szArray[nRight];

                        szArray[nRight]
    = szSwap;

                        nLeft
    = nLeft + 1;

                        nRight
    = nRight - 1;

                    }

                }



                szSwap = (string) szArray[nLower];

                szArray[nLower] = szArray[nRight];

                szArray[nRight] = szSwap;

                return nRight;

            }


        }

    }




QuickSort() Fonksiyonu


Bu fonksiyon alt sınır,
üst sınır ve bir dizi olmak üzere 3 tane parametre almaktadır. QuickSort fonksiyonu
Partition() fonksiyonunu çağırarak diziyi iki parçaya ayırır. Bu parçaların birinde
belirlenen bir diziden önceki ,diğer parçasında ise sonraki elemanlar bulunur.
Sonra fonksiyon tekrar kendini çağırarak bu iki parçanın sıralanmasını sağlar.


Yukarıdaki kodlarda
yeni gördüğümüz metod CompareTo() metodudur. Bu metod iki string ifadesini karşılaştırır.


QuickSort Uygulamasını
Çalıştırma


Bu adım uygulamamızın
son adımı olacaktır.Şimdi programımızı derleyip çalıştırabiliriz. Programımızın
çalışması için bir text dosyası oluşturmamız sıralama yapabilmek için gerekecek.
Exe dosyasının bulunduğu dizini text dosyasını oluşturup programı çalıştıralım.



Programın Çıktısı


Aşağıda programımızı
çalıştırdıktan sonraki ekran çıktısı mevcuttur. Yukarıdaki ekranda ise output.txt
dosyasında meydana gelen değişiklikleri görebilirsiniz.



Adım
8. Debugger Kullanmak


Debugger aracı programımızın
problemlerini çözmek için önemli ve gerekli bir araçtır. İyi bir başlangıç yaptığımıza
göre son aşamada programımız içinde nasıl dolaşacağımıza ve QuickWatch' ı nasıl
kullanacağımıza bakalım.


Breakpoint' leri
Ayarlama


Program Debugger içinde
çalışırken eğer breakpoint olan bir noktaya gelinirse program sonlandırılır ve
debugger control 'ü bizim elimize geçer. Herhangi bir satıra breakpoint koymak
için ilgili satıra sağ tıklayıp aşağıdaki gibi Insert BreakPoint menüsüne tıklayın.



BreakPoint bulunan
satırlar kırmızı ile gösterilir. BreakPoint ' i kaldırmak için ilgili satıra
sağ tıklayıp Remove BreakPoint menüsünü seçin.





Program içinde
Adım Adım ilerlemek


Aşağıdaki şekilde
görüldüğü gibi bir breakpoint oluşturduktan sonra debugger ile programımızı çalıştıralım.
Debug menüsünden daha önceden de yaptığımızı gibi class=command>Start Without Debugging yerine Start
menüsüne tıklayın. Bu şekilde programı çalıştırdığımızda program debugger ile
çalışmaya başlayacaktır, ve breakpoint 'ler aktif olmaya başlayacaktır.



Program breakpoint 'in olduğu noktaya geldiğinde, debugger programın kontrolünü
alır. Aşağıdaki şekilde görüldüğü gibi sarı okla programın geldiği nokta gösterilir.



Kod içinde adım
adım ilerlemek için menü çubuğundan Debug | Step Over ' ı seçerek sarı okun
hareketini izleyin. class=command>Debug | Step Into komutu gitmek istediğimiz
fonksiyona gitmemizi sağlar. Aşağıda iki defa Step Over menüsünü seçtikten sonra
kaynak kodumuzun görüntüsü mevcuttur.





Eğer programımızın
diğer bir sonlandırıcı nedene (yeni bir breakpoint, exception , exit, debug)
gelene kadar devam etmesini istiyorsanız Debug | Continue menülerini seçin.





Değişken Değerlerini
Takip Etme


Debugger 'ın kontrolü
bizde iken farenin imlecini kaynak kodda istediğimiz değişken üzerine götürerek
değişkenin o anki değerini öğrenebiliriz.



Aynı zamanda bir
değişkene sağ tıklayarak QuickWatch menüsünü açabilirsiniz. QuickWatch ile değişken
hakkında daha detaylı bilgiler elde edebilirsiniz. Mesela diziler hakkında aşağıdaki
şekilde görüldüğü gibi bilgiler elde edilebilir.






Diğer Debugger
Araçları


Visual Studio yukarıda
bahsettiğimiz araçları dışında farklı araçlarda barındırır. Mesela Call Stack
Wiever aracı ile o an hangi fonksiyonun çağrıldığı ile ilgili bilgiyi elde edebilirsiniz.
Bellekteki değerleri ve bir prosesteki thread 'leri de aynı anda görebileceğimiz
araçlar mevcuttur.


Son Söz &
Sonuç


Bu yazının amacı sizlere
Visual Studio ile nasıl basit bir uygulamanın yapılacağını adım adım göstermekti.
Diğer .NET ve C# kaynaklarını araştırmak için sizi cesaretlendirebildiysek ne
mutlu bize. Bu yazıyı buraya kadar okuduğunuza göre en azından şu aşamada çalışan
bir projeniz var, istediğiniz gibi üzerinde değişiklikler yapıp sonucu görebilirsiniz.




Bu yazı "Microsoft MSDN Magazine" 'den Türkçeye
tercüme edilmiştir.

Hiç yorum yok:

 
eXTReMe Tracker
Sayfa Bloggoayrılık yazılarıoyunlarkurye web tasarımı broşürlük dizi izle dizi izleKombi Tesisat Radyo DinleChat paysafe paysafe kartSohbet arkadaş travestitravesti travesti travesti