Merhaba değerli Jetto Net Takipçileri,
Bugün sizlere Java programlama dilinin en önemli yapı taşlarından biri olan Nesne Yönelimli Programlama'yı (OOP) anlatacağım. OOP, sadece Java'ya özgü değil, modern yazılım geliştirmenin temelini oluşturan bir paradigmadır.
OOP Nedir?
Nesne Yönelimli Programlama(İngilizcesiyle Object Oriented Programming), yazılımı nesneler ve bu nesneler arasındaki ilişkiler üzerine kurulu bir şekilde tasarlama yaklaşımıdır. Gerçek dünyadaki nesneleri modelleyerek yazılımın daha anlaşılır, düzenli ve yeniden kullanılabilir olmasını sağlar.
Temel OOP Kavramları
Sınıf (Class): Bir nesnenin özelliklerini (niteliklerini) ve davranışlarını (metotlarını) tanımlayan bir şablondur. Örneğin, bir "Araba" sınıfı, renk, model, hız gibi özelliklere ve hızlanma, yavaşlama, durma gibi davranışlara sahip olabilir.
Örnek bir Araba sınıfı tanımlama:
Nesne (Object): Bir sınıfın gerçek bir örneğidir. Her nesne, sınıfın özelliklerine sahip olur ve metotlarını kullanabilir. Örneğin, kırmızı renkli, 2023 model bir "BMW" bir araba nesnesidir.
Aşağıdaki kod bloğu Araba sınıfından araba1 adında yeni bir nesne oluşturuyor ve daha sonra bu nesne ile sınıftaki deişkenlere ve metotlara erişebiliyor.
Kalıtım (Inheritance): Bir sınıfın başka bir sınıftan özelliklerini ve davranışlarını miras almasıdır. Bu, kodun yeniden kullanımını sağlar ve hiyerarşik yapılar oluşturmaya olanak tanır. Örneğin, "ElektrikliAraba" sınıfı, "Araba" sınıfından kalıtım alabilir ve ek olarak batarya kapasitesi gibi özelliklere sahip olabilir.
Örnek bir kalıtım yapısı:
Code
Display Morepublic class SUV extends Araba { private int bagajHacmi; public SUV(String marka, String model, int bagajHacmi) { super(marka, model); this.bagajHacmi = bagajHacmi; } public void bagajHacminiGoster() { System.out.println("Bagaj Hacmi: " + bagajHacmi + " litre"); } }
Yukarıdaki örnekte “SUV” adında bir sınıf tanımladım ve “Araba” sınıfından miras almasını (inheritance) sağladım. “SUV” sınıfı, “Araba” sınıfının özelliklerine (marka ve model) sahip olur ve aynı zamanda kendi özelliği olan “bagajHacmi”ni ekler. “bagajHacminiGoster” metodu, SUV nesnesinin bagaj hacmini ekrana yazdırır.
Çok Biçimlilik (Polymorphism): Bir nesnenin farklı durumlarda farklı davranışlar sergilemesi veya aynı metodun farklı nesneler tarafından farklı şekillerde uygulanmasıdır. Örneğin, "Hayvan" sınıfından türetilen "Kedi" ve "Köpek" sınıflarının her ikisi de "sesÇıkar" metoduna sahip olabilir, ancak kedi miyavlar, köpek havlar.
Polymorphism için bir örnek:
CodeAraba araba2 = new SUV("Nissan", "X-Trail", 500); araba2.bilgileriGoster(); // Marka: Nissan, Model: X-Trail ((SUV) araba2).bagajHacminiGoster(); // Bagaj Hacmi: 500 litreAraba araba2 = new SUV("Nissan", "X-Trail", 500); araba2.bilgileriGoster(); // Marka: Nissan, Model: X-Trail ((SUV) araba2).bagajHacminiGoster(); // Bagaj Hacmi: 500 litre
Yukarıdaki örnekte, “SUV” sınıfından türetilen “araba2” adında bir nesne oluşturdum. Bu nesne, hem “Araba” hem de “SUV” sınıfının özelliklerine sahiptir. Polimorfizm sayesinde “araba2” nesnesi, hem “bilgileriGoster” metodu hem de “bagajHacminiGoster” metodu tarafından kullanılabilir.
Soyutlama (Abstraction): Bir nesnenin karmaşık detaylarını gizleyerek sadece gerekli bilgileri kullanıcının erişimine açmaktır. Bu, kodun daha anlaşılır ve yönetilebilir olmasını sağlar. Örneğin, bir arabanın nasıl çalıştığını bilmek zorunda kalmadan onu kullanabiliriz.
Code
Display Morepublic abstract class Sekil { public abstract double alanHesapla(); public abstract double cevreHesapla(); } public class Dikdortgen extends Sekil { private double uzunluk; private double genislik; public Dikdortgen(double uzunluk, double genislik) { this.uzunluk = uzunluk; this.genislik = genislik; } public double alanHesapla() { return uzunluk * genislik; } public double cevreHesapla() { return 2 * (uzunluk + genislik); } }
Yukarıdaki örnekte, “Sekil” adında soyut bir sınıf tanımladık ve “Dikdortgen” sınıfını bu soyut sınıftan türettim. “Sekil” sınıfı, alan ve çevre hesaplaması için soyut metotlar içerirken, “Dikdortgen” sınıfı bu metotları uygular. Kullanıcılar, “Dikdortgen” nesnesini kullanırken sadece alan ve çevre hesaplamalarını çağırır.
Kapsülleme (Encapsulation): Bir nesnenin verilerini ve metotlarını bir araya getirerek dışarıdan doğrudan erişimi engellemektir. Bu, verilerin güvenliğini ve bütünlüğünü sağlar. Örneğin, bir arabanın motorunun nasıl çalıştığını bilmek zorunda kalmadan onu kullanabiliriz.
Örnek bir kapsülleme yapısı:
Code
Display Morepublic class Calisan { private String isim; private int yas; public Calisan(String isim, int yas) { this.isim = isim; this.yas = yas; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public int getYas() { return yas; } public void setYas(int yas) { this.yas = yas; } }
Yukarıdaki örnekte, “Calisan” adında bir sınıf tanımladım. Sınıfın “isim” ve “yas” adında private özellikleri bulunuyor. Bu özelliklere erişmek ve değiştirmek için public getter ve setter metotları kullanıyoruz. Bu sayede, “Calisan” nesnesinin verilerine kontrollü bir şekilde erişilebiliyor ve değiştirilebiliyoruz.
OOP'nin Avantajları
- Kodun Yeniden Kullanımı: Kalıtım sayesinde bir sınıfın özelliklerini ve davranışlarını başka bir sınıfa miras bırakarak kod tekrarını önleriz.
- Bakım Kolaylığı: OOP, yazılımın daha modüler ve düzenli olmasını sağlar, bu da hataları bulmayı ve düzeltmeyi kolaylaştırır.
- Esneklik: Çok biçimlilik sayesinde bir nesnenin farklı durumlarda farklı davranışlar sergilemesini sağlayabiliriz.
- Ölçeklenebilirlik: OOP, büyük ve karmaşık projelerin daha kolay yönetilmesini sağlar.
Sonuç
Nesne Yönelimli Programlama, günümüz yazılım geliştirme süreçlerinde son derece önemli bir rol oynamaktadır. Nesne yönelimli programlamanın temel prensiplerini anlayarak, daha kaliteli ve uzun ömürlü yazılımlar geliştirebilirsiniz.
Umarım bu yazı, OOP'ye giriş yapmak isteyenler için faydalı olmuştur. Herhangi bir sorunuz varsa yorumlarda bana iletebilirsiniz.
İyi kodlamalar!