Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
Katılım
7 Nis 2025
Konular
367
Mesajlar
780
Çözümler
1
Tepkime puanı
121
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
Hazır Kod Bankası - Konu 17: Java'da Nesne Tabanlı Programlama (OOP) Temelleri



Hazır Kod Bankası Serimizin On Yedinci Konusu: Java'da OOP Temelleri![/B]

Merhaba arkadaşlar! Java'ya giriş yaptıktan sonra, bu dilin temelini oluşturan Nesne Tabanlı Programlama (OOP) yaklaşımına odaklanıyoruz. Java'da yazdığınız neredeyse her kod bir sınıfın içinde yer alır ve programlar nesnelerin birbirleriyle etkileşimi üzerine kurulur.

Python ile OOP kavramlarına genel bir bakış atmıştık (Konu 11). Java, OOP prensiplerini daha katı ve belirgin bir sözdizimi ile uygular. Bu, OOP'yi daha derinlemesine anlamak için harika bir yoldur.

Bu konuda Java'da sınıf tanımlamayı, nesnelerin nasıl oluşturulduğunu, özelliklerin (attribute) ve metotların nasıl eklendiğini ve nesne oluşturulurken çalışan özel metotlar olan kurucu metotları (constructor) göreceğiz.

1. Java ve OOP: Neden Birlikte Anılırlar?

Java, başlangıçtan itibaren nesne tabanlı olarak tasarlanmıştır. İlkel veri tipleri (int, boolean vb.) dışındaki her şey (Stringler, Diziler, kendi tanımladığınız yapılar) aslında birer nesnedir. Bu durum, OOP prensiplerini uygulayarak kodunuzu daha düzenli, anlaşılır ve yeniden kullanılabilir hale getirmenizi teşvik eder.

2. Sınıf Tanımlama (`class`)

Java'da her kod bir sınıf içinde yer alır. Sınıf, nesnelerin şablonudur.

Java:
// Dosya adı: Araba.java
public class Araba { // Sınıf tanımı başlar

    // Sınıf özellikleri (attributes) ve metotları buraya gelecek

} // Sınıf tanımı biter
Açıklama: `public class Araba { ... }` sözdizimi, `Araba` adında halka açık (public) bir sınıf tanımlar. Kod blokları `{}` içine alınır.

3. Özellikler (Attributes / Instance Variables)

Özellikler, bir nesnenin durumunu veya verisini saklayan değişkenlerdir. Sınıfın içinde, metotların dışında tanımlanırlar. Java'da özellik tanımlarken de tipini belirtmek zorunludur.

Java:
public class Araba {

    // Özellikler (Instance Variables) - Her Araba nesnesinin kendi kopyası olur
    String marka;
    String model;
    int modelYili;
    String renk;

    // Erişim belirteçleri (public, private vb.) eklenebilir (İleri konu)
    // private String saseNo; // Bu özelliği sadece sınıf içinden erişilebilir yapar

}
Açıklama: `String marka;` gibi tanımlamalar, `Araba` sınıfından oluşturulan her nesnenin bir `marka` özelliğine sahip olacağını belirtir. Bu özelliklerin tipleri (`String`, `int`) tanımlanırken belirtilir.

4. Kurucu Metot (Constructor)

Kurucu metot, bir sınıftan yeni bir nesne oluşturulurken otomatik olarak çalışan özel bir metottur. Genellikle nesnenin özelliklerine başlangıç değerleri atamak için kullanılır. Kurucu metodun adı sınıf adıyla aynı olmalı ve geri dönüş tipi olmamalıdır (void bile yazılmaz).

Eğer siz bir kurucu metot tanımlamazsanız, Java varsayılan (parametresiz) bir kurucu metot otomatik olarak ekler.

Java:
public class Araba {

    // Özellikler
    String marka;
    String model;
    int modelYili;
    String renk;

    // Kurucu Metot (Constructor) - Parametre alan
    public Araba(String marka, String model, int modelYili, String renk) {
        // 'this' keyword'ü nesnenin kendisini temsil eder
        // Karışıklığı önlemek için özellik (marka) ile parametre (marka) aynı isimdeyse kullanılır.
        this.marka = marka;
        this.model = model;
        this.modelYili = modelYili;
        this.renk = renk;
        System.out.println("Yeni bir Araba nesnesi oluşturuldu!");
    }

