24 Nisan 2014 Perşembe


                                    PROGRAM AKIŞINI KESMEK VE OLAYLARI İŞLEMEK

                HATA AYIKLAMA

Hata, programın çalışması sırasında ortaya çıkan bir durumdur. Hatalar çoğunlukla kullanıcı kaynaklıdır.  Örneğin, kullanıcı programda sayı girilmesi gereken alanda metin bilgisi girerse hata meydana gelir. Programcı bu nedenle oluşabilecek durumlar için hataları kontrol edebilen program kod satırları yazarak programın kırılmasını önler.
            Hata ayıklamanın avantajı, bir hata oluştuğunda otomatik olarak çalıştırılan ExceptionHandler (İstisna Durum Yöneticisi) adında bir kod bloğu tanımlamanıza imkan vererek hata yönetimi verimliliğini artırmaktır. Bir diğer avantajı ise, çok sık oluşan program hataları için nesne tabanlı programlamada standart istisnai durumların tanımlanmış olmasıdır.

HATA TÜRLERİ

            Hatalar üç çeşittir.

Yazım Hataları

            Program içinde kullanılan fonksiyon adları, değişken adları, yapı isimleri ve komutların karakterlerinin yanlış yazımından meydana gelen hatalardır.
Örnek: MessageBox.Show yazılması gerekirken MessageBoxShow yazılırsa yazım hatası oluşur. Oluşan bu hata görev listesi (TastList)  pencerisinde görüntülenir.

Çalışma Zamanı Hataları

            Uygulamanın çalışması icra edilirken bir işlem çalışmayabilir. Örneğin, sıfıra bölme hatası bu tür hatalara bir örnektir.

Mantıksal Hatalar

            Bu hatalar uygulama derlenirken ve yürütülürken oluşur. Bu durumda program çalışsa bile yanlış sonuç üretir.

Örnek:

Yaş bilgisi girilmesi istenen bir alana negatif değer girilemez ya da bir işçinin maaşı hesaplanırken haftada 50 saat yazılması gereken yere 150 saat yazılırsa program çalışır ancak sonuç doğru olmaz. Bu hata bir mantık hatasıdır. 

Debug Menüsü Elemanları

Start

             Uygulamayı çalıştırmak için kullanılır. Klavye kısayol tuşu F5’tir.

Restart

             Debug modunda iken çalışmakta olan uygulamayı sonlandırır ve uygulamanın yürütülmesine yeniden başlatır. Kısayol tuşu CTRL+Shift+F5’tir.

Stop Debugging

Hata ayıklama işlemini sonlandırır ve tasarım moduna geri döner. Kısayol tuşu Shift+F5’tir.

Step Into

            Program kodlarını satır satır çalıştırmak için kullanılır. Kısayol tuşu F11’dir.
Eğer bir sonraki satır, bir metodu çağırırsa Step Into, o metodun başlangıcında durur. Yani, sadece bulunduğu metot içinde çalışır.


Step Over

            Program satırlarını adım adım çalıştırmak için kullanılır. Bir sonraki satırda çağrılan bir metotsa çağrılan metodun içine girmeden metodu çalıştırır ve bir sonraki satırdan itibaren çalışmaya devam eder. Kısayol tuşu F10’dur

Step Out

            Çalıştırılan metodun içindeki belirtilen bütün komutlar işletilir. Eğer metot içerisinden bir başka metot çağrılıyorsa, çağrılan metot işletilerek metodun işleyişi bir sonraki satırdan devam eder.
Run to Cursor

            İmlecin bulunduğu satırdan itibaren programın çalışmasını yürütür.

Watch 

         Bir değişken ya da ifadenin programın icrası esnasında hangi değerleri aldığını görmenizi sağlar. Görmek istediğiniz değişkenin üzerinde iken sağ tıkla açılan menüden Add Watch komutu tıklanarak değişken Watch penceresine aktarılır ve burada değerleri izlenir.

TaskList (Görev Listesi Penceresi)

            Program  içinde tanımlanmayan değişken, metot ya da yazım hatalarını gösteren penceredir.
TaskList penceresini açmak için WIEW menüsünden Task List komutu seçilmelidir.



Diğer bir yöntem olarak ise, klavye kısayol tuşu Ctrl+Alt+K’yı kullanmaktır.

Breakpoint ve Breakpoints Penceresi

            Programın işleyişini istediğiniz bir noktada durdurmak için kod satırına Breakpoint (kesme noktası) ekleyebilirsiniz. Böylece program sizin işaret ettiğiniz kesme noktasında duracaktır.

            Bir kod satırına Breakpoint eklemek için F9 kısayol tuşu veya sağ tıkla açılan menüden “Insert Breakpoint” komutunu vermeniz gerekir.


Program çalıştırılıp kesme noktası eklenen satıra geldiğinde programın çalışması durur. Kırmızı zemin rengi sarıya dönüşür.
Breakpoint’i silmek için Breakpoints penceresindeki kesme noktası üzerine sağ tık yapılıp açılan menüden Delete komutu seçilir.



