Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=8340373&src=arc&showlite=l
Дата изменения: Unknown
Дата индексирования: Tue Feb 26 22:11:58 2013
Кодировка: Windows-1251
python vs шаблоны проектирования - Public forum of MSU united student networks
Technical >> Development (Archive)

Страницы: 0 | (10) | 20 | 40 | 60 | 80 | показать все | след. страница
Leo : Re: [python] Ищу модуль-распаковщик.  [re:ayvango]   10.02.2009 10:43    | Reply | Edit |
7
Quote:

Шаблоны проектирования связаны с объектно-ориентированным проектированием и существуют в его рамках, питон ООП поддерживает. Почему же нельзя реализовать библиотеки для реализации? Неужели я буду первым таким любителем ООП.



Помимо ООП, питон является еще и более-менее полноценным функциональным языком. Значительная часть так называемых "шаблонов проектирования" - это борьба с тем, что C++/Java не являются полноценными функицональными языками. "Шаблоны проектировния" не являются свойством/следствием/важной методикой ООП в более высоком смысле (см. Smalltalk, CLOS). "Шаблоны проектировния" - это тяжелое наследие Java в большей степени.

Не надо их тащить везде. Не надо их тащить в питон. Simple is better than complex. Beautiful is better than ugly.

nelapsi   [re:FMX]   10.02.2009 10:46    | Reply | Edit |
-1
а в баше есть буст?

Yorik   [re:Leo]   10.02.2009 10:49    | Reply | Edit |
-2
В ответ на:

"Шаблоны проектировния" - это тяжелое наследие Java в большей степени.


:shocked:
В ответ на:

the book Design Patterns: Elements of Reusable Object-Oriented Software was published in 1994


В ответ на:

Java is a programming language released in 1995


где-то нестыковочка

Leo   [re:Yorik]   10.02.2009 10:56    | Reply | Edit |
5
Я говорю не об истории (да, Design patterns - концепция 1977 года, понимаю).
Я говорю о практике, а именно - "Users of dynamic programming languages have discussed many design patterns as workarounds for the limitations of languages such as C++ and Java. ... Peter Norvig, in `Design Patterns in Dynamic Programming', discusses the triviality of implementing various patterns in dynamic languages. Norvig and others have described language features that encapsulate or replace various patterns that a C++ user must implement for themselves."

ayvango   [re:FMX]   10.02.2009 11:22    | Reply | Edit |
-1
ну так слово за слово. Полез в документацию, обнаружил что питон больше чем просто замена баша и мне стало любопытно.

ayvango   [re:Leo]   10.02.2009 11:28    | Reply | Edit |
-4
Quote:

питон является еще и более-менее полноценным функциональным языком.



Не думал, что это настолько важно. Мне казалось что функциональные языки сродни брейнфаку. То бишь большой проект на функциональном языке не сделаешь - неудобно делать декомпозицию без инкапсуляции.
Правильно ли я понимаю, что единственный признак, по которому питон - функциональный язык - это наличие лямбда функций?

ayvango   [re:Leo]   10.02.2009 11:33    | Reply | Edit |
-5
то бишь ты предлагаешь заменить одну концепцию проектирования на другую, более натуральную. Как выглядит концепции питона на UML? Можешь дать только ключевые слова для поиска.

Leo   [re:ayvango]   10.02.2009 11:41    | Reply | Edit |
5
Неправильно. Примитивное определение какое-то такое: функциональный язык - это язык, в котором фукнции являются first-class objects, т.е. настолько же полнопрвными объектами, как и, скажем, числа, строки и т.п. Кстати, полноценных лямбда-функций в питоне как раз нет.

Чтобы проникнуться питоном, рекомендуется для прочтения, на вскидку:
http://python.net/~goodger/projects/pycon/2007/idiomatic/han...
http://www.dabeaz.com/generators/

__ka   [re:ayvango]   10.02.2009 11:52    | Reply | Edit |
6
Я вот все пытаюсь разгадать этот паззл, --- что можно собрать из "модуля для автоматической распаковки архивов любой степени вложенности" и шаблонов "фабрика", "стратегии"и прочих, --- да не выходит :) Поведай уже общественности, какова разгадка :)


DarkGray   [re:Leo]   10.02.2009 13:31    | Reply | Edit |
0
Quote:

так называемые "шаблоны проектирования" - от части (и значительной части) следствие убогости C++/Java.




ты путаешь шаблоны проектирования с реализацией шаблонов проектирования.

шаблоны проектирования - есть всегда и везде (хоть в java, хоть в python-е, хоть в bash-е), а вот реализация шаблонов проектирования уже от языка к языку плавает: где-то она более громоздкая как в java, где-то менее.

DarkGray   [re:ayvango]   10.02.2009 13:35    | Reply | Edit |
5
Quote:

Шаблоны проектирования связаны с объектно-ориентированным проектированием




шаблоны проектирования не связаны с ООП.

но вот реализация шаблонов проектирования с ООП связана - т.к. с помощью ООП шаблоны проектирования проще реализуются в лоб.