    // Parametresiz Kurucu Metot (Opsiyonel - eğer kendiniz parametreli yazdıysanız, varsayılan artık gelmez)
    public Araba() {
        // Özelliklere varsayılan değer atayabilirsiniz
        this.marka = "Bilinmiyor";
        this.model = "Bilinmiyor";
        this.modelYili = 0;
        this.renk = "Bilinmiyor";
         System.out.println("Yeni varsayılan Araba nesnesi oluşturuldu!");
    }
}
Açıklama: `public Araba(...)` metodu kurucu metottur. `this.marka = marka;` kodu, nesnenin `marka` özelliğine, metodun parametresi olarak gelen `marka` değerini atar. `this` aynı isimdeki parametre ile özellik adını ayırmak için kullanılır.

5. Metotlar (Methods)

Metotlar, bir nesnenin yapabildiği eylemleri veya davranışları tanımlar. Sınıfın içinde, özellik tanımlarından sonra (veya aralarında) yer alırlar.

Java:
public class Araba {

    // Özellikler ...
    String marka;
    String model;
    int modelYili;
    String renk;
    boolean calisiyor = false; // Yeni özellik

    // Kurucu Metot ...
     public Araba(String marka, String model, int modelYili, String renk) {
        this.marka = marka;
        this.model = model;
        this.modelYili = modelYili;
        this.renk = renk;
    }


    // Metotlar
    public void calistir() { // Geri dönüş tipi yok (void), parametre almıyor
        if (!calisiyor) { // 'this.calisiyor' da yazabiliriz, ama karışmıyorsa 'this' zorunlu değil
            calisiyor = true;
            System.out.println(this.marka + " " + this.model + " çalıştırıldı.");
        } else {
             System.out.println(this.marka + " " + this.model + " zaten çalışıyor.");
        }
    }

    public void durdur() { // Geri dönüş tipi yok, parametre almıyor
         if (calisiyor) {
            calisiyor = false;
            System.out.println(this.marka + " " + this.model + " durduruldu.");
        } else {
             System.out.println(this.marka + " " + this.model + " zaten durmuş durumda.");
        }
    }

    public String getBilgi() { // Geri dönüş tipi String, parametre almıyor
        String durum = calisiyor ? "Çalışıyor" : "Duruyor"; // Kısa if (ternary operator)
        return "Marka: " + this.marka + ", Model: " + this.model + ", Yıl: " + this.modelYili + ", Renk: " + this.renk + ", Durum: " + durum;
    }

    public void renkDegistir(String yeniRenk) { // Geri dönüş tipi yok, String tipinde parametre alıyor
        this.renk = yeniRenk;
        System.out.println(this.marka + " rengi " + this.renk + " olarak değiştirildi.");
    }

}
Açıklama: Metot tanımlarken erişim belirteci (`public`), geri dönüş tipi (`void` veya `String` vb.), metot adı ve parantez içinde parametrelerin tipi ve adı (`String yeniRenk`) belirtilir. Metotlar, aynı sınıf içindeki özelliklere ve diğer metotlara doğrudan erişebilir (`this.` kullanarak veya kullanmadan eğer isim çakışması yoksa).

6. Nesne Oluşturma (`new`) ve Kullanma

Bir sınıftan nesne oluşturmak için `new` anahtar kelimesi kullanılır ve ardından sınıfın kurucu metotu çağrılır.

Java:
// Dosya adı: Main.java (veya Araba sınıfı içine public static void main ekleyebilirsiniz)
public class Main {

