Intern
Nesne yönelimli programlama (OOP) nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Nesne yönelimli programlama (OOP), "nesneler" kavramına dayanan bir programlama paradigmasıdır; bu nesneler, verileri (özellikler) ve bu verilerle çalışan yöntemleri (fonksiyonlar) içerir.
OOP'nin temel ilkeleri:
- Kapsülleme: Verilerin ve yöntemlerin tek bir blokta (nesne) toplanması ve dış ortamdan detayların gizlenmesi. Verilere erişim sadece belirli yöntemler aracılığıyla yapılır.
- Miras: Var olan sınıflardan (ebeveynler) yeni sınıflar (çocuklar) oluşturmak, onların özelliklerini ve yöntemlerini miras almak. Kodun yeniden kullanılmasını sağlar ve sınıf hiyerarşileri oluşturur.
- Çok Biçimlilik: Farklı sınıflardan nesnelerin aynı çağrıya farklı tepki verme yeteneği. Yöntemlerin yeniden tanımlanması veya protokollerin (arayüzlerin) kullanılmasıyla gerçekleştirilir.
Swift'te örnek:
// Kapsülleme ve temel sınıf örneği
class Car {
private var speed: Double // Özel özellik (kapsülleme)
init(initialSpeed: Double) {
self.speed = initialSpeed
}
func accelerate(by factor: Double) {
speed *= factor // Özel özelliğe erişim yöntemi
}
func getCurrentSpeed() -> Double {
return speed
}
}
// Miras örneği
class ElectricCar: Car {
var batteryLevel: Double
init(initialSpeed: Double, initialBatteryLevel: Double) {
self.batteryLevel = initialBatteryLevel
super.init(initialSpeed: initialSpeed) // Ebeveyn sınıfın yapıcı metodunu çağırma
}
// Çok biçimlilik örneği (yöntemin yeniden tanımlanması)
override func accelerate(by factor: Double) {
if batteryLevel > 10 { // Ek mantık
super.accelerate(by: factor * 1.1) // Üst sınıfın metodunu çağırma ve modifiye etme
batteryLevel -= 5
} else {
print("Düşük pil, çok hızlanamaz.")
}
}
}
// Çok biçimlilik örneği (kullanım)
let myCar: Car = Car(initialSpeed: 50)
let myElectricCar: Car = ElectricCar(initialSpeed: 60, initialBatteryLevel: 100)
// Her iki değişken de Car türünde olmasına rağmen,
// myElectricCar için accelerate() çağrısı yeniden tanımlanmış yöntemi çağırır
myCar.accelerate(by: 1.5)
myElectricCar.accelerate(by: 1.5)