Kesme noktası eklenmiş satır Breakpoints penceresinde gösterilir.

Output Penceresi

            Programın derlenmesi aşamalarını gösterildiği penceredir. Kısayol tuşu CTRL+Alt+O’dur.
Output penceresinde bulunan açılır liste kutusunda iki seçenek vardır. Bunlar Build ve Debug’dır.




Command Window (Komut Penceresi)

            Uygulamanızı çalışma zamanında takip etme işlemine Trace denir. Trace anında, kod satırlarında yer alan değişkenlerin o anki değerlerini görmenizi ve bu değerlerle matematiksel işlem yapmanızı sağlayan pencere komut penceresidir. Kısayol tuşu CTRL+Alt+A’dır.




Hata Ayıklama ve İz Bulma Sınıfları

Trace ve Debug Sınıfları

            Bu sınıfların kullanımıyla dosyalama mekanizmasının (log) oluşturulması ve yönetilmesi işlemleri yapılmaktadır. Bu sınıfları kullanabilmek için using  deyimiyle birlikte System.Diagnostics namespace’nin projenin başına yazılması gerekir.
            Bu iki sınıf, proje geliştirme aşamasında hata mesajlarını, projenin uygulanması aşamasında ise gerekli dosyalama bilgilerini gerekli yerlere yazdırmak açısından birçok kolaylık sunar. Trace ve Debug sınıflarının tüm özellikleri aynıdır. Tek fark, Debug sınıfı Release uygulaması içine derlenmemesidir.

TraceListener Sınıfları

                Kendilerine gelen bilgiyi tutarak ilgili kaynaklara gönderebilien sınıflar Trace ve Debug sınıflarıdır. Bu işlemleri yapabilmek için TraceLİstener nesneleri kullanılır. Trace ve Debug sınıflarının Listeners (dinleyici) özelliğiyle TraceListener tipinde koleksiyon referansı tutar.

 TextWriterTraceListener

            Bu listener sınıfı Trace ve Debug sınıflarına iletilen bilgiyi bir dosyaya (log) yazmak için kullanılır.

EventLogTraceListener

            Trace ve Debug sınıflarına gelen veriyi Windows Eventlog’un (olay dosyasına) gönderir.
App.Config Dosyası

            Projede kullanılan, örneğin kullanıcı adı ve şifresi, veri tabanının adı ve şifresi ya da bir veri tabanı dosyasına bağlanıyorsanız, veri tabanının konumu gibi bilgiler değiştirilmek istenebilir. Bu değişiklikler için  App.Config dosyasında kullanılır.
            App.Config dosyası bir XML dosyasıdır. XML dosyasının içeriği oluşturulurken yazım kurallarına dikkat edilmelidir.

                        Trace ve Debug Sınıfıyla Kullanılan Komutlar


Write

            Bir şarta bağlı olmadan verilen metni Listener koleksiyonuna yazar.

Writeline

            Bir şarta bağlı olmadan verilen metni Listener koleksiyonuna yazar ve bir sonraki satıra geçer.
WriteIf

            Mantıksal şart olduğunda yazılması verilen metni Listener koleksiyonuna yazar.
WriteLineIf


                        Mantıksal şart olduğunda yazılması verilen metni Listener koleksiyonuna yazar ve bir alt satıra geçer.

Assert

            Koşulun yanlış olması durumunda Listener koleksiyonuna belirtilen mesajı yazdırır.

Fail
            Olumsuz bir durum oluştuğunda otomatik olarak bir bildiri oluşturur. Bildiri mesajı Listener sınıfına yazdırılır ve bir mesaj kutusuyla ekrana gelir.


İstisnai Olaylar

            Bir programın hatasız yazılmış olması o programın hiç hata vermeyeceği anlamına gelmez. Kullanıcıdan ve diğer durumlardan kaynaklanan sebeplerden dolayı doğru yazılmış kodlar da hata verebilir. Bu durumda, hataların oluşumunu her zaman kontrol altında tutamayabilirsiniz. Ancak, oluşabilecek hatalara karşı tedbirler alabilirsiniz. Yapacağınız bu işleme İstisna Yönetimi denir.

System.Exception Sınıfı

            Nesne tabanlı programlamada istisnai olaylar sınıflarla simgelenir. Tüm istisnai olay sınıfları System namespace’ inin Exception sınıfından türetilmelidir. Böylece tüm olaylar Exception sınıfının birer alt sınıfıdır.

Try-Catch Kullanımı

En sık kullanılan hata ayıklama kod bloğudur. Oluşabilecek hatalar try bloğunda, hata durumunda işletilecek kodlar ise catch bloğunda yazılır. Hata olmaması durumunda catch bloğundaki kodlar çalıştırılmaz. Hata olması durumunda ise, hata oluşan kod satırından catch bloğuna kadar olan kod satırları işletilmez. Catch bloğundaki kod satırları işletilir.

Try-Catch bloğu kullanım şekli şöyledir;
Try
{
       // Hata oluşturabilecek olan kodlar
}
catch
{
      // Hata oluşursa işleyen kodlar

 }

Finally Kullanımı

            Hata oluşması durumunda işletilecek kod satırları yoksa programın kırılmasını engellemek için finally bloğu kullanılmalıdır. Finally bloğu hata olsada olmasa da çalışan bir bloktur.

 Finally bloğunun kullanım şekli şöyledir;
Try
{
   // Hata oluşturabilecek olan kodlar
}
finally
{
   // Her koşulda çalışacak kodlar
}

Throw Rethrow Kullanımı

Throw Kullanımı

Throw hatayı fırlatma anlamına gelir. Bazı durumlarda hatalar bilerek oluşturulmak istenebilir. Bunun için, “throw” komutu kullanılır. “throw” ifadesinin kullanıldığı noktada program durarak istenilen istisnayı üretir.

 Rethrow Kullanımı  

Rethrow hatayı yeniden fırlatma anlamına gelir. Rethrow kullanımı birden fazla catch  bloğu kullanıldığı zaman uygulanır. Bir catch bloğunda yakalanan istisnai olay diğer catch bloğunda da yakalanabilsin diye yeniden fırlatılır

  

27 Mart 2014 Perşembe

İnternet ve eposta yazılımlarını Kullanmak

                         MİCROSOFT OUTLOOK 2010

Outlook yalnızca e-pota göndermenize, almanıza ve yönetmenizi sağlayan bir yazılım değildir, aynı zamanda takviminizi ve arkadaşlarınız iş ilişkileriniz gibi kişileri de yönetmenizi sağlar.

Bunlara ek olarak, takviminizi internet aracılığıyla aileniz ve çalışma arkadaşlarınızla paylaşabilirsiniz. Outlook ürüne belge, elektronik tablo, sunu oluşturma ve e-posta yönetme için farklı türden yazılımların birleştirildiği “Office” ürün paketinin bir parçasıdır.



Outlook’ da Dosya , Giriş , Gönder, Klasör, Görünüm sekmeleri bulunmaktadır.







Dosya Sekmesi

Dosya sekmesinde, Outlook Hesap Ayarlarına erişebiliriz. Açılacak olan e-posta hesabını buradan değiştirebilir yenisini ekleyebiliriz.




Giriş Sekmesi

Giriş sekmesinde Gelen Kutusu, Gönderilmiş Öğeler, Silinmiş Öğeler, bulunaktadır.

Gelen Kutusu: E-posta hesabına karşı taraftan gönderilmiş olan maillerin bulunduğu kısımdır.
Gönderilmiş Öğeler: Karşı tarafa gönderilen maillerin bulunduğu kısımdır.
Silinmiş Öğeler: Outlook hesabından silinmiş maillerin bulunduğu kısımdır.
Taslaklar, Arama Klasörleri, Önemsiz E-Posta, RSS akışları da bulunmaktadır.










 Posta kısmına tıklandığında maillerin olduğu kısım açılmaktadır.
Aynı şekilde Takvim Kişiler Görevler kısımlarına tıklandığında ilgili kısımlar açılmaktadır.









Outlook yazılımında sadece mail değil takvim ve kişiler bölümleri de yer almaktadır.



Giriş Menüsü;
Yeni mail göndermek için Yeni E-posta sekmesinde imkan sağlanır. E-postalarla ilgili işlemlerin bulunduğu kısımdır.



Klasör Menüsü:
Klasör menüsünde Gelen Kutusu, Gönderilmiş öğeler gibi klasör ekleyebiliriz. Kısacası Outlook’ un klasör ayarlarını yapabileceğiniz yerlerdir.





Görünüm Menüsü
Görünüm menüsünde Outlook’un arayüzü ile ilgili ayarların bulunduğu kısımdır.


Bileşenler Oluşturmak

BİLEŞENLER OLUŞTURMAK


Metotlar İle Kapsülleme

Alanları gizlemenin (kapsüllemenin) yollarından bir tanesi de metotları kullanmaktır. Bilgisayar ekranındaki bir noktayı x ve ye koordinatları ile gösteren bir yapı olsun. X koordinatı için geçerli aralığın 0 ile 1280 arasında olduğunu y koordinatları ise geçerli aralığın 0 ile 1024 arasında olduğunu varsayalım.

struct  EkranPozisyonu{
Public EkranPozisyonu(int x, int y)
this.X=aralikDenetleX(x);
this.Y=aralikDenetleY(y);
}
public int X;
public int Y;
private static int aralikDenetleX(int x){
if(x<0 || x>1280)
{
throw new ArgumentOutOfRangeException(“X”);
}
return x;
}
private static int aralikDeneleY(int y){
if(y<0 || y>1024)
{
throw  new ArgumentOutOfRangeException(“Y”);
}
return y;
}
}

