50+ OOP Mülakat Soruları ve Cevapları (2026)
Bir OOPs Mülakatına mı hazırlanıyorsunuz? Size hangi soruların sorulabileceğini ve nasıl yanıt vereceğinizi düşünmenin zamanı geldi. Bu aşamada ustalaşmak, OOPs Mülakatının hem temellerini hem de derinliğini anlamayı gerektirir.
Bu alandaki fırsatlar hızla artıyor ve teknik uzmanlık ve profesyonel deneyim başarının temel taşları haline geliyor. İster temel soruları çözmeyi hedefleyen yeni mezun, ister analiz becerilerini geliştiren orta düzey bir geliştirici, ister 5 hatta 10 yıllık köklü deneyime sahip kıdemli bir profesyonel olun, bu soru ve cevaplar pratik bilgiler sunar. İşe alım yöneticileri, ekip liderleri ve kıdemliler, adayların teorinin ötesine geçen ve sektör trendleriyle uyumlu ileri düzey uygulamalara sahip bir beceri setine sahip olmasını bekler.
Araştırmamız, 65'ten fazla teknik liderin görüşleri, 40'tan fazla yöneticinin geri bildirimleri ve farklı sektörlerden 120'den fazla profesyonelin paylaştığı bilgiler üzerine kuruludur. Bu geniş referans yelpazesi, temel kavramlardan gelişmiş senaryolara kadar güvenilir bir kapsam sağlar.

