15. Sınıf ve Nesne Kavramı (OOP Temelleri)

Java logo
Java logo
image text

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.

Java Class Diagram

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:

Java

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:

Java

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.

OOP Principles Visualization

Ö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.

Java

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!

Java Programming Success

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*