← Back to list

JAVA OOP SERİSİ#3

KALITIM (INHERITANCE):

Fatih Muhammed Çelik · 2026-01-21 21:20 · 2 claps · 2.2 min read
#java #inheritance #oop #extend #kalıtım
Open on Medium ↗

JAVA OOP SERİSİ#3

KALITIM (INHERITANCE):

Yazılım geliştirmede profesyonelliği amatörlükten ayıran en önemli çizgi, kodun sadece çalışması değil; ne kadar yönetilebilir, genişletilebilir ve temiz olduğudur. Büyük ölçekli projelerde karşılaşılan en büyük sorunlardan bir tanesi kod tekrarıdır. Aynı mantığı ve veri yapısını tekrar tekrar yazmak projenin bakım maliyetini arttırır, kod okunurluğunu düşürür ve hata yapma riskini maksimize eder.

Nesne yönelimli programlama(OOP) kaosu yönetmek için bize Kalıtım(Inheritance) mekanizmasını sunar. Bu yazımda, JAVA’ da kalıtım mimarisini teknik tanım ve bir oyun motoru (RPG) örneği üzerinden ele alıp açıklayacağım.

Kalıtım(Inheritance) nedir?

Kalıtım , yazılım mühendisliğinin temel taşı olan DRY(Don’t Repeat Yourself-Kendini Tekrar Etme) prensibini uygulamamızı sağlayan var olan bir sınıfın (Super Class/Parent Class) özelliklerini ve davranışlarını yeni oluşturulan sınıfa (Sub Class/Child Class) aktarma mekanizmasıdır.

Java’da “extends” anahtar kelimesiyle sağlanan bu yapı, sınıflar arasında hiyerarşik bir IS-A ilişkisi kurarak kodun mantıksal tutarlılığını sağlar. Alt sınıflar, atalarından aldıkları mirası sadece kopyalamakla kalmaz, üzerine kendi özelliklerini ekleyerek yapıyı genişletir. Ayrıca Java, C++ gibi dillerin aksine karmaşıklık gibi problemleri önlemek amacıyla Tekli Kalıtım modelini benimser; yani bir sınıfın teknik olarak sadece tek bir doğrudan atası olabilir.

Teknik bilgiyi somutlaştırmak için bir oyun senaryosu düşünelim. Oyunumuzda Savaşçılar (Warrior), Büyücüler (Mage) ve Okçular (Archer) olacak.

Eğer kalıtım olmasaydı; Warrior, Mage sınıflarının her birine tek tek health(can), level (seviye), move (hareket et) kodlarını yazmamız gerekirdi. Bu, yüzlerce satır kod tekrarı demektir. Bunun yerine tüm karakterlerin ortak paydası olan özellikleri GameCharacter (Oyun Karakteri) adında soyut bir çatı sınıfta toplarız.

Ata sınıfımızı oluşturduk. Aşağıda ise iki tane çocuk sınıf oluşturduk ve “extends” anahtar kelimesiyle ata sınıftan miras almasını sağladık. Böylece kod tekrarının önüne geçmiş olduk, aynı metodları ve değişkenleri tekrar yazmaktan kurtulduk.

super(name, health) Nedir? Savaşçı sınıfının yapıcısına (Constructor) dikkat edin. this.name=name yazmak yerine super(name, health) komutunu kullandık. Bu komut şu anlama gelir: "Ey Savaşçı sınıfı! Sen isim ve can atama işini bilmiyorsun, o işi senin atana (GameCharacter) devrediyorum, git o yapsın." Bu sayede kod tekrarından kurtulduk.

Warrior sınıfına move() metodunu yazmadık çünkü o zaten atadan (GameCharacter) miras geldi. Ancak shieldBash ve armor gibi sadece Savaşçıya has özellikleri ekleyerek sınıfımızı genişlettik . Aynı mantık Büyücü sınıfındaki mana ve castFireball için de geçerli.

Özetle Kalıtım; sadece daha az kod yazmak için değil, kodumuzu mantıklı bir aile ağacına oturtmak ve sürdürülebilir kılmak için vardır. Bu yapı sayesinde yarın oyunumuza “Stamina” özelliği eklemek istediğimizde, 50 farklı sınıfı değil, sadece ata sınıfı güncellememiz yeterli olacaktır.

Ancak hikaye burada bitmiyor. Savaşçımız ve Büyücümüz şu an aynı şekilde hareket ediyor. Peki ya “Herkes saldırsın ama herkes kendi tarzında saldırsın” demek isteseydik? İşte o zaman OOP’nin bir diğer konusu olan Çok Biçimlilik (Polymorphism) sahneye çıkacak. Bir sonraki yazımda bu konuya değineceğim.


메타데이터
post_id
f6c9bc7cfa70
slug
java-oop-seri̇si̇-3-f6c9bc7cfa70
url
https://medium.com/@fatihcelik112112/java-oop-seri%CC%87si%CC%87-3-f6c9bc7cfa70
canonical_url
https://medium.com/@fatihcelik112112/java-oop-seri%CC%87si%CC%87-3-f6c9bc7cfa70
author_url
https://medium.com/@fatihcelik112112
status
ok
fetched_at
2026-07-13 06:23:13