Showing posts with label NYP. Show all posts
Showing posts with label NYP. Show all posts

Sunday, January 10, 2016

Interface (Arayüz) Nedir? Abstract (Soyut) Sınıf ile Arayüz Arasındaki Fark Nedir? - What is Interface? What is Difference between Interface and Abstract Class?

Konsept olarak ikisinin ifade ettiği kavramlar çok farklıdır. Arayüz herhangi bir nesnenin yapısı hakkında bilgi içermek yerine nesnenin nasıl kullanıldığıyla ilgilidir. Fakat Soyut sınıflar nesne yapısı hakkında bilgi içerirler ve nesnenin var oluşunda kavramsal etkiye sahiptirler. Soyut sınıflarla ilgili örnek daha önceki makalede verilmişti. Arayüz için aşağıdaki C# kodu örnek olarak verilebilir. Bu örnekte birbiriyle tür olarak hiç bir alakası olmayan iki sınıfın ekleme zamanı (Insert Time) ve güncelleme zamanı (Update Time) olarak iki kayıt özelliğini taşıdığını görüyoruz. Bu sınıflara ILog arayüzünü eklenerek ortak bir yöntem ile ortak özelliklere erişim imkanı vermiş olduk. Arayüzler sınıfların kalıtımından farklı olarak birden çok kere aynı sınıfta kullanılabilirler. Ayrıca arayüzler konsept gereği private (gizli) ögeler içeremezler.

public interface ILog
{
    DateTime InsertTime { get; set; }
    DateTime UpdateTime { get; set; }  
}

public class EmployeeDatabaseTable:ILog
{
    public string Name { get; set; }
    public string SurName { get; set; }

    public EmployeeDatabaseTable()
    { }

    public DateTime InsertTime { get; set; }

    public DateTime UpdateTime { get; set; }
}

public class CarXML:ILog
{
    public string Brand { get; set; }
    public string PlateNumber { get; set; }

    public CarXML()
    { }

    public DateTime InsertTime { get; set; }

    public DateTime UpdateTime { get; set; }
}



Abstract (Soyut) Sınıf Nedir? - What is Abstract Class?

Soyut sınıflar aslında var olmayan fakat konsept olarak bir kavramı ifade eden sınıflardır. Örneğin kedi ve köpek ortak olarak bir hayvan olmalarına rağmen hayvan dediğimiz şey bir kimlik kazanmadan var olamaz. Nesne yönelimli programlamada bu durumlarda soyut sınıflar kullanılır. Soyut sınıfların en önemli özelliği bu sınıflardan nesnelerin türetilememesidir. Normal sınıflardan bir diğer farkı ise sadece tanımlanmış fakat tamamlanmamış soyut ögeler içerebilmesidir. Bu ögeler bu sınıftan miras alan diğer sınıflarca tamamlanacaktır. Örnekle paralel olarak aşağıdaki C# kodlarını oluşturabiliriz.

public abstract class Animal
{
    public decimal Weight { get; set; }
    public decimal Volume { get; set; }

    public Animal(decimal Weight, decimal Volume)
    {
        this.Weight = Weight;
        this.Volume = Volume;
    }
     
    public abstract string GetSpecies();

}

public class Cat:Animal
{
    public Cat(decimal Weight, decimal Volume)
        : base(Weight, Volume){}
 
    public override string  GetSpecies()
    {
       return "Cat";
    }
}

public class Dog : Animal
{
    public Dog(decimal Weight, decimal Volume)
        :base(Weight, Volume){}

    public override string GetSpecies()
    {
       return "Dog";
    }
}

Nesne Yönelimli Programlama (NYP) Temel Kavramlar - Object Oriented Programming (OOP) Basic Consepts

NYP'nin en temel kavramları şunlardır:

1. Soyutlama (Abstraction): Soyutlama günlük hayatta hayatı yaşanabilir kılan en önemli olgulardan biridir. Kavram olarak karmaşıklığın gizlenmesini ifade eder. Bu kavramı anlatmak için en güzel örnek yine insanın kendisi olacaktır. Bilindiği üzere insan yaşamını sürdürmek için kan dolaşımını sağlamalı, düşünmeli, görmeli, anlamalı vb. bir çok fiziki ve mental işlemleri gerçekleştirmelidir. Bunların yapılabilmesi aslında birçok iç işleyişin, mantıksal hesaplamanın ve kurgunun sonucudur. Fakat insan bunların çoğundan direk olarak haberdar olmaz. Sürekli kalp atışını duymanın ne kadar çekilmez bir şey olacağı konusunda sanırım herkes hemfikir olacaktır.

2. Kapsülleme (Öz-Kapsülleme) (Encapsulation) : Kavram olarak soyutlamanın bir alt kümesidir. Bazı kaynaklarda bilgi saklama (Information Hiding) olarak da tanımlanmaktadır. Kelime olarak incelendiğinde "capsulation" (kapsülleme) ve iç içelik anlamı katan "en" eki ile oluşturulmuştur. Yani Türkçe'ye çevirirken "Öz-Kapsülleme" olarak çevrilmesi daha doğru olacaktır. NYP'de iç işleyişle alakalı olup dışarı sunulmasına gerek olmayan öğelerin gizlenmesi anlamında kullanılmaktadır. Yukarıdaki örnekle paralel bir örnek vermek gerekirse, insanların saydam olmamasının çok önemli bir şey olduğu konusunda da sanırım herkes hemfikir olacaktır.

3. Kalıtım (Inheritance): Eski programlama dillerinin en önemli dezavantajlarından biri yeniden kullanılabilirlik özelliklerinin düşük olmasıdır. Bu durum geliştirilen yazılımların bakım maliyetlerini büyük ölçüde artırmaktadır. Kalıtım kelime olarak ebeveyn öğenin özelliklerini çocuk öğelere iletmesi manasına gelmektedir. Klasik bir örnekle anlatmak gerekirse her memeli bir hayvandır. Burada her memelinin hayvan olarak tanımlanması genelleme (generalization) olarak isimlendirilmektedir. Bilindiği üzere her memeli yemek, içmek ve uyumak gibi ortak aktiviteleri ve özellikleri paylaşır.

4. Çok Biçimlilik (Polymorphism): Tek bir arayüz üzerinden değişik tipdeki öğelerin özelliklerinin kullanılabilmesini ifade eder. NYP'de ençok karşılaşılan çok biçimlilik örnekleri ebeveyn öğenin çocuk öğelerin yerine kullanılmasında veya arayüz (interface) kullanılmasında ortaya çıkar.