Makale Özeti

C# Nesneye Yönelik programlama ve Java

Makale

New Page 1

C# Nesneye Yönelik programlama ve Java

 

Microsoft’un yeni atılımı C#, oldukça ilgi çeken ve soru işaretleri oluşturan bir dil. C# ile çalışmaya başlamadan önce bu dil hakkında  öğreneceğiz bazı önemli noktalar, neden C#ın bu kadar gürültü kopardığını anlamanızı sağlayacaktır.

 

Son yıllarda yazılım geliştirme camiasının önem verdiği ve olmazsa olmaz kabul ettiği bir takım teknolojiler mevcut. Yazılım pazarı, inanılmaz bir ivme ile büyüyüp, dünya ekonomisinde önemini artırdıkça, programcıların istek ve kaprisleri de daha önemli hale geliyor :) Bu yazıda bahsedeceğimiz konulardan biri de, özellikle son yıllarda programlama dünyasına damgasını vuran Object Oriented programlama, yani nesneye yönelik programlama, ve bu paradigmanın ( çok havalı bir laf; kullanmaya bayılıyorum... ) C# ile ilişkisi.

 

Object Oriented programlama nedir ?

 

Nesneye  Yönelik  programlama, gerçek hayattaki kavram ve objeleri bir programlama dilinde oluşturabilmek, onları bilgisayar programı içinde kullanılır hale getirmek için yaratılmış bir programlama tekniği / düşünme şeklidir .

Şimdi bir an için gerçek hayattaki herhangi bir işi bir bilgisayar programı ile yapmaya çalıştığımızı düşünelim. Ancak bize verilen hazır bir yazılım yok, ve bu sefer programı oturup biz yazmalıyız. Bu durumda programcının yapması gereken şey, yapılacak iş için gerçek hayatta mevcut olan ortamı ve gereken şeyleri bilgisayar programı içinde oluşturmaktır.

Diyelim ki şirketinizdeki çalışanlarınıza ait bilgileri kaydeden, bu bilgileri istediğiniz zaman size sunan, ve gerektiğinde değiştirmenizi sağlayan bir programa ihtiyacımız var. Bu program hakkında  bir iki soruya yanıt verelim:

Program ne işe yarayacak ?

Çalışanlara ait bilgileri kaydedecek, gerekince bize sağlayacak, ve değiştirmemize izin verecek.

Program hangi bilgiler üzerinde çalışacak ?

Çalışanlara ait bilgiler üzerinde çalışacak

Programa hangi bilgiler girilecek, hangi bilgiler alınabilecek ?

Çalışanlara ait bilgiler girilecek, ve çalışanların bilgileri alınabilecek.

 

Bu sorular ve yanıtları bize programımız ile ilgili çok önemli bir ipucu veriyor. Yazacağımız programda, çalışanları ve onlara ait bilgiler ifade etmenin, ve verimli bir şekilde kullanmanın bir yolunu bulmalıyız. İşte Nesneye  Yönelik  programlama, bu işi yapmak için kullanacağımız bir programlama tekniği. Bu teknik sayesinde, karşımızda duran bir nesneyi, bir bilgisayar programı içinde kullanabilir hale getiriyoruz. Peki bunu nasıl yapıyoruz ?

Nesneye  Yönelik  programlama, gerçek hayattaki “şeyleri”  bilgisayar programında “nesneler” olarak ifade etmeye dayanır ve siz programınızda bu nesneler üzerinde çalışırsınız.

Ancak uyguladığımız tekniği daha da kuvvetli bir hale getirmek için bu nesneleri tıpkı gerçek hayattaki gibi sınıflara da ayırabiliriz. Mesela çalışanlarımızı seviyelerine göre sınıflara ayıralım. Elimizde yöneticiler, memurlar ve hademeler sınıflarına ayırdığımız bir sürü çalışan var diyelim.

Hayalinizde bir memur canlandırın; eğer bu programa bu kişiyi konuşarak anlatmanız gerekseydi, nelerden bahsederdiniz ?  Belki şunlar olabilir: 35 yaşında, erkek, yılda 7.5 milyar maaş alıyor. Her sene  1 hafta izin hakkı var. İş yerinde performansı orta seviyede. 2 senede bir terfi hakkı var.

Burada bu kişiye ait verdiğimiz bilgileri bu kişinin özellikleri olarak tanımlayalım.

Peki programa bu kişi neler yapabilir diye konuşarak anlatsaydık ne derdik ? Bunları deneyelim: Rapor yazar, telefon eder, muhasebe kayıtlarını düzenler.

