Шаблоны проектирования в Smalltalk - PullRequest
4 голосов
/ 20 марта 2019

Часто говорят, что шаблоны проектирования в основном используются в статически типизированных языках, таких как C ++ и Java, что я также согласен. Но в этой статье Роберт Мартин написал

Как странно говорить. Smalltalk, динамичный язык, сыграл значительную роль.

Поскольку у меня нет опыта в Smalltalk, я хотел бы спросить, широко ли используются шаблоны, такие как Стратегия или Посетитель, в Smalltalk? Я не думаю, что они вам нужны на «динамическом языке»

Ответы [ 3 ]

7 голосов
/ 20 марта 2019

Шаблон посетителя (как и многие другие) широко используется в Smalltalk. Например, для анализа и компиляции методов Smalltalk используются посетители. Окрашивание и форматирование кода также являются типичными примерами. Есть много других случаев, и причина, о которой я упоминаю, заключается в том, что компиляция методов происходит динамически внутри среды разработки (например, компилятор может изменять себя во время работы и немедленно получать изменения).

6 голосов
/ 20 марта 2019

Исторически Кент Бек был одним из первых, кто применил шаблон проектирования к программированию с Уордом Каннингемом, и в основном это было применимо к Smalltalk.
Смотри https://en.wikipedia.org/wiki/Software_design_pattern

Он популяризировал некоторые из этих шаблонов в книге 1996 года «Образцы лучших практик Smalltalk».
Смотри https://en.m.wikipedia.org/wiki/Kent_Beck

Даже если работа банды четырех была опубликована в 1994 году до книги Кента Бека, на самом деле не стоит удивляться, что в Smalltalk много таких шаблонов.

Ирония заключается в том, что эти шаблоны проектирования очень помогли статически типизированным языкам после их применения.

4 голосов
/ 20 марта 2019

В статье, которую вы упоминаете, довольно хорошо объясняется, что такое шаблоны проектирования, и я бы добавил еще несколько деталей в контексте вашего вопроса.

Шаблоны проектирования обеспечивают хорошо понятные способы повышения качества программного обеспечения, в основном снижая сцепление и увеличивая сцепление . Эти два свойства присущи любому фрагменту программного обеспечения, независимо от того, написано ли оно на статически типизированном, динамически типизированном, основанном на сообщениях / объектно-ориентированном, функциональном или императивном языках.

Хотя шаблоны могут немного различаться в динамически и статически типизированных языках, они, тем не менее, предоставляют полезную концептуализацию того, как должен разрабатываться код.

На самом деле, многие (если не все) авторы оригинальной книги по шаблонам проектирования были очень хорошо разбирающимися в разговорах по мелочам и, вероятно, обнаружили эти шаблоны при работе с кодом Smalltalk. В оригинальной книге сотни упоминаний о Smalltalk, и многие из оригинальных шаблонов применяются в системах Smalltalk.

Если вы откроете какой-либо Smalltalk, посетитель будет одним из наиболее легко различимых из-за его особого посещения / принятия API, который используется для обхода многих древовидных структур, таких как деревья разбора в компиляторе или узлы в иерархии элементов пользовательского интерфейса.

...