Заблокирован
|
|
1 | |
Паттерны проектирования языкозависимы28.02.2017, 18:58. Показов 3066. Ответов 59
Есть мнение, что паттерны проектирования бесполезно изучать по заумным мейнстримным книжкам, как минимум, по двум причинам.
Во первых, разгребание кучи кода, специфичного для какого то убогонького язычка отвлекает от сути, и приводит к лишней трате времени. К примеру, эквивалент примера паттерна "Прокси" с википедии на Io в 2 строки Код
//////// implementation /////////////// Proxy := Object clone do( forward := method( target doMessage(call message) ) ) ////////// example //////////////////// Math := Object clone do( add := method(x, y, x + y) sub := method(x, y, x - y) mul := method(x, y, x * y) div := method(x, y, x / y) ) p := Proxy clone do( target := Math clone add := method(x, y, "go out") ) p do( writeln(add(4, 2)) #>>>> go out writeln(sub(4, 2)) #>>>> 2 writeln(mul(4, 2)) #>>>> 8 writeln(div(4, 2)) #>>>> 2 ) Вот паттерн Observer Код
Observer := Object clone do( onMessage := method(arg, arg println) // default reaction, just print ) Subject := List clone do( subscribe := getSlot("push") unsubscribe := getSlot("remove") notify := method(arg, self foreach(o, o onMessage(arg))) ) Вот тут есть кое-что об этом от Питера Норвига. http://norvig.com/design-patte... tterns.pdf Так что, следует 10 раз подумать, прежде чем лезть на амбразуру, а надо ли оно?
0
|
28.02.2017, 18:58 | |
Ответы с готовыми решениями:
59
Актуальны ли паттерны проектирования Паттерны (шаблоны) проектирования Где взять Паттерны проектирования? Паттерны проектирования |
12090 / 8369 / 1280
Регистрация: 21.01.2016
Сообщений: 31,558
|
|
01.03.2017, 12:32 | 2 |
asmquest, и в чём посыл данного поста? Что все паттерны, как и все ЯП - говно? А писать тогда на чём?
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
01.03.2017, 15:51 | 3 |
Не нашёл в википедии не только этого примера, но и вообще упоминания об ИО.
Зачем тогда Вы постите примеры на ИО? Потратив время на разгребание кучи кода, специфичного для ИО, вижу, что заявленный пример не имеет никакого отношения к шаблону прокси. Дальше читать не вижу смысла.
0
|
Заблокирован
|
|
01.03.2017, 17:24 [ТС] | 4 |
Usaga, нет, просто, вероятно, часть паттернов решают не задачи проектирования, а задачи преодоления слабостей языков.
Добавлено через 2 минуты Я имел в виду примеры паттерна на тех языках, которые там приведены, а не пример на Io. Добавлено через 3 минуты Usaga, Да и вообще, как то нелепо называть умным словом "паттерн" то что реализуется в 3-4 строки. Это уже, скорей, нативная поддержка. Добавлено через 15 минут Ну, ок, допустим так, но я не вижу обоснования этого странного утверждения
0
|
12090 / 8369 / 1280
Регистрация: 21.01.2016
Сообщений: 31,558
|
|
01.03.2017, 17:37 | 5 |
0
|
12090 / 8369 / 1280
Регистрация: 21.01.2016
Сообщений: 31,558
|
|
01.03.2017, 18:40 | 7 |
asmquest, когда (если) вас в очередной раз разблокируют, то хотелось бы узнать какой язык на ваш взгляд кажется хорошим и выразительным настолько, что ему не нужны паттрены (или большая их часть) и всё в нём адекватно.
0
|
Заблокирован
|
|
01.03.2017, 22:41 | 8 |
Usaga, да тот же Io. Отчасти лисп, джаваскрипт, даже тикль, например. Любой динамический язык, более менее релевантный смоллток-лайк модели или просто достаточно выразительный и динамичный.
Добавлено через 53 минуты Usaga, Вот, к примеру, зачем паттерн "одиночка" языку, в котором и так есть объект с глобальным доступом? Вы когда-нибудь видели чтобы такое использовали, и зачем?
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|||||||||||
01.03.2017, 22:51 | 9 | ||||||||||
Прокси что-то делает до/после/вместо вызова. В Вашем примере бессмысленное перенаправление вызовов.
Виртуальный прокси - управляет временем жизни реального объекта. Например, создаёт при первом обращении.
0
|
Заблокирован
|
|
01.03.2017, 23:00 | 10 |
а это что?
Код
add := method(x, y, "go out") Короче, все что Вы пишите -- это сорт одного и того же, суть проксирования в перехвате запросов, а Вы просто негодуете от того, что это подразумевает слабость Вашего языка, отсюда это все и идет.
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
01.03.2017, 23:13 | 11 |
Он имеет ввиду Io.
Создатель взял и смешал ООП из Smalltalk, метапрограммирование из Lisp, прототипы из Self. Основным недостатком языка является его неудачное название. Шансы получить релевантную информацию по запросу в гугле даже меньше, чем для языка RPG. Другим недостатком является низкая популярность. Информации мало. Инструментами типа ideone.com не поддерживается. Например, энтузиасты написали 10 лет тому назад компилятор для дот.нет... и уже почти 10 лет никаких обновлений. Никто из скачавших даже не вернулся рейтинг проставить. Я не могу оценить, насколько этот язык удобен, так как не писал на нём. Но динамическая типизация делает его неприменимым для крупных проектов. То есть, это скриптовый язык и в теории может конкурировать с чем-то типа Lua.
0
|
Заблокирован
|
|
01.03.2017, 23:27 | 12 |
Не динамическая типизация (eg примерно до 90-х годов любой сколько-нибудь крупный и сложный проект был реализован либо на лиспе, либо на смолтоке, а 2000-e это период переписывания этих вещей на другие языки), а тотальная деградация программистов и отрасли в целом
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
01.03.2017, 23:27 | 13 |
Зачем тогда нужна предложенная Вами имплементация?:
Код
//////// implementation /////////////// Proxy := Object clone do( forward := method( target doMessage(call message) ) ) Негодуете здесь только Вы. За что и получаете регулярные замечания и баны. А я просто констатировал факт, что предложенная Вами имплементация не имеет никакого отношения к шаблону Прокси. И, кстати, Ваша фраза про негодование - это один из примеров Вашего негодования. Этой фразой Вы пытаетесь перевести дискуссию из аналитической области в эмоциональную.
0
|
Заблокирован
|
|
01.03.2017, 23:42 | 14 |
Это класс для создания проксей. Любой подкласс или экземпляр этого класса будет перенаправляь запросы, в соответствии с его конфигурацией. Обычный объект не будет ничего перенаправлять. Понятна разница? Вы уж определитесть, Вы свой Add пишите или нет? Почему же на Io Вы запрещаете это делать?
Да, да, это очень заметно.
Кстати, а слабо сделать на своей решетке, скажем, проксирование на множество объектов, в зависимости от того, кто отсылает сообщение прокси, с возможностью добавлять и удалать проксируемые объекты в рантайме? Вот на конкретном примере и увидим, на что он реально способен, ваш "сильный язык" Добавлено через 6 минут тут Вы правы. Впрочем, может он и не хотел его популяризации. Гуглите по слову "iolanguage". Впрочем, информации все равно мало, надо своими мозгами, в основном, не каждому дано...
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
01.03.2017, 23:56 | 15 |
Есть класс Math с методами add, sub, mul, div. При создании прокси для этого класса нужно переопределить методы add, sub, mul, div. Зачем переопределять метод forward, если методы add, sub, mul, div и так переопределены?
0
|
Заблокирован
|
|
02.03.2017, 00:01 | 16 |
а с чего Вы взяли, что его надо переопределять?
Добавлено через 3 минуты Кстати говоря, в проксе все они не обязаны быть переопределены, только те, которые нужно. В этом и смысл, что прокси при перехвате либо сам обрабатывает, либо делегирует. Вы, по-ходу, даже сам шаблон не понимаете, а взялись рассуждать о нем.
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
02.03.2017, 00:02 | 17 |
Это Вы настаиваете на том, что его надо переопределить. Более того, Вы утверждали, что для реализации шаблона прокси достаточно переопределить метод forward. Ваша "имплементация на Ио в 2 строки" только это и делает.
0
|
Заблокирован
|
|
02.03.2017, 00:11 | 18 |
я про Add писал, начните уже читать, прежде чем отвечать
Да, для Io этого достаточно. Только не переопределить, а определить. Причем, это более общее и более гибкое решение, чем примеры с википедии. Что насчет моего предложения? Это под силу Вашему С#?
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
02.03.2017, 00:49 | 19 |
oopguru,
Вы сами себе противоречите. В одном сообщении два взаимоисключающих ответа. Бессмысленно продолжать дискуссию, пока Вы не определитесь. Нужно ли определять/переопределять forward для реализации шаблона Прокси? Достаточно ли определять/переопределять forward для реализации шаблона Прокси?
0
|
Заблокирован
|
|||||||||||
02.03.2017, 01:21 | 20 | ||||||||||
Не обязательно, но в данном случае, я создал отдельный класс Proxy, что является более мощным решением. Я мог бы просто переписать, допустим, питоновскую реализацию с википедии, где вместо отдельного класса, просто тупой хардкор:
в данном случае да. Разница в том, что Вы в своем неуклюжем языке вынуждены будете диспетчеризовать все вручную, тогда как в моем есть метаобъекты, которые могут изменить стандартное поведение любого объекта. Добавлено через 21 минуту В случае моей реализации, если сопостовлять с этим примером, достаточно будет доопредилить в подклассе только вот эти два метода:
0
|
02.03.2017, 01:21 | |
02.03.2017, 01:21 | |
Помогаю со студенческими работами здесь
20
Паттерны проектирования Паттерны проектирования для Си Паттерны проектирования (Фабрики) Паттерны(шаблоны проектирования) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |