Nesne yönelimli programlamanın 4 temel prensibi nedir?
Cevap
1. Encapsulation (kapsülleme)
Veri ve onu işleyen metotlar bir arada tutulur, iç durum dışarıdan doğrudan değiştirilemez. Nesne tutarlılığını kendisi korur.
public class BankAccount {
private BigDecimal balance = BigDecimal.ZERO;
public void withdraw(BigDecimal amount) {
if (amount.compareTo(balance) > 0)
throw new IllegalStateException("Yetersiz bakiye");
balance = balance.subtract(amount);
}
public BigDecimal getBalance() { return balance; }
}2. Abstraction (soyutlama)
Karmaşık detaylar gizlenir, yalnızca gerekli arayüz sunulur. List kullanan kod onun dizi mi bağlı liste mi olduğunu bilmek zorunda değildir.
3. Inheritance (kalıtım)
Bir sınıf başka bir sınıfın özelliklerini ve davranışlarını devralır, "is-a" ilişkisi kurar: Dog extends Animal. Kod tekrarını azaltır ama sıkı bağımlılık yaratır.
4. Polymorphism (çok biçimlilik)
Aynı arayüz farklı nesnelerde farklı davranır.
List<Shape> shapes = List.of(new Circle(2), new Square(3));
for (Shape s : shapes) {
System.out.println(s.area()); // her biri kendi area() metodunu çağırır
}- Runtime (overriding): alt sınıf metodu ezer, hangisinin çalışacağı çalışma zamanında belirlenir.
- Compile-time (overloading): aynı isimli, farklı parametreli metotlar.
Kapsülleme ile soyutlama sık karıştırılır: kapsülleme veriyi korumak, soyutlama karmaşıklığı gizlemek ile ilgilidir.
İlgili OOP & Tasarım Desenleri soruları
- Clean code nedir? Yaygın code smell'ler nelerdir?
- Dependency Injection nedir? IoC container ne işe yarar?
- Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?
- Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?
- Factory deseni nedir? Ne zaman kullanılır?
- Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.