Bu şekilde sorular sorup, yanıt vererek, programda oluşturacağımız memurun özelliklerini ve neler yapabildiğini ortaya çıkardık. İşte şimdi elimizde memur sınıfının bir tanımı var!

Bu sınıfa ait üyemizin  belirli özellikleri ( yaş, maaş miktarı, izin hakkı) ve yerine getirebildiği belli fonksiyonları   var ( telefon edebilir, rapor yazabilir). Bu sınıfın tanımına uyan her çalışan  memur  sınıfına aittir ve kendi başına nurtopu gibi bir nesnedir!

O zaman sınıf ve nesne arasındaki ilişkiyi netleştirelim. Sınıf kavramını belli özelliklere sahip bir şeyi tanımlamak için kullanıyoruz. Biyolojideki “memeliler” sınıfını gibi. Bu şekilde sınıflandırılmış varlıklar, hangi sınıfa aitlerse o sınıfın özelliklerini taşırlar. Mesela memeliler sınıfına ait bir canlı olan köpeği ele alalım. Mutlu mesut çayırlarda koşturan bir köpek memeli sınıfının bütün tanımlı özelliklerini taşır. Doğar, büyür, yavrularını emzirir. Doğurarak çoğalır, ve ölür. Teker teker baktığımızda köpekleri memeli sınıfına ait nesneler olarak kabul edebiliriz.

İşyeri ve çalışanlar örneğinde de Muzaffer bey isimli bir memur, memurlar sınıfına ait bir nesne olacaktır. Yani sınıf kavramı bir tanımı vermek için kullanılırken, o tanıma uyan varlıklar ise nesneler olacaktır.

Şu anda bu satırları okurken, “İyi güzel diyorsun da, bu teknikle program yazmak için Muzafferi ya da kurdu kuşu tutup monitöre mi sokacağız ?” diyenler olabilir . Hakikaten nasıl olacak bu iş ?

Object oriented programlar yazmak için program yazdığınız dilin size bu tekniği kullanmanız için olanak tanıması gerekir. Tüm programlama dilleri bu kavramı aynı seviyede desteklemezler.

İşte bu noktada C# birden çok önemli bir hale geliyor, çünkü bu dil, Object Oriented programlamaya çok güçlü bir destek veriyor. Daha önceki yıllarda C++, Nesneye Yönelik programlamaya verdiği destek, ve sağladığı güç ile bu alanda hakimiyeti kesinleşmiş bir dildi.Sonra işin içine Java girdi, ve bir anda işler değişti, çünkü Sun Javayı tasarlarken son derece zekice hareket etti, ve C++ın karmaşık syntaxı, ve programcıları büyük projelerde yavaşlatan bazı bürokratik yönlerini ( header ve cpp dosyalarını ayırmak gibi )  ortadan kaldırarak, daha doğuştan Object Oriented programlama üzerine  kurulu, oldukça temiz bir syntaxı olan Java yı yarattı. Java Object Oriented programlamayı C++dan daha kolay ve verimli hale getirdi ( bu benim görüşüm), ve bir süre sonra, çok sağlam bir yere kavuştu.

Tabi Sun bu kulvarda koşturan tek yarışçı değildi, ve C# hem C++ı hem de Java yı izleme ve artılarını ve eksilerini takip etme şansı olan Microsoft tarafından ortaya çıkarıldı.

.NET Framework ile entegre olarak geliştirilen C# gerçekten oldukça sıkı bir yarışmacı. Biraz önce bahsettiğimiz örneğimize geri dönelim ve C# bize nesneye yönelik programlama  için nasıl bir destek sunuyor bir bakalım.

 

public class memur

      {

            public int yas;

            public long maas;

            public String isim;

 

            public string raporyaz()

            {

      string rapor_metni;

                  //belgeleri topla, incele,

//ve raporunu patrona sun

                  rapor_metni="Her sey harika, isler yolunda...";

                  return rapor_metni;

            }

            public void telefonet (long telno)

            {

//telno ile gelen telefonu numarasını ara, konuş, ve //telefonu kapat

            }

      }

 

Şimdi yukarıda  verdiğimiz kod’a bir göz atalım. İlk satırda, ve daha sonra diğer elemanların tanımlandığı satırlarda göreceğiniz “Public “ anahtar kelimesinin aslında büyük önemi var: Bu kelime, sınıfımızın elemanlarına erişim haklarını belirler. Yani öncesinde Public yazdığımız bir ifadeye erişim serbesttir. Şimdi erişim merişim nereden çıktı derseniz haklısınız. Şu aşamada daha fazlasına gerek yok. Dikkatimizi diğer ifadelere verelim.

