Фракталы отлично справляются подобными задачами, особенно хорошо тем, что можно спокойно масштабировать, так же очень не плохо и различные другие объекты генерируются, будь то растительность, камни и т.д. Взять к примеру стариннейшую игру Elite, весь мир описан 6ю байтами, изменив которые в исполняемом файле получали совершенно иной мир. А статья хороша.
На мой взгляд, для описания интерфейса и существуют интерфейсы, т.е. абстрактные виртуальные классы, в которых деструктор не описывается, он там просто не нужен. А вот если уж в системе требуется полиморфность, временами без неё можно такого нагородить, что будет только хуже. Не вижу в этом приступления, ну да, будет работать чуть медленее и что в этом такого? Да и ранняя оптимизация редко приводит к хорошим результатам (путь то качество оптимизации или затраченное на неё время).
Я по максимуму стараюсь отказываться от полиморфизма в сторону изменения поведения классов с использованием стратегий поведения, но тут сразу появляется минус, в том, что с разными стратегиями не сохранить объекты в одном списке (разве что использовать небезопасные решения, что просто неприемлемо).
Если перейти именно к архитектуре, то хотелось бы задать вопрос, как реализовать работу плагинов без полиморфизма, как реализовать работу с различными объектами на карте (если конкретно по вакансии)?
Использовать case?
Высказывание относительно того, что использовать открытый виртуальный метод, это на мой взгляд тоже самое, что и зачем использовать руль в машине, машина нужна для того, чтобы ехать, а не для того, чтобы рулить.
Ну не знаю, что-то это попахивает расстройством психики:-) Из знакомых если кто и берет ноут как замену десктопу, то только в случае частых переездов, либо им достаточно мощности, в игры не играют, а на фильмы хватает. Но взять и из ноута сделать замену десктопу для игр, купить для него клавиатуру, блок питания, видяху и монитор, какой смысл, перевозить так же громоздко, как и обычный десктоп.
Тестил на своем Acer Liquid, надо очень громко и очень отчетливо говорить, если шум, то определяет с большим напрягом. Пробовал несколько раз, не распознал.
Была подобная оценка моей университетской олимпиадной работы по информатике, комиссия учла тот факт, что я учился на металлургическом факультете и пришла к выводу, что я не мог придумать алгоритмы, которые не смогли придумать ученики кафедры программирования. Да и с другой стороны сейчас наблюдаю, как учат программированию в вузах, становится страшно. Особенно когда студентам в вузе говорят, что «Единственное преимущество Linux, в его бесплатности» или ".NET самая оптимальная и быстрая платформа".
А еще интересно, сколько лет представителям комиссии и какое образование. Может как у нас в школе было, информатику преподавал учитель физики, было очень много веселых ляпов и они были постоянно.
Программисты в какой-то мере все равно знают английский, а вот если потом этот код пойдет дальше? Станет открытым? И вот тут какой-нить индус, китаец, американец и т.д. увидит этот код. Всякое может быть. Да и программировать с переключением раскладки довольно скучно.
Я бы просто посоветовал отказываться от такого стиля программирования, сам от него очень сильно страдал. Сейчас использую либо boost::shared_ptr если это реально надо, либо пишу свои классы с полноценной поддержкой копирования, либо использую свой аналог boost::shared_ptr, в этом случае код бы принял вид.
В Футураме все показано, рекламу будут транслировать в сны, вместо стационарных компов будет глазфон и аналоги, а банеры будут реально нападать на посетителей интернет, который в свою очередь станет виртуальной реальностью.
Я по максимуму стараюсь отказываться от полиморфизма в сторону изменения поведения классов с использованием стратегий поведения, но тут сразу появляется минус, в том, что с разными стратегиями не сохранить объекты в одном списке (разве что использовать небезопасные решения, что просто неприемлемо).
Если перейти именно к архитектуре, то хотелось бы задать вопрос, как реализовать работу плагинов без полиморфизма, как реализовать работу с различными объектами на карте (если конкретно по вакансии)?
Использовать case?
Высказывание относительно того, что использовать открытый виртуальный метод, это на мой взгляд тоже самое, что и зачем использовать руль в машине, машина нужна для того, чтобы ехать, а не для того, чтобы рулить.
А еще интересно, сколько лет представителям комиссии и какое образование. Может как у нас в школе было, информатику преподавал учитель физики, было очень много веселых ляпов и они были постоянно.
class manager
{
public:
list items;
~manager()
{
for(int idx=0; idx < items.count(); idx++)
delete items.get(idx);
}
};
boost::shared_ptr mgr(new manager());
boost::shared_ptr edit(new editbox());
boost::shared_ptr btn(new button());
mgr->items.add(edit);
mgr->items.add(button);
//…