ProgramlamaJava Geliştirici

Java'da kullanılan temel nesne yönelimli programlama (OOP) prensiplerini ve bunların pratikte nasıl uygulanacağını anlatın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Java, nesne yönelimli programlamanın (OOP) dört ana prensibini uygular: kapsülleme, miras, çok biçimlilik ve soyutlama.

  • Kapsülleme, bir sınıfın içsel uygulamasını gizlemeyi ve verilere yalnızca yöntemler aracılığıyla erişim sağlamayı mümkün kılar. Java, kapsüllemeyi sağlamak için erişim belirleyicilerini (private, protected, public) ve getter/setter'ları kullanır.
public class Account { private double balance; public double getBalance() { return balance; } public void deposit(double amount) { this.balance += amount; } }
  • Miras, bir sınıfın mevcut bir sınıf üzerinden yeni bir sınıf oluşturmasını sağlar ve extends anahtar kelimesiyle gerçekleştirilir. Bu, kodun yeniden kullanımını teşvik eder.
public class Animal {} public class Dog extends Animal {}
  • Çok biçimlilik, bir arayüzün birden fazla tür için hizmet etme yeteneği ile kendini gösterir. Java'da bu, yöntemleri geçersiz kılma ve arayüzler aracılığıyla sağlanır.
Animal animal = new Dog(); animal.makeSound(); // Dog içindeki uygulamayı çağırır
  • Soyutlama, soyut sınıflar ve arayüzler tanımlayarak karmaşık sistemleri basitleştirir.
public interface Drawable { void draw(); }

Aldatıcı Soru.

Java'da bir sınıf, aynı imzaya sahip bir arayüzü ve soyut bir sınıfı miras alıyorsa ne olur? Miras alınan sınıfın davranışı nasıl olur?

Cevap: Eğer hem soyut sınıf hem de arayüz aynı yöntem imzasını tanımlıyorsa, bu yöntemi türetilmiş sınıfta yalnızca bir kez uygulamak yeterlidir. Ancak eğer soyut sınıf bu yöntemi uygulamışsa, Java onun uygulamasını kullanır. Arayüzün varsayılan yöntemleri sadece gerekiyorsa geçersiz kılınır.

interface A { default void foo() { System.out.println("A"); }} abstract class B { void foo() { System.out.println("B"); }} class C extends B implements A {} // new C().foo() "B" yazdırır

Konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri.


Hikaye

Bir banka projesinde, geliştirici tüm alanları public yaptı ve onlara doğrudan erişti. Bu, nesnelerin durumunun kontrolsüz bir şekilde değişmesine ve hataların zor bulunmasına yol açtı. Sonuç olarak, tüm kodun private alanlar ve erişim yöntemlerini kullanacak şekilde yeniden yazılması gerekti.


Hikaye

Yeni çalışanlardan biri, çok biçimliliği desteklediğini düşünerek temel sınıfın private yöntemini geçersiz kılmaya çalıştı. Ancak bu, alt sınıfta yeni bir yöntem oluşturdu ve temel sınıftan yapılan çağrılar orijinal versiyonu çağırarak beklenmeyen davranışlara yol açtı.


Hikaye

Birden fazla kaynaktan varsayılan yöntemler içeren arayüzlerin kullanımı, "class X inherits unrelated defaults for Y() from types A and B" hatasına yol açtı — çalışan, bu tür çatışmaların alt sınıfta manuel olarak çözülmesi gerektiğini bilmiyordu.