🏗️ OOP & Collections

OOP & Collections: OOP'de bir class, veriyi (fields) ve o veriyle ne yapılabileceğini (methods) tek bir kapsülde birleştirir — tıpkı bir LEGO parçasının hem şeklini (veri) hem de

OOP'de bir class, veriyi (fields) ve o veriyle ne yapılabileceğini (methods) tek bir kapsülde birleştirir — tıpkı bir LEGO parçasının hem şeklini (veri) hem de nereye takılabileceğini belirleyen çıkıntılarını (davranış) tek parçada taşıması gibi: parçayı bir kez tasarlarsın, sonra binlerce kez güvenle birleştirirsin çünkü her parça kendi kurallarını içinde taşır. Peki her şeyi tek bir dev fonksiyonda tutabiliyorken neden veriyi class'lara bölüp encapsulation ile uğraşmak gerekiyor? Çünkü tek dev blokta bir alanı değiştirdiğinde nerede kırılacağını bilemezsin; class'lar sorumluluğu izole eder, değişiklik yalnızca ilgili parçayı etkiler. Java'da Collections (ArrayList, HashMap, HashSet) bu parçaları sakladığın tip-güvenli kutulardır; Python'daki gevşek list/dict'in aksine Java'da `List ` derleme zamanında yanlış tip eklemeni engeller. QA mühendisi için bu izolasyon paha biçilmezdir: Page Object Model tam olarak OOP'dir — her sayfa bir class olur, locator değişince yalnızca o class güncellenir, 200 test dosyasını tek tek elle düzeltmek zorunda kalmazsın ve bakım kaynaklı bozuk testler önlenir.

Class → Object → Kullanım

Pasif özellik = field, aktif davranış = method. QA Page Object modelinde aynı mantık kullanılır.

Class tanımı ve Object oluşturma

Micro Lab: Kod yazma

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

new TestUser(...) Çağrıldığında Bellekte Ne Olur?

public class TestUser sadece bir KALIPTIR…

`public class TestUser` sadece bir KALIPTIR — kendi başına hiçbir bellek ayırmaz, tıpkı bir kurabiye kalıbının kurabiye olmaması gibi.

new TestUser("admin"…

`new TestUser("admin", "admin@test.com", 30)` çağrıldığı AN, JVM heap'te yeni bir alan ayırır ve constructor bu alanı doldurur.

user1 değişkeni nesnenin KENDİSİ değil…

`user1` değişkeni nesnenin KENDİSİ değil, o heap alanına giden bir REFERANStır — `user2` farklı bir referans, farklı bir bellek alanı gösterir.

System.out.println(user1) çağrıldığında…