Makine dili (örn. 0110101000110101
) Bilgisayar dilleri genellikle daha yüksek soyutlama biçimlerine dönüştüğünden, genellikle bir soruna uygulandığında kodu anlamayı kolaylaştırır. Birleştirici, makine kodu üzerinde bir soyutlama, C, birleştirici üzerinde bir soyutlama vb.
Nesne yönelimli tasarım, nesneler açısından bir problemi modellememize izin vermede çok iyi görünmektedir, örneğin, bir üniversite ders kayıt sistemi problemi bir Course
sınıf, bir Student
sınıf vb. İle modellenebilir . Sonra, çözümü yazdığımızda OO dilinde, sorumluluk alan ve tasarım için, özellikle de kodu modüle etmek için genellikle yardımcı olan benzer sınıflarımız var. Eğer bu problemi bir OO yöntemiyle çözen 10 bağımsız takıma verirsem, genellikle 10 çözüm ortak problem ile ilgili sınıflara sahip olacaktır. Bu sınıfların birleşmesine ve etkileşimlerine girmeye başladığınızda çok fazla farklılık olabilir, bu nedenle "sıfır temsili boşluk" diye bir şey yoktur.
Fonksiyonel Programlama ile ilgili deneyimim çok sınırlıdır (gerçek dünya kullanımı yoktur, sadece Hello World tipi programlar). Bu tür dillerin FP çözümlerini OO dillerinin yaptığı gibi sorunlara (düşük temsili bir boşlukla) kolayca eşleştirmeye nasıl izin verdiğini göremiyorum.
FP'nin eşzamanlı programlama açısından avantajlarını anlıyorum. Ama bir şey mi kaçırıyorum, yoksa FP temsili bir boşluğu azaltmakla ilgili değil (çözümleri daha kolay anlaşılır kılıyor)?
Bunu sormanın başka bir yolu: Aynı gerçek dünya sorununu çözen 10 farklı takımın FP kodunun ortak bir yanı var mı?
Vikipedi'den Soyutlama (bilgisayar bilimi) (benimkini vurgulayın):
Fonksiyonel programlama dilleri yaygın sergileyen fonksiyonlarla ilgili soyutlamalar gibi lamda soyutlamaların (bazı değişkenin bir fonksiyonu bir terim yapma), yüksek mertebeden fonksiyonlarının (parametreler fonksiyonlar), braket soyutlama (değişkenin bir fonksiyonu bir terim yapma).
Temsili boşluk potansiyel olarak arttırılabilir, çünkü [bazı] gerçek dünya sorunları bu tür soyutlamalarla kolayca modellenmez.
Temsili boşluğun azaldığını görmenin bir başka yolu, çözüm öğelerini soruna geri döndürmektir. 0
Var ve 1
makine kodu s ise, geri iz çok zordur Student
sınıf iz geri kolaydır. Tüm OO sınıfları problem alanına kolayca ulaşmaz, ancak birçoğu yapar.
FP soyutlamalarının problem alanının hangi kısmını çözdüklerini bulmak için her zaman açıklamaya gerek yoktur ( matematik problemleri dışında )?Tamam - bu konuda iyiyim. Daha birçok örneğe baktıktan sonra, FP soyutlamalarının sorunun veri işlemede ifade edilen kısımları için ne kadar açık olduğunu görüyorum.
İlgili bir soruya kabul edilen cevap UML bir Fonksiyonel programı modellemek için kullanılabilir mi? - "Fonksiyonel programcıların diyagramlar için fazla bir kullanımı yoktur." UML olup olmadığını gerçekten umursamıyorum, ancak FP soyutlamalarının anlaşılması / iletişiminin kolay olmasını merak ediyorum, yaygın olarak kullanılan diyagramlar yoksa (bu cevabın doğru olduğunu varsayarak). Yine, FP kullanım / anlama seviyem önemsizdir, bu yüzden basit FP programlarında şemalara gerek olmadığını anlıyorum.
OO tasarımı, her birinde kapsülleme (erişim kontrolü, bilgi gizleme) ile işlev / sınıf / paket düzeyinde soyutlamaya sahiptir, bu da karmaşıklığı yönetmeyi kolaylaştırır. Bunlar problemden çözüme ve daha kolay geri dönmeye izin veren unsurlardır.
Birçok cevap, analiz ve tasarımın FP'de OO'ya benzer şekilde nasıl yapıldığından bahsediyor, ancak kimse şimdiye kadar üst düzey bir şeyden bahsedemiyor (paul bazı ilginç şeyler gösterdi, ancak düşük seviyeli). Dün çok fazla Google Çalışması yaptım ve bazı ilginç tartışmalar buldum. Aşağıdakiler Simon Thompson'un (2004) (Vurgu madeni) Fonksiyonel Programları Yeniden Düzenleme'den alınmıştır.
Nesneye yönelik bir sistem tasarlanırken, tasarımın programlamadan önce olacağı düşünülmektedir. Tasarımlar, Eclipse gibi araçlarda desteklenen UML gibi bir sistem kullanılarak yazılacaktır. Yeni başlayan programcılar BlueJ gibi sistemleri kullanarak görsel tasarım yaklaşımını iyi öğrenebilirler. Fonksiyonel programlama için benzer bir metodoloji üzerindeki çalışmalar FAD: Fonksiyonel Analiz ve Tasarım'da rapor edilmiştir , ancak çok az çalışma vardır. Bunun birkaç nedeni olabilir.
Mevcut fonksiyonel programlar tasarım gerektirmeyen bir ölçektir. Birçok işlevsel program küçüktür, ancak Glasgow Haskell Derleyicisi gibi diğerleri önemlidir.
Fonksiyonel programlar doğrudan uygulama alanını modellemekte, böylece tasarımı ilgisiz hale getirmektedir. İşlevsel diller çeşitli güçlü soyutlamalar sağlarken, bunların gerçek dünyayı modellemek için gereken tüm ve sadece soyutlamaları sağladığını iddia etmek zordur.
Fonksiyonel programlar gelişen bir dizi prototip olarak oluşturulmuştur.
Gelen Doktora tezi, yukarıda değinilen , Analiz ve tasarım yöntemleri (ADM) kullanmanın yararları paradigmalar bağımsız özetlenmiştir. Ancak, ADM'lerin uygulama paradigmasına uyması gerektiği konusunda bir tartışma yapılmıştır. Yani, OOADM en iyi OO programlama için çalışır ve FP gibi başka bir paradigmaya iyi uygulanmaz. İşte temsili boşluk dediğim şeyleri açıkladığını düşünüyorum büyük bir alıntı:
yazılım geliştirme için hangi paradigmanın en iyi desteği sağladığı konusunda uzun süre tartışılabilir, ancak sorun tanımından uygulama ve teslimata kadar tek bir paradigma içinde kaldığında en doğal, verimli ve etkili geliştirme paketini elde eder.
İşte FAD tarafından önerilen diyagramlar kümesi:
- Bir işlevi uygulamasında kullandığı işlevlerle sunan işlev bağımlılık diyagramları;
- tipler için aynı hizmeti sağlayan tip bağımlılık diyagramı; ve,
- sistemin modül mimarisinin görünümlerini sunan modül bağımlılık diyagramları.
Bir futbol (futbol) ligi ile ilgili veri üretimini otomatikleştiren bir sistem olan FAD tezinin 5.1 bölümünde bir vaka çalışması var. Gereksinimler% 100 işlevseldir, örn. Futbol maç sonuçları, lig tabloları, puanlama tabloları, katılım tabloları, oyuncuları takımlar arasında aktarma, yeni sonuçlardan sonra verileri güncelleme, vb. FAD, fonksiyonel olmayan gereksinimleri çözmek için nasıl çalıştığından bahsedilmez , "yeni işlevselliğe minimum maliyetle izin verilmesi gerektiğini" belirtmek dışında, neredeyse imkansız olan bir şey.
Ne yazık ki, FAD dışında, FP için önerilen modelleme dilleri (görsel) için modern referanslar görmüyorum. UML başka bir paradigma, bu yüzden unutmalıyız.