Sınıflar ve Nesneler
Sınıflar ve Nesneler, nesne yönelimli programlamanın (OOP) temel yapı taşlarıdır ve modern yazılım geliştirme ile sistem mimarisinin verimli ve sürdürülebilir olmasında kritik bir rol oynar. Sınıf, bir nesnenin sahip olacağı özellikleri (atribütler) ve davranışları (metotlar) tanımlayan bir şablondur. Nesne ise bu sınıftan yaratılan somut bir örnektir ve kendi durumunu (state) saklayabilir, sınıf tarafından tanımlanan metotları çalıştırabilir. Bu yapı sayesinde yazılım sistemleri modüler, yeniden kullanılabilir ve kolay yönetilebilir hâle gelir.
Sınıflar ve Nesneler, yazılım geliştirme sürecinde veri modellerini, iş mantığını ve sistem bileşenleri arasındaki etkileşimi organize etmek için kullanılır. Bu kavramlar üzerinde ustalaşmak, encapsulation (kapsülleme), inheritance (kalıtım), polymorphism (çok biçimlilik) gibi OOP prensiplerini uygulayarak daha güvenli ve esnek kod yazmayı sağlar. Bu eğitimde okuyucu, sınıf tasarlamayı, nesne yaratmayı, verileri yönetmeyi, algoritmaları uygulamayı ve ileri düzey hata kontrol tekniklerini öğrenecektir.
Temel Örnek
javapublic class Calisan {
private String isim;
private int id;
public Calisan(String isim, int id) {
this.isim = isim;
this.id = id;
}
public String getIsim() {
return isim;
}
public void setIsim(String isim) {
if(isim != null && !isim.isEmpty()) {
this.isim = isim;
} else {
System.out.println("Geçersiz isim!");
}
}
public int getId() {
return id;
}
public void setId(int id) {
if(id > 0) {
this.id = id;
} else {
System.out.println("ID pozitif olmalıdır!");
}
}
public void bilgileriGoster() {
System.out.println("İsim: " + isim + ", ID: " + id);
}
public static void main(String[] args) {
Calisan c1 = new Calisan("Ayşe", 101);
c1.bilgileriGoster();
c1.setIsim("Mehmet");
c1.setId(102);
c1.bilgileriGoster();
}
}
Bu örnekte Calisan sınıfı, çalışanların isim ve ID bilgilerini kapsülleme (encapsulation) prensibine uygun şekilde private değişkenlerle saklar. Getter ve setter metotları, veriye kontrollü erişim sağlar ve değer doğrulama ile hatalı veri girişini engeller. Constructor metodu, nesne oluşturulurken gerekli başlangıç değerlerini atar. bilgileriGoster() metodu, nesnenin mevcut durumunu konsola yazdırır.
main metodu, nesne oluşturmayı, özellikleri değiştirmeyi ve nesne bilgilerini göstermeyi örnekleyerek gerçek dünya senaryolarında sınıf ve nesne kullanımını gösterir. Bu yapı, OOP prensiplerinin kod üzerinde uygulanışını somutlaştırır.
Pratik Örnek
javaimport java.util.ArrayList;
public class Departman {
private String isim;
private ArrayList<Calisan> calisanlar;
public Departman(String isim) {
this.isim = isim;
this.calisanlar = new ArrayList<>();
}
public void calisanEkle(Calisan c) {
if(c != null) {
calisanlar.add(c);
}
}
public void calisanSil(int id) {
calisanlar.removeIf(c -> c.getId() == id);
}
public void tumCalisanlariGoster() {
System.out.println("Departman: " + isim);
for(Calisan c : calisanlar) {
c.bilgileriGoster();
}
}
public static void main(String[] args) {
Departman yazilim = new Departman("Yazılım");
Calisan c1 = new Calisan("Ayşe", 101);
Calisan c2 = new Calisan("Mehmet", 102);
yazilim.calisanEkle(c1);
yazilim.calisanEkle(c2);
yazilim.tumCalisanlariGoster();
yazilim.calisanSil(101);
yazilim.tumCalisanlariGoster();
}
}
Bu ileri düzey örnekte Departman sınıfı, birden fazla Calisan nesnesini ArrayList koleksiyonunda tutar ve böylece kompozisyon (composition) kavramını gösterir. calisanEkle() metodu, null değerlerin eklenmesini engeller ve veri bütünlüğünü korur. calisanSil() metodu, lambda ifadesi ile belirtilen ID’ye sahip çalışanı listeden çıkarır. tumCalisanlariGoster() metodu, koleksiyondaki tüm çalışanları listeler, gerçek dünya departman yönetimi operasyonlarını simüle eder.
Bu örnek, OOP prensiplerini, koleksiyon yönetimini, veri doğrulamayı ve algoritmik işlem mantığını ileri seviyede uygular.
En iyi uygulamalar ve yaygın hatalar:
- Özel (private) değişkenler kullanarak kapsüllemeyi sağlamak.
- Nesne koleksiyonları için uygun veri yapıları seçmek (ArrayList, HashMap).
- Nesne yaşam döngüsünü yöneterek bellek sızıntılarını önlemek.
- Giriş verilerini doğrulamak ve istisnaları doğru şekilde yönetmek.
- Koleksiyon veya nesne üzerinde algoritmalar uygularken verimli yöntemler kullanmak.
Debug ve test için JUnit önerilir. Performans optimizasyonu için gereksiz nesne yaratımından kaçınmak ve veri yapısını doğru seçmek önemlidir. Güvenlik açısından, hassas verilerin korunması ve dışarıdan gelen verilerin doğrulanması gerekir.
📊 Referans Tablosu
Element/Concept | Description | Usage Example |
---|---|---|
Sınıf | Nesneleri tanımlayan şablon | Calisan, Departman |
Nesne | Sınıftan oluşturulan somut örnek | Calisan c1 = new Calisan("Ayşe", 101) |
Kapsülleme | Veriyi koruma ve kontrollü erişim | private int id; public int getId() |
Kompozisyon | Bir sınıfın diğer sınıfın nesnelerini içermesi | Departman içinde ArrayList<Calisan> |
Constructor | Nesneyi başlatan metod | public Calisan(String isim, int id) |
Sınıflar ve Nesneler, modüler, yeniden kullanılabilir ve ölçeklenebilir kod yazmayı sağlar. Bu kavramları öğrenmek, nesne koleksiyonlarını yönetmek, algoritmalar uygulamak ve güvenli bir mimari tasarlamak için temel oluşturur.
Bir sonraki adım olarak kalıtım, polimorfizm, arayüzler, tasarım desenleri ve veri tabanı entegrasyonu (ORM) konularına geçmek önerilir. Pratik projeler ile, örneğin çalışan ve departman yönetim sistemleri, kavramların pekiştirilmesi sağlanabilir. Kaynak olarak Java resmi dökümantasyonu ve açık kaynak projeler kullanılabilir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu konudaki anlayışınızı pratik sorularla test edin.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek