Nesne Yönelimli Programlama – 1

Merhaba ey dostlar…

Bu günlerde, günlük hayatımızda yaptığımız birçok “rutin” eylemin önüne anlamsız bir espri gibi yapışan bir cümleyle başlamak istiyorum… Evet, ne felsefi bir giriş oldu değil mi? Ama o başlangıcı henüz yapmadığımın da farkında mısınız? Peki, tamam uzatmıyorum… İşte geliyor; “2008’in son makalelerini yazıyorum” (bakınız ne kadar kararsız bir cümle ‘son makaleler’ ne yahu?).

Arkadaşlar, yine uzun zamandan beri yazmayı planladığım bir konuyla karşınızdayım; Nesne Yönelimli Programlama. Yani orijinal ismiyle Object Oriented Programming (iş bu makalede bundan sonra OOP olarak anılacaktır 🙂 ). C#.NET program geliştirmeye henüz başlayan, ya da tanıştığı ilk programlama platformu .NET olan herkes, bu yapının tamamıyla OOP uyumlu olduğunu duymuştur. Ama nedir bu OOP denen teknik ve neden ona ihtiyaç duyalım?

Her şeyden önce şunu belirtelim, OOP programlama tekniği, tamamen insanı taklit eder. Bu açıdan, yüzyılın en dinamik ve verimli programlama tekniği olarak düşünülebilir. Peki, bu taklit nasıl oluyor? Gelin bunu şişman adamca örneklerle görelim.

Bildiğiniz gibi; dünya üzerindeki ilk insanlar, kendi ihtiyaçlarını kendileri karşılamak zorundaydılar. Yani; kendi barınaklarını kendileri inşa ediyor, kendi av silahlarını, kap, kacak gibi gündelik yaşamlarında ihtiyaç duydukları tüm malzemeleri kendileri imal ediyorlardı. Yüzyıllar sonra, toplumlar oluştukça -ya da yerleşik düzene geçildikçe- insanlar kendilerine özel sorumluluk vermeye başka bir deyişle branşlaşmaya başladılar. Yani berber, kasap, bilim insanı, öğretmen, filozof, doktor, marangoz gibi meslekler ortaya çıktı ve böylece ticaret de ilerlemeye başladı.

Günümüz dünyasında, ihtiyaç duyduğumuz şeylerin hemen hepsini, üreticilerinden elde ediyoruz… Kazmayı küreği alıp evimizi yapmıyoruz ya da arka odadaki elektronik aletlerle kendimize bir LCD televizyon üretmiyoruz. Sorumluluğu vermiş olduğumuz üreticiden gidip satın alıyoruz. İşte teknolojinin bu kadar hızlı gelişmesinin temelinde de bu “branşlaşmanın” yatmakta olduğu çok net bir biçimde gözümüze çarpıyor.

Bu noktaya biraz daha yoğunlaşalım… Bir mucit, bir ürün icat ediyor. Daha sonra bu ürünün seri üretimine başlıyor. Zaman geçtikçe, bu ürüne yeni özellikler ekliyor ve ayrıca, ürünün ilk hallerinde de bulunan işlevleri daha verimli hale getiriyor. Bu ürünün ilk halinde bulunan özelliklere “yeniden kullanılabilir” demek pek de yanlış olmaz sanırım. Ayrıca, ürünün yıllar boyunca geçirdiği değişim de, “geliştirilebilirlik” ilkesini kanıtlamıyor mu?

Şimdi OOP tekniği öncesine bir bakalım… Binlerce satır koddan oluşan yazılım ürünleri. Bu ürünleri geliştiren programcılar; her kodu, her seferinde tek tek yazmak zorunda kaldılar. Muhtemelen bu sebepten dolayı, ürünün versiyonları arasında oldukça uzun bir zaman vardı. Çünkü tasarımdaki en ufak bir değişim (mesela yeni bir menü eklenmesi bile), kodun büyük ölçüde değişmesine neden oluyordu. Bu tam olarak zaman kaybıydı.

Artan yazılım talebi, yeni bir kodlama tekniğini yani OOP tekniğini doğurdu. Tıpkı insanların branşlaştığı gibi, kodları da kendi aralarında görevlerine göre ayırarak bir nevi kod fabrikaları oluşturuldu.

İşte bu fabrikaların adı class (sınıf) olarak biliniyor. Haliyle biz, bu class’lardan nesne üretiyor ve o nesneyi, ihtiyacımız olan her yerde kullanabiliyoruz. İşte dediğim gibi OOP kodlama tekniği, tam olarak insanın şu anki yaşamını taklit eden bir yapı.

Peki bir class’ı nasıl tasarlarız? Neler içereceğine nasıl karar veririz? Bu tamamen üreteceğimiz nesneyi ne amaçla kullanacağımıza bağlıdır. Az önce verdiğim örneklerle düşünürseniz, soruyu bir de şöyle sormamız faydalı olur; Bir fabrikayı nasıl kurarız? Fabrikayı kurma aşamasına geldiyseniz eğer, ne üreteceğinize çoktan karar vermişsiniz demektir değil mi? Öyleyse konu class olduğunda da, öncelikle istediğimiz nesnede hangi özelliklerin olması gerektiğini bilmek durumundayız.

