Nesneye yönelik programlama (OOP), günümüzün programlama iş piyasasında önemli bir beceridir. Ama programlamaya yeni başlıyorsanız, gözünüz korkmasın.
OOP konseptini kavramak kolaydır, özellikle de işlevsel programlamaya girdiyseniz. OOP, temiz, ölçeklenebilir ve test edilebilir kod yazmanıza yardımcı olur.
Ancak nesne yönelimli programlama nedir, nasıl çalışır ve neden buna ihtiyacınız var?
Nesne Yönelimli Programlama Nedir?
Nesne yönelimli programlama (OOP), bir dizi talimatı temsil etmek için verileri kullanan bir kodlama tasarımıdır. OOP tasarımı, nesneler olarak somutlaştırabileceğiniz özel sınıflar etrafında döner.
Prosedürel veya işlevsel programlamanın aksine, OOP size kodu daha kapsamlı bir şekilde ifade etme alanı sağlar. Eski paradigmalar genellikle yapısız iken, OOP, sınıf adı verilen özel yapıların kullanımını teşvik eder.
Yöntemler, sınıfta belirli bir görevi yerine getiren işlevlerdir. Nitelikler, sınıf özelliklerini veya özelliklerini tanımlayan değişkenler gibidir. Yöntemler, bağımsız olarak veya genellikle sınıf özelliklerine dayalı olarak çalışabilir. Sonuç olarak, her ikisi de OOP konseptini gerçekleştirmek için birlikte çalışır.
Nesne Yönelimli Programlamanın Avantajları
Peki nesne yönelimli programlama daha iyi bir program yazmanıza nasıl yardımcı olur?
OOP, kod tabanınızın karmaşıklığını azaltır.
Kodunuzu net bir şekilde ifade etmenize yardımcı olarak başkaları için daha okunabilir hale getirir.
OOP ile yazılan programlar genellikle daha ölçeklenebilirdir.
Kod testini ve hata ayıklamayı kolaylaştırır.
OOP, kod tekrarını ortadan kaldırarak DRY (kendinizi tekrar etmeyin) ilkesini oluşturur.
OOP kodu genellikle daha modülerdir ve endişelerin ayrılmasını teşvik eder.
Sınıf kompozisyonu ve kalıtım, kodunuzu daha fazla yeniden kullanılabilir hale getirir.
Soyutlama, kod tabanlı güvenliği artırır.
Nesne Yönelimli Programlamanın Dezavantajları
OOP’nin avantajları dezavantajlarından daha ağır bassa da, ikincisi hala tartışmaya değer:
İşlevsel programlamadan daha yavaş olabilir.
OOP, dik bir öğrenme eğrisine sahiptir.
Uygulama ölçeklendikçe komut dosyası klasörleri ve dosyaları artar.
Nesne Yönelimli Programlama Yapısı
İki farklı renkte düzenlenmiş kutular
OOP katı bir mimari etrafında döner. İşte öğreneceğiniz bazı terimler:
Sınıf
Sınıf, benzer eylemleri gerçekleştiren veriler olarak sunulan bir kod koleksiyonudur. Nesneleri başlatmak için bir sınıf kullandığınızdan, bir sınıfı nesne işleyicisi olarak görüntüleyebilirsiniz.
yöntemler
Yöntemler, bir sınıfın görevlerini nasıl gerçekleştirdiğini tanımlar. Bir sınıf bir veya daha fazla metot içerebilir. Yöntemleri, bir sınıfın kendi içinde sorumlulukları paylaşma yolları olarak görebilirsiniz.
Örneğin, bir birim dönüştürücü sınıfı, Celsius’u Fahrenheit’e dönüştürmek için bir yöntem içerebilir. Ve gramları ons’a çevirmek için başka bir yöntem içerebilir.
Öznitellikler
Nitelikler, bir sınıfı tanımlayan özellikler veya özelliklerdir. Bir birim dönüştürücü sınıfı, örneğin, dönüştürme birimleri gibi nitelikler içerebilir. Bu öznitelikler üzerinde hareket eden yöntemler tanımlayabilirsiniz.
Yöntemler gibi, bir sınıf örneğinden (bazı) niteliklere erişebilirsiniz.
nesneler
Basitçe söylemek gerekirse, bir nesne bir sınıfın örneğidir. Bir sınıfı başlattığınızda, ortaya çıkan nesne, sınıfı, nitelikleri ve yöntemleri için bir plan olarak kullanır.
Nesne Yönelimli Programlamanın İlkeleri
Nesne yönelimli programlama, programlama tablosuna bazı ilkeler getirir. Bunların her biri ona geleneksel programlamaya göre bir liderlik sağlar.
Soyutlama
OOP’nin soyutlama kavramı, onu kullanmak için bir şeyin nasıl çalıştığını bilmenize gerek olmadığını belirtir. Sahnenin arkasındaki karmaşıklıklarla uğraşmadan kodunuzu basit kelimelerle sarmanıza olanak tanır.
Örneğin, bir gönderme eyleminin arkasındaki mantık, filtreleme algoritması veya işlevler hakkında endişelenmenize gerek yok. Bir kullanıcı olarak tek gördüğünüz ve ilgilendiğiniz şey gönder düğmesidir.
Nesne yönelimli programlama, bireysel görevleri tekli çağrılar olarak sunarak mantığınızı soyutlamanıza yardımcı olur. Örneğin, bir birim dönüştürücü sınıfı perde arkasında çok şey hesaplayabilirken, tek bir yöntemi çağırarak onun kilogram-gram dönüştürücüsünü çalıştırabilirsiniz:
class_instance.convert_gram()
class_instance sizin nesneniz ve convert_gram, converter sınıfının bir yöntemidir.
kapsülleme
Kapsülleme, nesne yönelimli programlamanın soyutlama yaratma yollarından biridir . Her nesne, bir varlık olarak ele alınan bir veri topluluğudur. Bir nesne içindeki veriler, global alandan gizlenmiş öznitelikleri ve yöntemleri içerir.
Genel olarak, kapsülleme, sınıf verilerinizi özel olarak bir nesneye sarmanıza olanak tanır. Böylece, bir nesnenin içeriği diğerini etkilemez. Ve yalnızca bir nesnenin doğal yöntemleri ve nitelikleri onu değiştirebilir.
Örneğin, bir birim dönüştürücü nesnesinden gelen yöntemler, miras veya kompozisyon olmadan başka bir nesnenin niteliklerini değiştirmemelidir.
Kapsülleme, genel arabirim hakkında endişelenmeden bir nesnenin içeriğini veya yapısını değiştirmenize olanak tanır.
Miras
Kalıtım, üst sınıf adı verilen bir sınıfın içeriğini, alt sınıf veya alt sınıf adı verilen başka bir sınıfta yeniden kullanmanıza olanak tanır. Bir sınıf bir üst sınıfı miras aldığında, özniteliklerini ve yöntemlerini otomatik olarak kazanır.
Üst sınıftan miras aldığı özelliklere ek olarak, bir alt sınıfın kendi nitelikleri ve yöntemleri de olabilir.
Örneğin, sınıfınızın verileri harici bir modülde kullanmasını istiyorsanız, kalıtım kullanışlı olur. Ayrıca kod yazarken kendinizi tekrar etmemenizi sağlar.
Böylece alt sınıflar oluşturmak da çok zaman kazandırır. Her şey için yeni sınıflar oluşturmak yerine, bir temel sınıf oluşturabilir ve mevcut işlevselliği ödünç alarak onu yeni alt sınıflara genişletebilirsiniz.
Kalıtım yararlıdır, ancak bunun yerine kompozisyonun ne zaman kullanılacağını bilmek temel bir programlama ilkesidir .
polimorfizm
Polimorfizm kalıtımın bir sonucudur. İstediğiniz gibi kullanabileceğiniz farklı nesnelerde bir yöntem veya öznitelik adı tutmanıza izin verir.
Bu kavram, bir sınıf yöntemini temel sınıftan devralarak farklı sınıflarda dinamik olarak kullanabilmenizi sağlar.
Örneğin, genel bir oyun nesnesi bir hareket yöntemini tanımlayabilir. Alt sınıflar, belirli hareketlerinin tam olarak nasıl gerçekleştiğini tanımlayabilir. Kontrol kodunun o zaman ayrı sınıfların nasıl hareket ettiğini bilmesi gerekmez, sadece hepsinin ortak bir yöntemle hareket edebileceğini bilmek.
OOP ve Fonksiyonel Programlama
OOP popülerdir, ancak programcılar gereksinimlerine bağlı olarak hala birçok başka programlama paradigmasını kullanır. İşlevsel programlama, OOP’den oldukça farklıdır:
İşlevsel programlama, talimatları özel işlevlerde işler. OOP ise komutları nesnelerde saklanan veriler olarak sunar.
Gerçek fonksiyonel programlamada, bir fonksiyonun çıktısı her zaman aynı ve değişmezdir. OOP, polimorfizme izin verir ve döndürülen veriler diğer sınıflarda değişebilir.
Nesneleri kolayca genişletebildiğiniz için OOP daha ölçeklenebilir.
Soyutlama, dışarıdan biri sahnenin arkasındaki eylemleri bilmediğinden OOP’yi daha güvenli hale getirir. Fonksiyonel programlama bazı katmanları açığa çıkarabilir.
OOP karmaşık olabilse de, işlevsel programlamadan daha sürdürülebilir. İşlevsel programlama hala bazı prosedür özelliklerini korur.
Programlar, nesne hiyerarşisini dikkate almadan talimatlara eriştiği için fonksiyonel programlama daha hızlı olabilir. Nesneye yönelik programlarla çalışırken nesne hiyerarşisi esastır.
Nesne Yönelimli Olma Zamanı
Nesne yönelimli programlama kavramını ilk başta anlamak zor olabilir. Ancak nesne yönelimli kod yazmaya başladığınızda daha net hale gelir.
Bu makalede yalnızca genellemeleri tartıştığımızı unutmayın. OOP konsepti genel olarak benzer olsa da, her nesne yönelimli dilin tuhaflıkları ve işleri gerçekleştirme yolları vardır. Doğru dili seçtikten sonra, OOP ilkelerini nasıl uygulamaya koyduğunu öğrenmeye başlayacaksınız.