    public static void main(String[] args) {

        // Araba sınıfından nesneler oluşturma (new ile kurucu metot çağrılır)
        Araba benimArabam = new Araba("Fiat", "Egea", 2022, "Beyaz");
        Araba seninAraban = new Araba("Honda", "Civic", 2018, "Mavi");
        // Araba varsayilanAraba = new Araba(); // Eğer parametresiz kurucu metodu eklediyseniz bunu da kullanabilirsiniz

        // Nesnelerin özelliklerine erişme ve yazdırma
        System.out.println("Benim arabamın markası: " + benimArabam.marka);
        System.out.println("Senin arabamın modeli: " + seninAraban.model);

        // Nesnelerin metotlarını çağırma
        benimArabam.calistir(); // Metodu çağır
        seninAraban.calistir();
        benimArabam.durdur();
        seninAraban.renkDegistir("Kırmızı"); // Parametre alan metodu çağır

        // Bilgi döndüren metodu kullanma
        String benimArabaBilgi = benimArabam.getBilgi();
        System.out.println(benimArabaBilgi);
        System.out.println(seninAraban.getBilgi()); // Doğrudan çağırıp yazdırabiliriz

    }
}
Bu örneği çalıştırmak için `Araba.java` ve `Main.java` dosyalarını aynı klasöre kaydedin. Önce `javac Araba.java` sonra `javac Main.java` ile derleyin, ardından `java Main` komutu ile çalıştırın.

Sıra Sizde!

Java'da OOP temelleri, Python'a göre daha belirgin kurallar içerir (statik tiplendirme, `new`, `this`, erişim belirteçleri). Bu kavramları pekiştirmek için:

  • Java'da kendi basit sınıfınızı (`Kitap`, `Ogrenci`, `Telefon` gibi) tanımlayın.
  • Sınıfınıza uygun tiplerde özellikler (int, String, boolean vb.) ekleyin.
  • En az bir parametreli kurucu metot ekleyin ve özellikleri bu metotta başlangıç değerleriyle atayın (`this` kullanarak). İsterseniz parametresiz bir kurucu metot da ekleyebilirsiniz.
  • Sınıfınıza birkaç metot ekleyin (geri dönüş tipi `void` veya başka bir tip olabilir, parametre alabilir veya almayabilir). Metotlarınızda nesnenin özelliklerini kullanın (`this.` ile veya doğrudan).
  • Ayrı bir `main` metodu olan sınıfta, tanımladığınız sınıftan nesneler oluşturun (`new` ile).
  • Oluşturduğunuz nesnelerin özelliklerine erişin (eğer `public` ise) ve metotlarını çağırın.
Java'da sınıf/nesne tanımlama, özellikler, metotlar, kurucu metotlar, `new` anahtar kelimesi veya `this` kullanımı hakkında aklınıza takılan soruları bu konu altında sorabilirsiniz.

Serinin Geleceği?

Java'da OOP'nin temel yapı taşlarını öğrendik. Java'nın OOP ile ilgili miras alma (inheritance), çok biçimlilik (polymorphism), kapsülleme (encapsulation) gibi daha ileri prensipleri de bulunmaktadır.

Seriyi buradan sonra nasıl devam ettirelim?

  • Java'da OOP'nin ileri prensipleri (Miras Alma, Çok Biçimlilik, Kapsülleme) ve Arayüzler (Interfaces), Soyut Sınıflar (Abstract Classes)?
  • Java'da temel kütüphane sınıfları (Diziler, ArrayList, String Metotları, Scanner ile Kullanıcıdan Girdi Alma)?
  • Temel Veri Yapıları ve Algoritmalarda daha ileri konular (Bağlı Listeler, Ağaçlar)?
  • Başka bir programlama diline giriş (C#, C++ gibi)?
  • Web geliştirme Frameworklerine giriş (Java Spring/Spring Boot, Python Flask/Django, JS React/Vue/Angular, PHP Laravel/Symfony)?
  • Belirli bir proje türüne odaklanma (Örn: Basit Java Konsol Uygulaması Yapımı)?
  • Veya başka önerileriniz mi var?
Geri bildirimleriniz ve önerileriniz serinin geleceğini şekillendirecektir.

Umarım bu konu Java'da Nesne Tabanlı Programlama'ya ilk adımı atmanızda faydalı olmuştur. Görüşmek üzere!


Bu konu, "Hazır Kod Bankası" serisinin on yedinci parçasıdır ve "Yazılım Bilgi ve Yeni Başlayanlar İçin" kategorisi altında paylaşılmıştır.
 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri