Nedir Bu OOP
Bu yazıda OOP’ye giriş yapılıp ilk önce teorik olarak ele alacağımız konuların ardında pratik örneklerle detaylandıracağım. Konuya en doğru yoldan yani nedir sorusunu-sorularını sorarak başlayacağım. OOP (Object Orianted Programing – Nesne Tabanlı Programlama) yazlılım geliştirme sürecindeki programlama yaklaşımıdır. Bu yaklaşımda her işlev nesneler ile soyutlaştırılır. Bu yaklaşımda temel esas ise her şeyin bir nesne olarak görülmesidir. Bu yaşamınızdaki, çerenizdeki faktörlerde olabilir(araba,kitap,bilgisayar). OOP yi destekleyen diller yüksek seviyeli diller olarak adlandırılırlar(C#,Java,C++). Ortaya çıkışı ise büyüyen ve karmaşık hale gelen projelerin getirdiği problemlere reaksiyon olmuştur. Yaklaşım nedir? Yaklaşım ise genel kavramda düşünülebilir. Herhangi bir işi gerçekleştirirken iş geliştirme sürecinde kullandığınız felsefeye yaklaşım denilir. Örnek olarak bir kuşun yuvasını kurması, inşaatçının tuğlaları dizmesi, fırıncının hamuru ekmeğe dönüştürmesi süreçlerindeki yapı yaklaşımları örnek verilebilir.
Nesne Modellemesi
Nesnelerin oluşturulabilmesi için öncelikle bir class içerisinde modellenmesi gerekmektedir. Class ise oop nin temelidir. Nesne modeli class ile gerçekleştirilir. Sonrasında ise bu nesne türetilebilir yahut diyer bir anlamla örneklendirilebilir. Buna şu şekilde örnek verebilirim; hayattaki her şeyi bir nesne olarak düşünebileceğimizi belirtmiştim. Her şey bir nesne olabiliyorsa bunun OOP deki karşılığıda olması gerekiyor. OOP karşılığınıda şu şekilde düşünelim; bir ülkenin bir pasaportu vardır. Bu tek bir pasaporttur. Yani bir class dır. Class içerisinde o pasaporta ait fieldlar oluşturursunuz. Yani pasaportun özellikler. Rengi,boyutu,kime ait olduğu,uyruk bilgibi v.b gibi. Pasaport için oluşturduğumuz class a pasaport un fieldlarınıda tanımlamış olduk. Gerçek hayattaki pasaport artık oop dünyasında bir karşılık buldu. Şimdi ise şunu düşünelim. Ülkemizin bir pasaportu vardı. Diğer insanlarda ise bu pasaportun kendine göre özelleştirildiği bir örneği var. Ortak özellik olarak kabı, boyutu, rengi v.b diyeribiriz. Değişen özellikleri ise isim, uyruk, tc gibi özelliklerdir. Pasaport alan kişiler esas pasaportun kişiselleştirilmiş özelliklerini değiştirerek bir adette aynısında kendileri sahip oluyor. OOP de ise oluşturduğumuz class a başka bir yerden erişip onun örneğini (instance) alma işlemide tam olarak budur. Bir tane pasaport class ımız var. Bu class içerisinde pasaport a ait özellikler-fieldlar var. Sizde bunu çoğaltıyorsunuz ve çoğaltırken her bir örnek için farklı tnaımlamalar yapabiliyorsunuz. Artık her nesne bir pasaporttur yalnız fieldları birbirinde farklı olabilir. Nesne tabanlı programlamanın günlük hayattaki karşılığı budur.
Biraz daha teknik bilgi. Ram’de Nesne
Nesne içerisinde bir yada daha çok değer barındıran Nesneleri tutan değişkenler referans türlü değişkenlerdir. Ram de heap kısmında tutulurlar. Heap e ise direkt erişemeyiz. Bundan dolayı nesne oluşturulduğunda stack kısmında ona ait bir değişken oluşur ancak değeri stack alanında tutulmaz. Biz stack de tutulduğu yerden çağırırız nesnemizi. Değeri ise heap kısmındadır. Stack de barınan değişken değeri için heap deki ilgili alanı çağırır yani referans alır. Referans türlü değişkenler mantığıda buradan gelir.