“class memur” gibi  bir laf sizce ne anlama geliyor ? Burada C# programımız ile “hey ben memur diye bir sınıfı tanımlayacağım” diyoruz. E peki bu memur nedir, yenilir mi içilir mi ? Hemen başlangıçtan sonra gelen ilk 4 satır, memurumuzun bir yaşı, bir geliri, bir ismi olduğunu belirtmeye yarıyor. Bu arada burada kullandığımız "int yas;" , veya "long maas;" yazımı C++, C veya Java  ile uğraşanlara fazlasıyla tanıdık gelecektir. Eğer programlama tecrübeniz sınırlıysa hemen kısaca değinelim; bu ifadeler ben yas diye bir değişken tanımlıyorum, ve bu değişken integer, yani tamsayı tipinden değerleri tutar anlamına geliyor.Değişken kavramı, ortaöğrenimden beri hayatımızda mutlaka bir şekilde karşımıza çıkan matematik denklemlerinden aklınıza gelebilir. Nasıl o sinir matematik sorularında a+b=3 gibi ifadeler ile a ve b gibi değişkenlerin bir sayıyı belirttiğini söylüyorsak, burada da aynı şeyi yapıyoruz. Sadece C#‘ın anlayacağı bir şekilde “public  int yas; “ diyerek  yas değişkeni, erişime açık, ve tamsayıları tutan bir değişkendir diyoruz. Burada satır sonundaki noktalı virgül, daha önce bu syntaxla hiç karşılaşmayan arkadaşlara bu ne yahu dedirtebilir, bir komutu bitirdiğimiz zaman noktalı virgül ile komutu sonlandırıyoruz.

Peki, “public String isim; ” satırında fark nerede? Burada da isim  değişkeni string, (yani karakter dizisi) cinsinden bilgileri saklar diyoruz. Yani isim birer tamsayı olan 3,5 gibi değerler yerine yazı ile ifade edilecek “Ali”, “Ayşe” gibi değerleri taşıyor.

Tamam, bu kısmı atlattık. Peki elimizde ne var ? Memur sınıfını dosta düşmana duyurduk, ve üstüne bu memur sınıfının üyelerinin hepsinin,  bir geliri, bir ismi, bir yaşı olduğunu belirttik. Harika, şimdi bu memurlar ne iş yapar sorusuna verdiğimiz yanıta bakalım :

 

public string raporyaz()

            {

      string rapor_metni;

                  //belgeleri topla, incele,

//ve raporunu patrona sun

                  rapor_metni="Her sey harika, isler yolunda...";

                  return rapor_metni;

            }

public void telefonet (long telno)

            {

//telno ile gelen telefonu numarasını ara, konuş, ve //telefonu kapat

            }

 

 

Bu satırlar da sizi korkutmasın.Son derece basit aslında. Burada kullandığımız {  }küme parantezleri arasında bizim memur sınıfının üyeleri bu işleri nasıl yapar onu belirliyoruz. Yani bir memur gerektiği zaman nasıl telefon eder, nasıl rapor yazar, buradaki fonksiyonlarla kararlaştırılıyor. Eğer fonsiyonlar, değişkenler gibi kavramlar size tamamen yabancı ise, üzülmeyin, okumaya devam edin, bir başka yazıda bunları da detaylı olarak görme şansınız olacak :)

 

Fark ettiniz mi ? son derece kolay bir şekilde birkaç satır kod ile, bir bilgisayar programı içerisinde memur diye bir sınıf tanımladık ( class anahtar kelimesi sağolsun ) ve memur sınıfının huyunu suyunu programımıza anlattık.

İyi güzel de, Muzaffer hala ortada yok, nerede bu adam diye bir soru sorabilirsiniz. O zaman hemen Muzaffer bey’i de programımıza dahil edelim:

C# programımız içerisinde bir noktada :

      memur benim_memurum=new memur();

benim_memurum.isim="muzaffer";

benim_memurum.yas=33;

   

Yazdığınız anda: işte karşınızda anlı şanlı memur muzaffer bey! Peki gördüğünüz

memur benim_memurum=new memur();

ne anlama geliyor. ? Tam olarak programımıza , memur sınıfından bir nesne yarat ve bu nesnenin adı benim_memurum olsun diyoruz. Burada memur() ifadesindeki parantezlerin neden orada olduğunu şu an için geçiyoruz.

