Method Overload

Metotları Aşırı Yükleme. Metotların aynı isimle farklı sürümlerinin oluşturulmasıdır. Normalde aynı isimde birden fazla metot olamayacağı düşünülsede, aynı isimde birden fazla metot kullanılabilir.

int YasHesapla (int yil)
{
}

int YasHesapla (DateTime tarih)
{
}

IntelliSense

IntelliSense birçok özellik içeren bir kod tamamlama yardımcısıdır.

Procedural Programming

Yordamsal programlama. Prosedürel programlama. Bu metodolojide geliştirilen uygulama parçalanamaz bir bütün halindedir. Yordamların çağrılması mantığına dayanan bir yöntemdir. Fonksiyon, altyordam, altprogram, metot gibi de adlandırılan yordamlar içlerinde hesaplama adımları barındıran program parçacıklarıdır. Tanımlanmış yordamlar program sırasında herhangi bir zamanda çağırılabilirler. Uzun yıllar kullanılmış bu yaklaşım yerini OOP ye bırakmıştır.

Object Oriented Programming (OOP)

Nesne Yönelimli Programlama. 1960 yılından beri adından söz ettiren metodolojidir. C# ve Java birer nesne yönelimli programlama dilleridir. Bu metodoloji aşağıdaki gibi ifade edilmektedir:

  • Uygulama, nesneler ve onların ilişkileri çerçevesinde belirli bir iş yapmak için geliştirilebilmelidir.
  • Her nesnenin bir sınıfı olmalıdır ve sınıflar nesnelerin ortak davranışlarını ifade etmelidir.
  • Nesneler birbirleri ile iletişime geçebilmelidir.

Gerçek dünya modellemesi ile program geliştirme yaklaşımıdır. Bu şu şekilde açıklayabiliriz. Bir fabrikayı ele aldığımızda, fabrikada işçiler, makineler ve bir çok nesne bulunur. Tüm bu argümanların aralarındaki ilişki çerçevesinde fabrikada çeşitli işler yapılır ve çıktılar üretilir. OOP mantığında da bu fabrika örneğinde olduğu gibi, çeşitli nesneler geliştirilip birbirleriyle ilişkilendirilerek, belirli amaçlara hizmet eden uygulamalar geliştirilir. OOP nin getirileri:

  • Yazacağınız sınıflar birbirinden bağımsız olarak geliştirilebilir. Bu sayede program böl, parçala, fethet mantığı çerçevesinde çok kolay bir şekilde parçalanır ve her parça ayrı ayrı ele alınabilir. OOP mantığında gerçek dünya algılayışı temel alındığı için bu, anlaşılması çok daha kolay bir yapıdır.
  • OOP, yapısı gereği kod tekrarlarının önüne geçer (doğru bir şekilde kullanılırsa) ve bu durum, özellikle ilk dönemlerde yazılımcıların hızlı bir şekilde OOP yapılarına geçmesinin temel nedenlerinden biri olmuştur.
  • Yukarıda değinilen getiriler, projelerin yönetilebilirliğini büyük miktarda artırdığı için daha büyük projeler çok daha az çaba ile yönetilebilir hale gelmiştir. Yine aynı getiriler sayesinde, projeler rahat bir şekilde büyütülebilmiştir.

Classes

Sınıflar. İçinde tanımlanan çeşitli özellikler barındırır ve sınıflardan nesneler türetilir. Araba diye bir sınıfımız olduğunu düşünün, temelde motor hacmi, koltuk sayısı gibi özellikleri olduğunu varsayarsak, araba sınıfından bmw marka bir nesne üretebiliriz.

public class araba  
{  
}

Abstract Class

Soyut Sınıf. Bu sınıflar diğer sınıflara base olmak için yazılır. Başka sınıflar bu sınıftan miras (inheritance) alır. Bu sınıflardan (intance alınamaz) nesne türetilemez. İçerisinde abstract metotlar ve abstract olmayan (non-abstract) metotlar olabilir. Bu metotların içi boştur.

public abstract class kisi  
{  
}

Base Class

Temel sınıf. Temel alınan sınıftır. Bir sınıf oluştururken başka bir sınıfı temel alarak (base alarak) oluşturabiliriz. Aşağıdaki örnekte Kisi sınıfı base alınmıştır.

public class Calisan : Kisi 
{
}

Instance – instantiating – instance of a class

Örnek, örnekleme, örnek almak, instance almak. Nesneler sınıfın örnekledir. Sınıflardan örnek alınarak nesne oluşturulması yöntemidir.

Araba bmw = new Araba();
bmw.renk = "mavi";

Access Modifiers

