Anket Siz hangi paradigmayı tercih ediyorsunuz?
Toplam Katılımcı Sayısı: 4
Siz hangi paradigmayı tercih ediyorsunuz?
OOP
%75,00 (3 Oy)
Fonksiyonel
%25,00 (1 Oy)
Prosedürel
%0 (0 Oy)
  • 29-07-2025, 04:01:43
    #1
    Selamlar, siz hangi yöntemi tercih ediyorsunuz?

    Şimdi bir proje düşünelim;
    • Prosedürel yazarsak elbette yazan kişi için fazlasıyla kolay olacaktır fakat dışarıdan bakanlar çalışmayı iyice inceleyene kadar çorba dışında bir şey göremeyecek hatta yazan kişi projeye 1 yıl sonra dönüp bakarsa muhtemelen kendisi de çorba görecektir, bir yerde problem olsa komple projeyi elden geçirmesi bile gerekebilir.
    • Fonksiyonel yazarsak prosedürel programlamaya nazaran bir tık daha zahmetli fakat derli toplu okunabilir olacaktır. OOP kadar düzenli değil fakat prosedürel kadar da dağınık değil ne istediğini bilmek yeterli, doğru şekilde uygulandığında proje büyüse dahi karmaşık hale gelmeyecek.
    • OOP yazarsak en ufak bir iş için bile interfaceler abstractlar implementationlar havada uçuşur kendi kodunu yazmakla uğraşırsın sonra yazdığın koda kurallar koymakla uğraşırsın sonra da bunları uygulamakla uğraşırsın yazması diğerlerine kıyasla fazlasıyla zahmetlidir fakat yapı çok sağlam olur kitap gibi okunur. Bana göre burada çorba olan şey projeden ziyade yazan kişinin beyni oluyor.
    Bu işe prosedürel yöntemle başlamamdan olsa gerek kafamın en rahat ettiği yöntem prosedüreldir fakat hem sürdürülebilir değil hem de günümüz şartlarında prosedürel biçimde yapılmış bir çalışmayı portföye(mini projeler haricinde) koymak kesinlikle doğru bir seçim olmaz, orta ve üzeri seviye işlerde bu paradigmayla ilerlemek bayağı ilkellik gibi bir şey. C# üzerinde OOP girişimlerim oldu fakat yazmaktan kesinlikle keyif almadım, işin sonunda kaliteli bir yapı olsa dahi o süreç hamallık gibi geldi devamını getirmek istemedim işi bitirip OOP işini rafa kaldırdım koşa koşa uzaklaştım. Haliyle ben seçimimi fonksiyonelden yana kullanmıştım ve PHP'yi bırakıp en uygun olanlar arasında node.js ile devam etme kararı almıştım.

    Sizler ne düşünüyorsunuz? Bankacılık vb. büyük işler haricinde söylüyorum günümüzde OOP'nin neredeyse kriter haline gelmesi sizce de doğru mu?
    Bana kalırsa prosedürel gömülebilir gayet doğal fakat OOP bu kadar yüceltilebilir mi orası tartışmaya açık..
  • 29-07-2025, 14:00:21
    #2
    Prosedürler sınıfların içerisinde sadece o sınıf için özel ufak iş parçacıklarını yürütecek şekilde yazılmalıdır. Etki alanı kısıtlı ve mümkünse sadece hedefe yönelik ya da yardımcı olmalıdır.

    Projelerini kesinlikle OOP yazman gerekir ama günümüzde tam olarak OOP dinamikleri yazılımcılar tarafından kavranamadığı için her işlem için mükerrer ya da benzer fonksiyonlardan dünya kadar method geliştiriliyor.

    OOP içerisinde önemli olan paydaş yapıların yönetimidir; Ram ve İşlemci yüklerini optimizasyonudur. OOP'a hizmet edecek şekilde fonksiyonlarını geliştirmelisin ama bunları doğru ve az sayıda araç ile yapman gerekir. C# dilinden örnek vereyim; hani OOP denince ilk akla gelen c# ya da Java olduğu için; c# için sadece abstract, interface gibi kalıtım yapıları dışında struct, decorator, implicit operator'ler gibi yapılar kullanıp yerine göre cache mekanizmaları ile nesnelerin ortak yönelimlerini reflect edecek ve sadece nesnelerle işi çözebileceğin Extension fonksiyonlar geliştirirsen, Mapper yapılarından faydalanırsan düşündüğün kadar nesne havada uçuşmaz. Hedefine yönelik 1 model ve 1 dto ile bir veri ağacının tamamını yönetebilirsin, duruma göre dto artabilir. Kaldı ki artık dto'lar için record gibi çok basit bir tipte var.
    OOP günümüzde kriter haline gelmiş bir şey değildir; Dennis C++ dilini 70'lerde OOP'u hedefine ulaştırmak için ortaya çıkarttı, şimdi C dilindeki 32 anahtar ile gerçek fonksiyonel programlamaya girersen sadece 1 ekranda 1 input getirirken dünyanın kaç bucak olduğunu görürsün
    OOP sadece nesneler oluşturma ve bunları kaydetmekte değildir; OOP bütün bir işin organize parçalarını oluşturmak için programatik bir plandır. Bunu şöyle düşünebilirsin; fonksiyonlar makina, objeler makinanın malzemesi. Sen malzemeleri organize ederek modülerlik kazanıyorsun.
    OOP senden çok fazla nesne değil doğru nesneleri ve bunları doğru birleştiren sağlam jenerik fonksiyonları ve bu fonksiyonlara yardımcı prosedürleri bekler.
    Aslında burada ayırmaya çalıştığın kavramların tamamı bir bütünün parçaları.
    Bunun üzerine kitap yazacak kadar konuşurum ama fazla uzatmanında bi anlamı yok.
    22-23 seneden uzun bir süredir aktif olarak kod yazan ve C dil ailesindeki tüm dilleri aktif kullanan birisi olarak sana tavsiyem; hiç bir yapıya sıkı sıkıya bağlanma, her işin, projenin kendi dinamikleri vardır; bu dinamiklere göre her projeyi hibrit planlamalı, alanında güçlü olan diller ile bi kaç disiplini birlikte çalışır hale getirmelisin.
    Programlama dilleri her zaman değişkenlik gösterir, önemli olan teknolojileridir. Mesela .Net Core 8-9 ile NodeJS kıyasladığında NodeJS öndeyken, şimdi .Net Core 10 ön sürümlerinde NodeJS'i tokatlayıp geçiyor ve NodeJS bu noktada kendini güncelleyemiyor ya da Typescript dersin, JS tabanında ne olacak dersin, gelecek stabil sürümünde artık GO tabanına oturtulduğunu açıkladı Microsoft, Typescript artık sadece betik bir yapı olmaktan Python gibi her alanda kullanılabilir bir yapıya dönüşecek demektir ya da Python ile yazdığın bi çok şey aslında C++ ile geliştirilmiş kütüphanelerin fonksiyonları eğer gerçek bir performans bekliyorsan bazı modülleri C++ ile geliştirebilirsin.

    Bu böyle uzar gider, yani yaklaşımını ve ayrım kriterini çok doğru bulmadım ama biraz daha yazılım teknolojilerinin derinlerine girdiğinde, özellikle kod yazarken söylediklerimi daha iyi anlayacaksın.