| О политической ситуации 2 |
[Май. 17, 2012|01:32 pm] |
У нас второй день митингует «Общероссийская политическая партия „Воля“» (тоталитарная секта Пеуновой): http://volya-naroda.livejournal.com/ Активизировались, видимо, из-за бучи в Нерезиновой. Прикрываясь популистскими политическими лозунгами собирают подписи неизвестно для чего. Послушаешь их, побеседуешь — параноидальная шизофрения в чистом виде, да ещё и на фоне истерии и угроз. Самое главное — народ подходит и слушает этот бред (а некоторые и подписи ставят)!
Мне эти заезжие «народовольцы» не нравятся. Подошёл к полицейским, они сказали, что акция согласована, нужно немного потерпеть, сегодня у них последний день.
Что посоветуете?
P.S. Процитирую Крылова:
По улицам Слона водили, Как видно напоказ — Известно, что Слоны в диковинку у нас — Так за Слоном толпы зевак ходили. Отколе ни возьмись, навстречу Моська им. Увидевши Слона, ну на него метаться, И лаять, и визжать, и рваться, Ну, так и лезет в драку с ним. «Соседка, перестань срамиться», Ей шавка говорит: «тебе ль с Слоном возиться? Смотри, уж ты хрипишь, а он себе идёт Вперёд И лаю твоего совсем не примечает». — «Эх, эх!» ей Моська отвечает: «Вот то́-то мне и духу придает, Что я, совсем без драки, Могу попасть в большие забияки. Пускай же говорят собаки: „Ай, Моська! Знать она сильна Что лает на слона!“»
|
|
|
| Конкурс по функциональному программированию |
[Апр. 11, 2012|09:09 pm] |
В очередной раз принял участие в конкурсе по функциональному программированию, проводимом замечательным коллегой и товарищем _darkus_'ом, известным автором книг по языку Haskell (и не только), в рамках ФП(ФП) — Фонда поддержки функционального программирования (поддержать, кстати, может каждый — вот один из способов). (Также отмечу, что у ФП(ФП) есть официальный форум.)
Занял почётное второе место (с конца :D). И правильно, ведь решал на C++, а это не функциональный язык. Почему С++, а не, как в прошлый раз, Haskell? С одной стороны, всплыли проблемы с русской кодировкой, а в 2 часа ночи в воскресенье как-то влом было их решать, с другой — давно хотелось попробовать решить подобную задачу именно на C++. (Вообще говоря, место в конце я заработал потому, что опубликовал своё решение позднее остальных, а проверку общности не доделал до закрытия конкурса.) Но я не расстраиваюсь, ведь, не смотря на эту дерзость, я тоже получил приз :)
Так как ссылки на решения публикуются в сводной таблице, конкурс предоставляет неплохую возможность поучиться у коллег (на C++, например, udpn опубликовал замечательное, на мой взгляд, решение).
Призываю всех не пропускать возможность поучаствовать — даже если вы не работаете с функциональными языками (или забыли, как это делается) — попробуйте тот язык, который лучше всего знаете, тем более, если это ваш инстумент, которым вы зарабатываете деньги,— не обломается ли он об очередную конкурсную задачу? |
|
|
| Задача по ООП |
[Апр. 11, 2012|05:11 pm] |
Не так давно обсуждали со студентами следующую задачу.
Путь нам надо спроектировать класс, представляющий инвентарь игрока в некоторой компьютерной игре. Поднимая предмет, игрок может положить его в инвентарь при условии, что в инвентаре достаточно свободного места. Проверка свободного места в инвентаре — затратная процедура, так как там решается, к примеру, задача об упаковке.
Есть принцип разделения команд и запросов (CQRS — Command-Query Responsibility Segregation), согласно которому все методы класса разделяются на два вида — команды и запросы. Команды модифицируют объекты, а запросы возвращают информацию о них. При этом запросы не должны обладать абстрактным побочным эффектом, то есть не должны изменять видимое клиенту состояние объектов.
Задача: как правильно спроектировать интерфейс добавления предмета для класса инвентаря?
Существующее решение заключается в следующем — реализован метод, который принимает в качестве аргумента предмет и пытается поместить его в инвентарь. Если это возможно, то предмет кладётся в инвентарь, при этом метод возвращает true; иначе c инвентарём ничего не происходит, метод возвращает false. Данное решение нарушает вышеописанный принцип CQRS, так как в одном методе совмещены и команда (помещает предмет, тем самым модифицируя состояние инвентаря), и запрос (возвращает true/false).
Но если разделить этот метод на два, один из которых будет предикатом, возвращающим true, если предмет можно положить, и false в ином случае, а другой метод будет класть предмет в инвентарь, ничего не возвращая, то задача об упаковке будет решаться дважды, что есть не очень хорошо.
Как же быть? |
|
|