it-swarm.asia

OOP Olmayan Tasarım Kalıpları?

Sadece nesne tasarımlı kod için kullanılan "tasarım deseni" terimini duydum ve GoF desenleri sadece OOP tasarım desenleri içerir, ancak tasarım desenleri yaygın olarak ortaya çıkan programlama sorunları için zarif çözümler, değil mi? Orada OOP ile sınırlı olmalarını söyleyen hiçbir şey yok, değil mi?

Tasarım modellerinin bazı örneklerini görmek istiyorum dış nesne yönelimli programlama alanı. Sende hiç var mı? Böyle bile var mı (GoF kitabı gibi hiçbir kitap mutlaka yazılmamış olmalı, sadece kullanılmalı, bu yeterli)?

Bazı programlama dillerine/dillerine özgü olabilirler, ancak nesneye yönelik olandan başka paradigmaların genel (paradigma düzeyi) modelleri tercih edilir.

70
Anto
25
sakisk

Aslında paradoks - en popüler OO olmayan desenlerden biri ... "Sınıf" dır.

OO OO olmayan dillerde icat edildiğinden, geliştiriciler bunu simüle etmek zorunda kaldılar (ve şimdi yapıyorlar) - böylece desen doğdu. LISP ve C bunun örnekleridir.

Ama benim tavsiyemi al: Yaygın hata yapma - sadece havalı olduğu için kalıp kullanmayın, kalıp kullanımını haklı çıkarmak için ciddi nedenlere ihtiyacınız var (en azından OO olanlar) ).

Örneğin Komut desenini alın - Nice olmasına rağmen ve arayanı alıcıdan ayırmasına rağmen, gerçekten ihtiyacınız olmadığı sürece kullanılmamalıdır - çünkü işlemler fiiller kullanılarak ifade edilmelidir - yani yöntemler. Ve komutları kullanarak tamamen merkezi olmayan OO-lambdas'ın bir demetiyle sonuçlanacaksınız -> aynı birçok Strateji için geçerli olacaktır.

12
Kamil Tomšík

LtU'dan bahseder o Jeremy Gibbons fonksiyonel programlamada kalıplar üzerine bir kitap yazıyor. Birkaç teaser için Bay Gibbon'un Fonksiyonel Programlama blogundaki Kalıplar bölümüne göz atın. Yazılarını en eskiden en yeniye doğru okumanızı tavsiye ettiğini unutmayın.

Makalesi Yüksek Dereceli Veri Türü-Genel Programlar Olarak Tasarım Desenleri (pdf) işlevsel olarak Dörtlü Çetenin modellerini modeller: Kompozit, Yineleyici, Ziyaretçi ve Oluşturucu. Origami Programlama (kıvrımlar ve açılımlar) 'de özyinelemeli denklemlerle programlama örüntülerini açıklar.

11
Corbin March

"Tasarım deseni" aslında "geçici çözüm" için bir örtmece. Tasarım desenleri OO diller 'de eksiklikler ve kusurlar üzerinde çalışmak için icat edildi. Onları dil özelliklerine dönüştürerek daha fazla desenden kurtuldunuz: Artık dekoratör desenine ihtiyacınız yok çünkü Groovy'deki mevcut sınıflara yöntemler ekleyebilirsiniz.

Bu, tasarım desenlerini her yerde bulabileceğiniz anlamına gelir. Aslında her "en iyi uygulama" bir tasarım modelinin basit bir biçimi olarak düşünülebilir.

11
Aaron Digulla

SQL tasarım desenleri vardır.

Bazı fonksiyonel tasarım desenleri de mevcuttur - scala için burada adresine bakın.

10
Oded

Oo olmayan tasarım desenlerini adlandırmak yerine, size birçok tasarım desenine sahip kitaplardan birkaç örnek vermek istiyorum (içlerinde bazı desenler hala OO spesifik) olacaktır:

Bu yardımcı olur umarım

8
KeesDijk

Fonksiyonel programlamada (özellikle Haskell), OOP ile çok iyi eşleşmeyen birçok desen ve deyim vardır. Fantom türleri iyi bilinen bir örnektir ve Deyimler'deki haskell wiki sayfasında çok daha fazlasını bulabilirsiniz.

2
yatima2975

OOP olmayan modellerin iyi bir örneği benim mutlak favori desen kataloğumdur: Çevik Yazılım Geliştirme Organizasyonel Kalıpları, James O. Coplien tarafından . Bu kitap yazılım kalıpları hakkında değil, başarılı ekipler oluşturmak için bir katalog, insanlar hakkında. Her yönetici bu kitabı okumalı!

1
JuanZe

Modüler programlama sayısal kütüphaneler ve matematik ağırlıklı uygulamalar için oldukça popülerdir (sayısal yazılım Nesneye Dayalı kalıpları kullanarak modellemek çok zordur, çünkü en çok kapsülleyebileceğiniz çok az olduğundan).

1
quant_dev

Kuyruklar, bağlantılı Listeler, Ağaçlar, grafikler vb. Veri Yapılarını kalıp olarak düşünmeyi seviyorum. Verileri depolamak ve işlemek için belirli kalıplar tanımlarlar. Gang of Four'un daha üst düzey kalıplarına kıyasla ilkel görünebilirler, ancak yine de kalıplardır. Demek istediğim, birisi bir yığını FIFO yerine bir sıra yerine LIFO) olarak uygular ve tersi olarak adlandırırsa ne olur?

0
DPD