Şimdi, bir proje düşünün. Bu proje, bir ayakkabı satıcısının kullanacağı bir program olsun. Kesinlikle bu projede bir ayakkabı nesnesine ihtiyacınız olacak öyle değil mi? Peki bu ayakkabı nesnesinin özellikleri neler olmalı? Gelin bir liste yapalım…

  1. Markası
  2. Tipi (Bot, spor, çizme vs).
  3. Malzemesi (Deri, süet vs).
  4. Numarası
  5. Rengi
  6. Bağcıklı mı değil mi?

Bu özelliklere karar verdim. İşte class’ ımız (yani fabrikamız) üretilecek olan nesnemizin bu özelliklerini belirlemek durumunda. Hadi o zaman işe başlayalım ve uygun tiplerle classımızı yazalım:

(Aşağıdaki kodlar bir Windows Application projesi içinde yazılmıştır)

Projeye sağ tık, Add New Item, Class diyelim ve aşağıdaki kodları oluşturalım.

class Ayakkabi

   {

       string markasi;

       string tipi;

       string malzemesi;

       byte numarasi;

       string renk;

       bool bagcikliMi;

   }

Tamam. Şimdi form1’in Form1_Load metodunda, bu class’dan bir nesne üretmeyi deneyelim;

 

Fakat o da ne? Ayakkabi classımdan ürettiğim pabuc nesnesinde, istediğim özelliklerden hiçbirine erişemiyorum. Çünkü yazdığım özelliklerden hiçbirinin erişim düzenleyicisi (Access Modifier) Public değil! Eğer, class içinde tanımladığınız bir alana class dışından erişmek isterseniz; bu alanı public olarak tanımlamalısınız. Bu durumda, eğer bir proje içinde yazdığınız bir classın başka bir projeden erişilebilmesi için de classın başına public kelimesi getirme zorunluluğumuz ortaya çıkar.

Şimdi, bu değişiklikleri yapalım ve tekrar nesne üretmeye çalışalım:

   public class Ayakkabi

   {

     public string markasi;

     public string tipi;

     public string malzemesi;

     public byte numarasi;

     public string renk;

     public bool BagcikliMi;

   }

Değişiklikler tamam. Peki ya nesnemiz?

 

İşte şimdi, nesnemde aradığım özellikleri görebiliyorum… Ama burada bir sorun var sanki. Bazı özelliklerin nesne tarafında değiştirilebilmesini kesinlikle istemiyorum. Örneğin ben Ayakkabi fabrikamdan 44 numara olarak ürettiğim ayakkabının sonradan 48 numaraya yükseltilmesini istemem. Fakat bütün değerlerim public olarak tanımlandığından bunu şu an yapabiliyorum! Bu hiç de iyi bir şey değil.

Söz, tam bu noktada encapsulation dediğimiz kavrama geliyor. Ama bu, bir sonraki makalemin konusu olacak. Şimdilik burada bırakıyorum.

Bir daha görüşene kadar kendinize iyi davranın ve kendinize birkaç class tasarlayın. Hepinize iyi çalışmalar ve mutlu seneler…

25 thoughts on “Nesne Yönelimli Programlama – 1

  1. Derste anlamaya çalışırken zorlanmıştım ama okuyunca çok kolay geldi.Siz artık buradan istediğiniz manayı çıkartın :).("Derste anlatım berbat ,makale yazarken mükemmel" gibi bir sonuç çıkabilirse de ben kastettiğim manayı belirteyim:Gerçekten de bir konu ancak bu kadar basitleştirilerek anlatılabilir.Emeğiniz için teşekkürler.)

  2. Çok açıklayıcı,hedefi tutan bir makale..Biz tüm Meksikalı’lar olarak anladık vallahi olayı.Büyüksün Turkay Sanchez..

  3. Tıpkı dersteki gibi eğlenceli ve basit bir anlatımla açıklamışsınız herşeyi hocam teşekkür ederiz emeğinize sağlık

  4. merhaba sayın türkay hocam
    valla yazının ortasında " tadı damağımdayken " birden yazmak istedim senin kadar güzel anlatan bir insan görmedim sen insan değil bir meleksin…
    şaka bir yana gerçek anlama şimdiye kadar teknik anlatımlar yapan konulardan bıkmış anlamak için defalarca okumak zorunda kalıyorum

    lütfen gerçek anlamda makalelerin devamını istiyorum özellikle asp.net ve component üzerine olursa ne güzel olur.. çok teşekkürler

  5. yalnız anlamadığım nesnelere erişmek için nesnelerin başına puplic koymak gerekiyor tamam mantıklı ve class içinde puplic koyulma zorunluluğu var demiş siniz
    ancak bu şekilde yapıncada içindeki nesnelere erişim sağlayabiliyorum
    class ayakkabi
    {
    public string markasi;
    public string tipi;
    public string malzemesi;
    public byte numarasi;
    public string renk;
    public bool bagciklimi;
    }

  6. Öğrencinin dilinden anlamak herkesin harcı değil, bunu başarmışsınız. Tebrikler ve de teşekkürler.
    🙂

  7. Turkay hocam ne iyi etmişsiniz de bu makaleyi yazmışsınız. İzmir şubenizdeki eğitimim yeni bitti. Fakat burda bu konuyu okuyunca herşey yerli yerine oturdu. Ne olur kesmeyin, bizlere ışık olmaya devam edin ki bizde birşeyler miras bırakabilme onuruna kavuşabilelim. Herşey size kolay gelsin.

Leave a Reply