Bu alıntıyı " Clojure'nin Sevinci" sinde p. 32, ancak birileri geçen hafta akşam yemeğinde bana aynı şeyi söyledi ve ben de başka yerlerde duydum:
Nesne yönelimli programlamanın dezavantajı [A], fonksiyon ve veri arasındaki sıkı bağlantıdır.
Bir uygulamada gereksiz eşlemenin neden kötü olduğunu anlıyorum. Ayrıca değişken durum ve kalıtımın, Nesneye Yönelik Programlama'da bile, kaçınılması gerektiğini söyleyerek rahatım. Ancak sınıflara yapıştırma işlevlerinin neden doğal olarak kötü olduğunu göremiyorum.
Yani, bir sınıfa işlev eklemek Gmail'de bir posta etiketlemek veya bir dosyayı bir klasöre yapıştırmak gibi görünüyor. Onu tekrar bulmanıza yardımcı olan örgütsel bir tekniktir. Bazı kriterleri seçiyorsun, sonra bir şeyler yap. OOP'tan önce, programlarımız dosyalarda oldukça büyük yöntem torbalarıydı. Yani, işlevleri bir yere koymak zorundasın. Neden onları organize etmiyorsun?
Bu, türlere örtülü bir saldırı ise, neden giriş ve çıkış türlerinin bir işlevle sınırlandırılmasının yanlış olduğunu söylemiyorlar? Buna katılıp katılamayacağımı bilmiyorum, ama en azından pro ve con tipi güvenliği tartışıyorlar. Bu bana çoğunlukla ayrı bir endişe gibi geliyor.
Elbette, bazen insanlar bunu yanlış anlar ve işlevselliği yanlış sınıfa koyar. Ancak diğer hatalarla karşılaştırıldığında, bu çok küçük bir rahatsızlık gibi görünüyor.
Öyleyse, Clojure'un ad alanları var. OOP'taki bir sınıfa bir işlevin Clojure'da bir isim alanına işlevin yapıştırılmasından farklı olması ve neden bu kadar kötü? Unutmayın, bir sınıftaki işlevler mutlaka yalnızca o sınıfın üyeleri üzerinde işlemez. Java.lang.StringBuilder'a bakın - herhangi bir referans tipinde veya otomatik boks yoluyla herhangi bir tipte çalışır.
Not: Bu alıntı okumadığım bir kitaba atıfta bulunuyor: Leda'da Multiparadigm Programlama: Timothy Budd, 1995 .