Sorularla Nesne Tabanlı Programlama (OOP) – 1

Bu aralar nesne tabanlı programlamayı (object oriented programming – OOP) iyice anlayabilmek için kendimce sorular sorup bunları araştırıyorum. Lise yıllarımdan beri C# öğreniyor ve kullanıyorum ama nesne tabanlı programlama ile ilgili birçok terimi kullandığım halde tam olarak ne olduğunu bilmediğimi fark ettim. Bu nedenle bunları iyice öğrenmeye çalışıyorum. Hazır araştırıyorken bulduklarımı soru-cevap şeklinde burada da paylaşmak istedim.

Bunları bir yazı serisi gibi paylaşmayı düşünüyorum. Konu sıralamasına göre gitmeyebilir, yani bunu bir konu anlatım gibi görmeyin. Araştırma yazısı gibi düşünebilirsiniz, çünkü tanımlamadan başladım araştırmaya ve bir yandan da ufak uygulamalar yapıyorum, terimlerle karşılaştıkça kendime sorular soruyorum “bu nedir, neden kullanıyoruz” gibi. Bu soruları sordukça da cevaplarını bulup ona göre burada sıraladım.

Son olarak belirtmek istediğim bir şey daha var, bu soru ve cevaplarda olabildiğince basit ve kısa tutmaya çalıştım. Hem akılda kalması hem de uzun tanımlamalarla kafa yormamak açısından böyle bir yol izledim fakat anlamadığınız noktalarda internette aratıp uzun tanımlamalarına kendiniz de bakabilirsiniz.

Başlayalım öyleyse…

Nesne Tabanlı Programlama - Şablon

Nesne Tabanlı Programlama nedir?

Nesne tabanlı programlama (object oriented programming – OOP), program geliştirmek için kullanılan bir teknolojidir. OOP terimi değişik anlamlar taşımakla birlikte sağladığı standartlarla bileşen (component) programlamasını kolaylaştırmaktadır.

Sınıf (Class) nedir?

• Bir nesneyi oluşturacak ortak ve benzer özelliklere sahip metod, fonksiyon veya davranışların bir araya gelerek oluşturdukları bir bütün olarak tanımlayabiliriz.
• En basit tabirle, bir nesnenin şeklini tanımlayan bir şablondur.
• Verileri ve bu verileri işleyecek kodu içerir.
• Nesneleri oluşturmak için temel özellikleri içerir.
Sealed Class: Kalıtım vermeyen sınıflardır. Bir sınıfın başka sınıflara kalıtım vermesini engellemek için sealed komutu kullanılır.

Sınıflar neden önemlidir? Neden ihtiyaç var?

Sınıflar sayesinde program parçalara bölünür ve karmaşıklığı azaltır.
• Yaratılan metodlar ve özellikler bir sınıfın içerisinde yer alır.
• Bir sınıf defalarca kullanılabilir.

Kalıtım nedir?

Kalıtım (inheritance), nesne tabanlı programlamada en önemli kavramlardan biridir. Kalıtım, diğer adıyla miras, en basit haliyle bir sınıftaki metodların ve özelliklerin başka bir sınıfa aktarılması olarak açıklayabiliriz.

Aklınızdan şekillenmesi açısından bir sınıf canlı sınıfı olan “insan“ı düşünün. Bu sınıftan kalıtım alınarak bireyler türüyor. Dünyadaki kişileri bir düşünün; hepsi insan fakat kimisinin saçı sarı kimisinin siyah, kimisinin gözü mavi kimisinin ela. Hiçbiri birbirinin aynı değil fakat hepsi “insan“dan kalıtım alınarak türemiştir.

class insan
{
    public string gozRengi; //insan sınıfına ait bir özellik
    public string sacRengi; //insan sınıfına ait bir özellik
    public void Yurume() //insan sınıfına ait bir metod
    {
        //yürüme işlevi
     }
}

Kalıtıma neden ihtiyaç duyulur?

Aynı şeyleri tekrar tekrar yazmamak ve gerektiğinde tanımlanan özellikleri alıp üzerine yeni özellikler ekleyerek başka bir metod oluşturmak için kalıtıma ihtiyaç vardır. Kalıtım alınan metod aynı kalacağından tekrar kalıtım alınabilir.

Bu konuya insan örneğinden bakacak olursak, bireyleri oluşturmak için yeni sınıflar yaparken eğer insan sınıfından kalıtım almazsak, her insanda bulunan temel özellikleri her bireyi oluştururken tekrardan tanımlamak gerekir. Fakat kalıtım aldığımızda bu özellikleri alır üzerine istediğimiz başka özellikler de koyabiliriz.

Nesne (Object) nedir?

Nesneler sınıflardan üretilirler.
• Aynı sınıftan üretilmiş iki nesnenin sahip olduğu özellikler benzerdir ancak bu özellikler farklılıklar da gösterebilir.
• Bir ifadenin nesne olabilmesi için bellekte yer belirtmesi gerekir.
• Bir nesne kendi hakkında, yapabileceği işlemler ile ilgili bilgiler saklar.
• Programın gereksinim duyduğu tüm veriler nesneler tarafından tutulur.

class OrnekSinif
{
    public int ozellik1;
    public int ozellik2;
    public int Metod1 (int a, int b)
    {
        return a+b;
    }
}

static void Main(string[] args)
{
    OrnekSinif ornekNesne = new OrnekSinif();
    ornekNesne.ozellik1 = 5;
    ornekNesne.ozellik2 = 10;
    int sonuc = onekNesne.Metod1(ornekNesne.ozellik1, ornekNesne.ozellik2);
    Console.Write(sonuc.ToString());
}

Yukarıdaki örnek kodda sınıftan referans alarak yeni bir nesne oluşturuldu. Daha sonra bu nesne yoluyla sınıf içerisinde tanımlanan özellik ve metodlara erişebildik. Bu erişimi sağlayabilmek için bu özellik ve metodlar public (genel) olarak tanımlandı. Nedir bu public, derseniz bir de onlara bakalım.

Erişim Belirleyiciler (Access Modifiers) nedir?

Oluşturulan uygulamaların güvenliğini artırmak için, kullanılan sınıfların (class) erişilebilirliğinin kısıtlanması gerekmektedir. Bu anlamda erişim belirleyiciler koda dışarıdan yapılmak istenen müdahalenin sınırlarını belirlemek amacıyla kullanılan anahtar ifadelerdir.

Private: Aynı class içindekiler erişebilir.
Public: Herhangi bir yerden erişilebilir.
Protected: İçinde bulunduğu class ve ondan türetilen diğer sınıflardan erişilebilir.
Internal: Aynı program içinden erişilebilir.
Protected Internal: Tanımladığı class ve ondan türetilen sınıflardan erişilebilir. Türetilen sınıflar farklı bir programda da olabilir, program içi kısıtlama yoktur.

Şimdilik bu kadar, bir sonraki yazıda devam edeceğim. Bu arada ben bir eğitmen değilim, bu nedenle yazdıklarımda hata veya eksik olabilir. Gözünüze çarpan bir şey olursa yorum olarak belirtirseniz düzeltebilirim. Ben de öğreniyorum ve burada yaptığım şey de öğrendiklerimi paylaşmak sadece.

Sonraki yazıda görüşmek üzere.

** Bir sonraki yazı için tıklayın: Sorularla Nesne Tabanlı Programlama (OOP) – 2

Yorum yaz: