Java OOP Rehberi: Başlangıçtan İleri Seviyeye Temel Kavramlar

  • 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.

      Kod
      Araba araba1 = new Araba("Toyota", "Corolla");
      araba1.bilgileriGoster(); // Marka: Toyota, Model: Corolla
    • 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ı:

      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:

      Kod
      Araba 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.

      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ı:

      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!

Şimdi katılın!

Henüz hesabınız yok mu? Topluluğumuzun aktif bir üyesi olun ve oyunlarla, yazılımlarla ilgili ilginç konuları keşfedin! Kaydolun ve tartışmalara katılın, deneyimlerinizi paylaşın ve yeni arkadaşlar edinin. Topluluğumuzda herkesin kendine göre bir yer bulabileceğinden eminiz. Hadi, gelin ve bizimle birlikte eğlenceli ve bilgilendirici bir yolculuğa çıkın!