Fikir alışverişi yapalım istiyorum. Nesne tabanlı programlama yapmanın önemi nedir? Değeri nedir? Neden tercih ediliyor olması bu kadar ciddi ve önemli bir seviyede? İş ilanlarında özellikle aranan bu niteliğin kendisini bu kadar değerli kılan özelliği nedir?
Bu forum’a katılmadan önce nesne tabanlı programlama yapmamıştım hiç. Hem zaten kafa yormamış, anlamak için uğraşmamıştım hem de uzak durmuştum. Fakat bu forumda vakit geçirdikçe öğrenmeye teşvik ettim kendimi ve hala da öğreniyorum. Aynı şekilde hiç başlamamış ya da başlayıp yarıda bırakmış okuyucular için fikir olması açısında konuşalım dedim.
Nesne Tabanli Programlama, (OOP) bir programlama yaklasimi. Is ilanlarinda aranabilecek bir nitelik degil. (Oyle de, programlama yeteneklerinden biri oldugu icin, ozel olarak sayilmiyor)
Kisaca, her islevin nesneler olarak soyutlandigi programlama yaklasimi. Python’da oldukca sik kullaniliyor, bircok modern programlama dillerinde de.
Surada ise cok guzel bilgiler var. (Turkcesi yok gordugum kadariyla. Klavyem Turkce olsa da cevirsem )
Birkaç dertten kurtardığı için kullanmayı tercih ediyorum. Biri bunlardan hangisini önce yazmalıyım sorusundan kurtulmak. Diğeri bu değişkeni bu fonksiyonda kullanıyorum ama global ile ilgili bir sıkıntı yaşar mıyım sorusundan kurtulmak. Benim çok nadiren kullandığım fakat ihtiyaç olduğu zaman muhteşem bir çözüm olan ana ortaya atılma amacı ise şu: Nesne üretmek. Mesela Django channels’da sınıf tabanlı Consumer çağrılabiliyor. Bir bağlantı durumunda hemen bir nesne oluşturuluyor.
Genel olarak edindiğim bilgiye göre (aşşağıda yazdıklarım kendi görüşüm). İki konu altında incelemek gerek sanırım.
1 - PROSEDUREL YAKLAŞIM
her fonksiyon bir işi yapıcak şekilde karar ve döngü blokları altında inşa edilmiş bir yaklaşım izler.
2 - OOP
Polymorphism yaklaşımı ile kodun okunurluğunu ön planda tutmayı amaçlar. Zaten OOP teknolojisinde gelişmiş ve neyi nerede kullanıcağını bilen bir programcı coğu karar bloklarından ve kod salatasından kurtulur. Herhangi bir nesne üretirken onu implemente edip yeni özelliklere acık ve esnek bir kod olması açısından güzel özellikleri vardır. Örneğin miras almak, veriyi güvende tutmak… vs
Özür dilerim yanlış ifade ettim sanırım. Demek istediğim programcı eğer müşteri yeni bir özellik veya ekleme yaptırmak istediğinde bunu koda eklemeyi kolaylaştıran bir yapı sağlaması. Zaten bir program kodlarını debug ederken veya özellik eklerken çok zaman harcanıyor.
Not: prosedurel yaklaşımdada takılabir-cıkarılabilir olması acısından bir fonksiyon bir işi yapmalı. Ama polymorphism daha cok insan okuyucularına hitab ediyo sanırım
10 kişinin ortalama 4.98 puan verdiği (5 üzerinden) freelancer temel seviye Python biliyorum diyor. Başlangıç fiyatı 50TL. Üstelik Pygame, PySide2, PyQt5, Flask vs. biliyormuş. Ama OOP hakkında bir şey göremiyorum.
Gencay polymorphism’in ne olduğunu bildiğimi düşünüyorum. Sadece bildiğimi düşündüğüm şey ile polymorphism hakkında söylenen şey biraz uyumsuz gibi geldi bana veya ben anlayamadım tam.
Benim polymorphism teriminden anladığım şey, bir fonksiyon isminin farklı iç yapıları olan veri tipleri için ortak bir dış arayüz sunmasıdır. Yani ilgili fonksiyonun birden çok veri tipi için çalışabilmesini sağlayan özelliği, o fonksiyonun “polymorphic” olma özelliğidir.
Bir nesnenin başka bir nesne gibi davranabilmesi, kullanılabilmesi. Biraz daha açık bir ifade ile, alt sınıfların, üst sınıflara ait olan davranışlarını başka bir biçimde gerçekleştiriyor olması olayıdır.
Yukarıda ILoggerService adında bir Interface ve içerisinde de log() adında metotu bulunmaktadır. Bu interface’den türetilen DatabaseLoggerService ve FileLoggerService sınıfları, metotu implemente etmek(uygulamak) zorundadır ve kendince uygulayacaktır ki bundan dolayı da bu metota ait farklı davranışlar söz konusu olacaktır.
Yanılmıyorsam nesnenin başka bir nesne gibi davranması değil, fonksiyonun bir çok veri tipi için çalışabilmesi özelliği.
Mesela aşağıdaki fonksiyon da polimorfiktir.
def topla(x, y):
if type(x) == type(y) and all(hasattr(i, "__add__") for i in (x, y)):
return x + y
if all(isinstance(i, dict) for i in (x, y)):
x.update(y)
return x
print(topla("Hello", "World"))
print(topla(1, 2))
print(topla([1], [2]))
print(topla((1, ), (2, )))
print(topla({"a": 1, "b": 2}, {"c": 3, "d": 4}))