Bu yapı ile ilgili veri tipi özel (private). Ortak (public)  veri kullanımı sınırlılıkları olan bir uygulamadır. Çünkü kullanımı denetlemez. Örneğin Ekran Pozisyonu kurucu aralığı parametreleri denetler. Ancak böyle bir denetim ortak alanlara (X ve Y) uygulamaz.


Özellikleri Kullanma

Bir özelliği bir deyimde kullandığınızda onu ya bir okuma bağlamında (değerini değiştiremediğiniz durumlar) ya da bir yazma bağlamında (değerini değiştirdiğiniz durumlar) kullanırsınız.
Bir özelliği okuma bağlamında kullandığınızda derleyici alan benzeri kodunuz otomatik olarak o özelliğin get erişimcisine yapılan bir çağrıya dönüştürür. Benzer biçimde de bir özelliği yazma bağlamında kullanırsanız derleyici kodu otomatik olarak set erişimcisine yapılan bir çağrıya dönüştürür.


Sadece Okunabilir

Sadece get erişimcisi olan özellikleri bildirmesine izin verir. Bu durum özelliği yalnızca okuma bağlamında kullanabilirsiniz.

Örnek:

struct EkranPozisyonu2
{

public int X
{
get
 {
 return this.X;
}
}
}

X özelliği bir set erişimcisi içermez. Bu yüzden x değişkenine değer atayarak bir yazma bağlamında kullanmak için yapılan her girişim başarısız olur.


Sadece Yazılabilir

Benzer biçimde yalnızca set erişimcisi olan bir özellik bildirebilirsiniz. Bu durumda özelliği yalnızca yazma bağlamında kullanabilirsiniz.

Örnek:

struct EkranPozisyonu2
{
 ……..
public int X
{
set
{
this.X=aralikDenetlex(value);
}
}
}

Arayüz Özellikleri

Arayüzler yöntemlerin yanında özellikler de belirtebilir .Bunu yapmak için get veya set anathar
sözcüğü kullanılır. ;Ancak arayüzler uygulama kodları barındıramayacakları için get ve set erişimcilerinin
gövdeleri yerine noktalı virgül kullanılır.

Örnek:

interface IEkranPozisyonu
{
int X { get; set;}
int Y {get; set;}
}

Bu arayüzü kullanan tüm sınıf ve yapılar get ve set erişimci yöntemleri ile birlikte X ve Y özelliklerini de kullanmak zorundadır.

Otomatik Özellikler

Özelliklerin başlıca amacı alanların kullanımı uygulamasını dış dünyadan saklamaktadır. Özelliklerin amacına yönelik kullanımı önemlidir.

Veriyi ortak (public) alanlar olarak göstermek yerine özellikler tanımlamanız için en az iki neden vardır.
Uygulamalarla Uygunluk: Alanlar ve özellikler, derlemelerde farklı meta veri kullanarak kendilerini ortaya koyar. Bir sınıf geliştiriyorsanız ve ortak alanlar kullanmaya karar verdiyseniz bu sınıfı kullanan bir uygulama, alanlar olarak bu öğelere başvuracaktır. Bir özelliği okurken ve yazarken kullandığınız söz dizimini bir alanı okumak ve yazmak için kullanabilseniz de derlenen kod gerçekte çok farklıdır.
Arayüzlere Uygunluk: Bir arayüz gerçekleştiriyorsanız ve arayüz özellik olarak bir öğe tanımlıyorsa özellik sadece özel (private) alanlardaki veriyi okuyor ve yazıyor olsa bilr arayüzdeki şartlara uyan bir özellik yazmanız gerekir.


Özellikler İle Nesneleri Başlatma

Bir nesneyi başlatmak için kurucuları tanımlamayı öğrenmiş olmalısınız. Bir nesne birden çok kurucuya sahip olabilir ve bir nesnedeki farklı öğeleri başlatmak için çeşitli parametrelerle kurucular tanımlayabilirsiniz. Ancak bu pratik bir yaklaşım değildir.
Bir sınıfın kaç adet alan içerdiğine ve alanları başlatmak için istediğiniz çeşitli bileşimlere bağlı olarak çok sayıda kurucu yazmaya son verebilirsiniz. Bir sınıf oluşturulduğunda, set erişimlere sahip ortak (public) özellikler için değerler belirleyerek bu oluşumu başlatabilirsiniz.

26 Mart 2014 Çarşamba

Kalıtım ve Arayüz

KALITIM


Kalıtım nesne tabanlı programlama dünyasında kilit öneme sahip bir kavramdır. Nesne tabanlı programlamada gerçek dünya problemlerini bilgisayar uygulamaları yardımıyla çözmek için bu problemleri modellemek gerekir. Sınıflar, modellemenin yapı taşlarıdır. Bu noktada devreye kalıtım girmektedir.


Temel Sınıflar ve Türetilmiş Sınıflar