1) Nesne Yönelimli Programlama (OOP) nedir ve neden önemlidir?
Nesne Yönelimli Programlama (OOP), veriyi (nitelikleri) ve davranışı (metotları) kapsayan "nesneler" kavramına dayanan bir programlama paradigmasıdır. OOP'nin önemi, gerçek dünya varlıklarını modelleme, modülerliği geliştirme ve kodun yeniden kullanılabilirliğini kolaylaştırma yeteneğinde yatmaktadır.ping Nesne yönelimli programlama (OOP), durum ve davranışı bir araya getirerek programları daha yapılandırılmış ve bakımı daha kolay hale getirir. Örneğin, bir "Araba" nesnesinin renk ve model gibi nitelikleri ve hızlanma ve frenleme gibi yöntemleri olabilir. Faydaları arasında ekipler arasında daha iyi iş birliği, sistemlerin ölçeklenebilirliği ve SOLID gibi köklü tasarım ilkelerinin uygulanması yer alır.
👉 Ücretsiz PDF İndirme: OOPS Mülakat Soruları ve Cevapları
2) OOP'nin temel prensiplerini örneklerle açıklayın.
OOP'nin dört temel ilkesi şunlardır:
- Encapsulation – Gerekli işlevselliği açığa çıkarırken dahili uygulamayı gizlemek. Örnek: Özel bakiye değişkenine sahip banka hesap sınıfı.
- Abstracyon – Sadece temel ayrıntıları görüntülemek ve karmaşıklığı gizlemek. Örnek: Devreyi anlamadan TV kumandasını kullanmak.
- miras – Üst sınıftan nitelikleri ve davranışları yeniden kullanma. Örnek: Animal sınıfından miras alan bir Dog sınıfı.
- Polimorfizm – Metot aşırı yükleme ve geçersiz kılma gibi birden fazla biçim alabilme yeteneği. Örnek: Bir fonksiyon
draw()Daire, Kare veya Üçgen için farklı davranan.
| Ilke | Amaç | Örnek E-posta |
|---|---|---|
| Encapsulation | Erişimi kısıtla | Bankacılıkta özel bakiye |
| Abstracyon | Karmaşıklığı gizle | TV uzaktan kumanda arayüzü |
| miras | Yeniden kullan ve genişlet | Araç → Araba, Kamyon |
| Polimorfizm | Çoklu davranışlar | draw() yöntem |
3) Bir sınıf bir nesneden nasıl farklıdır?
A sınıf nesnelerin yapısını ve davranışını tanımlayan bir plan veya şablondur, oysa nesne Bir sınıfın örneğidir. Bir sınıf, öznitelikleri ve yöntemleri belirtir, ancak bir nesne oluşturulana kadar bellekte yer kaplamaz. Bir nesne, gerçek dünyadaki varlıkları temsil eder ve gerçek değerleri tutar. Örneğin, bir Car sınıf, şu gibi özellikleri tanımlar: color ve engineType, ancak nesne myCar = Car("Red", "V6") Belirli değerleri barındırır. Bir nesnenin yaşam döngüsü genellikle oluşturma, kullanma ve yok etme süreçlerini içerir.
4) OOP'de kalıtımın farklı türleri nelerdir?
Kalıtım, bir sınıfın başka bir sınıftan nitelikleri ve davranışları yeniden kullanmasını sağlar. Beş yaygın tür vardır:
- Tek Kalıtım – Bir alt sınıf, bir üst sınıftan miras alır.
- Çoklu Kalıtım – Bir alt sınıf, birden fazla üst sınıftan miras alır (desteklenen) C++ ama doğrudan değil Java).
- Çok Düzeyli Kalıtım – Bir alt sınıf, başka bir alt sınıftan türetilerek bir hiyerarşi oluşturur.
- Hiyerarşik Kalıtım – Birden fazla sınıf tek bir temel sınıftan miras alır.
- Hibrit Kalıtım – Birden fazla kalıtım tipinin karışımı.
| Menşei | Örnek E-posta |
|---|---|
| Tek | Öğrenci → Kişi |
| Çoklu | Çalışan, Kişi + İşçi'den devralır (C++) |
| Çok düzeyli | Büyükbaba → Ebeveyn → Çocuk |
| Hiyerarşik | Köpek, Kedi ve At Hayvanlardan Miras Alır |
| melez | İki veya daha fazla türün birleşimi |
5) Metot aşırı yükleme ile metot geçersiz kılma arasındaki farkı açıklayabilir misiniz?
Yöntem Aşırı Yükleme Aynı sınıftaki iki veya daha fazla metodun aynı adı paylaşması ancak parametrelerinin (sayı veya tür) farklı olması durumunda ortaya çıkar. Derleme zamanı polimorfizmini temsil eder.
Yöntem Geçersiz Kılma Bir alt sınıf, üst sınıfında önceden tanımlanmış bir yöntemin belirli bir uygulamasını sağladığında ortaya çıkar. Çalışma zamanı polimorfizmini temsil eder.
| Özellik | fazla yükleme | ağır basan |
|---|---|---|
| bağlayıcı | Derleme zamanı | Süre |
| Parametreler | Farklı olmalı | Aynı olmalı |
| Dönüş Tipi | Farklılık gösterebilir | Aynı olmalı |
| Kullanım çantası | Esneklik | Uzmanlaşma |
Örnek:
- Aşırı yükleme:
add(int, int)veadd(double, double)bir sınıfta. - Geçersiz kılma:
Animal.speak()tarafından geçersiz kılındıDog.speak().
6) Kapsülleme yazılım geliştirmeye nasıl fayda sağlar?
Kapsülleme, dahili duruma doğrudan erişimi kısıtlayarak modülerliği artırır, karmaşıklığı azaltır ve veri güvenliğini artırır. Geliştiricilerin, harici kodu etkilemeden uygulama ayrıntılarını değiştirmelerine olanak tanır. Örneğin, bir BankAccount sınıf balance öznitelik özeldir ve erişim genel yöntemler aracılığıyla kontrol edilir deposit() ve withdraw()Bu, yetkisiz manipülasyonları önlerken geçerli işlemleri garanti altına alır. Başlıca avantajları şunlardır:
- İstenmeyen müdahalelere karşı koruma.
- Doğrulama mantığını uygulama yeteneği.
- Gevşek bağlantı sayesinde bakım kolaylığı artırıldı.
7) Mutlak değerleri açıklayın.tracGerçek dünyayla ilgili bir benzetmeyle açıklayın.
AbstracBu yöntem, karmaşık sistemleri yalnızca gerekli özellikleri göstererek ve ayrıntıları gizleyerek basitleştirir. Gerçek dünyadan bir örnek şudur: kahve makinesiKullanıcılar, su ısıtma, öğütme veya filtreleme gibi altta yatan mekanizmaları anlamadan kahve demlemek için bir düğmeye basarlar. Programlamada, bu durum tam tersidir.traction abs yoluyla elde edilirtract sınıfları veya arayüzleri. Örneğin, Javabir karın kasıtract sınıfı Shape abs'yi tanımlayabilirtract yöntemi draw(), alt sınıflar gibi Circle or Rectangle Somut uygulamalar sağlayın. Bu, karmaşıklığı azaltırken esnekliği ve kodun yeniden kullanımını teşvik eder.
8) Yapıcılar ve yıkıcılar nedir? Aralarındaki farklar nelerdir?
A inşaatçı Bir nesne oluşturulduğunda otomatik olarak çağrılan özel bir yöntemdir. Amacı, nesnenin durumunu başlatmaktır. Çoğu dilde, adı sınıf adıyla eşleşir. çöp yakma fırını Bir nesne yok edildiğinde, genellikle kaynakları serbest bırakmak için çağrılır.
Anahtar farklılıklar:
- Inşaatçı nesneleri başlatır; çöp yakma fırını kaynakları temizler.
- Yapıcılar aşırı yüklenebilir; yıkıcılar aşırı yüklenemez.
- Yapıcılar oluşturma sırasında, yıkıcılar ise sonlandırma sırasında çağrılır.
Örnekte C++:
class Student {
public:
Student() { cout << "Constructor called"; }
~Student() { cout << "Destructor called"; }
};
9) Karın kasları arasındaki fark nedir?tract sınıfı ve bir arayüz mü?
An abstract sınıfı hem karın kaslarını içerebilirtract (uygulanmamış) ve somut (uygulanmış) yöntemler, bir arayüzey sadece ABS içerirtract yöntemleri (çoğu dilde, ancak modern dillerde) Java (varsayılan yöntemlere izin verir). Mutlak değerlertracT sınıfları tekli kalıtımı desteklerken, arayüzler çoklu kalıtıma izin verir.
| Görünüş | Abstract Sınıfı | arayüzey |
|---|---|---|
| Yöntemler | Abstract + beton | Abstract (varsayılan yöntemler mümkün) |
| Değişkenler | Örnek değişkenlere sahip olabilir | Sadece sabitler |
| miras | Tek | Çoklu |
| Kullanım çantası | Bazı uygulamalarla ortak bir temel | iletracsınıflar için t |
Örnek:
- Abstract sınıfı
Animaluygulanmışeat()ve abstractmakeSound(). - arayüzey
Flyable'dafly()bu tür sınıflarBirdorAirplaneuygulamak zorundadır.
10) OOP'de polimorfizm nasıl ortaya çıkar?
Polimorfizm, tek bir varlığın birden fazla biçime bürünmesine olanak tanır. İki temel türü vardır:
- Derleme zamanı polimorfizmi (Statik) – Metot aşırı yüklemesi veya operatör aşırı yüklemesi yoluyla elde edilir. Örnek: Birden fazla sürüm
calculate()farklı parametrelere sahip bir yöntem. - Çalışma zamanı polimorfizmi (Dinamik) – Yöntem geçersiz kılma yoluyla elde edilir. Örnek: A
Shapereferans değişkeni çağrısıdraw()yöntem, bir şeye işaret edip etmediğine bağlı olarak farklı davranırCircleorSquarenesne.
Bu, büyük uygulamalarda esneklik, genişletilebilirlik ve daha kolay bakım sağlar.
11) OOP'de farklı erişim tanımlayıcıları nelerdir ve bunların önemi nedir?
Erişim tanımlayıcıları, sınıfların, yöntemlerin ve değişkenlerin görünürlüğünü ve erişilebilirliğini tanımlar. Verilerin ve davranışların bir programın diğer bölümlerine nasıl sunulacağını kontrol ederek, kapsülleme ve güvenliği sağlarlar.
Ortak türler:
- Açık Alan – Programın her yerinden erişilebilir.
- Özel Etkinlik – Yalnızca tanımlayıcı sınıf içerisinde erişilebilir.
- korumalı – Sınıf ve alt sınıfları içerisinde erişilebilir.
- Varsayılan/Dahili (dile özgü) – Aynı paket veya montaj içerisinde erişilebilir.
| Niteleyici | Engellilerin kullanımları için uygunluk | Örnek E-posta |
|---|---|---|
| Açık Alan | Herkese açık | Açık Alan getName() yöntem |
| Özel Etkinlik | Sadece aynı sınıf | Özel Etkinlik balance değişken |
| korumalı | Sınıf + alt sınıflar | korumalı calculateSalary() |
| Dahili (C#) | Aynı montaj | İç Logger sınıf |
Erişim tanımlayıcıları veri gizlemeyi, modülerliği ve kontrollü kod görünürlüğünü sağlar.
12) OOP'de statik bağlama dinamik bağlamadan nasıl farklıdır?
Statik Bağlama (erken bağlama), yöntem çağrılarının yürütmeden önce çözümlendiği derleme zamanında gerçekleşir. Daha hızlıdır ancak daha az esnektir. Örnekler arasında yöntem aşırı yüklemesi ve özel veya son yöntemler bulunur. Java.
Dinamik Bağlama (Geç bağlama), yöntem çağrısının nesnenin gerçek türüne bağlı olduğu çalışma zamanında gerçekleşir. Bu, çok biçimlilik ve esneklik sağlar, ancak performans maliyeti doğurabilir.
| Görünüş | Statik Bağlama | Dinamik Bağlama |
|---|---|---|
| çözüm | Derleme zamanı | Süre |
| Örnek E-posta | fazla yükleme | ağır basan |
| Esneklik | Düşük | Yüksek |
| hız | Daha hızlı | Biraz daha yavaş |
Örneğin, içinde Java, geçersiz kılınmış bir çağrı toString() yöntem gerçek nesne türüne bağlıdır, bu da onu dinamik bağlama durumuna getirir.
13) OOP'de bir nesnenin yaşam döngüsü nedir?
Nesne yaşam döngüsü, bir nesnenin oluşturulmasından yok edilmesine kadar geçirdiği aşamaları ifade eder. Bu yaşam döngüsünü anlamak, geliştiricilerin belleği ve kaynakları verimli bir şekilde yönetmelerine yardımcı olur.
Stajlar:
- Yaratılış – Nesne bir kurucu kullanılarak örnekleştirilir.
- Başlatma – Niteliklere, çoğunlukla yapılandırıcı parametreler aracılığıyla atanan değerler denir.
- kullanım – Metotlar çağrılır ve veriler işlenir.
- Sonlandırma/Yıkım – Nesne kapsam dışına çıkar veya açıkça yok edilir. C++, yıkıcılar temizlemeyi halleder; Java veya C#'ta, çöp toplama belleği yönetir.
Örnek: A FileHandler Bir dosyayı açmak için nesne oluşturulur, veri okumak için kullanılır ve son olarak dosya tanıtıcılarını serbest bırakmak için yok edilir. Uygun yaşam döngüsü yönetimi, bellek sızıntılarını ve kaynak kilitlenmesini önler.
14) Arkadaş fonksiyonları ve arkadaş sınıfları kavramlarını açıklayınız.
In C++, arkadaş fonksiyonları ve arkadaş sınıfları Harici işlevlerin veya sınıfların, başka bir sınıfın özel ve korumalı üyelerine erişmesine izin verir. Bunlar, sıkı iş birliği gerektiren senaryolarda kullanılan kapsülleme ilkesinin istisnalarıdır.
- Arkadaş İşlevi: Kullanılarak beyan edildi
friendBir sınıf içindeki anahtar kelime. Örnek: Sınıfın aşırı yüklenmesine neden olan bir fonksiyon<<sınıf içeriğini görüntülemek için operatör. - arkadaş sınıfı: Başka bir sınıfa özel üyelere doğrudan erişim izni verir. Örnek: A
Loggersınıf arkadaşı olmakBankAccountişlemleri kaydetmek için.
Arkadaşların güçlü ve aşırı kullanımı kapsüllemeyi zayıflatabilir, bu yüzden dikkatli ve ölçülü bir şekilde kullanılmaları gerekir.
15) Sanal fonksiyonlar ve saf sanal fonksiyonlar nelerdir?
A sanal fonksiyon bir temel sınıfta bildirilen bir üye fonksiyondur virtual Anahtar kelime, türetilmiş sınıfların davranışını geçersiz kılmasını sağlar. Çalışma zamanı polimorfizmini destekler. Örnek: Shape::draw() geçersiz kılındı Circle ve Square.
A saf sanal fonksiyon herhangi bir uygulaması olmayan sanal bir fonksiyondur, şöyle tanımlanır = 0Bu, bir sınıf oluşturur.tract, türetilmiş sınıfların bu fonksiyonu uygulaması gerektiğini garanti eder.
| Görünüş | Sanal İşlev | Saf Sanal Fonksiyon |
|---|---|---|
| Uygulama | Varsayılan gövdeye sahiptir | Uygulama yok |
| Sınıf türü | Örneklenebilir | Abstract sınıfı |
| gereklilik | Geçersiz kılmak isteğe bağlı | Geçersiz kılınmalı |
Mülakat ortamlarında, mutlak doğruluğun sağlanması için tamamen sanal işlevler kritik öneme sahiptir.tracGenişletilebilir mimarilerin geliştirilmesi ve tasarlanması.
16) OOP'nin avantajları ve dezavantajları nelerdir?
OOP'nin çok sayıda avantajının yanı sıra bazı sınırlamaları da vardır.
Avantajlar:
- Reus yeteneği miras yoluyla.
- Modülarite kodları sınıflara ayırarak organize etmek.
- Esneklik polimorfizm ile.
- Güvenlik kapsülleme ve veri gizleme yoluyla.
Dezavantajlar:
- karmaşa: OOP dik öğrenme eğrilerine neden olabilir.
- Performans Yükü: Nesne oluşturma ve çöp toplama, yürütmeyi yavaşlatabilir.
- Hafıza Tüketimi: Nesneler genellikle prosedürel kodlardan daha fazla bellek tüketir.
| Avantajlar | Dezavantajlar |
|---|---|
| Code yeniden | Artan karmaşıklık |
| Daha iyi sürdürülebilirlik | Bazı durumlarda daha yavaş yürütme |
| Kapsülleme ile güvenlik | Daha büyük program boyutu |
| ölçeklenebilirlik | Her zaman küçük görevler için uygun değildir |
Bu nedenle OOP, büyük ölçekli uygulamalar için oldukça etkilidir ancak küçük betikler için daha az uygun olabilir.
17) OOP'de istisnalar nasıl ele alınır?
İstisna yönetimi, programı çökertmeden çalışma zamanı hatalarını zarif bir şekilde yönetmeyi sağlayan bir mekanizmadır. Nesne yönelimli programlamada (OOP) istisnalar, hata durumlarını temsil eden nesnelerdir.
Tipik süreç şunları içerir:
- Blok deneyin - Code Bu bir istisna hatası verebilir.
- Yakalama Bloğu – Belirli istisna türlerini işler.
- Sonunda Engelle (bölgesindeki Java/C#) – İstisnalara bakılmaksızın temizleme kodunu yürütür.
Örnekte Java:
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Division by zero not allowed.");
} finally {
System.out.println("Execution completed.");
}
Faydaları arasında daha temiz hata yönetimi, ani arızaların önlenmesi ve hata işleme mantığının iş mantığından ayrılması yer alır.
18) Nesneler her zaman hafızayı tüketir mi ve hafıza nasıl tahsis edilir?
Evet, nesneler bellek tüketir, ancak tahsis dil uygulamasına bağlıdır. Nesne yönelimli programlamada (OOP):
- Statik tahsis: Sınıf düzeyindeki (statik) değişkenler için bellek derleme zamanında bir kez tahsis edilir.
- Yığın tahsisi: Örnekler (nesneler) genellikle yığın belleğinde saklanır ve çalışma zamanında dinamik olarak tahsis edilir.
- Yığın tahsisi: Nesnelere ait referanslar veya işaretçiler yığında bulunabilir.
Örnekte Java:
Car myCar = new Car("Red");
Burada referans myCar yığında bulunurken, gerçek nesne yığında bulunur. Verimli bellek yönetimi, oluşturucuları, yıkıcıları ve çöp toplamayı anlamayı gerektirir.
19) Kompozisyon ile kalıtım arasındaki fark nedir?
Her ikisi de kodu yeniden kullanma mekanizmalarıdır, ancak temelde birbirlerinden farklıdırlar.
- miras: Bir alt sınıfın davranışını bir üst sınıftan türettiği bir "is-a" ilişkisi. Örnek:
CarmirasVehicle. - Bileşim: Bir sınıfın, diğer sınıfların bir veya daha fazla nesnesinden oluştuğu bir "sahip-bir" ilişkisi. Örnek:
Carsahip olduğuEngine.
| Görünüş | miras | Bileşim |
|---|---|---|
| ilişki | Is-a | Has-a |
| Bağlama | Sıkı | Gevşek |
| Esneklik | Less esnek | Daha esnek |
| Kullanım çantası | Hiyerarşik yapılar | Dinamik davranış kompozisyonu |
Modern en iyi uygulamalar genellikle teşvik eder miras üzerine kompozisyon daha fazla esneklik ve daha az bağlantı için.
20) Tasarım kalıpları OOP ile nasıl ilişkilidir?
Tasarım kalıpları, genellikle nesne yönelimli programlama (OOP) prensipleri kullanılarak uygulanan, tekrar eden yazılım tasarım sorunlarına yönelik kanıtlanmış, yeniden kullanılabilir çözümlerdir. Bu kalıplar, mutlak doğruları kullanır.tracYapılandırılmış ve bakımı kolay kod oluşturmak için kodlama, kapsülleme, kalıtım ve polimorfizm kullanılır.
Örnekler şunları içerir:
- Yaratıcı Modeller (örneğin Singleton, Factory) – Nesne oluşturmayı basitleştirin.
- Yapısal Modeller (örneğin, Bağdaştırıcı, Dekoratör) – Sınıflar arasındaki ilişkileri tanımlayın.
- Davranış kalıpları (Örneğin Gözlemci, Strateji) – Nesne iletişimini yönetin.
Örneğin, Gözlemci Modeli Bir öznenin durumu değiştiğinde birden fazla nesnenin (gözlemcinin) güncellenmesini sağlar ve olay odaklı sistemlerde sıklıkla uygulanır. Tasarım kalıplarını dahil etmek, temellerin ötesinde OOP'de daha derin bir uzmanlık gösterir.
21) OOP'de farklı yapılandırıcı türleri nelerdir?
Yapıcılar nesneleri başlatır ve türleri dilden dile değişir. Yaygın türler şunlardır:
- Varsayılan Oluşturucu – Parametre almaz, varsayılan değerlerle başlatır.
- Parametreli Yapıcı – Oluşturma sırasında değer atamak için parametreleri kabul eder.
- Oluşturucuyu Kopyala – Var olan bir nesnenin kopyası olarak yeni bir nesne oluşturur.
class Student {
public:
string name;
Student() { name = "Unknown"; } // Default
Student(string n) { name = n; } // Parameterized
Student(const Student &s) { name = s.name; } // Copy
};
| Menşei | Amaç | Örnek E-posta |
|---|---|---|
| Varsayılan | Argüman yok | Student() |
| Parametreli | Değerlerle başlat | Student("John") |
| kopya | Mevcut klon | Student(s1) |
Bu esneklik, geliştiricilerin nesne oluşturmayı farklı şekillerde ele almalarına olanak tanır.
22) Bir yıkıcı, bir finalize metodundan nasıl farklıdır?
A çöp yakma fırını bir OOP özelliğidir (örneğin, C++ ve C#) bir nesne yok edildiğinde kaynakları serbest bırakmak için kullanılır. Bir nesne kapsam dışına çıktığında otomatik olarak çağrılır.
MKS finalize() yöntemi in Java benzer bir kavramdı ancak o zamandan beri kullanımdan kaldırıldı Java 9 Çünkü çöp toplayıcılar zaten belleği verimli bir şekilde yönetiyordu ve finalize'a güvenmek öngörülemezlik yaratıyordu.
| Görünüş | çöp yakma fırını | Sonlandırma Yöntemi |
|---|---|---|
| Dil | C++, C# | Java (Kaldırıldı) |
| Çağırma | Nesne yok edildiğinde | GC nesneyi kaldırmadan önce |
| Control | deterministik | Kararsız |
| Kullanım çantası | Ücretsiz kaynaklar | Miras temizliği |
Modern uygulama, açık kaynak yönetimini kullanarak kaynakları deneyin in Java or blokları kullanarak C#'da.
23) Rolü nedir? this işaretçi mi yoksa referans mı?
MKS this Anahtar sözcük, geçerli nesne örneğini ifade eder. Rolü dile göre değişmekle birlikte genellikle şunları içerir:
- Örnek değişkenleri ile metot parametreleri arasındaki ayrımı yapmak.
- Mevcut nesneyi diğer metotlara argüman olarak geçirmek.
- Bir metottan geçerli nesneyi döndürmek (metot zincirlemesi).
Örnekte Java:
class Employee {
String name;
Employee(String name) {
this.name = name; // disambiguates parameter vs variable
}
}
In C++, this gerçek bir işaretçi iken, Java ve C# için bir referanstır. Anlaşılırlığı artırır ve akıcı programlama kalıpları sağlar.
24) Sınıf ile yapı arasındaki fark nedir?
Sınıflar ve yapılar kullanıcı tanımlı türlerdir ancak amaç ve uygulama açısından farklılık gösterirler.
| Görünüş | Sınıf | Structure |
|---|---|---|
| Varsayılan Erişim | Özel Etkinlik | Açık Alan |
| Mirası Destekler | Evet | Yok hayır (C++ (sadece sınırlı) |
| Bellek | Yığın (genellikle) | Yığın (genellikle) |
| Kullanım çantası | Karmaşık varlıklar | Hafif veri kapsayıcıları |
Örnek:
- Sınıf: A
Caryöntemleri ve durumu olan sınıf. - Structure: A
Pointtemsil eden yapı(x, y)koordinatlar.
Modern OOP'de, kalıtım ve polimorfizm gibi gelişmiş özellikler nedeniyle sınıflar baskındır; yapılar ise hafif, değiştirilemez veri nesneleri için ayrılmıştır.
25) Statik üyeler örnek üyelerden nasıl farklıdır?
Statik üyeler Herhangi bir nesne örneğine değil, sınıfın kendisine aittirler. Tüm nesneler arasında paylaşılırlar ve bir kez başlatılırlar.
Örnek üyeler her nesneye ait, her örnek için benzersiz değerlere sahip.
Örnekte Java:
class Counter {
static int count = 0; // shared
int id;
Counter() { id = ++count; }
}
Burada, count tracks, oluşturulan nesne sayısını ifade ederken, id nesneye göre farklılık gösterir.
| Özellik | Statik Üyeler | Örnek Üyeler |
|---|---|---|
| kapsam | Sınıf seviyesi | Nesne düzeyi |
| Bellek | Tek kopya | Birden çok kopya |
| giriş | Sınıf adı | nesne referansı |
Statik üyeler sabitler, yardımcı tesisler veya paylaşımlı sayaçlar için idealdir.
26) Mühürlü sınıflar veya değiştiriciler nelerdir?
A mühürlü sınıf Kalıtımı kısıtlar, böylece başka hiçbir sınıf ondan türetilemez. Bu kavram, değişmezliği ve güvenliği sağlamak için kullanılır.
- In C#,
sealedanahtar kelimesi daha fazla kalıtımı engeller. - In Java (JDK 15'ten itibaren), mühürlü sınıflar yalnızca belirli alt sınıflara açıkça izin verir ve sınıf hiyerarşileri üzerindeki kontrolü artırır.
Örnek (Java 17):
sealed class Shape permits Circle, Square {}
final class Circle extends Shape {}
final class Square extends Shape {}
Faydaları:
- Temel sınıfların kötüye kullanılmasını önler.
- Uzantıyı kısıtlayarak sürdürülebilirliği artırır.
- Anahtar ifadelerinde kapsamlı tür hiyerarşileri oluşturmak için kullanışlıdır.
27) Derleme zamanı ve çalışma zamanı polimorfizmi arasındaki farkı örneklerle açıklayabilir misiniz?
Derleme zamanı polimorfizmi (erken bağlama) derleme zamanında yöntem çağrılarını çözer, bu genellikle yöntem aşırı yüklemesi kullanılarak gerçekleştirilir.
Çalışma zamanı polimorfizmi (Geç bağlama) çağrıları yürütme sırasında çözer, genellikle yöntem geçersiz kılma yoluyla elde edilir.
Örnekte Java:
// Compile-time
class MathOps {
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
}
// Runtime
class Animal { void speak() { System.out.println("Generic"); } }
class Dog extends Animal { void speak() { System.out.println("Bark"); } }
| Görünüş | Derleme zamanı | Süre |
|---|---|---|
| bağlayıcı | Erken | Geç |
| Özellik | fazla yükleme | ağır basan |
| Performans | Daha hızlı | Esnek |
| Örnek E-posta | add(int, int) |
Dog.speak() |
28) OOP'de SOLID gibi tasarım prensipleri nelerdir?
MKS KATI ilkeler Sürdürülebilir ve ölçeklenebilir OOP tasarımları oluşturmak için kılavuzlar şunlardır:
- STek Sorumluluk İlkesi – Bir sınıfın değişmesi için tek bir nedeni olmalıdır.
- Okalem/Kapalı Prensip – Genişletmek için açık, değiştirmek için kapalı.
- Liskov İkame İlkesi – Alt tipler, temel tiplerin yerine kullanılabilir olmalıdır.
- IArayüz Ayrım İlkesi – Daha küçük, özel arayüzleri tercih edin.
- DBağımlılık Tersine Çevirme Prensibi – Mutlak değerlere bağlı olmaktractionlar, konkresyonlar değil.
Örnek: Tek parça yerine Report Sınıf işleme, oluşturma, dışa aktarma ve görüntüleme işlemlerini daha küçük sınıflara böler. Bu, modülerliği ve test edilebilirliği artırır. SOLID, en iyi uygulamalarla uyumludur ve birçok tasarım kalıbının temelini oluşturur.
29) Sığ kopyalama ile derin kopyalama arasındaki fark nedir?
- sığ Kopya: Yalnızca referansları kopyalar, nesnelerin kendisini değil. Birindeki değişiklikler diğerini etkiler.
- Derin Kopya: Her şeyi kopyalayarak bağımsız nesneler oluşturur.
Örnekte Java:
// Shallow copy Listlist1 = new ArrayList<>(); list1.add("A"); List list2 = list1; // both refer to same object // Deep copy List list3 = new ArrayList<>(list1); // new object
| Özellik | sığ Kopya | Derin Kopya |
|---|---|---|
| Kopyalama Düzeyi | Sadece referanslar | Tam nesne grafiği |
| Bağımsızlık | Yok hayır | Evet |
| Performans | Daha hızlı | yavaş |
| Kullanım çantası | Değiştirilemez nesneler | Değişken, karmaşık yapılar |
Bu ayrımı anlamak, istenmeyen yan etkilerin önlenmesi açısından çok önemlidir.
30) Gerçek hayattan örnekler OOP kavramlarını nasıl açıklıyor?
Gerçek dünya benzetmeleri OOP'yi açıklar:
- Encapsulation:Bir kapsül hap, tıpkı bir sınıfın verileri gizlemesi gibi, birden fazla bileşeni gizler.
- Abstracyon:Bir TV kumandası karmaşık iç kablolamayı gizler ve yalnızca düğmeleri açığa çıkarır.
- miras: Bir Köpek, Hayvandan özellikler alır (örneğin nefes alma, hareket).
- Polimorfizm: Bir işlev
makeSound()Kedi (miyav) ve Köpek (havlama) için farklı davranır.
Bu tür benzetmeler, OOP'nin gerçek dünya sistemlerini doğal bir şekilde nasıl modellediğini göstermektedir. Örneğin, bankacılık uygulaması Hesap detaylarını kapsar, hesap türleri için kalıtımı kullanır, işlemlerde polimorfizm uygular ve abstracKullanıcılardan gelen ts işlemleri. Bu bağlantılar, adayların mülakatlarda kavramları pratik bir netlikle açıklamalarına yardımcı olur.
31) Örneklerle aşırı yükleme ve geçersiz kılma arasındaki fark nedir?
Aşırı yükleme ve geçersiz kılma, OOP'de polimorfizme olanak sağlayan iki farklı mekanizmadır.
- fazla yükleme: Aynı adı paylaşan ancak parametreleri farklı olan yöntemlerde aynı sınıf içinde meydana gelir. derleme zamanı.
- ağır basan: Bir alt sınıf, üst sınıfında tanımlanan bir yöntemin belirli bir uygulamasını sağladığında oluşur. runtime.
Örnekte Java:
// Overloading
class Calculator {
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
}
// Overriding
class Animal { void speak() { System.out.println("Generic"); } }
class Dog extends Animal { void speak() { System.out.println("Bark"); } }
| Özellik | fazla yükleme | ağır basan |
|---|---|---|
| bağlayıcı | Derleme zamanı | Süre |
| Parametreler | Farklı olmalı | Aynı olmalı |
| Dönüş türü | Farklılık gösterebilir | Aynı olmalı |
| Kullanım örneği | Esneklik | Uzmanlaşma |
32) Karın kasları nasıl?tracNesne yönelimli programlama (OOP) tasarımında kullanılan sınıflar nelerdir?
AbstracT sınıfı, diğer sınıflar için kısmi bir şablon sağlar. Doğrudan örneklendirilemezler, ancak hem mutlak hem de mutlak değerler içerebilirler.tracHem uygulama içermeyen (uygulama gerektirmeyen) hem de somut (uygulama içeren) metotlar sunar. Bu, geliştiricilerin alt sınıflar için esneklik bırakırken ortak bir yapıyı zorunlu kılmalarına olanak tanır.
Örnek:
abstract class Shape {
abstract void draw();
void info() { System.out.println("I am a shape"); }
}
class Circle extends Shape {
void draw() { System.out.println("Drawing Circle"); }
}
Burada, tüm alt sınıfların uygulaması gerekir draw()Tutarlılığı sağlamak. AbstracT sınıfları, özellikle temel sınıfların yeniden kullanılabilir mantık sağladığı ve türetilmiş sınıfların belirli ayrıntıları sağlamasını zorunlu kıldığı çerçevelerde kullanışlıdır.
33) Arayüzler nedir ve mutlak değerlerden nasıl farklıdırlar?tracT dersleri mi?
An arayüzey bir konuyu tanımlartracSınıfların tüm yöntemlerini uygulayarak yerine getirmesi gereken yükümlülükleri vurgular. Bir sınıfın "nasıl" yapması gerektiğinden ziyade "ne" yapması gerektiğine odaklanır. Mutlak kuralların aksinetracSınıflar ve arayüzler genellikle durum içermez ve yalnızca davranışı tanımlar.
Örnekte Java:
interface Flyable {
void fly();
}
class Bird implements Flyable {
public void fly() { System.out.println("Bird flies"); }
}
| Görünüş | Abstract Sınıfı | arayüzey |
|---|---|---|
| Yöntemler | Abstract + beton | Abstract (modern varsayılan yöntemlerle) Java) |
| Değişkenler | Alanlara sahip olabilir | Yalnızca sabitler |
| miras | Tek | Çoklu |
| Amaç | Ortak taban | Davranış kontrolütract |
Arayüzler çoklu kalıtımı destekler ve bu da onları aşağıdaki gibi yetenekleri tanımlamak için uygun hale getirir: Serializable or Comparable.
34) Erişim belirteçleri nelerdir? C++/Javave diller arasında nasıl farklılık gösterirler?
Erişim belirleyicileri sınıf üyelerinin görünürlüğünü belirler.
- C++: Özel (sınıflar için varsayılan), Korumalı, Genel.
- Java: Özel, Korunan, Genel ve Varsayılan (paket-özel).
| Tanımlayıcı | C++ | Java |
|---|---|---|
| Özel Etkinlik | Sadece sınıf içinde | Sadece sınıf içinde |
| korumalı | Sınıf + alt sınıflar | Sınıf + alt sınıflar + aynı paket |
| Açık Alan | Herhangi bir yere | Herhangi bir yere |
| Varsayılan | Uygulanamaz | Sadece paket içinde |
Örneğin, içinde C++, struct varsayılan halka açıkiken class varsayılan özel, oysa Java, varsayılan/paket-özel yalnızca aynı paket içerisinde erişime izin verir.
35) Operatör aşırı yüklemesi nedir ve sınırlamaları nelerdir?
OperaTor aşırı yüklemesi, geliştiricilerin kullanıcı tanımlı türler için operatörleri yeniden tanımlamasına olanak tanır ve kod okunabilirliğini artırır. Öncelikle şu şekilde desteklenir: C++.
Örnek:
class Complex {
public:
int real, imag;
Complex operator+(const Complex &c) {
return {real + c.real, imag + c.imag};
}
};
Güçlü olmasına rağmen sınırlamaları da var:
- Tüm operatörler aşırı yüklenemez (örn.
::,.?). - Aşırı kullanım berraklığı azaltabilir.
- Özel operatörlere aşina olmayan ekipler için öğrenme karmaşıklığını artırır.
Bu nedenle, operatör aşırı yüklemesi, özellikle doğal operatör semantiğinin okunabilirliği iyileştirdiği matematiksel veya alan-özgü sınıflar için dikkatli bir şekilde kullanılmalıdır.
36) Statik metotlar örnek metotlardan nasıl farklıdır?
Statik yöntemler bir örneğe değil, sınıfa aittir ve sınıf adı kullanılarak çağrılabilir. Örnek yöntemler belirli nesneler üzerinde çalışır.
Örnekte Java:
class MathUtils {
static int square(int x) { return x * x; }
int add(int a, int b) { return a + b; }
}
Kullanımı:
MathUtils.square(4);→ Statik yöntem.new MathUtils().add(2, 3);→ Örnek yöntemi.
| Özellik | Statik Yöntem | Örnek Yöntemi |
|---|---|---|
| kapsam | Sınıf düzeyi | Nesne düzeyinde |
| giriş | Yalnızca statik veriler | Hem statik hem de örnek veriler |
| Çağırma | Sınıf adı | nesne referansı |
Statik yöntemler yardımcı fonksiyonlar için idealdir, örnek yöntemler ise nesneye özgü verilerle çalışır.
37) OOP'nin gerçek dünyadaki dezavantajları nelerdir?
OOP'nin güçlü yanlarına rağmen bazı dezavantajları da vardır:
- Performans ek yükü karın kasları nedeniyletracKatmanlar, dinamik dağıtım ve çöp toplama.
- Hafıza kullanımı Nesneler ek meta verileri depoladıkça artar.
- karmaşa: Derin kalıtım hiyerarşileri kırılgan sistemler yaratabilir.
- Evrensel olarak uygun değil:Küçük betikler veya performans açısından kritik görevler için prosedürel veya işlevsel paradigmalar daha iyi olabilir.
Örnek: Oyun geliştirmede, yüksek performanslı motorlar genellikle tercih edilir veri odaklı tasarım Çalışma zamanı yükünü önlemek için OOP üzerinden.
Dolayısıyla, OOP sürdürülebilirlik ve ölçeklenebilirlik açısından üstün olsa da dezavantajları proje gereksinimleriyle karşılaştırılmalıdır.
38) Çoklu kalıtım nedir ve farklı diller bunu nasıl ele alır?
Çoklu kalıtım, bir sınıfın birden fazla üst sınıftan kalıtım almasına olanak tanır. Güçlü olmasına rağmen, aşağıdaki gibi karmaşıklıklar getirir: elmas problemi, belirsizliğin paylaşılan temel sınıflardan kaynaklandığı yer.
- C++ Açık sco ile çoklu kalıtımı destekler.ping.
- Java ve C# bundan kaçının ama bunu simüle edin arayüzler.
Örnekte C++:
class A { public: void show() {} };
class B { public: void show() {} };
class C : public A, public B {};
Bu durumda, çağrı C.show() kapsamlandırılmadığı sürece belirsizdir (C.A::show()).
Bu nedenle modern diller daha güvenli tasarım için kompozisyonu veya arayüzleri tercih etmektedir.
39) OOP dillerinde çöp toplama nasıl çalışır? Java ve C#?
Çöp toplama (GC), program tarafından artık başvurulmayan nesneleri kaldırarak belleği otomatik olarak geri kazanır.
Anahtar adımlar:
- işaret – Tüm aktif referansları tanımlar.
- Süpürme – Referans verilmeyen nesnelerin kapladığı belleği boşaltır.
- Kompakt (isteğe bağlı) – Parçalanmayı azaltmak için belleği yeniden düzenler.
Örnekte Java:
MyObject obj = new MyObject(); obj = null; // eligible for GC
Avantajları: Bellek sızıntılarını önler, geliştirici yükünü azaltır.
Sınırlamalar: Belirsiz zamanlama, potansiyel performans duraklamaları.
C++ yerleşik GC'den yoksundur, bunun yerine yıkıcılara ve akıllı işaretçilere güvenir (std::unique_ptr).
40) Prosedürel programlama ile OOP arasındaki temel farklar nelerdir?
Prosedürel programlama, kodu prosedürlere (fonksiyonlara) düzenlerken, OOP ise kodu nesnelere düzenler.
| Özellik | Usul | OOP |
|---|---|---|
| odak | Fonksiyonlar ve prosedürler | Nesneler (durum + davranış) |
| Veri | Küresel veya işlevler arasında geçiş | Nesnelerde kapsüllenmiş |
| Code yeniden | Fonksiyonlar ve döngüler | Kalıtım, polimorfizm |
| Örnek E-posta | C | Java, C++, Python |
Örnek:
- Prosedürel programlamada, bir bankacılık uygulamasının ayrı işlevleri vardır
deposit()vewithdraw(). - OOP'de bir
Accountnesnesi bu davranışları kapsülleyerek modülerliği ve yeniden kullanılabilirliği artırır.
OOP'nin gerçek dünyadaki varlıkları modellemeye odaklanması onu büyük, ölçeklenebilir sistemler için daha uygun hale getirir.
41) Kopyalama oluşturucu nedir ve neden önemlidir?
A yapıcı kopyala özel bir kurucudur C++ Aynı sınıftaki başka bir nesneyi kullanarak yeni bir nesneyi başlatan bir yöntemdir. Dinamik bellek veya dosya tanıtıcıları gibi kaynakları yöneten nesnelerin doğru şekilde çoğaltılması için önemlidir.
Örnek:
class Student {
public:
string name;
Student(const Student &s) { name = s.name; }
};
Özel bir kopyalama oluşturucusu olmadan, yüzeysel kopyalama meydana gelebilir ve bu da belleğin iki kez silinmesi gibi sorunlara yol açabilir. Kopyalama oluşturucuları, derin kopyalama Gerektiğinde nesnelerin bağımsızlığını koruyarak. Dinamik bellek tahsisi, bağlantılı yapılar veya dosya tanımlayıcıları kullanan sistemlerde kritik öneme sahiptirler.
42) Statik metotlar statik olmayan üyelere erişebilir mi?
Hayır, statik yöntemler statik olmayan üyelere doğrudan erişemez çünkü bunlar belirli bir nesneye değil, sınıfa aittir. Statik olmayan üyeler yalnızca bir nesne örneklendikten sonra var olur; statik yöntemler ise sınıf düzeyinde çalışır.
Örnekte Java:
class Example {
int x = 10;
static void show() {
// System.out.println(x); // Error
}
}
Ancak statik yöntemler, bir nesne oluşturarak statik olmayan üyelere dolaylı yoldan erişebilir:
Example e = new Example(); System.out.println(e.x);
Bu kısıtlama, statik metotların nesnelerden bağımsız olarak var olması nedeniyle mantıksal tutarlılığı sağlar.
43) Temel sınıflar, alt sınıflar ve üst sınıflar nelerdir?
- A temel sınıf (veya üst sınıf) diğer sınıflar için temel nitelikleri ve davranışları sağlar.
- A alt sınıf Temel sınıftan türetilir veya genişletilir, işlevselliği eklerken veya geçersiz kılarken onun özelliklerini kazanır.
- A üst sınıf ana sınıfın başka bir adıdır.
Örnek:
class Vehicle { void move() { System.out.println("Moving"); } }
class Car extends Vehicle { void honk() { System.out.println("Horn"); } }
Burada, Vehicle temel/üst sınıftır ve Car alt sınıftır. Bu hiyerarşi, kodun yeniden kullanımı ve gerçek dünya ilişkilerini modeller. Nesne yönelimli programlama (OOP) tasarımında, doğru abs'yi seçmek önemlidir.tracTemel sınıflar için tanımlama, ölçeklenebilirlik ve sürdürülebilirlik açısından çok önemlidir.
44) Statik ve dinamik bağlama arasındaki fark nedir?
Statik bağlama derleme zamanında yöntem çağrılarını çözer (örneğin, yöntem aşırı yüklemesi), dinamik bağlama bunları çalışma zamanında çözer (örneğin, yöntem geçersiz kılma).
Örnek:
// Static Binding
class MathOps {
int add(int a, int b) { return a + b; }
}
// Dynamic Binding
class Animal { void speak() { System.out.println("Generic"); } }
class Dog extends Animal { void speak() { System.out.println("Bark"); } }
| Özellik | Statik Bağlama | Dinamik Bağlama |
|---|---|---|
| çözüm | Derleme zamanı | Süre |
| Örnek E-posta | fazla yükleme | ağır basan |
| Esneklik | Düşük | Yüksek |
| hız | Daha hızlı | Biraz daha yavaş |
Statik bağlama performansı artırırken, dinamik bağlama polimorfizmi ve genişletilebilirliği destekler.
45) Karın kasları neden böyledir?tracT sınıfı örneklendirilemez mi?
Abstract sınıfları abs içerebilirtracUygulaması eksik olan yöntemler. Tasarımları gereği eksik olduklarından, kullanılabilir nesneler üretemezler. Bunları örneklemeye çalışmak, eksik davranışlara sahip nesnelere yol açacaktır.
Örnekte Java:
abstract class Shape {
abstract void draw();
}
Shape s = new Shape(); // Error
Bunun yerine, karın kaslarıtracT sınıfları, uygulamalar sağlayan somut alt sınıflar tarafından genişletilir. Bu tasarım, iletracgerçek yükümlülükler—Tüm alt sınıfların gerekli işlevselliği tamamlaması gerekir. AbstracBu nedenle t sınıfları sağlar. şablonları İlgili sınıflar için kısmi, kullanılamaz örneklerin oluşmasını önlerken.
46) Bir abs için kaç örnek oluşturulabilir?tracT sınıfı mı?
Bir abs için sıfır örnek oluşturulabilir.tract sınıfı. Mutlak değerlerden beritracT sınıfı, uygulanmamış metotlar içerebilir; bu metotlar eksiktir ve doğrudan örneklendirilemezler.
Ancak geliştiriciler şunları yapabilir:
- Oluştur alt sınıfları tüm abs'leri uygulayantract yöntemleri.
- Bu somut alt sınıfların nesnelerini örneklendirin.
Örnek:
abstract class Animal {
abstract void makeSound();
}
class Dog extends Animal {
void makeSound() { System.out.println("Bark"); }
}
Animal a = new Dog(); // Valid
Dolayısıyla, mutlak değerlertracT sınıfı kendi başına örnek üretemez, bunun yerine örnek görevi görür. planları tam olarak uygulanmış alt sınıfların örneklerini üretmek için.
47) Hangi OOP kavramı kodun yeniden kullanılabilirliğini destekler?
miras Kod yeniden kullanılabilirliğini destekleyen temel OOP kavramıdır. Alt sınıfların üst sınıftaki metotları ve alanları yeniden kullanmasına izin vererek, yedekliliği azaltır ve bakımı basitleştirir.
Örnek:
class Vehicle { void move() { System.out.println("Moving"); } }
class Car extends Vehicle {}
Burada, Car otomatik olarak devralır move() yeniden tanımlamadan.
Yeniden kullanılabilirliğe katkıda bulunan diğer unsurlar şunlardır:
- Polimorfizm, birden fazla nesne türü için genel kod oluşturulmasını sağlar.
- Bileşim, esnek yeniden kullanım için sınıfları bir araya getirir. Birlikte, bu mekanizmalar modülerliği artırır ve büyük sistemlerde tekrarı azaltır.
48) Bir sınıf tanımındaki varsayılan erişim belirteci nedir?
Varsayılan erişim belirleyicisi dile göre farklılık gösterir:
- C++: Sınıflarda üyeler varsayılan olarak private'dır. Yapılarda ise üyeler varsayılan olarak public'tir.
- Java: Varsayılan (ayrıca package-private olarak da adlandırılır), üyelere yalnızca aynı paket içerisinden erişilebildiği anlamına gelir.
- C#: Sınıflar varsayılan olarak dahilidir, yani aynı derleme içinde erişilebilirdir.
Örnekte C++:
class Example { int x; }; // x is private by default
struct Example2 { int x; }; // x is public by default
Varsayılanları anlamak, sınıf üyelerinin istenmeyen şekilde ifşa edilmesini veya kısıtlanmasını önler.
49) Hangi OOP kavramı yeniden kullanım mekanizması olarak kabul edilir?
miras Nesne Yönelimli Programlama'da (OOP) yeniden kullanım mekanizması olarak yaygın olarak kabul edilir. Bir alt sınıfın, bir üst sınıfın davranış ve özelliklerini edinmesine olanak tanır ve böylece kod tekrarını ortadan kaldırır.
Örnek:
class Employee { void work() { System.out.println("Working"); } }
class Manager extends Employee {}
Manager otomatik olarak devralır work() yöntemi.
Mirasın ötesinde, kompozisyon Modern OOP'de, derin hiyerarşiler oluşturmadan daha küçük ve yeniden kullanılabilir bileşenlerden karmaşık davranışlar oluşturmayı mümkün kıldığı için bir yeniden kullanım mekanizması olarak da kabul edilir. Birçok uzman, miras üzerine kompozisyon esneklik ve azaltılmış bağlantı için.
50) Hangi OOP ilkesi yalnızca gerekli bilgilerin açığa çıkmasını sağlar?
Prensip şudur: AbstracyonUygulamanın ayrıntılarını gizler ve dış dünyaya yalnızca gerekli özellikleri gösterir.
Örnek:
Kullanırken arabaSürücü direksiyon simidi ve pedallar gibi kontrollerle etkileşime girer, ancak içten yanmalı motor süreciyle ilgilenmez. Benzer şekilde, programlamada:
abstract class Database {
abstract void connect();
}
Kullanıcısı Database sadece umurunda olan connect() Yöntem önemli, bağlantının nasıl kurulduğunun karmaşık ayrıntıları değil.tracBu yaklaşım sadeliği teşvik eder, karmaşıklığı azaltır ve bakım kolaylığını artırır.
51) OOP'deki SOLID prensipleri nelerdir ve neden önemlidir?
MKS KATI ilkeler Sürdürülebilir, ölçeklenebilir ve esnek nesne yönelimli sistemler oluşturmak için beş temel kılavuz şunlardır:
- Tek Sorumluluk İlkesi – Bir sınıfın değişmesi için yalnızca bir sebep olmalıdır.
- Açık/Kapalı Prensibi – Yazılım varlıkları genişlemeye açık, değişikliğe kapalı olmalıdır.
- Liskov İkame İlkesi – Alt tipler, doğruluğu değiştirilmeden temel tipleriyle değiştirilebilir olmalıdır.
- Arayüz Ayrımı İlkesi – Birçok küçük, özel arayüz, tek bir büyük, genel arayüzden daha iyidir.
- Bağımlılık Ters Çevirme İlkesi – Karın kaslarına bağlıtracSomut uygulamalar değil, fikirler.
Bu ilkeler, birleştirmeyi azaltır, modülerliği teşvik eder ve tasarım kalıplarıyla uyum sağlayarak sistemlerin test edilmesini, genişletilmesini ve bakımını kolaylaştırır.
52) Tasarım kalıpları OOP'yi nasıl tamamlar?
Tasarım kalıpları, genellikle nesne yönelimli programlama (OOP) prensiplerinden yararlanan, tekrar eden sorunlara yönelik yeniden kullanılabilir çözümlerdir.traction, kapsülleme, kalıtım ve polimorfizm.
- Yaratıcı Modeller (örneğin Singleton, Factory) nesne oluşturmayı basitleştirir.
- Yapısal Modeller (örneğin, Bağdaştırıcı, Bileşik, Dekoratör) sınıf yapılarını düzenler.
- Davranış kalıpları (Örneğin; Gözlemci, Strateji, Komuta) nesneler arasındaki etkileşimleri yönetir.
Örneğin, Fabrika Modeli abstracts nesnesi oluşturma, istemcilerin abs'ye bağımlı olmasını sağlar.tracSomut sınıflar yerine nesne yönelimli programlama (OOP) kavramlarına atıfta bulunmak, SOLID'in Bağımlılık Tersine Çevirme Prensibi ile uyumludur. Mülakatlarda tasarım kalıplarına atıfta bulunmak, yalnızca teorik bilgiyi değil, aynı zamanda OOP kavramlarını gerçek dünya sorunlarına uygulama konusunda pratik deneyimi de gösterir.
53) Kompozisyon ile kalıtım arasındaki fark nedir ve neden kompozisyon sıklıkla tercih edilir?
miras "bir-bir" ilişkisini temsil eder (örneğin, Köpek bir Hayvandır), kompozisyon “sahip-a” ilişkisini temsil eder (örneğin, Arabanın bir motoru vardır).
| Görünüş | miras | Bileşim |
|---|---|---|
| Bağlama | Sıkı | Gevşek |
| Yeniden | Hiyerarşi yoluyla | Nesne işbirliği yoluyla |
| Esneklik | Sınırlı (statik) | Yüksek (dinamik) |
| Örnek E-posta | Car extends Vehicle |
Car has Engine |
Kompozisyon genellikle derin hiyerarşilerden kaçındığı, çalışma zamanı esnekliğini desteklediği ve şu ilkeye bağlı kaldığı için tercih edilir: kalıtım yerine kompozisyonu tercih etmekBu, kırılganlığı azaltır ve sistemlerin uyum kabiliyetini artırır.
54) Büyük ölçekli sistemlerde OOP'nin başlıca dezavantajları nelerdir?
OOP yaygın olarak benimsenmesine rağmen, büyük ölçekli veya performans açısından kritik sistemlerde dikkate değer sınırlamalara sahiptir:
- Bellek Yükü: Nesneler meta veri taşır ve bu da ayak izini artırır.
- Performans sorunları: Sanal işlevler ve çöp toplama gibi özellikler çalışma zamanı maliyetini artırır.
- karmaşa: Derin hiyerarşiler kırılgan kodlar ve “Tanrı nesneleri” yaratabilir.
- Her Zaman En İyi Değil: Veri ağırlıklı veya yüksek performanslı uygulamalar (örneğin oyun motorları) için veri odaklı tasarım daha verimli olabilir.
Bu dezavantajlar, tasarım kalıplarının dikkatli kullanılması, gereksiz kalıtımın önlenmesi ve OOP'nin fonksiyonel programlama gibi diğer paradigmalarla birleştirilmesiyle hafifletilir.
55) Bellek yönetimi farklı şekilde nasıl ele alınır? C++, Java, ve Python?
- C++: Geliştiriciler belleği manuel olarak kullanarak yönetirler
newvedelete. Akıllı işaretçiler (unique_ptr, shared_ptr) sızıntı risklerini azaltır. - Java: Otomatik çöp toplama, tahsis ve tahsisin kaldırılmasını yönetir, ancak zamanlama kesin değildir.
- Python: Referans sayımı ve çöp toplama (döngü algılama) kullanır.
| Dil | Tahsis | Serbest bırakma |
|---|---|---|
| C++ | Manuel (new) |
Manuel (delete) |
| Java | Yığın tahsisi | Çöp toplayıcı |
| Python | Hareketlilik | Referans sayımı + GC |
Bu farklılıkları anlamak, kontrol (ve kontrol) arasındaki uzlaşmaları yansıttığı için görüşmelerde çok önemlidir.C++) ve geliştirici üretkenliği (Java, Python).
56) Kalıtım mı yoksa arayüz mü kullanılacağını etkileyen faktörler nelerdir?
Seçim birkaç faktöre bağlıdır:
- miras: Gerçek bir "is-a" ilişkisi mevcut olduğunda ve alt sınıfların temel uygulamaları yeniden kullanması gerektiğinde kullanılır. Örnek:
Dog extends Animal. - Arayüzler: Birden fazla, ilgisiz sınıfın davranışı paylaşması gerektiğinde kullanılır. Örnek:
BirdveAirplaneuygulanmasıFlyable. - Dil kısıtlamaları: Java sınıfların yalnızca tek kalıtımını destekler ancak birden fazla arayüze izin verir.
- Tasarım hedefleri: Bağlantı için arayüzleri tercih edintracts ve gevşek bağlantı; yeniden kullanılabilir temel mantık için kalıtımı kullanın.
Modern tasarımda, arayüzler ve kompozisyon Derin miras zincirlerinin katılığından kaçınmak için sıklıkla tercih edilirler.
57) Yazılım sistemlerinde kapsüllemenin gerçek dünyadan örneklerini verebilir misiniz?
Evet. Gerçek dünyadaki yazılımlar kapsüllemeyi yoğun bir şekilde kullanır:
- Bankacılık uygulamaları: Hesap bakiyesi özeldir, yalnızca şu şekilde erişilebilir:
deposit()orwithdraw(). - Web API'leri: Uç noktalar yalnızca gerekli işlemleri açığa çıkarır ve dahili veritabanı mantığını gizler.
- Kütüphaneler/Çerçeveler: Geliştiriciler genel yöntemlerle etkileşime girerler (örneğin,
ArrayList.add()in Java) dahili dizi boyutlandırma mantığını bilmeden.
Kapsülleme, sistemlerin güvenli bir şekilde çalışmasını sağlar güvenli, modüler ve uyarlanabilir, harici kullanımı bozmadan dahili değişikliklere izin verir. Bu, kullanıcıların dahili mekanizmalar yerine düğmelerle etkileşime girdiği ATM kullanımı gibi gerçek dünya uygulamalarını yansıtır.
58) Karın kasları ne zaman kontrol edilmelidir?tracArayüzler yerine sınıflar mı tercih edilmeli?
AbstracT sınıfı şu durumlarda tercih edilir:
- Var paylaşımlı uygulama birden fazla alt sınıfın miras alması gerekir.
- Sınıflar güçlü bir hiyerarşik ilişkiye sahiptir (örn.
Shape → Circle, Rectangle). - Geleceğe yönelik önlemler alınarak daha fazla absint içermeyen ürün eklenmesi gerekiyor.tracMevcut alt sınıfları bozmadan t yöntemlerini kullanmak.
Sınıflar birbiriyle ilişkili olmadığında ancak davranışları paylaşmaları gerektiğinde arayüzler daha iyidir. Örneğin: Bird ve Drone her ikisi de uygulanıyor Flyable.
Özet olarak:
- Abs kullanıntract Sınıfları Kısmi uygulama ile yakından ilişkili varlıkların modellenmesinde.
- Arayüzleri Kullan İlgisiz varlıklar arasında yetenekleri tanımlarken.
59) Bir nesnenin yaşam döngüsü dillere göre nasıl farklılık gösterir?
- C++: Nesne yaşam döngüsü, oluşturma (yığın veya yığın), kullanım ve yok etmeyi (açık veya otomatik) içerir. Yıkıcılar, kesin temizleme sağlar.
- Java: Nesne yaşam döngüsü, oluşturmayı içerir (aracılığıyla)
new), kullanımı ve çöp toplama. İmha, GC tarafından işlenen belirsiz bir işlemdir. - Python: Nesneler dinamik olarak oluşturulur ve referans sayısı sıfıra düştüğünde yok edilir. GC döngüleri yönetir.
| Dil | Yaratılış | İmha |
|---|---|---|
| C++ | Inşaatçı | Yıkıcı (belirlenimci) |
| Java | new |
GC (belirsiz) |
| Python | Hareketlilik | Referans sayımı + GC |
Bu yaşam döngülerini anlamak kaynak yönetimi ve sistem optimizasyonu açısından önemlidir.
60) Modern diller OOP'yi diğer paradigmalarla nasıl birleştirir?
Diller giderek daha fazla destekleniyor çok paradigmalı programlama OOP'nin sınırlamalarını aşmak için:
- Java: Lambda ifadeleri ve akışları aracılığıyla fonksiyonel programlamayı entegre eder.
- C#: OOP'yi LINQ ve asenkron programlama ile birleştirir.
- Python: OOP, prosedürel ve işlevsel stilleri kusursuz bir şekilde birleştirir.
Örnekte Java (işlevsel + OOP):
Listnums = Arrays.asList(1,2,3,4); nums.stream().map(n -> n * n).forEach(System.out::println);
Bu karışım, geliştiricilerin bir görev için en verimli paradigmayı seçmelerine, üretkenliği ve esnekliği artırmalarına ve aynı zamanda OOP'nin avantajlarını korumalarına olanak tanır.
🔍 Gerçek Dünya Senaryoları ve Stratejik Yanıtlarla En İyi OOPS Mülakat Soruları
İşte pratik ve sektöre uygun cevaplarla özenle seçilmiş 10 OOPS (Nesne Yönelimli Programlama Sistemi) mülakat sorusu. Sorular, teknik bilgi, davranışsal uyum ve duruma göre karar verme becerilerini test etmek için tasarlanmıştır.
1) Nesne Yönelimli Programlamanın dört temel ilkesini açıklayabilir misiniz?
Adaydan beklenenler: Kapsülleme, kalıtım, polimorfizm ve abs kavramlarının net açıklaması.tracyon.
Örnek cevap:
“OOPS'un dört temel direği kapsülleme, kalıtım, polimorfizm ve abs'dir.”tracKapsülleme, bir nesnenin iç detaylarını gizler ve yalnızca gerekli olanı gösterir. Kalıtım, sınıfların kodu yeniden kullanmasına ve ilişkiler kurmasına olanak tanır. Polimorfizm, nesnelerin bağlama bağlı olarak farklı davranmasına izin verir; örneğin, metot aşırı yüklemesi veya geçersiz kılma gibi.tracBu yaklaşım, uygulama ayrıntılarını gizlerken temel özellikleri tanımlamaya odaklanmaktadır.
2) Önceki rolünüzde bir projenin sürdürülebilirliğini iyileştirmek için OOPS prensiplerini nasıl uyguladınız?
Adaydan beklenenler: Gerçek projelerde OOPS'un pratik uygulaması.
Örnek cevap:
"Önceki görevimde, abs uyguladım."tracÖdeme ağ geçidi entegrasyonumuzu basitleştirmek için soyutlama ve polimorfizmden yararlandım. Her ödeme sağlayıcısı için ayrı bir mantık oluşturmak yerine, soyut bir yapı tasarladım.tracOrtak işlevselliğe sahip bir t sınıfı oluşturuldu ve her ödeme yönteminin bu sınıftan genişlemesine izin verildi. Bu, kod tekrarını azalttı, ölçeklenebilirliği artırdı ve yeni sağlayıcıların sisteme entegrasyonunu önemli ölçüde hızlandırdı."
3) Kompozisyon ile kalıtım arasındaki fark nedir ve hangisini diğerine tercih edersiniz?
Adaydan beklenenler: Analitik düşünme ve tasarım uzlaşmalarının anlaşılması.
Örnek cevap:
Kalıtım, 'bir-bir' ilişkisini modellerken, bileşim 'bir-bir' ilişkisini modeller. Gevşek bağlaşımı ve esnekliği korumak istediğimde, ana sınıfı etkilemeden dinamik değişikliklere izin verdiği için bileşimi tercih ederim. Örneğin, önceki bir görevimde, bir kayıt sisteminde derin kalıtım hiyerarşilerini bileşimle değiştirdim; bu da karmaşıklığı azalttı ve yeniden kullanılabilirliği iyileştirdi.
4) Teknik olmayan bir paydaşa polimorfizmi nasıl açıklarsınız?
Adaydan beklenenler: Karmaşık kavramları iş iletişiminde basitleştirme yeteneği.
Örnek cevap:
"Çok biçimlilik, bir fonksiyonun bağlama bağlı olarak farklı davranabileceği anlamına gelir. Örneğin, 'sürüş' kelimesini düşünün. Bir kişi araba, tekne veya kamyon sürebilir, ancak eyleme yine de sürüş denir. Yazılımda çok biçimlilik, davranışını çağıran nesneye göre uyarlayabilen tek bir yöntem yazmamızı sağlar."
5) Nesne yönelimli tasarımla ilgili karşılaştığınız zorlu bir hatayı anlatabilir misiniz? Bunu nasıl çözdünüz?
Adaydan beklenenler: Problem çözme ve hata ayıklama becerileri.
Örnek cevap:
"Önceki işimde, envanter yönetim sisteminde geçersiz kılınan yöntemlerin doğru şekilde çağrılmadığı bir hatayla karşılaştık. Hata ayıklamanın ardından, sorunun dinamik dağıtım yerine statik bağlama kullanmaktan kaynaklandığını fark ettim. Tasarımı, beklenen polimorfik davranışı geri kazandıran ve sorunu ortadan kaldıran uygun arayüzlere ve sanal yöntemlere dayanacak şekilde yeniden düzenledim."
6) Kod tabanının büyük ölçüde prosedürel olduğu bir projeye katıldığınızı düşünün. Mevcut işlevselliği bozmadan kod tabanını OOPS'a nasıl geçirirdiniz?
Adaydan beklenenler: Stratejik düşünme ve dikkatli uygulama.
Örnek cevap:
"Tekrarlayan prosedürel mantığı belirleyip kademeli olarak sınıflara yerleştirerek başlardım. Küçük modüllerle başlayıp kapsamlı testler yaparak bir yeniden düzenleme yaklaşımı kullanırdım. Buradaki fikir, veri işleme için sınıflar oluşturmak ve ardından esneklik için arayüzler eklemek gibi OOPS prensiplerini aşamalı olarak tanıtmaktır. Bu yaklaşım, kod tabanını aşamalı olarak modernize ederken işlevselliğin bozulmamasını sağlar."
7) Maksimum esneklik için bir sınıf tasarlamak ile işlevselliği korumak arasındaki dengeyi nasıl kurarsınız?ping Basit mi?
Adaydan beklenenler: Karar verme ve mimari farkındalık.
Örnek cevap:
“Son görevimde, aşırı mühendisliğin faydadan çok zarar getirebileceğini öğrendim. Basitlikle başlıyorum ve esnekliği yalnızca kullanım senaryosu gerektirdiğinde ekliyorum. Örneğin, bir sınıfın yakın gelecekte gerçekçi olarak yalnızca bir uzantıya ihtiyacı olacaksa, gereksiz abs'ler eklemekten kaçınıyorum.”tracKatmanlar arasında denge kurmak için YAGNI (Buna İhtiyacınız Olmayacak) ilkesini rehber olarak kullanıyorum.
8) Birden fazla geliştiricinin aynı sınıf üzerinde çalıştığı bir ekip ortamında kapsüllemenin sürdürülmesini nasıl sağlarsınız?
Adaydan beklenenler: Takım çalışması ve kodlama disiplini.
Örnek cevap:
"Erişim değiştiricilerini kesin bir şekilde tanımlayarak, özel alanları yalnızca gerekli olduğunda genel alıcı ve ayarlayıcılarla kullanarak kapsüllemeyi destekliyorum. Ayrıca ekibi, dahili duruma bağlı kalmadan davranışı doğrulayan birim testleri yazmaya teşvik ediyorum. Kod incelemeleri sırasında, kapsüllemeyi bozabilecek gereksiz ayrıntıların ifşa edilmemesine özellikle dikkat ediyorum."
9) OOPS en iyi uygulamalarına aşina olmayan bir ekibe tasarım kalıplarının önemini açıklamak zorunda kaldığınız bir zamanı anlatın.
Adaydan beklenenler: İletişim ve liderlik becerileri.
Örnek cevap:
"Önceki bir projede, ekip farklı modüllerdeki yinelenen kodlarla uğraşırken tasarım kalıpları kavramını ortaya attım. Singleton ve Factory gibi kalıpları basit gerçek dünya benzetmeleriyle açıkladım, ardından bunları uygulamanın yinelemeyi nasıl azaltacağını ve sürdürülebilirliği nasıl artıracağını gösterdim. Okunabilirlik ve hata ayıklamada doğrudan bir iyileşme göstererek, ekip bu uygulamaları hızla benimsedi."
10) Araba, bisiklet ve scooter gibi araçların yer aldığı bir yolculuk paylaşım uygulaması için sınıf hiyerarşisini nasıl tasarlarsınız?
Adaydan beklenenler: OOPS tasarımının pratik uygulaması.
Örnek cevap:
“Karın kaslarıyla başlardım.”trac'Vehicle' adlı temel sınıf, ID, kapasite ve hız gibi paylaşılan özelliklerin yanı sıra startRide() ve stopRide() gibi metotları da içerir. Otomobiller, bisikletler ve scooter'lar bu sınıfı genişletir ve gerektiğinde metotları geçersiz kılar. Ölçeklenebilirliği sağlamak için, 'ElectricPowered' veya 'FuelPowered' gibi özellikler için arayüzler kullanarak sorumlulukları ayırırım. Bu tasarım, büyük değişiklikler yapmadan yeni araç türleri eklemeyi destekleyecektir.”
