

15. Sınıf ve Nesne Kavramı (OOP Temelleri)
Java, nesne yönelimli bir programlama (OOP) dilidir. Bu, programlarınızı nesneler etrafında yapılandırmanıza ve verilerinizi ve davranışlarınızı bu nesneler içinde bir araya getirmenize olanak tanır. Nesne yönelimli programlamanın temel yapı taşları sınıflar ve nesnelerdir. Bu yazıda, Java’da sınıf ve nesne kavramlarını derinlemesine inceleyeceğiz, OOP’nin temel prensiplerini anlayacağız ve bu bilgileri pratik örneklerle pekiştireceğiz.

Sınıf Nedir?
Bir sınıf, nesneler oluşturmak için kullanılan bir şablondur. Bir evin planı gibi düşünülebilir. Sınıf, nesnenin sahip olacağı özellikleri (değişkenler) ve nesnenin yapabileceği eylemleri (metotlar) tanımlar. Başka bir deyişle, sınıf bir nesnenin tasarımıdır.
Java’da bir sınıf tanımlamak için class
anahtar kelimesini kullanırız. Sınıfın adı, büyük harfle başlar ve Java isimlendirme kurallarına uygun olmalıdır. İşte basit bir sınıf tanımı örneği:
public class Araba {
// Değişkenler (özellikler)
String marka;
String model;
int yil;
String renk;
// Metotlar (davranışlar)
public void calistir() {
System.out.println("Araba çalıştı!");
}
public void durdur() {
System.out.println("Araba durdu!");
}
}
Bu örnekte, Araba
adında bir sınıf tanımladık. Bu sınıf, marka
, model
, yil
ve renk
adında dört değişkene (özelliğe) ve calistir()
ve durdur()
adında iki metoda (davranışa) sahiptir.
Nesne Nedir?
Bir nesne, bir sınıfın somut bir örneğidir. Ev planına (sınıf) sahip olduktan sonra, bu plana göre inşa ettiğiniz her ev bir nesnedir. Sınıf bir şablon iken, nesne bu şablonun gerçekleşmiş halidir. Bir sınıftan birden fazla nesne oluşturabilirsiniz; her nesne, sınıfın tanımladığı özelliklere ve davranışlara sahip olacaktır, ancak bu özelliklerin değerleri farklı olabilir.
Java’da bir nesne oluşturmak için new
anahtar kelimesini kullanırız. İşte Araba
sınıfından bir nesne oluşturma örneği:
Araba benimArabam = new Araba();
benimArabam.marka = "BMW";
benimArabam.model = "320i";
benimArabam.yil = 2023;
benimArabam.renk = "Beyaz";
System.out.println("Arabanın markası: " + benimArabam.marka);
benimArabam.calistir();
Bu örnekte, Araba
sınıfından benimArabam
adında bir nesne oluşturduk. Daha sonra, bu nesnenin özelliklerini (marka
, model
, yil
, renk
) belirli değerlerle doldurduk ve calistir()
metodunu çağırdık.
Sınıf ve Nesne Arasındaki İlişki
Sınıf ve nesne arasındaki ilişkiyi daha iyi anlamak için, bir pasta kalıbı ve pastalar arasındaki ilişkiyi düşünebiliriz. Pasta kalıbı (sınıf), pastaların (nesneler) şeklini ve boyutunu tanımlar. Her pasta, aynı kalıptan (sınıftan) oluşturulmuş olsa da, farklı malzemelerle (özellik değerleri) yapılabilir.
OOP’nin Temel İlkeleri
Sınıf ve nesne kavramları, nesne yönelimli programlamanın (OOP) temelini oluşturur. OOP, yazılım geliştirme sürecini daha modüler, esnek ve yeniden kullanılabilir hale getirmeyi amaçlayan bir programlama paradigmasıdır. OOP’nin dört temel ilkesi şunlardır:
- Soyutlama (Abstraction): Gereksiz detayları gizleyerek, karmaşıklığı azaltır ve önemli bilgilere odaklanmayı sağlar.
- Kapsülleme (Encapsulation): Verileri ve metotları bir arada tutarak, verilere doğrudan erişimi engeller ve veri bütünlüğünü korur.
- Miras (Inheritance): Mevcut sınıflardan yeni sınıflar türetilmesini sağlayarak, kodun yeniden kullanılabilirliğini artırır ve hiyerarşik bir yapı oluşturur.
- Çok Biçimlilik (Polymorphism): Nesnelerin farklı şekillerde davranabilmesini sağlayarak, esnekliği ve genişletilebilirliği artırır.
Soyutlama (Abstraction)
Soyutlama, nesnelerin yalnızca gerekli olan özelliklerini ve davranışlarını göstererek karmaşıklığı yönetmeye yardımcı olur. Bir araba kullanırken, motorun iç detaylarını bilmemize gerek yoktur; sadece direksiyonu, pedalları ve vitesi kullanırız. Bu, arabanın soyutlanmış bir görünümüdür.
Kapsülleme (Encapsulation)
Kapsülleme, verileri ve bu veriler üzerinde işlem yapan metotları bir araya getirerek, verilerin dışarıdan doğrudan erişilmesini engeller. Bu, veri bütünlüğünü korur ve nesnenin iç yapısının değiştirilmesini zorlaştırır. Java’da kapsülleme, erişim belirleyicileri (private
, protected
, public
) kullanılarak sağlanır.
Miras (Inheritance)
Miras, bir sınıfın (alt sınıf veya türetilmiş sınıf) başka bir sınıfın (üst sınıf veya temel sınıf) özelliklerini ve davranışlarını devralmasını sağlar. Bu, kodun yeniden kullanılabilirliğini artırır ve sınıflar arasında bir hiyerarşik ilişki oluşturur. Örneğin, bir Araba
sınıfından SporAraba
sınıfı türetilebilir; SporAraba
, Araba
‘nın tüm özelliklerine ve davranışlarına sahip olur ve ek özellikler ve davranışlar ekleyebilir.
Çok Biçimlilik (Polymorphism)
Çok biçimlilik, aynı metodun farklı sınıflarda farklı şekillerde uygulanabilmesini sağlar. Bu, esnekliği ve genişletilebilirliği artırır. Örneğin, bir Sekil
sınıfından Kare
ve Daire
sınıfları türetilebilir; her iki sınıf da alanHesapla()
metoduna sahip olabilir, ancak bu metot her sınıf için farklı bir şekilde uygulanır.