Erişim Belirleyiciler. Nesnelerin birbirleriyle ilişki kurarken hangi erişim kontrolleri ile çalıştığını bilmek önemlidir. Erişim belirleyiciler (access modifiers), sınıflara nerelerden ve ne şekilde erişileceğini belirtir.

  • Public: Her yerden erişilebilir.
  • Private: Sadece tanımlandığı sınıf içerisinden erişilebilir.
  • Internal: Sadece bulunduğu projede erişilebilir.
  • Protected: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan erişilebilir.
  • Protected Internal: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan erişilebilir. Ayrıca tanımlamanın aynı proje içerisinde olma şartı yoktur. Protected’dan farkı budur.
  • Eğer erişim belirleyici belirtilmemişse, sınıflar internal ’dır.

Structures in Class

Sınıf içindeki yapılar. Sınıf bileşenleri: Fields, Properties, Methods, Construction, Events.

Fields

Değer tutan yapılar. Nesnelerin özellikleri (property) için değer saklama alanıdır. Varsayılan durumda private yapılardır. Class içindeki tüm metotlardan erişilebilir.

public class Insan
{
    private string _isim;
    private string _soyisim;
}

Properties

Özellikler. Nesnenin özellikleridir. Kendi içinde iki metot barındırır.

Set metodu: bir property ye yeni bir değer atamak için kullanılır. Set metodu olmayan property ler read-only (yalnızca okunabilir) durumundadır.

Get metodu: bir property nin değerini okumak için kullanılır.

private string _isim;

public string Isim
{
    get { return _isim; }
    set { isim = value; }
}

Methods

Metotlar. Nesnenin yapabildiği işlerdir.

public void kos()
{
}

public static void zipla ()
{
}

Virtual Method

Sanal metot. Override edilebilir (geçersiz kılınabilir) metotlardır. Tanımlanmış olduğu sınıfı miras alan sınıflarda bu virtual metotlar override edilebilir.

public class insan
{
    public virtual void yazdir()
    {
        Console.WriteLine("adı");
    }
}

Override Method

Geçersiz kılma. Miras aldığımız sınıfta varolan virtual metodu geçersiz kılar, geçersiz kılınan metotun yerine tanımlanan bu metotla ilave farklı işlemler yapılabilir. Base anahtarı ile base class ın metotlarına erişilebilir.

public class insan
{
    public virtual void yazdir()
    {
        Console.WriteLine("adı");
    }
}

public class calisan : insan
{
    public override void yazdir()
    {
        base.yazdir()
        Console.WriteLine("soyadı");
    }
}

Abstract Method

Soyut metot. Abstract sınıflar içinde yazılabilir. Abstract metotların içeriği boştur ve burada gövdesi yazılmaz. Abstract sınıfı base alan sınıflarda bu metotların yapacağı işlerin belirtilmesi beklenir. Bu metotlar Private olarak tanımlanamaz.

abstract class kisi
{
    public abstract void kisiMetot();
}

Static Method

Statik metot. Static metotlar o metoda başka sınıflardan instance alınmadan ulaşılmasına olanak sağlar.

public yakala()
{
}
public static void yaz()
{
}

Constructor

Yapılandırıcı, oluşturucu, yapıcı metot. Sınıfın ismi ile aynı isimde olmalıdır. Sınıfın bir örneği oluşturulduğunda otomatik olarak çağrılan sınıfın özel bir yöntemidir. Sınıfın örneği oluşturulurken yapılacak işlemleri barındırır. Varsayılan değer atamak için kullanılabilir. Bu yöntemler parametre alabilir ve override edilebilir. Constructor tanımlanmadığı durumda veri tipleri için varsayılan değerler default olarak atanır.

public class Kisi
{
    private string isim;
    public Kisi ()
    {
        This.isim = "Ahmet";
    }

    // Burada kullanılan This, işlem yapılan sınıfı ya da sayfayı temsil etmektedir.

    public Kisi(string adi)
    {
        This.isim = adi;
    }
}

Delegate

Delege, temsilci. Metot referansıdır. Metod referansını tutmak için kullanılır. Metodları dolaylı olarak başlatmamıza izin verir. Metodun geri dönüş değer tipi ve parametreleri belirlenir. Geri dönüş tipi void olarak belirlenebilir, parametresiz tanımlanabilir. Kullanılacak metot tanımlanan delegate e uygun olmalıdır. Delegate ve Event birlikte kullanılır.

public delegate void Delege();
public class Telefon
{
    public event Delege EkraniKismaEventi;
    private byte _pilseviyesi
    public byte PilSeviyesi
    {
       get { return _pilseviyesi; }
       set 
       {
           _pilseviyesi = value;
           if(this._pilseviyesi < 20)
           {
              EkraniKismaEventi();
           }
       }
       
   }
}

Events

Olaylar. Nesnelerin tepkileridir. Delegate ile birlikte kullanılır. Metodun kendiliğinden başlamasını istediğimiz durumlarda kullanılır. Örnek olarak bir telefonun şarjı %20 nin altına düştüğünde ekran ışığının kısılmasını sağlamak için kullanılabilir.