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.