Słyszałem tylko, że termin „wzorzec projektowy” jest używany dla kodu obiektowego, a wzorce GoF obejmują tylko wzorce projektowe OOP, ale wzorce projektowe są eleganckimi rozwiązaniami dla często występujących problemów programistycznych, prawda? Nic tam nie mówi, że muszą być ograniczone do OOP, prawda?
Chciałbym zobaczyć kilka przykładów wzorców projektowych poza sferą programowania obiektowego. Czy masz jakieś? Czy takie w ogóle istnieją (żadna książka, podobnie jak książka GoF, musiała być koniecznie napisana, należy ją po prostu użyć; to wystarczy)?
Mogą być specyficzne dla niektórych języków programowania, ale preferowane są wzorce ogólne (na poziomie paradygmatu), inne niż paradygmaty zorientowane obiektowo.
design-patterns
Anto
źródło
źródło
Odpowiedzi:
Zobacz serię wzorców projektowych jądra systemu Linux. Artykuły są związane z językiem nieobiektywnym (C) i uważam, że są dobrze napisane:
źródło
W rzeczywistości jest to paradoks - jednym z najpopularniejszych wzorców bez OO jest ... „Klasa”.
Ponieważ OO zostało wynalezione w językach innych niż OO, programiści musieli to zasymulować (i robią to nawet teraz) - tak narodził się wzorzec. LISP i C są tego przykładem.
Ale weź moją radę: nie popełniaj powszechnego błędu - nie używaj wzorów tylko dlatego, że jest fajny , potrzebujesz poważnych powodów, aby uzasadnić użycie wzoru (przynajmniej OO).
Weźmy na przykład wzorzec poleceń - chociaż jest miły i oddziela osobę dzwoniącą od odbiornika, nie należy jej używać, chyba że faktycznie jest to potrzebne - ponieważ operacje powinny być wyrażane za pomocą czasowników - co oznacza metody. Używanie poleceń w miejscu, w którym skończyłbyś z grupą całkowicie zdecentralizowanych OO-lambdas -> to samo dotyczyłoby wielu strategii.
źródło
„Wzorzec projektowy” jest tak naprawdę eufemizmem dla „obejścia”. Wzory projektowe zostały wymyślone w celu obejścia braków i wad w językach OO . Weźmy na przykład wzorzec iteratora, który ostatecznie doprowadził do wprowadzenia kolekcji w Javie. Groovy pozbył się wielu innych wzorów, przekształcając je w funkcje językowe: Nie potrzebujesz już wzoru dekoratora, ponieważ możesz dodawać metody do istniejących klas w Groovy.
Oznacza to, że wszędzie można znaleźć wzory. W rzeczywistości każdą „najlepszą praktykę” można uznać za prostą formę wzorca projektowego.
źródło
LtU wspomina, że Jeremy Gibbons pisze książkę o wzorcach w programowaniu funkcjonalnym. Zajrzyj na bloga Wzory Gibbona w programie programowania funkcjonalnego, aby zapoznać się z kilkoma zwiastunami. Uwaga: zaleca czytanie swoich postów od najstarszego do najnowszego.
Jego praca „ Wzory projektowe jako programy generyczne dla wyższych typów danych” (pdf) funkcjonalnie modeluje Gang czterech wzorców: Composite, Iterator, Visitor i Builder. Opisuje wzorce programowania za pomocą rekurencyjnych równań w Programowaniu Origami (składa się i rozwija).
źródło
Istnieją wzorce projektowe SQL .
Istnieją również pewne funkcjonalne wzorce projektowe - patrz tutaj Scala.
źródło
Zamiast nazywać wzorce projektowe inne niż oo, chciałbym podać kilka przykładów książek, które mają wiele wzorców projektowych (w nich niektóre nadal będą specyficzne dla OO):
Mam nadzieję że to pomoże
źródło
W programowaniu funkcjonalnym (zwłaszcza Haskell) istnieje wiele wzorców i idiomów, które nie są dobrze odwzorowane na OOP. Typy fantomów są dobrze znanym przykładem, a wiele więcej można znaleźć na stronie wiki haskell na stronie Idioms .
źródło
Programowanie modułowe jest dość popularne w bibliotekach numerycznych i aplikacjach wymagających matematyki (oprogramowanie numeryczne jest bardzo trudne do modelowania za pomocą wzorców obiektowych, głównie dlatego, że jest bardzo niewiele do kapsułkowania).
źródło
Dobrym przykładem wzorców innych niż OOP jest mój absolutnie ulubiony katalog wzorców: Wzory organizacyjne Agile Software Development, James O. Coplien . Ta książka nie dotyczy wzorców oprogramowania, dotyczy ludzi, katalogu do tworzenia udanych zespołów. Każdy menedżer powinien przeczytać tę książkę!
źródło
Lubię myśleć o Strucutres danych, takich jak kolejki, połączone listy, drzewa, wykresy itp. Jako wzorce. Definiują określone wzorce do przechowywania danych i ich przetwarzania. Mogą wydawać się prymitywne w porównaniu z bardziej zaawansowanymi wzorami Gang of Four, ale mimo to są wzorami. To znaczy, co by się stało, gdyby ktoś zaimplementował stos jako FIFO zamiast LIFO i odwrotnie dla kolejki i nazwałby je inaczej?
źródło