Daha önce yaptığımız memur sınıfına ait tanımda her memurun bir takım özellikleri olduğunu ve bazı işleri yapabileceğini söyledik. Muzaffer de bir memur olarak yaratıldığına göre, o da bu tanıma uymalıdır. Bir sonraki satırda benim_memurum.yas=33; diyerek, sizin de tahmin edeceğiniz gibi benim_memurum 23 yaşındadır demek istiyoruz. Burada benim_memurum’ dan sonra gelen nokta, bir nesneye ait bir özelliğe erişmek istediğimizi belirtiyor. Diğer özelliklere de aynı şekilde erişmemiz mümkün. benim_memurum.isim=”muzaffer” gibi bir satırla, bu memurun ismini belirtiyoruz. Bir de memur sınıfına ait elemanların yapabileceği işleri belirlemiştik. Bu işleri de benim_memurum.raporyaz(); gibi bir komut ile gerçekleştirebiliriz.

Burada bizim için önemli olan nokta, sınıf ile nesne arasındaki ilişkiyi iyice anlamak. Memur bir tanım, bir bildirge.Bize bu sınıfa ait her üyenin taşıyacağı özellikleri anlatıyor. benim_memurum ise bu özelliklere sahip bir nesne. (Bu durumda nesne veya obje deyimleri kullanılır.)

Elimizde memur sınıfının bir tanımı, iskeleti olduğu sürece istediğimiz kadar memur yaratabilir, ve bunlara ait özelliklere erişebilir, veya bir şeyleri yapmalarını isteyebiliriz. ,

Biraz önce atladığımız bazı konular, obje temelli programlamanın kendi içinde gittikçe derinleşen detaylarına ait. Açıkçası, sadece bir iki sayfalık bir yazı ile kolayca kavranamayacak bir konudan bahsediyoruz. Ancak verdiğimiz örneğe bir kere daha bakarsanız, aslında çok güçlü bir teknikten bahsettiğimizi göreceksiniz.Bu sayede çözmeniz gereken bir sorunu programa aktarmanız çok kolaylaşıyor.

Şu ana kadar verdiğimiz bu çok basit örnek bile Nesneye  Yönelik  programlamanın ne derecede güçlü  bir teknik olduğunu göstermek için yeterli.

Bir de C#ın tamamen bu yöntem ile yazılacak programları düşünülerek yaratıldığı gerçeği var. Yani burada gördüğümüz class ( sınıf ) kavramı çok önemli bir yer işgal ediyor, ve bu kavrama C# hakikaten çok sağlam bir destek sunuyor.

Sağlam destekten kastım, sınıflar ile yapılabilecek işlemler, veya sınıfları kullanırken size tanınan imkanlar. (İleride daha detaylı olarak www.yazgelistir.com da bu konu hakkında bir çok yazı göreceğinize eminim :)

Microsoft .NET Framework devasa bir class library ile geliyor. Yani C# ile yazacağınız bir program için emrinize amade bir sınıf kütüphanesi sizin için zaten yazılmış durumda. Diyelim ki, bir text dosyasının içeriğini okuyacaksınız. Bu durumda class library içinden File sınıfını aynen yukarıda memur sınıfını kullandığınız gibi kullanabilirsiniz. Yani benim_memurum u memur sınıfının tamını sayesinde oluşturduğunuz gibi, hard diskinizde ismini vereceğiniz bir dosyayı File sınıfının bir üyesi olarak oluşturabilirsiniz. Daha sonra benim_memurum un raporyaz metodu gibi , File sınıfı ile gelen fonksiyonlar ile dosyanızın içeriğini okumanız mümkün. Aradaki paralelliği görebildiğinizi umuyorum: biz nasıl memur kavramını programımıza aktardıysak, yazılım geliştiricilere gerekecek bir sürü fonksiyon ve kavram, hazır olarak Microsoft tarafından class library içinde size sunuluyor.

Bu da kolay bir şekilde, güçlü yazılımlar oluşturmanızı sağlıyor.

Şimdi şu anda elimizdeki sonuçlara bir bakalım :

  • Object Oriented programlama çok güçlü bir yazılım geliştirme tekniği
  • Object Oriented  programlama sınıflar ve nesneler üzerine kurulmuş bir teknik.
  • Sınıflar birer duyuru, tanım ve bir "şeyin" ana hatları ve özellilerini belirtiyor.
  • Nesneler ise sınıflara ait somut birer örnek. ( memur sınıfı, ve muzaffer isimli memur nesnesi, veya memeliler sınıfı, ve çomar nesnesi gibi)
  • C# bu kavramlara ve Object Oriented programlamaya çok sağlam bir destek veriyor.
  • Microsoft .Net Framework, bir sınıf kütüphanesi ile geliyor ve bu sınıflar ile bir çok işi kolayca yapabiliyoruz...

 

Umarım bu yazı ile C# ve Object Oriented programlama üzerine yeterli bir başlangıç yapabilmişizdir.İlerleyen yazılarda, daha somut ve eğlenceli örnekler vermeye çalışacağım:) Tekrar görüşmek üzere..