Object Oriented Programming (OOP) Nedir?
Nesne tabanlı programlama (OOP) yaklaşımı birçok programlama dilinde bulunmaktadır. Yazdığımız kodun anlaşılabilir ve okunabilir olması en önemli noktalardan biridir. Hemen OOP kavramına bir örnekle başlayalım,
class Car {
var brand: String
var model: String
init(brand: String, model: String) {
self.brand = brand
self.model = model
}
func start() {
print("\(brand) \(model) started")
}
func stop() {
print("\(brand) \(model) stopped")
}
}
class ElectricCar: Car {
var batteryCapacity: Int
init(brand: String, model: String, batteryCapacity: Int) {
self.batteryCapacity = batteryCapacity
super.init(brand: brand, model: model)
}
func charge() {
print("\(brand) \(model) charging")
}
}
let myCar = Car(brand: "Mercedes", model: "G63")
myCar.start()
myCar.stop
let myElectricCar = ElectricCar(brand: "Tesla", model: "S" batteryCapacity: "20")
myElectricCar.start()
myElectricCar.charge()
Bu kod örneği “Car” adına bir ana sınıf ve “ElectricCar” adında bir alt sınıf içeriyor. “Car” sınıfı, marka model gibi özelliklere (property) sahip, “ElectricCar” sınıfı ise pil kapasitesi özelliğine ek olarak “Car” sınıfındaki özellikleri de devralıyor. Her iki sınıfta “start()” ve “stop()” adında iki methoda sahiptir.
“Car” sınıfından “myCar” nesnesi oluşturulur ve onun “start()” ve “stop()” yöntemleri çağrılır. Ayrıca “ElectricCar” sınıfıdan “myElectricCar” nesnesi oluşturulur ve onun da “start()” ve “charge()” yöntemleri çağrılır.
Bu örnek OOP kavramlarına uygun bir şekilde sınıf kalıtımı yani inheritance, methodların kullanımı ve sınıf özellikleri (property) gibi birçok konuyu içerir.
OOP gerçek hayatta var olan nesnelerin (object) programlama dünyasına yansıtılması ile ilgilidir. OOP, programlama problemlerinin nesnelere ayırarak ve nesenlerin arasındaki ilişkileri belirleyerek çözümler üretmeye odaklanır.
Temel kavramlara bir göz gezdirelim;
- Object ( Nesne ) : Sınıflardan oluşturulan örneklerdir. Her nesne, bir sınıfta tanımlanan özellikleri ve işlevleri kullanır.
- Class ( Sınıf ) : Nesnelerin oluşturulması için kullanılan şablonlardır. Sınıflar, property ve methodları içerir.
- Inheritance ( Kalıtım ) : Alt sınıfların (subclasses) ana sınıfının (superclass) özelliklerini ve işlevlerini miras almasına izin verir. Bu durum kod tekrarını önler ve sınıflar arasındaki ilişkileri düzenler.
- Polymorphism ( Çok Biçimlilik ) : Farklı sınıfların aynı işlevleri farklı şekillerde uygulamasına izin verir. Bu durum kodun daha esnek ve modüler olmasını sağlar.
- Abstraction ( Soyutlama ) : Gereksiz ayrıntıları gizleyerek, nesnelerin özelliklerine ve işlevlerine sadece gereken düzeyde erişimi sağlar. Bu durum ise kodun daha anlaşılır ve bakımının daha kolay olmasını sağlar.
- Encapsulation ( Kapsüllleme ) : Bir sınıfın özelliklerine ve işlevlerine diğer sınıflardan gizlilik sağlayarak, sınıfın iç işleyeşinin değiştirilmesini önleyen bir kavramdır. Bu, nesnenin iç durumunun korunmasına yardımcı olur ve kodun daha güvenli olmasını sağlar. Encapsulation, bir sınıfın iç işleyişini değiştirmeden dış dünyaya bir arayüz sunmasına da izin verir. Bu sayede, bir sınıfın kullanımı ve bakımı daha kolay hale gelir.
Encapsulation kafanızı karıştırdıysa bu örnekle daha iyi kavrayacağımızı düşünüyorum. 👇🏼
class User {
private var name : String
private var surname: String
private var age : Int
init(name: String, surname: String, age: Int) {
self.name = name
self.surname = surname
self.age = age
}
func fullName() -> String {
return "\(name) \(surname)"
}
func birthday() -> Int {
let today = Date()
let calendar = Calendar.current
let year = calendar.component(.year, from: today)
return year - age
}
func changeAge(newAge: Int) {
age = newAge
}
}
let user = User(name: "Alex", surname: "Turner", yas: 35)
print(user.fullName()) // Alex Turner
print(user.birthday()) // 1988
user.changeAge(newAge: 39)
print(user.birthday()) // 1984
Kısacası OOP, büyük ölçüde yazılımın yeniden kullanılabilirliği, bakımı ve geliştirilmesini kolaylaştırılması nedeniyle popüler bir programlama paradigmasıdır. Yukarıda belirttiğimiz temel kavramlar ise programlama açısından daha düzenli ve modüler bir yaklaşım sunar.
Keyifli kodlamalar :)