Nesne Yönelimli Programlama Nedir? JavaScript ile OOP

Bu yazımızda öncelikle size nesne yönelimli programlama (Object Oriented Programming – OOP) hakkında bilgilendirme yapıp, nesne yönelimli programlamanın dört temel özelliğine değineceğiz. Sonrasında yaygın kullanılan bir nesne yönelimli programlama dili olan JavaScript’i ele alacağız.

Nesne Yönelimli Programlama Nedir? OOP Ne Amaçla Kullanılır?

Yazılım dünyasında gelişmeler arttıkça yazılımlar karmaşıklaşmaya, bunun sonucu olarak da yazılımların boyutları artmaya başladı. Bu yüzden geliştiriciler bu karmaşıklığı giderebilmek için işlevler üzerine değil de ‘nesne’ diye tanımladıkları kavramlara odaklandılar. Nesne diye tanımladıkları bu kavram; onları bu karmaşıklıktan kurtaracaktı. Nasıl olduğunu merak ediyor ve anlamak istiyorsanız gelin geliştiricilerin ‘nesne’ kavramına bir göz atalım. 

Nesneler birbirleri arasında iletişim sağlayabilen, içinde veriler ve verilerin metodlarını bulunduran kavramlardır. Programcı nesneleri belirlerken birlikte kullanılabilecek verileri toplayıp birbirleriyle ilişkilendirmelidir. Bu ilişkileri doğru bir şekilde bağladığında ve nesneler birbirine benzeyen özelliklere sahip olduğunda programcı daha az nesne kullanacaktır ve dolayısıyla daha az nesne daha az yer kaplayacaktır. Zaten nesne yönelimli programlama, birbirleriyle ortak özellikleri olabilecek birden çok “varlık” olduğu zaman tercih edilir. 

Nesne Yönelimli Programlamada Sınıf-Nesne İlişkisi 

Sınıf kavramını anlayabilmemiz için direkt gerçek yaşamımızdan bir örnek vererek kavramı somutlaştırmaya çalışalım. Gerçek yaşamımızda belirli özellikleri olan (örneğin meyveler, sebzeler) bazı kavramları biliyoruz, şimdilik meyveler ve sebzeler kavramlarını ele alıp bunları ‘sınıf’ olarak tanımlayalım. 

Meyvelerin akla gelen bir özelliği olarak, örneğin ‘Meyveler bitkinin tohumlarını içinde bulunduran bir yapıdır.’ diyelim. Sebzelerin özelliği olarak da ‘Sebzeler bitkinin tohumlu kısımlarının dışında kalan bir yapıdır.’ diyelim. Bu bağlamda -meyveleri sebzelerden ayıran özellikler bulunduğu için- bu farklı özellikler farklı bir sınıf oluşturacaktır.  

Bu durumda her iki sınıftan birer örnek alalım, bu örnekler meyve sınıfı için portakal, sebze sınıfı için brokoli olsun. Burada seçtiğimiz portakal ve brokoli örnekleri birer nesnedir. 

Nesne Yönelimli Programlama Nedir? Sınıf - Nesne İlişkisi
Şema Üzerinde Sınıf-Nesne İlişkisi

Nesne Yönelimli Programlamanın Olmazsa Olmaz 4 Temel Özelliği 

Özellikleri öncelikle encapsulation (sarmallama), abstraction (soyutlama), inheritance (miras alma), polymorphism (çok şekillilik) olarak sıralayalım.  

Bu özellikler için ‘olmazsa olmaz’ tanımını yapmamızın sebebi ise bu özelliklerin bir programlama diline sanki bir paket şeklinde uygulanması ve o programlama dilini nesne yönelimli programlama kavramına uygun hale getirmesidir. Bu dörtlü özellik paketinden sadece biri çıkarılsa dahi, bu dil artık nesne yönelimli bir programlama dili olmayacaktır. Programlama dili aynı anda bu dört özelliğin dördünü de sağlıyor olmalıdır. 

Nesne Yönelimli Programlama Nedir? OOP 4 Temel özelliği
NYP’nin 4 Temel Özelliğini Gösteren Şema

Encapsulation (Sarmallama):

Programcının oluşturduğu nesnelerin özelliklerinin birbirinden benzersiz olması gerektiğine ve bunun avantajına değinmiştik. Bu benzersizliğin diğer avantajı ise nesneyi bir sarmalayıp diğer nesneye özelliklerini kullandırtmamasıdır. Sarmallamanın private, public, protected olmak üzere 3 adet bilgi saklama belirteci vardır. 

Bu bilgi saklama belirteçlerini açıklayacak olursak adlarından da anlaşılacağı üzere;  public, herkesin erişebileceği veriler iken, private yalnızca kendi sınıfının erişebileceği verilerdir. Türkçe’de “korumalı” anlamına gelen protected da sınıf içinde ve miras alınan sınıflarda kullanılır. 

Abstraction (Soyutlama): 

