Nesne tabanlı programlama dili, yazılım geliştirirken Nesne (programlama) kavramını temel alan ve özellikle kapsülleme ilkesini destekleyen programlama dillerini tanımlar.[1] Ancak bu diller, kalıtım ve çok biçimlilik gibi özellikleri içermek zorunda değildir. Bu nedenle, tüm nesne yönelimli programlama dilleri aynı zamanda nesne tabanlıdır; ancak her nesne tabanlı dil, nesne yönelimli değildir.[2]
Bu ayrım özellikle yazılım geliştirme ilkeleri açısından önemlidir. Örneğin, SOLID ilkeleri yalnızca nesne yönelimli programlama bağlamında uygulanabilir; çünkü bu ilkeler, kalıtım ve çok biçimlilik gibi nesne yönelimli paradigmaların varlığını varsayar.[1] Nesne tabanlı ama nesne yönelimli olmayan dillerde bu ilkeleri doğrudan uygulamak mümkün değildir.[2]
Aşağıdaki diller nesne tabanlı olup aynı zamanda nesne yönelimlidir:[3]
Aşağıdaki diller nesne kavramını ve sınıfları desteklemekle birlikte, tam anlamıyla nesne yönelimli değildir çünkü kalıtım gibi temel özellikleri eksiktir:[2]
Aşağıda, JavaScript dilinde nesne tabanlı fakat kalıtım kullanılmayan basit bir örnek yer almaktadır:[4]
let araba = {
marka: "Toyota",
model: "Corolla",
çalıştır: function() {
console.log(this.marka + " çalıştı.");
}
};
araba.çalıştır(); // Toyota çalıştı.
Bu örnekte nesne ve yöntem (metot) tanımı yapılmıştır; ancak kalıtım veya sınıf yapısı kullanılmadığı için nesne yönelimli değil, yalnızca nesne tabanlıdır.
Aşağıda, aynı kavramların nesne yönelimli biçimde Python dilinde nasıl uygulandığını gösteren bir örnek verilmiştir:[5]
class Araba:
def __init__(self, marka, model):
self.marka = marka
self.model = model
def çalıştır(self):
print(f"{self.marka} çalıştı.")
araba = Araba("Toyota", "Corolla")
araba.çalıştır() # Toyota çalıştı.
Burada hem sınıf tanımı hem de nesne yaratımı yapılmış, yani kalıtım ve diğer OOP özellikleri için zemin hazırlanmıştır.