Örnek Uygulama
Şimdi, OOP’nin temel ilkelerini kullanarak daha kapsamlı bir örnek oluşturalım. Bir Hayvan
sınıfı ve bu sınıftan türetilmiş Kedi
ve Köpek
sınıfları tanımlayalım.
public class Hayvan {
private String ad;
private String tur;
public Hayvan(String ad, String tur) {
this.ad = ad;
this.tur = tur;
}
public void sesCikar() {
System.out.println("Hayvan sesi çıkarıyor.");
}
public String getAd() {
return ad;
}
public String getTur() {
return tur;
}
}
public class Kedi extends Hayvan {
public Kedi(String ad) {
super(ad, "Kedi");
}
@Override
public void sesCikar() {
System.out.println("Miyav!");
}
}
public class Kopek extends Hayvan {
public Kopek(String ad) {
super(ad, "Köpek");
}
@Override
public void sesCikar() {
System.out.println("Hav!");
}
}
public class Main {
public static void main(String[] args) {
Kedi tekir = new Kedi("Tekir");
Kopek karabas = new Kopek("Karabaş");
System.out.println(tekir.getAd() + " bir " + tekir.getTur() + "'dir.");
tekir.sesCikar();
System.out.println(karabas.getAd() + " bir " + karabas.getTur() + "'dir.");
karabas.sesCikar();
}
}
Bu örnekte, Hayvan
sınıfı, Kedi
ve Köpek
sınıfları için bir temel sınıf olarak işlev görür. Kedi
ve Köpek
sınıfları, Hayvan
sınıfının özelliklerini devralır ve sesCikar()
metodunu kendilerine özgü bir şekilde uygular. Bu, miras ve çok biçimlilik kavramlarının bir örneğidir.
Sonuç
Sınıf ve nesne kavramları, Java programlamanın temelini oluşturur ve nesne yönelimli programlamanın (OOP) merkezinde yer alır. Bu kavramları anlamak, daha modüler, esnek ve yeniden kullanılabilir kodlar yazmanıza yardımcı olur. OOP’nin temel ilkelerini (soyutlama, kapsülleme, miras, çok biçimlilik) öğrenerek, daha karmaşık ve büyük ölçekli yazılım projelerini daha etkili bir şekilde yönetebilirsiniz. Bu bilgiler ışığında, Java ile nesne yönelimli programlama becerilerinizi geliştirmeye devam edebilirsiniz.
Umarım bu makale, sınıf ve nesne kavramlarını anlamanıza yardımcı olmuştur. Java programlama yolculuğunuzda başarılar dilerim!

Bir yanıt bırakın