3 Şubat 2009 Salı
Obje / Nesne(Object) ve Sınıf(Class) Nedir?
Obje / Nesne (Object) : Bellekte üzerindeki bir adreste yer kaplayan (ki biz buna "yaşayan" diyoruz) herşeye verilen addır. Tabi yer kaplıyorsa da ne kadar yer kapladığını ve bu yeri nasıl bir kalıba uygun olarak işgal ettiğinin de merakının uyandığını düşünüyorum...
OOP(Object Oriented Programming) denilen yapı içerisinde "Object" ifadesine odaklanmalısınız. Sanki buradan nesneleri programlamanız gerektiğini hisseder gibi oluyorsunuz. Hatta bir önceki tanımdan yola çıkarak; "belirli bir adresi ve kalıbı olan bellek üzerinde yer kaplayan değerleri programlıyor olurken kullanılırlar" sonucuna erişmeniz hiç de zor değil
Yaşamdan nesneye en önemli örnek olarak: "belirli bir plana bakılarak yapılmış bir arabayı" gösterebilirim.
Sınıf (Class) : Bellekte yer kaplayan bir nesnenin(object) ne büyükükte ve nasıl bir kalıpta olmasını gerektiğini belirttiğimiz zarf olarak adlandırılabilir. İşin biraz daha teorik noktasına inecek olursam sınıf; birbiri ile bağlantılı birden fazla veriyi tek bir küme altında toplamak için hazırlanmış bir plan, şablon ya da kalıp olarak düşünülebilir.
Eskiden struct ile verilerin kümelenmesi sağlanırdı. Günümüzde structların yerini sınıflar almıştır. Bunun nedenini sınıflar için kullanacağımız polymorphism, abstraction, inheritance gibi kavramlarla açıklıyor olacağım. Sınıfları kullanıyor olmamızın en önemli avantajı kod tekrarını azaltmak, kodun bakımını ve esnekliğini arttırmaktır.
Tasarlanan sınıf olarak adlandırılan şablonları obje / nesne(object) üretmek içi kullanıyor olacağız. Böylelikle üretilen her nesne aynı kalıptan ya da bizim belirlediğim kalıplardan geliyor olacak.
Not: daha sınıflar referans tipleridir.
Yaşamdan sınıfa en önemli örnek olarak: "belirli bir arabayı üretmek için hazırladığımız kağıt üzerindeki planı" gösterbilirim.
O zaman genel olarak 3 adımdan bir akış oluşturmak mümkün:
1. Sistem içerisinde devamlı kullanılacak olan verileri bulmaya çalışırız.
Örn: ad, soyad, tckimlikno
2. Bu verileri sınıf olarak kümeleriz.
Örn: ad, soyad, tckimlikno olarak belirlediğimiz verileri Kisi sınıfı altında toplarız.
3. Kisi sınıfını kullanan nesneler oluştururuz.
Örn: Kisi k = new Kisi(); //Burada k adında ve Kisi tipinde bir nesne oluşturmuş olduk.
16 Eylül 2007 Pazar
Struct (Daha Yakından)
1. Değer Tipidirler.
2. Fieldlarını direkt olarak örnekleyemezsiniz. Aşağıdaki örnekte x field'ına 0 değerini atayarak ilklendirme yapmak istedim. Kodu derlediğimde(ctrl+shift+b) "Error 1 'StruckOzellikleri.Nokta.x': cannot have instance field initializers" hatası ile karşılaştım.
3. Struct'lar default bir "yapıcı method"(contructor) a sahiptirler.
4. Eğer Struct içerisnde yapıcı method kullanılması gerekiyorsa, yapıcı methodun parametre alma zorunluluğu vardır. Diğer durumlarda hata ile karşılaşırız.(Not:Yapıcı method konusunu daha sonra göreceğiz.)
5. Struct'ların örneğini oluşturmak için new anahtar kelimesi kullanılır.
6. Struct'ların örneğini oluşturmak için class'lar gibi new anahtar kelimesini kullanma zorunluluğu yoktur.
7. Class'ları miras alamazlar(inheritance) fakat interface'leri implement edebilirler.
15 Eylül 2007 Cumartesi
Değer Tipleri ve Struct
5 Eylül 2007 Çarşamba
Veri Tipleri
Referans tipleri, c++'ta kullanılan işaretçi mantığına çok benzerler ve oluşturulduklarında belleğin stack bölümünde referansları saklanır ve heap bölümünde referansın işaret ettiği değer saklanır. Referans tipleri ile ilgili daha detaylı bilgiyi "Referans Tipleri İle Çalışmak" başlığında görebilirsiniz.
Değer tipleri ise belleğin stack bölümünde saklanan değerler olarak adlandırılırlar.
İki tip arasındaki farkı rahat olarak anayabilmemiz için bu konuları teker teker ele alarak açıklayacağım.
4 Eylül 2007 Salı
Nesne Yönelimli Programlamaya Başlamadan Önce...
Neden Nesne Yönelimli Programlama?
Nesne yönemli programlama üzerine bir çok tanım yapılabilir fakat biz uygulama geliştiren kişilerin tanımları daha açık bir şekilde kavrayıp, uygulamak üzerine odaklanmamız gerekiyor. Bu işin önemli tarafı da bu zaten.
Daha önceleri prosedürel programlama adı verilen bir programlama tekniği ile uygulamalar geliştiriliyordu. Binlerce alt alta yazılmış kodlar arasında yazılım geliştiricilerin aynı uygulamanın kodlarını devamlı kopyalayarak ve yapıştırarak yeni kod parçacıkları oluşturduğu bir kodlama tekniğiydi. Prosedürel protramlama tekniği kullanılarak geliştirilen kodlar sonucunda ortaya çıkan uygulamalar, günün hızlı değişen koşullarına yetişmek için yeterli esneklikte olmadığı için zamanla tercih edilmemeye başlandı.
O zaman prosedürel programlama ile ilgili iki sorundan söz edebiliriz :
1- Tekrar kullanılabilir kod sayısının az olması yani kopyalama yapıştırmanın çok tekrar edilmesi.
2- Teknolojinin çok ilerlediği büyük firma sayısının arttığı bir dönemdeki değişikliklere rahat ayak uyduramaması.
Nesne yönelimli programlama hayatın sanal ortama aktarılmış bir halidir. Hayatın içerisinde var olan hiyerarşi, nesne yönelimli programlama içerisinde de aynen bulunmaktadır. Nesne yönelimli programlama belirli bir kalıp üzerine oturtulaması ya da nesne tabanlı programlama budur ve bu şekilde kodlanır denmesi bana göre yanlıştır. Nesne yönelimli programlama sorunlar içerisinde durumlar tanımlar ve tanımlanan durumlara göre kendi başlarına davranışlar gösterebilen nesneler tanımlayarak problemlere çözümler geliştirir. Aslında kendi içerisinde sistemler barındıran büyük bir sistem kuran programlama tekniğidir.
Nesne yönelimli programlama ile ilgili bilgileriniz gün geçtikçe dah da derinleşecektir.
Nesne yönelimli programlama (NYP)
NYP'dan önceki uygulamaların bakım maliyeti ve karmaşıklık ilişkisi1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutları sürekli artıyor, ancak belli bir nitelik düzeyi korumak için gereken bakımın maliyeti (zaman ve çaba olarak) daha da hızlı artıyordu. NYP'yi bu soruna karşı bir çözüm haline getiren başlıca özelliği, yazılımda birimselliği (İngilizce - modularity) benimsemesidir.
NYP'nın altında yatan birimselliğin ana fikri, her bilgisayar programının (izlence), etkileşim içerisinde olan birimler veya nesneler kümesinden oluştuğu varsayımıdır. Bu nesnelerin her biri, kendi içerisinde veri işleyebilir, ve diğer nesneler ile çift yönlü veri alışverişinde bulunabilir.
Halbuki NYP'dan önce var olan tek yaklaşımda (Yordamsal programlama), programlar sadece bir komut dizisi veya birer işlev (fonksiyon) kümesi olarak görülmektediler.Bilimsel çevreler tarafından NYP'nın geçmişe göre daha yüksek esneklik ve bakım kolaylığı sunduğu iddia edilmektedir. Bu sebepten dolayı, günümüzün geniş çaplı yazılım projelerinde yaygınca kullanılmaktadır.
Kaynak : http://tr.wikipedia.org/wiki/Nesne_Yönelimli_Programlama
