Чтo и гoвoрить eжeмecячный oтчeт National Statistics пoкaзaл, чтo: — чиcлo зaявлeний нa ...
Описание You are CoonHat hero. You have only 5 seconds to find safe place in room full of explosive ...
Восточный ветер, принесший кусочек сурового Атлантического климата в Торонто, не обещал ничего ...
Восточный ветер, принесший кусочек сурового Атлантического климата в Торонто, не обещал ничего хорошего. Долгожданная тепло- весенне- летняя погода исчезла из метео сводок вообще на всю неделю. А солнечные дни за окном сменились холодным угрюмым дождем. Весну, так сказать, загнали в угол и запугали холодным циклоном.
Все, что начинало цвести, зеленеть, краснеть и превращаться из чучела в будущую фотомодель, застыло, боясь пошевельнуться или раскрыть хоть еще один листик. Птички робко подчирикивали и подкрякивали. В нашем квартирном доме "манагеры" тоже решили всех заморозить и выключили отопление. Очень кстати.
Но в один прекрасный день, небо все- таки прояснилось. По- видимому, весне надоело терпеть насмешки и угнетения со стороны вражеского восточного ветра. Она и позвала странствующий северный ветер на подмогу.
Северный ветер, как ни странно, пригнал теплую погоду и белоснежные корабли облаков. Величественно проплыв мимо наших окон, они воссоединялись в грозную флотилию,...
[content]
Хотя в подавляющем большинстве случаев это и не является необходимым в практике администратора, ...
Хотя в подавляющем большинстве случаев это и не является необходимым в практике администратора, однако в Data ONTAP имеется механизм принудительного “вывода из строя” и замены диска на конкретный диск из spare. Для принудительного назначения диска “вышедшим из строя” можно использовать команду > disk fail <disk.name> ОСТОРОЖНО! Эта команда относительно легко доступна, а вот “обратная” ей disk Read More......(read more)
В результате изучения функционального программирования в моей голове появились некоторые мысли, ...
В результате изучения функционального программирования в моей голове появились некоторые мысли, которыми я хочу с вами поделиться.
Паттерны проектирования и функциональное программирование? Как это вообще связано?
В умах многих разработчиков, привыкших к объектно-ориентированной парадигме, возникает впечатление, что проектирование программного обеспечения, как таковое, неразрывно связано с ООП и всё остальное — суть ересь. UML, большей частью нацеленный на ООП, используется как универсальный язык для проектирования — хотя он таким, конечно, не является. И мы видим, как мир объектно-ориентированного программирования постепенно погружается в пучину преступного переинженеринга (1).
В силу этого зачастую даже не ставится вопрос о
выборе парадигмы программирования. Тем не менее, этот вопрос является весьма существенным, и зачастую правильный ответ даёт большие преимущества (3). Это, вообще говоря, выходит за рамки того, что мы привыкли называть проектированием — это вопрос из области архитектуры.
Лирическое отступление: разница между архитектурой, проектированием и реализацией
Не так давно я наткнулся на весьма интересное исследование — (2). В нём рассматривается задача формализации понятий «архитектура», «проектирование» и «реализация», которые чаще всего употребляются неформально. И авторам удаётся вывести весьма интересный критерий: критерий Intension/Locality. Я не буду углубляться в философию и просто приведу краткое описание критерия (эта часть — фактически перевод) и мои выводы из него.
Свойство Intension (интенсионность) означает способность некой сущности описывать бесконечное множество предметов: например, понятие простого числа. Ему противоположно свойство экстенсионности — сущность описывает конечный набор предметов: например, понятие страны — члены НАТО.
Свойство локальности — сущность влияет только на отдельную часть системы. Соответственно, глобальность — сущность влияет на всю систему в целом.
Дак вот, учитывая эти два свойства, авторы указанного исследования составляют такую таблицу:
Пользуясь ей легко определить, что относится к уровню архитектуры, а что — к уровню проектирования. И вот мой вывод:
выбор парадигмы программирования, платформы и языка — это решение уровня архитектуры, т.к. этот выбор глобален (затрагивает все части системы) и интенсионен (парадигмы определяют способы решения бесконечного множества задач).
Тем не менее, решить столь глобальную задачу (найти критерии выбора подходящей парадигмы) мне пока не по силам. Поэтому я решил выбрать два уже существующих класса задач и показать, что для них стоит использовать не привычный для многих ОО подход, а функциональный, который в последнее время приобретает (заслуженно) всё большую популярность.
Классы задач я выбрал необычным методом — я взял два паттерна ОО проектирования и показал, что они, по сути — ограниченная реализация понятия из области функционального программирования — функции высшего порядка (higher-order function, далее: ФВП). Гипотеза заключалась в том, что паттерны —
это устоявшиеся решения определённых проблем, а раз возникают проблемы и их устоявшиеся решения, видимо есть некие слабости и недостатки, которые приходиться преодолевать. Для рассмотренных паттернов это действительно так.
Кстати говоря, подобный подход был использован в (5) и (6). В (6) вообще было указано на возможность замены большинства паттернов, но подробный анализ каждого не проводился. В (5) было более подробное рассмотрение Command и Strategy, но немного с другой стороны. Я решил сделать что-то более практичное, чем в (6), и с другими акцентами, чем в (5). Итак, приступим.
Читать дальше →