-
Sadrazamv4
ig:sadrazam_v4 tg: Sadrazam.spy
🚀 BAŞTAN SONA JAVA DİLİ BÖLÜM-6: Nesne Yönelimli Programlamaya (OOP) Giriş, Sınıf ve Nesne Kavramları 🧱
Selamlar! Serimizin 6. bölümüne hoş geldiniz.
Önceki bölümde metot yapılarını, `return` mekanizmasını, Method Overloading ilkelerini ve `varargs` kullanımını detaylarıyla görmüştük. Bu bölümde ise Java'nın kalbi ve ruhu olan **Nesne Yönelimli Programlamaya (Object-Oriented Programming - OOP)** resmi giriş yapıyoruz.
Sınıf (Class) ve Nesne (Object) kavramlarını, `new` anahtar kelimesinin bellek yönetimindeki yerini ve `this` keyword'ünün kullanım amaçlarını öğreneceğiz.
---
📌 1. Nesne Yönelimli Programlama (OOP) Nedir? 🎭
OOP, yazılımı gerçek dünyadaki nesneleri modelleyerek tasarlama yaklaşımıdır.
Geleneksel prosedürel programlamanın aksine kodumuzu fonksiyonlar yığını olarak değil; veri (özellikler/fields) ve bu veriler üzerinde çalışan davranışları (metotlar/methods) bir arada tutan **Sınıf** ve **Nesne** yapıları etrafında kurgularız.
### Temel İkili:
• **Sınıf (Class):** Bir nesnenin şablonudur (blueprint/taslak). Nesnenin hangi özelliklere ve davranışlara sahip olacağını tanımlar. Bellekte yer kaplamaz (kod bloğu hariç).
• **Nesne (Object):** Sınıf şablonundan üretilen somut varlıktır (instance). Bellekte (Heap) yer kaplar ve kendi durum verisini (state) tutar.
Örnek Analoji:
`Araba` bir **Sınıf**'tır (Rengi, hızı, markası olacağı tanımlanmıştır).
Garajınızdaki `Kırmızı 2024 Model BMW` ise o sınıftan üretilmiş somut bir **Nesne**'dir.
---
🏗️ 2. Sınıf Tanımlama ve Nesne Oluşturma (`new`) ⚙️
Bir sınıf içerisinde **Fields (Özellikler)** ve **Methods (Davranışlar)** barındırır.
### Sınıf Tanımı (`Araba.java`):
public class Araba {
// Özellikler (Fields / State)
String marka;
String model;
String renk;
int hiz;
// Davranışlar (Methods / Behavior)
public void hiziArtir(int miktar) {
hiz += miktar;
System.out.println(marka + " " + model + " hızlandı. Güncel Hız: " + hiz + " km/s");
}
public void frenYap(int miktar) {
hiz -= miktar;
if (hiz < 0) hiz = 0;
System.out.println(marka + " " + model + " yavaşladı. Güncel Hız: " + hiz + " km/s");
}
public void bilgileriGoster() {
System.out.println("--- Araç Bilgileri ---");
System.out.println("Marka: " + marka);
System.out.println("Model: " + model);
System.out.println("Renk : " + renk);
System.out.println("Hız : " + hiz + " km/s");
}
}
### Nesne Oluşturma ve Kullanımı (`Main.java`):
public class Main {
public static void main(String[] args) {
// 'new' anahtar kelimesi ile Araba sınıfından bir nesne türetiyoruz
Araba araba1 = new Araba();
// Özelliklere değer atama
araba1.marka = "BMW";
araba1.model = "M3";
araba1.renk = "Mavi";
araba1.hiz = 100;
// Metotları çağırma
araba1.bilgileriGoster();
araba1.hiziArtir(40);
araba1.frenYap(20);
System.out.println();
// İkinci bağımsız bir nesne türetme
Araba araba2 = new Araba();
araba2.marka = "Mercedes";
araba2.model = "C63";
araba2.renk = "Siyah";
araba2.hiz = 80;
araba2.bilgileriGoster();
}
}
---
🧠 3. Bellek Yönetimi: Stack vs Heap 📍
Java'da bellek iki ana bölgeye ayrılır:
1. **Stack (Yığın):** Yerel değişkenler (local variables) ve nesne referansları (pointer/adresler) tutulur. Hızlıdır, scope bitince anında temizlenir.
2. **Heap (Öbek):** `new` kelimesi ile oluşturulan TÜM nesneler (`new Araba()`) ve onların içindeki field verileri Heap bölgesinde saklanır.
`Araba araba1 = new Araba();` satırında olanlar:
• `araba1` isimli referans değişkeni **Stack** alanında oluşturulur.
• `new Araba()` komutu **Heap** alanında gerçek nesne verisini tahsis eder.
• `araba1` referansı, Heap'teki o nesnenin adresini işaret eder.
---
🎯 4. `this` Anahtar Kelimesi Kullanımı 🔑
`this`, bulunulan sınıftan üretilen **mevcut nesnenin kendisini** (current instance) temsil eden özel bir referanstır.
En yaygın kullanım amacı: Sınıfın field isimleri ile metodun parametre isimleri aynı olduğunda çakışmayı önlemektir (Shadowing).
public class Ogrenci {
String isim;
int numara;
// Metot parametre isimleri field isimleriyle aynı
public void bilgiGuncelle(String isim, int numara) {
// 'this.isim' sınıfın field'ını temsil eder.
// 'isim' ise metoda gelen parametredir.
this.isim = isim;
this.numara = numara;
}
public void selamVer() {
System.out.println("Merhaba, ben " + this.isim);
}
}
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde OOP ilkelerine giriş yaptık, Sınıf ve Nesne arasındaki farkı, `new` anahtar kelimesi ile nesne örneklendirmeyi, Stack/Heap bellek mantığını ve `this` referansını öğrendik.
👉 **Bölüm 7'de Bizi Ne Bekliyor?**
• Yapıcı Metotlar (Constructors) 🏗️
• Varsayılan (Default) ve Parametreli Constructor
• `this()` ile Constructor Chaining (Yapıcı Metot Z
incirleme)
• Garbage Collector (Çöp Toplayıcı) Mantığı
Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! ☕✨
Selamlar! Serimizin 6. bölümüne hoş geldiniz.
Önceki bölümde metot yapılarını, `return` mekanizmasını, Method Overloading ilkelerini ve `varargs` kullanımını detaylarıyla görmüştük. Bu bölümde ise Java'nın kalbi ve ruhu olan **Nesne Yönelimli Programlamaya (Object-Oriented Programming - OOP)** resmi giriş yapıyoruz.
Sınıf (Class) ve Nesne (Object) kavramlarını, `new` anahtar kelimesinin bellek yönetimindeki yerini ve `this` keyword'ünün kullanım amaçlarını öğreneceğiz.
---
📌 1. Nesne Yönelimli Programlama (OOP) Nedir? 🎭
OOP, yazılımı gerçek dünyadaki nesneleri modelleyerek tasarlama yaklaşımıdır.
Geleneksel prosedürel programlamanın aksine kodumuzu fonksiyonlar yığını olarak değil; veri (özellikler/fields) ve bu veriler üzerinde çalışan davranışları (metotlar/methods) bir arada tutan **Sınıf** ve **Nesne** yapıları etrafında kurgularız.
### Temel İkili:
• **Sınıf (Class):** Bir nesnenin şablonudur (blueprint/taslak). Nesnenin hangi özelliklere ve davranışlara sahip olacağını tanımlar. Bellekte yer kaplamaz (kod bloğu hariç).
• **Nesne (Object):** Sınıf şablonundan üretilen somut varlıktır (instance). Bellekte (Heap) yer kaplar ve kendi durum verisini (state) tutar.
Örnek Analoji:
`Araba` bir **Sınıf**'tır (Rengi, hızı, markası olacağı tanımlanmıştır).
Garajınızdaki `Kırmızı 2024 Model BMW` ise o sınıftan üretilmiş somut bir **Nesne**'dir.
---
🏗️ 2. Sınıf Tanımlama ve Nesne Oluşturma (`new`) ⚙️
Bir sınıf içerisinde **Fields (Özellikler)** ve **Methods (Davranışlar)** barındırır.
### Sınıf Tanımı (`Araba.java`):
public class Araba {
// Özellikler (Fields / State)
String marka;
String model;
String renk;
int hiz;
// Davranışlar (Methods / Behavior)
public void hiziArtir(int miktar) {
hiz += miktar;
System.out.println(marka + " " + model + " hızlandı. Güncel Hız: " + hiz + " km/s");
}
public void frenYap(int miktar) {
hiz -= miktar;
if (hiz < 0) hiz = 0;
System.out.println(marka + " " + model + " yavaşladı. Güncel Hız: " + hiz + " km/s");
}
public void bilgileriGoster() {
System.out.println("--- Araç Bilgileri ---");
System.out.println("Marka: " + marka);
System.out.println("Model: " + model);
System.out.println("Renk : " + renk);
System.out.println("Hız : " + hiz + " km/s");
}
}
### Nesne Oluşturma ve Kullanımı (`Main.java`):
public class Main {
public static void main(String[] args) {
// 'new' anahtar kelimesi ile Araba sınıfından bir nesne türetiyoruz
Araba araba1 = new Araba();
// Özelliklere değer atama
araba1.marka = "BMW";
araba1.model = "M3";
araba1.renk = "Mavi";
araba1.hiz = 100;
// Metotları çağırma
araba1.bilgileriGoster();
araba1.hiziArtir(40);
araba1.frenYap(20);
System.out.println();
// İkinci bağımsız bir nesne türetme
Araba araba2 = new Araba();
araba2.marka = "Mercedes";
araba2.model = "C63";
araba2.renk = "Siyah";
araba2.hiz = 80;
araba2.bilgileriGoster();
}
}
---
🧠 3. Bellek Yönetimi: Stack vs Heap 📍
Java'da bellek iki ana bölgeye ayrılır:
1. **Stack (Yığın):** Yerel değişkenler (local variables) ve nesne referansları (pointer/adresler) tutulur. Hızlıdır, scope bitince anında temizlenir.
2. **Heap (Öbek):** `new` kelimesi ile oluşturulan TÜM nesneler (`new Araba()`) ve onların içindeki field verileri Heap bölgesinde saklanır.
`Araba araba1 = new Araba();` satırında olanlar:
• `araba1` isimli referans değişkeni **Stack** alanında oluşturulur.
• `new Araba()` komutu **Heap** alanında gerçek nesne verisini tahsis eder.
• `araba1` referansı, Heap'teki o nesnenin adresini işaret eder.
---
🎯 4. `this` Anahtar Kelimesi Kullanımı 🔑
`this`, bulunulan sınıftan üretilen **mevcut nesnenin kendisini** (current instance) temsil eden özel bir referanstır.
En yaygın kullanım amacı: Sınıfın field isimleri ile metodun parametre isimleri aynı olduğunda çakışmayı önlemektir (Shadowing).
public class Ogrenci {
String isim;
int numara;
// Metot parametre isimleri field isimleriyle aynı
public void bilgiGuncelle(String isim, int numara) {
// 'this.isim' sınıfın field'ını temsil eder.
// 'isim' ise metoda gelen parametredir.
this.isim = isim;
this.numara = numara;
}
public void selamVer() {
System.out.println("Merhaba, ben " + this.isim);
}
}
---
📝 Bölüm Özeti ve Gelecek Bölüm 🔮
Bu bölümde OOP ilkelerine giriş yaptık, Sınıf ve Nesne arasındaki farkı, `new` anahtar kelimesi ile nesne örneklendirmeyi, Stack/Heap bellek mantığını ve `this` referansını öğrendik.
👉 **Bölüm 7'de Bizi Ne Bekliyor?**
• Yapıcı Metotlar (Constructors) 🏗️
• Varsayılan (Default) ve Parametreli Constructor
• `this()` ile Constructor Chaining (Yapıcı Metot Z
incirleme)
• Garbage Collector (Çöp Toplayıcı) Mantığı
Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! ☕✨
🔒 Bu içeriği görmek için giriş yapın