Object Oriented Programming (OOP)
Object Oriented Programming kavramını Nesne Yönelimli Programlama ya da Nesne Tabanlı Programlama olarak da sıkça duyarız. Peki “Nesne Yönelimli” demek ne demektir? Nesne kavramı bize neyi çağrıştırmalıdır? En yalın haliyle gelin birlikte inceleyelim..
Program nedir ?
Günlük hayatımızda rutin olarak yaptığımız işler vardır. Bu işlerin süreleri normale göre daha az sürseydi nasıl olurdu ? Veya bu işi yaparken daha az yorulsaydık güzel olmaz mıydı ? İşte programlar, işleri kolaylaştırmak veya verimliliği arttırmak gibi görevler için tasarlanmış komut ve kod zincirleridir.
Nesne Yönelimli Programlama nedir ?
Her işlevin nesneler olarak soyutlandığı bir programlama yaklaşımıdır. Peki bu ne demek? Örneğin bir işyeri düşünelim. Bu nesne yönelimli programlamada sınıfa karşılık gelmektedir, bu işyerindeki çalışan her bir eleman ise nesneye karşılık gelmektedir. İşyerindeki çalışanların yani nesnelerin birbirleri ile etkileşim halinde olması ve organize bir şekilde çalışmaları durumuna nesne yönelimli programlama diyebiliriz.
Yani OOP, gerçek hayatta gördüğümüz birçok nesnenin bilgisayar ortamına aktarılma şeklidir.
Nesne nedir ?
Nesne kavramını en basit şekilde anlamak için doğaya veya çevremize bakmamız yeterlidir. Hatta aynaya bile baksanız olur :) Neden? Çünkü doğada her şey aslında bir nesnedir. Örneğin evimizdeki kapı, dışarıda uçan kuş, denizde yüzen bir gemi, saçınızı taradığınız tarak… Bu örnekler çoğaldıkça çoğalır. Burada dikkat etmemiz gereken olay her nesnenin bir duruma ve bir davranışa sahip olmasıdır.
Örnek olarak bir bisiklet düşünelim. Bu bisikletin rengi, markası, fiyatı gibi özellikleri onun durumunu belirtirken; hızlanması, korna çalması, fren yapması gibi özellikleri ise onun davranışını belirtir. Verdiğimiz bu bisiklet örneğinin programlamadaki karşılığı nesnedir. Yani, durumu ve davranışı olan her şey bir nesnedir. Programlamada durumlar değişkenler(attribute) üzerinde saklanır; davranışlar da metotlar(methods) üzerinde saklanır.
Sınıf nedir ?
Sınıfları değişken ve metotlardan oluşan, nesnelerin özelliklerini temsil eden şablon yapılar olarak düşünebiliriz. Bir sınıf oluşturduğumuzda bu sınıftan istediğimiz kadar nesne üretebiliriz.
Yine bisiklet örneği üzerinden gidelim. Bir tane Bisiklet sınıfımız olsun ve bu sınıfta bisikletin yukarıda belirttiğimiz durumları/davranışları yer alsın.
public class Bisiklet{ //"Bisiklet" sınıfı
String renk; // durum => değişken(attribute)
String marka; // durum => değişken(attribute)
double fiyat; // durum => değişken(attribute)
public void hızlan(){ // davranış => metot
System.out.println("Bisiklet hızlanıyor.");
}
public void frenYap(){ // davranış => metot
System.out.println("Bisiklet yavaşlıyor.");
}
}
Artık bu Bisiklet sınıfı üzerinden istediğimiz kadar bisiklet nesnesi oluşturabiliriz. Oluşturduğumuz her yeni nesneye “instance” yani örnek denir. Oluşturduğumuz her bir nesnenin özellikleri de kendine özgüdür. Yani her nesnenin farklı farklı özellikleri olabilir.
Peki nesne nasıl oluşturulur ?
Java üzerinden örnek verelim. Yine aynı bisiklet örneği üzerinden devam edelim. Java’da bir sınıftan bir nesne oluşturmak için new anahtar kelimesi kullanılır. Aşağıda göründüğü gibi new anahtar kelimesi ile Bisiklet sınıfından Bisiklet tipinde bisiklet1 nesnesi oluşturduk.
public static void main(String[] args){
Bisiklet bisiklet1 = new Bisiklet(); //bisiklet1 nesnesi oluşturuldu
bisiklet1.renk = "siyah"; //nesnenin renk değişkenine değer atandı
bisiklet1.marka = "x markası"; //nesnenin marka değişkenine değer atandı
bisiklet1.fiyat = 1111.1; //nesnenin fiyat değişkenine değer atandı
bisiklet1.hızlan();
bisiklet1.frenYap();
}
Daha sonra oluşturduğumuz bisiklet1 nesnesinin değişkenlerine değer atamaları yaptık. Bu değişkenlere erişmek için nokta (.) kullandık. Çünkü nokta operatörü bir sınıfın altında bulunan değişkenlere ve metotlara erişmemizi sağlar.
Değişkenlere eriştiğimiz gibi metotlara da nokta ile erişim sağlayabiliriz. Örnekte görüldüğü üzere bisiklet1 nesnesi üzerinden de “hızlan()” ve “frenYap()” metotlarına erişim sağladık. Bu metotların çıktıları da şöyle olacaktır :
Bisiklet hızlanıyor.
Bisiklet yavaşlıyor.
Nesne Yönelimli Programlamada 4 temel özellik vardır. Bu özelliklerden herhangi birini sağlamayan programlama dili nesne yönelimli programla-ma dili olarak sayılmaz.
Buraya kadar olan kısımda OOP’nin ne olduğundan ve bazı özelliklerinden bahsettik. Şimdi de son olarak OOP’nin bize sağladığı kolaylıklardan bahsedelim ve yazıyı sonlandıralım.
- Oluşturulan nesneler birbirinden bağımsız olduğu için bilgi gizleme olanağı artar. Örneğin A nesnesi B nesnesinin özelliklerini kullanamaz ve erişemez.
- Oluşturulan sınıflar sayesinde daha az kod ile daha fazla iş yapılıp kod tekrarı önlenmiş olur. Örneğin bir insan sınıfında isim, soy isim, yaş, cinsiyet gibi özellikleri bir defa tanımlayıp bu sınıftan istediğimiz kadar insan tipinde nesne oluşturabiliriz. Böylece kod tekrarı önlendiği için geliştirme sürecinin verimliliği artmış olur.
- Bir sınıf içerisinde ki metotlar farklı ihtiyaç durumlarında tekrar tekrar kullanılabilir. Örneğin bir sınıfın A isimli bir metodu olsun. Bu metoda farklı alanlarda ihtiyaç duyulup kullanılmak istenildiğinde, her ihtiyaç alanında A metodunu tekrar oluşturmak vakit kaybına sebep olacaktır, fakat OOP sayesinde bu A metodu ihtiyaç duyulan yerlerde tekrardan oluşturmaya gerek kalmadan metot çağırılarak kullanılabilmektedir. Yani kod tekrarı önlenmektedir.
- Ekip çalışmalarında kolaylık sağlar. Örneğin bir takım üyesinin görevi A,B,C sınıflarını yazmak, sizin göreviniz de D,E sınıflarını tasarlamak olabilir. Birbirinizden tamamen bağımsız olarak çalışabilir ve iş yükünü azaltabilirsiniz.
Son olarak OOP’nin sağladığı faydalardan bahsettik. Tabi ki bu örnekler çoğaltılabilir. Ek bir bilgi olarak da kullandığımız popüler nesne tabanlı programlama dillerine örnek vererek yazıyı sonlandıralım. Bu diller : Java, C#, C++, Python vb dillerdir.
Umarım akıcı ve açıklayıcı bir yazı olmuştur. İyi çalışmalar diliyorum.. ✨