Java programlama dili, nesne yönelimli programlamayı (OOP) destekleyen güçlü bir dildir. Bu yaklaşım, programı nesneler etrafında şekillendirir ve yazılım geliştirme sürecini daha düzenli, esnek ve modüler hale getirir. OOP’nin dört temel ilkesi; sınıflar ve nesneler, kapsülleme, kalıtım ve çok biçimlilik (polymorphism) olarak sıralanabilir. Şimdi, bu kavramları detaylıca inceleyelim.
İçerik
Sınıflar ve Nesneler
Java’da nesneler, sınıflar adı verilen şablonlardan türetilir. Sınıflar, nesnelerin özelliklerini (alanlar) ve davranışlarını (metotlar) tanımlar. Nesneler ise sınıfın örnekleridir.
class Araba {
String marka;
int yil;
void bilgiVer() {
System.out.println("Marka: " + marka + ", Yıl: " + yil);
}
}
public class Main {
public static void main(String[] args) {
Araba araba1 = new Araba();
araba1.marka = "Toyota";
araba1.yil = 2022;
araba1.bilgiVer();
}
}
Bu örnekte, Araba
sınıfı, marka
ve yil
adında iki özelliğe ve bilgiVer
adında bir metoda sahiptir. Main
sınıfında ise Araba
sınıfından bir nesne oluşturduk ve bu nesnenin özelliklerini atayıp metodu çağırdık.
Kapsülleme (Encapsulation)
Kapsülleme, veriyi korumak için kullanılır. Java’da bu, genellikle sınıfın özelliklerini private
yaparak ve bu verilere erişimi public
metotlarla sağlayarak yapılır. Böylece, sınıf dışındaki kodlar, doğrudan verilere erişemez, sadece belirlenen yollarla erişim sağlayabilir.
class Calisan {
private String isim;
private int maas;
public void setIsim(String isim) {
this.isim = isim;
}
public String getIsim() {
return isim;
}
public void setMaas(int maas) {
this.maas = maas;
}
public int getMaas() {
return maas;
}
}
public class Main {
public static void main(String[] args) {
Calisan calisan = new Calisan();
calisan.setIsim("Ahmet");
calisan.setMaas(5000);
System.out.println("Çalışan İsmi: " + calisan.getIsim());
System.out.println("Çalışan Maaşı: " + calisan.getMaas());
}
}
Bu örnekte, Calisan
sınıfındaki isim
ve maas
değişkenleri private
olarak tanımlanmış, bu sayede doğrudan erişim engellenmiştir. Ancak, get
ve set
metotları sayesinde bu verilere güvenli bir şekilde erişilebilmektedir.
Kalıtım (Inheritance)
Kalıtım, bir sınıfın başka bir sınıftan özelliklerini ve metotlarını miras almasını sağlar. Böylece kod tekrarını azaltır ve yeniden kullanılabilirliği artırır. Java’da extends
anahtar kelimesiyle kalıtım sağlanır.
class Hayvan {
void sesCikar() {
System.out.println("Hayvan ses çıkarıyor.");
}
}
class Kopek extends Hayvan {
@Override
void sesCikar() {
System.out.println("Köpek havlıyor.");
}
}
public class Main {
public static void main(String[] args) {
Kopek kopek = new Kopek();
kopek.sesCikar();
}
}
Bu örnekte, Kopek
sınıfı Hayvan
sınıfından miras almış ve sesCikar
metodunu ezmiştir. Bu sayede köpek nesnesi, hayvanın genel ses çıkarma davranışını kendine özgü bir şekilde gerçekleştirmiştir.
Çok Biçimlilik (Polymorphism)
Çok biçimlilik, nesnelerin farklı sınıf türlerinde aynı isimdeki metotları farklı şekillerde uygulayabilmesi anlamına gelir. Bu, özellikle bir sınıf hiyerarşisinde metotları yeniden tanımlamak için kullanılır.
class Kus {
void uc() {
System.out.println("Kuş uçuyor.");
}
}
class Kartal extends Kus {
@Override
void uc() {
System.out.println("Kartal yüksekten uçuyor.");
}
}
public class Main {
public static void main(String[] args) {
Kus kus = new Kus();
Kus kartal = new Kartal();
kus.uc(); // Kuş uçuyor.
kartal.uc(); // Kartal yüksekten uçuyor.
}
}
Bu örnekte, Kartal
sınıfı Kus
sınıfından miras almış ve uc
metodunu kendi ihtiyaçlarına göre yeniden tanımlamıştır. Böylece, çok biçimlilik sağlanmış olur.
Sonuç
Nesne yönelimli programlama, Java programlamasında yazılımın daha düzenli ve bakımı kolay olmasını sağlayan bir yaklaşımdır. Sınıflar ve nesneler, kapsülleme, kalıtım ve çok biçimlilik gibi kavramlar, OOP’nin temel yapı taşlarını oluşturur. Bu kavramlar sayesinde Java’da esnek, yeniden kullanılabilir ve sürdürülebilir yazılımlar geliştirebiliriz.