Nesne tabanlı programlama ile problemleri gerçek dünyadakine benzer tarzda nesneler şeklinde modelleyerek çözmeye çalışır. Önce sınıflar tasarlanır. Bir uygulama çok fazla sayıda sınıf yardımıyla modellenebilir.
Bu sınıflardan bazıları temel sınıf bazıları da türetilmiş sınıflardır.

Örnek:
class Insan
{
//temel sınıf üyeleri
}
class Ogrenci: Insan
{
//türetilmiş sınıf üyeleri
}
Bazı sınıf doğrudan en fazla bir sınıftan türetebilir. İki ya da daha fazla sınıftan türetilemez. Eğer böyle bir ihtiyaç olursa arayüzleri kullanmak gerekir. Ancak tüm sınıflar dolaylı olarak System.Object sınıfından türetilmektedir.

Türetilmiş bir sınıftan başka sınıflar da türetilebilir. Ancak bunun bir şartı vardır. “Sealed” olarak tanımlanmış bir sınıftan başka bir sınıf türetilemez.





Temel Sınıf Kurucularını Çağırma


Türetilmiş bir sınıf, temel sınıfın tüm alanlarına sahiptir. Bu alanların başlangıçta ilk değerlerinin belirlenmesi gerekir. Bu amaçla metotlar çağrılır. Türetilmiş bir sınıftan temel sınıfa ait kurucu metodu çağırmak için “base” anahtar sözcüğü kullanılır.


class Insan
{
 //temel sınıf üyeleri
 public Insan(string ad)//temel sınıf için kurucu metot
 {
 //...
 }
 //...
}
class Ogrenci : Insan
{
 //türetilmiş sınıf üyeleri
 public Ogrenci(string ad)
 : base(ad)//Insan(ad) temel sınıf kurucu metodunu çağırır
 {
 //...
 }
 //...
}  


Bu şekilde temel sınıf kurucusu çağırılmazsa derleyici varsayılan temel sınıf kurucusunu çağırmaya çalışır. Bu da başarılamazsa bir derleyici hatası oluşur.



New Metodu

Programcının çok zorlandığı durumlardan bir tanesi de sınıflara ve sınıfların üyelerine benzersiz ve anlamlı adlar bulmaktır.
class Insan {
//temel sınıf üyeleri
 public double Boy, Kilo;
 public string Ad;
 public Insan(string ad)//temel sınıf için kurucu metot
 {
 this.Ad = ad;
 this.Boy = 0.45;
 this.Kilo = 3.5;
 }
 public void Buyu()  {
 Boy += 0.5;
 Kilo += 0.5;
  }
 }
 class Ogrenci : Insan {
 //türetilmiş sınıf üyeleri
 public Ogrenci(string ad)
: base(ad)//Insan(ad) temel sınıf kurucu metodunu çağırır
 {
 }
new public void Buyu()  {
 this.Boy += 1.5;
 this.Kilo += 1.5;
 }
 public void Oku()  {
 //Oku metodu kodları
 }
}


Virtual(Sanal) Metodu
Temel sınıfa ait bir metodun bazen türemiş sınıfta farklı bir şekilde kullanılması gerekebilir. Bu durumda temel sınıfın söz konusu metodu türemiş sınıfın değiştirip kullanabileceği yönünde izin vermesi gerekir. Bu izin metodun temel sınıfta “virtual” olarak tanımlanması sonucu verilmektedir. Diğer bir ifadeyle temel sınıfta “virtual” olarak tanımlanmış bir metodun türemiş sınıfta yeniden yazılabileceği belirtilmiş olunuyor.

Override (Geçersiz Kılma) Metodu

Temel sınıfta “virtual” tanımlanmış bir metodun türemiş sınıfta yeniden yazılması için “override” sözcüğü kullanılır. Temel sınıfta “virtual” tanımlanmamış ya da “static” tanımlanmış olan üyeler (metot,özellik,dinleyici ya da olay) türemiş sınıfta yeniden yazılamaz.

Protected (Korumalı) Erişim

“Protected” sözcüğü bir erişim belirtecidir. Yani bir sınıfın üyelerine kalıtım hiyerarşisi içinde o sınıftan türemiş diğer sınıfların erişebileceğini belirtir. Hiyerarşi dışından ise kimse “proctected” üyeleri erişemez.

                                                    ARAYÜZLER

Bir sınıftan kalıtımla almak güçlü bir mekanizmadır, asıl kalıtımın gücü bir arayüzden kalıtımla almasında yatar. Bir sınıf kalıtımla sadece bir sınıftan türetilebilir ancak bu bu kısıtlama kalıtımla arayüzden türetme söz konusu olduğunda ortadan kalkar.

