Etiketler

4 Haziran 2014 Çarşamba

C# Sınıflar ve Nesneler

Herkese merhaba! Bu yazımda sizlere C# da programlamanın yapı taşları olan sınıflardan, ayrıca daha önceden C# ile ilgili duymuş olabileceğiniz çok popüler OOP(object oriented programming) 'in nesne(object) kavramını sınıflar içinde elimden geldiğince basitliği koruyarak anlatmaya çalışacağım.

İlk olarak sınıf nedir? dediğimiz zaman bunun teorik cevabı şöyle olacaktır. Bir nesnenin şeklini tanımlayan bir şablon veya soyut bir veri tipidir. Gayet anlaşılmaz duruyor ve aslında baya saçma bir cümle veya tanım gibi gelse de aslında bu sorunun cevabını en iyi şekilde açıklayan bir cevap. Ve sizden bu dersin tamamını okuduktan sonra bu cümleyi tekrardan okumanızı istiyorum, işte o zaman size de anlamlı gelecektir. Şimdi bu ifadeyi en basit şekliyle açalım. Günlük hayattan örneklerle daha anlaşılabilinir kılalım. Sınıf nedir sorusuna günlük hayattan bir cevap verecek olsaydınız ne derdiniz? Muhtemelen öğrenciyseniz ilk aklınıza gelen gittiğiniz okuldaki sınıfınız olmuştur. Benzer mantık programlamada da söz konusudur. Benzer özellik gösteren değişkenleri bir sınıfta toplarız, örneğin siz eğer bir sayısal öğrencisiyseniz sizi sayısal sınıfına, TM(türkçe-matematik) öğrencisiyseniz TM sınıfına yollarız. Ancak bir sınıfın olması demek yani kendimizi okul müdürü gibi düşünelim ve bir sayısal bir de eşit ağırlık olarak iki tane sınıf açmak gibi bir düşüncemiz var ancak hiç sayısal veya eşit ağırlık öğrencisi gelmezse bu sınıfları açmayız. Ya da açsak bile boş sınıf bellekte yer kaplamaz. Yani sınıf dediğimiz şey soyut bir kavramdır! İçine nesne koymadığımız sürece soyut olarak kalacaktır ve bilgisayarımızda bellekte bir yer kaplamayacaktır.

Peki programlamada sınıf tanımını nasıl yapıyoruz?
Bu işlem oldukça kolaydır, öncelikle class anahtarsözcüğümüzü kullanır ardından sınıfımıza bir isim veririz.

class binalar 
{
       //sınıfların içine çeşitli değişkenler ve metotlar atayabiliriz.
 
       //bu değişken ve metotlar sadece bu sınıfa özeldir yani bu sınıfın elemanlarıdır. 
}

Yukarıdaki örnek sadece sınıfın yapısına dair bir örnektir. Ve derleyicimizde böyle bir kod yazarsak, bu sınıf bellekte yer kaplamayacaktır. Ancak bir nesne oluşturursak o zaman bellekte yer kaplar.
Öncelikle basit bir şekilde binalar sınıfımızın içinde bir kaç değişken tanımlayalım.

         class Binalar
         {
                 public int katSayisi;
                 public int oturanSayisi;
         }

public(genel) - private(özel) mevzusu:  

Görüldüğü gibi kodumuzun içindeki değişkenlerin başına public getirdim. Bunu yapmamdaki amaç değişkenleri dışardan ulaşılabilinir yapmak. Private olmasını isteseydim başına private yazmama gerek yok(class lar içinde) çünkü class lar içinde tanımladığınız tüm değişkenler default olarak private atanır. Peki neden private değişkenlere ihtiyaç duyuyoruz gibi aklınızdaki soruların cevabı için bu makaleyi okumanızı tavsiye ederim: http://broadcast.oreilly.com/2010/01/understanding-c-why-make-thing.html

Sınıfımızda değişken tanımlamamıza rağmen hala bellekte yer kaplamıyor çünkü henüz bir nesne tanımlamadık. Artık sınıfları bir taslak, yapılması planlanan bir iş yani soyut bir kavram olarak algılıyor olmanız lazım. Hadi bunu somutlaştıralım ve nesne oluşturalım.

         class Binalar
         {
                 public int katSayisi;
                 public int oturanSayisi;
         }

        class programımız
        {
               static public void main()
               {
                     Binalar pahaliEv = new Binalar();
                     Binalar ucuzEv = new Binalar();
                     Binalar ofis = new Binalar();
               }
        }

Görüldüğü gibi yukarıda üç tane nesne tanımladık. Sınıflar konusunun daha iyi anlaşılması için üç tane nesne tanımladım, yoksa sadece ihtiyacınıza göre nesne tanımlarsınız. Peki bu tanımlama işlemi nasıl oluyor? Yani Binalar pahaliEv = new Binalar(); neyi kastettim ben? Nasıl böyle bir tanımlama yaptım?




























Yukarıdaki şekilde nesne tanımlamış oluyoruz. Hadi şimdi gelin bunları çağıralım.