ps
например, код, который отвечает в ОС за запуск нужной программы по типу файла - и есть типичная фабрика.
причем, что в win, что в *nix - ООП при этом и не пахнет.

DarkGray   [re:Leo]   10.02.2009 13:38    | Reply | Edit |
1
Quote:

Значительная часть так называемых "шаблонов проектирования" - это борьба с тем, что C++/Java не являются полноценными функицональными языками




Какие именно?

Mike   [re:DarkGray]   10.02.2009 13:52    | Reply | Edit |
0
Quote:

шаблоны проектирования - есть всегда и везде (хоть в java, хоть в python-е, хоть в bash-е), а вот реализация шаблонов проектирования уже от языка к языку плавает: где-то она более громоздкая как в java, где-то менее



Называть реализацию шаблона на уровне языка программирования шаблоном или нет? Вот в чем вопрос. Грубо говоря, если для реализации стратегии в C# вместо интерфейса использовать делегат, можно ли считать это стратегией или уже нет? А можно ли считать визитором поддержку multimethods на уровне языка программирования?

DarkGray   [re:Leo]   10.02.2009 13:53    | Reply | Edit |
2
Quote:

Не надо их тащить везде. Не надо их тащить в питон.




есть понятие "шаблон проектирование", а есть также "каноническая реализация шаблона проектирования в ООП-языке".

ты путаешь первое со вторым.

возьмем ту же самую фабрику: задача фабрики задекларировать какого вида(с поддержкой каких интерфейсов) объекты будут создаваться, но при этом скрыть что именно будет создаваться.

канонический ООП вид этого паттерна довольно громоздкий:
интерфейсы-декларации вида объекта, класс - абстрактная фабрика, классы - конкретные фабрики, конкретные классы - реализующие интерфейс.

но также есть много и не канонических реализаций:
например, первая строчка в следующем коде - это тоже фабрика:
code:
var comparer = sortKind == SortKind.ByName ? item => item.Name : item => item.FullName; return items.SortByKey(comparer);

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

из-за того, что python более гибкий язык, чем Java - понятно, что в python-е скорее будут использоваться вот такие "локальные" реализации шаблонов проектирования, но при этом сами шаблоны проектирования - никуда не денутся.

DarkGray   [re:Mike]   10.02.2009 13:57    | Reply | Edit |
0
Quote:

Грубо говоря, если для реализации стратегии в C# вместо интерфейса использовать делегат, можно ли считать это стратегией или уже нет?





конечно, можно. это и будет стратегия.

Quote:


А можно ли считать визитором поддержку multimethods на уровне языка программирования?




тоже, да.

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

DarkGray   [re:Leo]   10.02.2009 14:04    | Reply | Edit |
0
Quote:

говорю о практике, а именно - "Users of dynamic programming languages have discussed many design patterns as workarounds for the limitations of languages such as C++ and Java. ... Peter Norvig, in `Design Patterns in Dynamic Programming', discusses the triviality of implementing various patterns in dynamic languages. Norvig and others have described language features that encapsulate or replace various patterns that a C++ user must implement for themselves."




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

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

Mike   [re:DarkGray]   10.02.2009 14:05    | Reply | Edit |
0
Quote:

конечно, можно. это и будет стратегия.



Тут я согласен.

Quote:

тоже, да.



А тут не согласен. :) Одна из задач визитора как шаблона проектирования - определение конткретных типов. При наличии multimethods эта задача решается автоматически. Еще одна из задач визитора - упрощение добавления новых операций над набором операндов. При наличии multimethods эта задача решается, опять же, автоматически: мы просто пишем операцию. Таким образом визитор как шаблон проектирования полностью исчезает.

Я согласен, что часть шаблонов все равно остается. Но ответ на вопрос, остаются ли они все, для меня до сих пор неочевиден.

ayvango   [re:Leo]   10.02.2009 14:08    | Reply | Edit |
0
Quote:

, в котором фукнции являются first-class objects, т.е. настолько же полнопрвными объектами



функторы в сях приплюснутых уже давно придумали. Он стал функциональным от этого?

Mike   [re:ayvango]   10.02.2009 14:13    | Reply | Edit |
0
Quote:

Он стал функциональным от этого?


Да, Си++ можно считать статически типизированным функциональным языком. То есть, правильнее сказать, что там можно программировать в таком стиле.

То, что там это выглядит некрасиво и ужасно, этого факта не отменяет.

DarkGray   [re:ayvango]   10.02.2009 14:13    | Reply | Edit |
1
Quote:

функторы в сях приплюснутых уже давно придумали. Он стал функциональным от этого?




нет, потому что из-за отсутствия сборщика мусора - активное использование функционального стиля становится небезопасным.

т.е. есть конфликт между требованиями C++ и требованиями функционального стиля:
С++ требует, чтобы четко было понятно кто именно отвечает за уничтожение данных(освобождение памяти),
ФЯ стиль, наоборот, декларирует другое - не парьтесь с тем, кто именно и как это будет использовать. просто верните/передайте тот кусочек кода/знаний, который у вас есть.

Top | след. страница