Nesne Yönelimli Programlama (OOP-Object Oriented Programming) 1990’lı yıllarda başlayan ve günümüzde de yoğun olarak kullanılan bir programlama teknolojisidir.
Nesne Yönelimli Programlama'da, programlama ortamındaki her şey bir nesne olarak kabul edilir ve nesnelerin özellikleri değiştirilerek onlara yeni biçimler verilebilir. Ayrıca her nesnenin duyarlı olduğu durumlar da mevcuttur. Her nesne üzerine uygulanabilecek farklı metotlar oluşturulmuştur. Yapısal Programlama'da ağırlık programlama komutlarındayken, Nesne Yönelimli Programlama'da yazılımcının ortamdaki nesneler, bunların özellikleri, duyarlı oldukları olaylar ve nesnelere uygulanabilecek metotlar hakkında ayrıntılı bilgi sahibi olması gerekir.
1980’lerin ortasında ortaya çıkan C++, ilk Nesne Yönelimli Programlama dili değildi, ancak en popüleri oldu. Bildiğiniz üzere, C dilinin class (sınıf) yapısı ilave edilmiş ve Nesne Yönelimli Programlama teorisinin kavramlarına göre tasarlanmış C++ çok yaygın olarak kullanılmaya devam ediyor.
Bunun yanında 1990’ların başında, özellikle İnternet uygulamalarına yönelik özellikleriyle öne çıkan Java dili de saf (pure) bir nesne yönelimli programlama dilidir.
Objective C ise gerçekte nesne yönelimli bir dil olmayan C diline, nesne yönelimli dillerin özellikleri yerleştirilerek oluşturulmuştur.
Nesne Yönelimli Programlama dillerinin teknik özelliklerini gözden geçirmeden önce, yukarıda belirtilen nesne yönelimli dillerin oluşturulma nedenlerini anlayabilmek için Nesne Yönelimli Programlama dillerinin yararlı yönlerini gözden geçirelim.
Yazılımın Bakım (Maintenance) Kolaylığı
Nesne Yönelimli Programlama dillerinde, nesneler ait oldukları sınıfların sunduğu şablonlarla temsil edilirler. Birbirinin benzeri ya da aynı konu ile ilişkili sınıflarsa bir araya getirilerek namespace ya da package (paket) adı verilen sınıf kümeleri oluşturulur. Bu durumda yazılımın bakımı demek; ya mevcut sınıflarda değişiklik ya da yeni sınıf eklenmesi anlamına gelir. Bu da yazılımın tümünü hiçbir şekilde etkilemeyecek olan bir işlemdir. Oysa klasik yapısal programlama dilleriyle geliştirilen programlarda yazılımın bakım maliyeti üretim maliyetinin çok önemli bir yüzdesi kadardır (%40’lar civarında).
Genişletilebilirlik (Extensibility)
Nesne Yönelimli Programlama'da mevcut bir sınıfa yeni özellik ve metotlar ekleyerek artan işlevsellik sağlamak son derece kolaydır.
Üretilen Kodun Yeniden Kullanılabilirliği (Reusability)
Nesnelerin üretildiği sınıflar, ortam içinde her uygulama geliştiricinin kullanımına açık olduğu için ortak bir kütüphane oluşturulmuştur. Her kullanıcı bu ortak kütüphanede bulunan sınıfları kullanarak gerekli kodu yeniden yazmaktan kurtulur ve uygulamaya özgü kod parçaları, ortak kullanımdaki sınıfların kod uzunluklarına göre göz ardı edilebilir boyuttadır.