Bir sınıfın özelliklerini, karmaşık olmayacak şekilde tanımlamaktır. Projeyi zaten küçük tutmayı amaçlarken soyutlama işlemiyle gereksiz verilerin atılması bize avantaj sağlayacaktır. 

Nesne Yönelimli Programlama Nedir? Soyutlama Örnek Şema
Soyutlama İçin Örnek Şema

 Inheritance (Miras Alma):

Bu özellik ile beraber türetilen sınıfların mükemmel olarak değerlendirdiğimiz özelliklerini tekrar kullanabiliyoruz. Birbirinden türeyecek olan sınıflar, mükemmel özelliklerini üst sınıfından alabiliyor.  

Örneğin ‘kalem’ sınıfının alt sınıfları olarak ‘pilot kalem’ ve ‘tükenmez kalem’ sınıflarını ele alalım. Pilot kalem ve tükenmez kalemin ikisinin de sivri uçlu olması onların bir ortak özelliği olarak sayılabilir. Burada ‘sivri uçlu olma’ özelliğini miras aldığımızda, ‘sivri uçlu olmayı’ belirten kodu tekrar yazmamıza gerek olmayacak. Tekrardan kaçındığımız için elde ettiğimiz kod hem daha kısa hem daha az karmaşık olacaktır. 

Polymorphism (Çok şekillilik): 

Miras alma konusunda seçtiğimiz alt sınıfın, üst sınıfın belli özelliklerini taşımasından bahsetmiştik. Polimorfizm (Çok şekillilik) kavramında ise alt sınıflar farklı davranış gösterir. Bu bağlamda miras alma özelliği ile ilişkilendirilebilir. 

Örnek olarak da miras alma özelliğinde bahsettiğimiz örneği ele alalım: pilot kalem ve tükenmez kalem. Bu iki nesnenin ortak olmayan özelliği ise kağıt üzerinde bıraktığı izlerdir. Çok şekillilik kavramı da bu bağlamda, farklı nesnelerin aynı olaya tabii tutulduğunda farklı şekilde cevap vermesi olarak tanımlanabilir. 

JavaScript ve Nesne Yönelimli Programlama 

Dünyada en yaygın şekilde kullanılan programlama dillerinden biri olan JavaScript, nesne yönelimli programlama kapsamına giren dillerdendir. Bu yüzden NYP kavramını daha iyi özümseyebilmek için bir de JavaScript programlama dilini ana hatlarıyla inceleyelim: 

Eğer yazımızın bu bölümünün öncesinde JavaScript hakkında bilgi edinmek isterseniz Javascript Nedir? Ne İşe Yarar? adlı yazımızı da inceleyebilirsiniz.

Öncelikle JavaScript’te tarih, matematik, dizi ve fonksiyon vb. amaçlarda kullanılan Date, Math, Array, Function, Object gibi kavramların hepsinin birer “nesne” olduğunu belirtelim. 

  • JavaScript’te değişkenler (variable), var ile belirtilir. Aşağıda verdiğimiz örnekte JavaScript dilinin, “ogrenci” değişkenini yalnızca bir adet değer olarak saklayacağını görüyorsunuz.
<html>
 <body>
  <script>

   var ogrenci = "Gamze Ceren Akcanlı";
   console.log (ogrenci);

  </script>
 </body>
</html>
  • Ancak JavaScript’te aynı zamanda değişken olarak tanımladığımız nesneler görüldüğü üzere numara ve bölümün değerleri gibi birden fazla değeri saklayabilir.
<script>

 var ogrenci = {no: 003, bolum:"malzeme"}; 
 console.log(ogrenci.no + " " + ogrenci.bolum); 

</script>
  • JavaScript diline ait tüm nesnelerin adlarını ve nesnelerin değerlerini görüntüleyebilmek için for in döngüsü kullanılır.
<script>

  var ogrenci = {no:003, bolum:"malzeme"
};
  for (x in ogrenci) {
console.log(x + " " + ogrenci[x]);
}

</script>
  • Sunduğumuz örneklerde ogrenci değişkenine yeni bilgiler eklemek ya da silmek istersek, sırasıyla for in ve delete kullanarak yapabiliriz. Örnek olarak öğrencinin isim bilgisini ekleyip numara bilgisini çıkaralım:
<script>

  var ogrenci = {no:003, bolum:"malzeme"
};

  ogrenci.isim = "Gamze Ceren";

  for (x in ogrenci) {
console.log(x + " " + ogrenci[x]);
}

</script>
<script>

 var ogrenci = {no:003, bolum:"malzeme"};

 delete ogrenci.no;

 console.log("Öğrencinin ismi:" +ogrenci.isim+ "Öğrencinin bölümü:" +ogrenci.bolum)


</script>

Teknoloji'den geri kalmamak için e-posta listemize abone olun!

Marmara Üniversitesi Metalurji ve Malzeme Mühendisliği 3.sınıf öğrencisi. Araştırmayı seven, araştırdıkça paylaşmayı daha çok seven biri.