- 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
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
}
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!");
}
}
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.");
}
}
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
}
}
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.
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?
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.