Arayüz Tanımlama
Arayüz tanımlamak için “class” ya da “struct” sözcükleri yerine “interface” sözcüğü kullanılır. Arayüz içinde metotları bir class yada struct içerisinde olduğu gibi bildirilir. Farklı olarak herhangi bir erşim belirteci “public”,”private”,”protected” kullanılmaz ve metot gövdesi noktalı virgülle(;) ayrılır.
Örnek
interface IComparable
{
 int CompareTo(object obj);
}
Arayüzlerin sahip olabileceği üyeler:
Özellikler (properties)
Metodlar (methods)
Olaylar (events)
İndeksleyiciler (indexers)

Arayüzlerin sahip olamayacağı üyeler: 
Yapıcılar (constructors)
Yok ediciler (destructors)
Alanlar (fields)


Arayüz Kısıtlamaları
1. Bir arayüz için herhangi bir alan tanımlanamaz.
2. Bir arayüz içinde kurucu tanımlamaya da izin verilmez.
3. Arayüz içinde bir yıkıcı da tanımlanamaz.
4. Metot çin bir erişim belirteci de belirtemez.

Bir Arayüz Uygulamak
Bir arayüzü uygulamak için arayüzden kalıtımla alan ve arayüzde belirtilen tüm yöntemleri sağlayan bir sınıf ya da yapı bildirir.

Bir Sınıfa Arayüz İle Ulaşma
Hiyerarşide üst sıralarda tanımlanmış bir sınıf değişkeni ile bir nesneye başvurulabildiği gibi sınıfın uyguladığı bir arayüz olarak tanımlanmış bir değişken kullanarak da nesneye ulaşılabilir.

Mühürlenmiş (Sealed) Sınıflar

Kalıtımı her zaman akıllıca kullanmak çok kolay olmamaktadır. Bir arayüz ya da soyut bir sınıf oluşturulursa gelecekte kalıtımla alınacak bir şeyler yazılıyor demektir.

Nesne Tabanlı Programlama Ortamını Kullanarak Programlamaya Başlamak

NESNE TABANLI PROGRAMLAMA ORTAMI

1.Arayüz

Nesne tabanlı programlama yazılımı çalıştırıldığında aşağıdaki ekran ile karşılaşılır.



Menü Çubuğu: Yazılıma ait komutlar ve alt seçenekleri bulunmaktadır.

Başlangıç Sayfaları: Visual Studio’da başlangıç sayfalarının bulunduğu yerdir.

Son Açılan Projeler: En son hangi projeyi açılmış ise o projelerin bulunduğu yerdir.

New Projects: Yeni proje amcamıza imkan sağlar.

Open Projects: Daha önce oluşturulan projelere erişim imkanı sağlar.

Properties:Özellik sayfasıdır.





Yeni Proje Oluşturma

File menüsünden New seçeneğini seçeriz. Daha sonra Project seçeneğine tıklarız.

Kısayol olarak;
Ctrl + Shift + N




Daha sonra istediğimiz şekilde uygulama sayfası açıp kaydedebiliriz.





Konsol Uygulaması Oluşturmak

1-File menüsünden New seçeneği açılır ve Project tıklanıp New Project sayfası açılır.
2-Visual C# seçilip ConsoleApplication seçildikten sonra konsol uygulamamız açılır.

Konsol Ekranından Kod Yazmak
Konsol uygulaması, grafiksel kullanıcı arayüzünden çok, komut satırı penceresinde çalışan uygulamadır.

UYGULAMA
Ekrana “ Hello World “  mesajı yazan program yazılsın.


ÖNEMLİ NOKTALAR
1.Program büyük-küçük harf duyarlıdır. Kodlar yazılırken bu durum göz önünde bulundurulmalıdır.
2.Program kodu static void Main ifadesi altındaki küme parantezleri içerisinde yazılmalıdır.
3.Kod satırının sonuna noktalı virgül (;) konulmalıdır.
4.Console.WriteLine ifadesi çift tırnak(“ ”) içerisine yazılan metni ekrana mesaj olarak yazmaktadır.

Yazılan kodlar test edilmelidir. Bunun için F5 kısayol tuşu kullanılabilir ya da araç çubuklarındaki “StartDebugging” butonu veya menüden Debug-Start Debugging seçeneği de kullanılabilir.

Program çalışmaktadır. Fakat program çıktısının göremeden konsol ekranı kaybolmaktadır. Bunun için CTRL + F5 kısayol tuşu kullanılabilir veya yazılan kod satırının altına Console.ReadLine(); ifadesi eklenir.

Ekran Görüntüsü:









IntelliSense Kullanarak Kod Yazmak 

IntelliSense, nesne tabanlı programlama yazılımın kod tamamlama özelliğidir. Bu özellik daha hızlı ve hatasız kod yazma olanağı sağlar. Bir intellisense önerisini kabul etmek için açılan listeden ok tuşları yardımıyla seçtikten sonra Tab, Enter ya da boşluk tuşlarından birisine basılarak kullanılabilir. Bu işlem Mouse ile de yapılabilir.

NOT: Herhangi bir durumda intellisense öneri listesini görmek için Ctrl + Boşluk tuş kombinasyonu kullanılabilir.
Console ifadesini yazarken IntelliSense özelliğinden yararlanarak nasıl yazıldığı aşağıda gösterilmiştir.





İSİM UZAYLARI

Namespace

  Namespaceler (isim uzayları) nesneye dayalı, hiyerarşik ve birleşik, içinde çok sayıda sınıf, arayüz ve yapı bulundurabilen kütüphaneler olarak tanımlanabilir.
İsim uzayları program yazmanın en önemli parçasıdır ve daha çok yazılın kodların tekrar kullanabilirliğini artırmak için geliştirilmiştir. Yazılan kodlarla program büyüdükçe iki sorun ortaya çıkar. Birincisi büyük programları anlamak ve bakımını yapmak küçük program parçacıklarına göre daha zordur. İkincisi ise daha fazla kod, ad , metot sınıf demektir. Programda kullanılan ad sayısı arttıkça iki ya da daha fazla adın çakışma ihtimali, dolayısıyla projenin hata verme olasılığı da artar.
Örnek : Meyveler ve Sebzeler iki farklı alan olsun. İki program parçacığının içinde de “Islem” adlı sınıf olsun.

namespace meyveler
{
Class Islem
}
namespace sebzeler
{
Class Islem
}

Şuan projenin içerisinde, farklı isim uzayları (ad alanları) içerisinde kullanılan aynı sınıfların, birbirine karıştırılmasından nasıl kullanıldığı görülsün.
“meyveler” adlı isim uzayı içerisindeki “Islem” adlı sınıfı kullanmak için yazım şeklimiz,

meyveler.Islem

“sebzeler” adlı isim uzayı içerisindeki “Islem” adlı sınıfı kullanmak için yazım şeklimiz,
sebzeler.Islem
olmalıdır.
Görüldüğü gibi projenin herhangi bir yerinde sebzeler işlemi yapmak için “sebzeler.Islem” meyveler işlemi yapmak için “meyveler.Islem” ifadelerini kullanmak yeterli olacaktır.

Using İfadesi

Nesne tabanlı programlama yazılımı ortamının etkin bir şekilde kullandığı yazılım geliştirme paketi .NET Platformu içinde her bir sınıf, bir ad alanı içinde yer alır. Örneğin, Console sınıfı System ad alanı içerisinde yer alır. Bu, sınıfın tam adının aslında System.Console olması demektir.

Ancak console adlı sınıfın her kullanımda System ön ekinin eklenmesi isim uzayı (az alanı) kavramının anlamsızlaşmasına yol açacaktır. Neyse ki bu problem proglarda “using” yönergesi kullanılarak çözülebilir.
Using ifadesi , kapsama ad alanı getirir yani kullanılacak nesneleri ve sınıfları, artık ait oldukları ad alanları ile nitelendirmek gerekmez. İşaretlenmiş alandaki dört ad alanı, her yeni proje oluşturulduğunda nesne tabanlı programlama yazılımı tarafından otomatik olarak eklenir ve oldukça sık kullanılan sınıfları kapsar.

Grafiksel Arayüz

Şimdiye kadar basit konsol uygulaması oluşturuldu ve çalıştırıldı. Nesne tabanlı programlama yazılımı ortamı, aynı zamanda grafiksel Windows tabanlı uygulamalar oluşturmak için ihtiyaç duyulan her şeyi kapsar. Windows tabanlı uygulamanın forma dayalı kullanıcı arayüzü etkileşimli olarak tasarlanabilir.

Nesne tabanlı programlama yazılımı grafiksel uygulamanın iki görünümü sağlar. Tasarım görünümü ve kod görünümüdür.

Not: Nesne tabanlı programlama yazılımı grafiksel uygulamalar için iki şablon sağlar. Windows Form Application şablonu ve WPF Application şablonudur. WPF daha geliştirilmiş bir teknoloji olduğu için birçok ek özellik ve kapasite sağlar.

1-“File” menüsünden “New Project” seçeneği seçiliyor.
2-İlgili programlama dili ve WPF Application seçilmelidir.
 



Design sekmesinde formun grafiksel tasarımı kolaylıkla yapılır ve ilgili kodlar nesne tabanlı programlama yazılımı tarafından otomatik oluşturulur.
XAML ise “Genişletilebilir Uygulama İşaretleme Dili” (Extensible Application Markup Language) anlamına gelir ve XML benzeri bir dildir. Oluşturulan forma ve daha sonra form üzerinde yerleştirilecek nesnelere XAML ile müdahale edilebilir.



NESNE EKLEME
Programın sol tarafında bulunan Toolbox sekmesinin Common bölümündeki Label nesnesine tıklatılıp formun herhangi bir yerine tıklanarak “Label” nesnesi eklensin. Forma eklenen “Label” nesnesi seçiliyken Properties sekmesindeki Content yazan yere şu mesaj yazılsın.
“İsminizi Giriniz:”














Nesneye Kod Yazma

Form’ a buton ekleyip üzerine çift tıklandığında MainWindows.xaml.cs dosyası açılacaktır. Oluşturulan grafiksel form uygulamasında bulunan tüm nesnelere ait kodlar bu dosya içerisinde tutulur.


Numaralandırma ve Yapılar ile Değer Türleri Oluşturmak

NUMARALANDIRMA



Numaralandırma (enumeration) belli bir sözcüklerin, belli tamsayıları temsili durumlarında kullanılan bir yapıdır. Değişkenlerin alabileceği değerlerin sabit olduğu durumlarda kullanılır.

Numaralandırma (Enum) Tanımlama

Numaralandırmaları tanımlamak için ‘enum’ anahtar kelimesini kullanırız.

Örneğin, içindeki ay isimlerini barındıran bir numaralandırma tanımlayalım.

enum enumadi

{

sabit1,

sabit2,

...

}

Örnek:

enum aylar{

Ocak,Şubat ,Mart,Nisan,Mayıs,Haziran,Temmuz,Ağustos,Eylül,Ekim,Kasım,Aralık
}









Örnekte Ocak ayı 0 değerini alacak ve ondan sonra gelen sabitlerin değeri birer artarak devam edecektir.
Duruma göre tanımladığımız sabitlere farklı sayısal değerler de atayabiliriz. Bu işlem için “=” işlecini kullanmalıyız.

enum aylar{
Ocak=1,Şubat ,Mart,Nisan,Mayıs,Haziran,Temmuz=1,Ağustos,Eylül,Ekim,Kasım,Aralık
}

Yukarıda yazan örnekte ki tanımlamayı yaparsak sabitlerimizin değerleri aşağıdaki gibi olur.









Numaralandırma (Enum) Yapısını Kullanma  

Bir önceki başlıkta numaralandırmaların nasıl tanımlandığını belirttik. Şimdi ise tanımladığımız numaralandırma yapılarının program içinde nasıl kullanacağımızı belirtelim.

Öncelikle aylar adında bir enum tanımlayalım.

enum aylar  {
 Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz,
 Ağustos, Eylül, Ekim, Kasım, Aralık
 }

Şimdi de enum’u program içinde çağıralım.

class Program
 {
 static void Main(string[] args)
 {
 aylar ay = aylar.Şubat;
 Console.WriteLine(ay);
 Console.Read();
 }
 }

Ekran görüntüsü:







 YAPILAR (STRUCT) 


Nesne tabanlı programlama beş veri tipini destekler. Bunlar Class, Struct, Enum, Interface ve Delegate tipleridir. Aralarında mantıksal bir ilişki bulunan ama farklı türdeki verilerin bir arada bulunması gereken durumlarla karşılaşılabilir. Bu durumlarda belli bir grup verinin bir arada tutulması için oluşturulan yeni birime Yapı (struct) denir.

Yapılar değer türündedir. Dolayısıyla belleğin yığın(stack) bölümünde tutulurlar.. Bellek kullanım bakımından yığın (stack) ve öbek (heap) olmak üzere ikiye ayrılır.

Yığın bölümünde veriler üst üste gelecek şekilde depolanır. Yeni bir veri eklendiğinde bu belleğin en üst bölgesine yerleştirilir. LIFO (Last In First Oust) mantığına göre çalışır. Yani son giren ilk çıkar. Verilere erişim basit olduğu için hızlıdır.

Öbek kısmında ise boş bir alan oluşturulur ve veriler rastgele yerleştirilir. Vereilere erişim karmaşık olduğundan daha yavaştır.

Değer türleri belleğin yığın(stack) bölümünde tutulurken; referans türler belleğin öbek (heap) bölümünde tutulur.

Örneğin; sınıflar (class) referans türünde olduklarından dolayı belleğin öbek(heap) bölümünde tutulur.

Yapı (Struct) Tanımlama  

Yapıları tanımlamak için “struct” anahtar sözcüğünü kullanırız. Bir yapının genel tanımlama şekli aşağıdaki gibidir.

struct yapi-ismi
 {
 yapi-elemanlari-listesi;
 }

Örnek:

struct Ogrenci
 {
 int okulNo;
 string ad, soyad;
 }

Yapı ve Sınıf Arasındaki Farklar

Yapılar değer türünde olduklarından belleğin yığın (stack) bölümünde, sınıflar ise referans türünde oldukları için belleğin öbek (heap) bölümünde depolanırlar.





Sınıflar için varsayılan (default) yapıcı (constructor) metotlar yazılabiliyorken yapılarda bunu yapamayız. Fakat yapılarda parametreli yapıcılar tanımlayabiliriz.

 Burada dikkat edilmesi gereken nokta ise yapılarda tanımladığımız parametreli yapıcılara ilk değer ataması yapmak zorundayız. Sınıflarda ise buna gerek yoktur. Çünkü derleyici bizim yerimize ilk değer atamasını yapacaktır.