Design Pattern

Tasarım deseni. Nesne tabanlı dillerde (c#, java) uygulama geliştirirken karşılaşılan sorunlara ve ihtiyaçlara çözümler getiren kalıplardır. Kod veya bir algoritma değildir. Sınıfları, nesneleri nasıl daha iyi oluşturulup yönetilebileceğini belirten yöntemlerdir. Esnekliği, kaliteyi artırır. Tasarım desenleri 3 ana gurubu vardır:

Creational Patterns

Kurucu desenler. Nesnelerin oluşturulması ve yönetilmesi ile iligili desenlerdir.

  • Singleton: Uygulama yaşam süresince bir nesnenin bir kez oluşturulmasını düzenler.
  • Abstract Factory: Birbirleri ile ilişkili sınıfların oluşturulmasını düzenler.
  • Builder: Birden fazla parçadan oluşan nesnelerin üretilmesini düzenler.
  • Factory Method: Aynı arayüzü (interface) kullanan nesnelerin üretilmesini düzenler.
  • Prototype: Var olan nesnenin kopyasının üretilmesini düzenler.

Behavioral Patterns

Davranışsal desenler. Birden fazla sınıfın bir işi yerine getirirken nasıl davranacağını belirleyen desenlerdir.

  • Chain of responsibility: Bir isteğin belli sınıflar içinde gezdirilerek ilgili sınıfın işlem yapmasını düzenler.
  • Command: İşlemlerin nesne haline getirilip başka bir nesne üzerinden tetiklemesini düzenler.
  • Interpreter: İşlemlerin nesne haline getirilip başka bir nesne üzerinden tetiklenmesini düzenler.
  • Iterator: Nesne koleksiyonlarının elemanlarını belirlenen kurallara göre elde edilmesini düzenler.
  • Mediator: Çalışmaları birbirleri ile aynı arayüzden türeyen nesnelerin durumlarına bağlı olan nesnelerin davranışlarının düzenlenmesini sağlar.
  • Observer: Bir nesnede meydana gelen değişikliklerde içinde bulundurduğu listede buluna nesnelere haber göndermesini düzenler.
  • State: Nesnelerin farklı durumlarda farklı çalışmalarını düzenler.
  • Strategy: Bir işlemin birden fazla şekilde gerçekleştirilebileceği durumlarını düzenler.
  • Template method: Bir algoritmanın adımlarının abstract sınıfta tanımlanarak farklı adımların concrete sınıflarında overwrite edilip çalıştırılmasını düzenler.
  • Visitor: Uygulamada ki sınıflara yeni metotlar eklenmesini düzenler.

Structural Patterns

Yapısal desenler. Nesnelerin birbirleri ile olan ilişkilerini düzenleyen desenlerdir.

  • Adapter: Uygulamadaki bir yapıya dışarıdaki bir yapıyı uygulamayı düzenler.
  • Bridge: Nesnelerin modelleme ve uygulamasını ayrı sınıf hiyerarşilerinde tanımlanmasını düzenler.
  • Composite: Ağaç yapısındaki nesne ve kalıplarının hiyerarşik olarak iç içe kullanılmasını düzenler.
  • Decorator: Bir yapıya dinamik olarak yeni metotlar eklenmesini düzenler.
  • Facade: Alt sistemleri direkt olarak kullanılması yerine alt sistemdeki nesneleri kullanan başka bir nesne üzerinden kullanılmasını sağlar.
  • Flyweight: Sık kullanılan nesnelerin bellek yönetimini kontrol edilmesini düzenler.
  • Proxy: Oluşturulması karmaşık veya oluşturulması zaman alan işlemlerin kontrolünü sağlar.

Singleton

Tek örnek. Bir tasarım desenidir (design pattern) . Bir nesnenin proje içerisinde tek örneğinin alınması istenen durumlarda kullanılır. Singleton nesnelerden yeni bir instance alınamaz. Singleton nesne için yapmamız gerekenler:

  • Yapıcı metot (constructor) erişim belirleyici (access modifiers) Private olarak tanımlanır. (new lenememesi için)
  • Nesnenin kendisinden bir static nesne tanımlanır. (uygulama ilk çalıştığında bir nesne örneği alınmış olacak.)
  • Tanımlanan nesneyi kullanmak için static property veya static metot tanımlanır. (dışarıdan kullanılabilir olması için)
public class SingletonNesne
{
   private static SingletonNesne instanceNesne = new SingletonNesne();
   public static SingletonNesne Instance
   {
      get { return instanceNesne; }
   }
}

Encapsulation

Sarmalama, paketleme, kapsülleme. Nesnelerin özelliklerinin dışarıdan erişilip kullanılmasını sınırlamak için kullanılır. Bunu yaparken access modifiers (erişim belirleyicileri) kullanırız. Nesnelerin içerisinde bazı işlevlerin kendi içinde yapılmasının istendiği durumlarda bu yöntem kullanılır.

public class insan
{
   private void adimat()
   {
   }
   public void yuru()
   {
      adimat();
   }
}

Interface

Arayüz. Sınıfların içerisinde hangi metotların yer alabileceğini söyleyebildiğimiz OOP özelliğidir. Sınıflar içerisinde kullanılabilecek metotları, metot tiplerini, alabileceği parametreleri belirleyebiliriz. Bir sınıfa birden fazla interface giydirebiliriz, uygulayabiliriz (implement). Arayüz içerisindeki metotların içerisi yazılmaz. Sadece metotlar belirtilir. Bu metotların içerisinde yapılacak işlemler arayüzün giydirildiği sınıflarda doldurulur. Sınıflara hem kural koymak için kullanılır, hemde ortak metotlar ile toplu işlem yapılmalarına imkan sağlanır.

interface kayitislemleri
{
   void kaydet();
   void guncelle();
   void sil();
}

class kisi : kayitislemleri
{
   public void kaydet()
   {
   }
   public void guncelle()
   {
   }
   public void sil()
   {
   }
}

Polymorphism

Çokbiçimlilik. Nesnelerin farklı amaçlar için kullanılabilmesini sağlayan yaklaşımdır. Burada metotlar aşırı yüklenebilir veya sınıflar miras alınabilir. İkiye ayrılır:

  • Static çok biçimlilik: metot ve operatörlerin aşırı yüklenmesi (overload edilmesi).
int YasHesapla (int yil)
{
}
int YasHesapla (DateTime tarih)
{
}
  • Dinamik çok biçimlilik: Özet sınıflardan miras alma yolu ile işlem yapılması. Runtime polymorphism (çalışma zamanı çokbiçimliliği) olarak bilinir.
public class insan
{
    public virtual void yazdir()
    {
        Console.WriteLine("adı");
    }
}

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

Thread, Threading

İş parçacığı. Birden fazla iş parçacığının aynı anda çalışması. Normalde, yazdığımız bir uygulamada yapılan işler Main Thread dediğimiz ana iş parçacığında çalışır. Bir iş yapılmaya başlanır biter ve diğer iş yapılmaya başlanabilir. Örnek olarak bir dosya yükleme işlemi yapılmaya başlandığında kullanıcı başka bir işlem yapabilmek için o işlemin bitmesini beklemek zorunda kalır. Thread özellikleri:

  • IsAlive: Çalışma durumunu verir.
  • Name: İsim atamak veya almak için kullanılır.
  • Priority: Çalışma önceliği alınır veya atanır.
  • Abort: Çalışmasını iptal eder.
  • Resume: Beklemye alınmış olan Thread i devam ettirir.
  • Sleep: Belirtilen süre kadar bekletilmek için kullanılır.
  • Suspend: Beklemeye alır, geçici olarak durdurur.

MultiThreading

Çoklu iş parçacığı. Birden fazla işin aynı anda yapılabilmesi için birden fazla iş parçacığı kullanılmasıdır. Thread ile yapılan işler arka planda yapılır, uygulamadaki diğer işlemlerin kullanılmasına engel olmaz.

using System.Threading;

void islemyap()
{
    Thread KaydetThread = new Thread(new ThreadStart(DosyayiKaydet);
    KaydetThread.Start();
}
static void DosyayiKaydet()
{
    //dosya kaydetme işlemi
}

Algoritma

Belirli işleri yapmak için izlenen yollardır. İhtiyaçlara uygun çözümler bulunur ve çözüme giden yollar oluşturularak sonuçlara ulaşan bir akış elde edilir. Tüm ihtimallerin düşünülmesi ve çözüm yollarını bulmak. Tüm ayrımların düşünülmesi ve neler yapılacağını belirlemek.