Вход на сайт
как правильно программировать?
NEW 20.09.09 20:48
в ответ anly 20.09.09 19:53
Да она и не нужна если программа написана понятно.
-----
Она нужна всегда. Даже когда имеется идеально написанный код, то в этом коде
не описаны условия его корректной работы. Например, написан анализатор для
грамматики типа LL(1)... по коду требования к грамматике не определишь...
Теперь я больше поддерживаю другие программы фирмы.
-----
Тут два пути.
Путь первый. Первое - оцениваешь каждую новую задачу. Второе - говоришь шефу
- это займет столько времени. Несогласный шеф получает задачу обратно и ищет
другого исполнителя.
Второй, путь. Ищешь новую работу.
-----
Она нужна всегда. Даже когда имеется идеально написанный код, то в этом коде
не описаны условия его корректной работы. Например, написан анализатор для
грамматики типа LL(1)... по коду требования к грамматике не определишь...
Теперь я больше поддерживаю другие программы фирмы.
-----
Тут два пути.
Путь первый. Первое - оцениваешь каждую новую задачу. Второе - говоришь шефу
- это займет столько времени. Несогласный шеф получает задачу обратно и ищет
другого исполнителя.
Второй, путь. Ищешь новую работу.
NEW 20.09.09 20:57
в ответ pkrasnop 20.09.09 20:19
если нужна скорость, то иногда приходится немного жертвовать дизайном.
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
качественный по скорости
-----
Сначала профайлер, а там - видно будет. Возможно, что решение не в оптимизации
кода, а в новом железе...
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
качественный по скорости
-----
Сначала профайлер, а там - видно будет. Возможно, что решение не в оптимизации
кода, а в новом железе...
NEW 20.09.09 21:20
Вы не подумайте, я за дизайн :-). И рефакторинг у меня занимает достаточно много времени. Но всё таки, в частности, виртуальные функции работают медленнее обычных, и иногда приходится это как-то обходить, особенно если функция вызывается очень часто.
в ответ Murr 20.09.09 20:57
В ответ на:
если нужна скорость, то иногда приходится немного жертвовать дизайном.
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
если нужна скорость, то иногда приходится немного жертвовать дизайном.
-----
Когда-то Я думал так же. Как показала практика - Я был не прав.
Вы не подумайте, я за дизайн :-). И рефакторинг у меня занимает достаточно много времени. Но всё таки, в частности, виртуальные функции работают медленнее обычных, и иногда приходится это как-то обходить, особенно если функция вызывается очень часто.
NEW 20.09.09 21:44
в ответ Murr 20.09.09 21:36
не могли бы на примере. Что такое архитектура задачи?
Вот простой пример:
У меня есть класс отвечающий за преобразование систем координат (читай трансформацию объектов). Я ему передаю точки, он мне их трансформирует.
template <typename Point>
class Transform
{
virtual void transform(Point& out, const Point& in) const = 0;
}
Т.к. объекты могут быть большими вызов функции будет частым, и если преобразование будет простым, то стоимость вызова функции будет сопоставима со стоимостью её вычисления.
Что делать? :-)
Вот простой пример:
У меня есть класс отвечающий за преобразование систем координат (читай трансформацию объектов). Я ему передаю точки, он мне их трансформирует.
template <typename Point>
class Transform
{
virtual void transform(Point& out, const Point& in) const = 0;
}
Т.к. объекты могут быть большими вызов функции будет частым, и если преобразование будет простым, то стоимость вызова функции будет сопоставима со стоимостью её вычисления.
Что делать? :-)
NEW 20.09.09 21:51
в ответ pkrasnop 20.09.09 21:44
можно не наследовать, а передавать функцию как параметер... я в одном из своих DSL строю дерево вычислений, где сразу подставляются нужные функции, а не используется наследование и вызов виртуальных функций - производительность выросла заметно...
20.09.09 22:07
в ответ pkrasnop 20.09.09 21:44
У меня есть класс отвечающий за преобразование систем координат
...
Что делать? :-)
------
Как меня учили в школе - т.е. на втором курсе физмата ЛУ - если в имеющейся системе считать сложно, например, в связи с нелинейностями, то надо перевести задачу в систему, где вычисления будут простыми. Всю задачу. Вопрос об том, какой должна быть система координат и есть один из вопросов архитектуры.
...
Что делать? :-)
------
Как меня учили в школе - т.е. на втором курсе физмата ЛУ - если в имеющейся системе считать сложно, например, в связи с нелинейностями, то надо перевести задачу в систему, где вычисления будут простыми. Всю задачу. Вопрос об том, какой должна быть система координат и есть один из вопросов архитектуры.
NEW 20.09.09 22:09
Завтра посмотрю, но я пока склоняюсь применить статический полиморфизм
template <typename Derivate, typename Point>
class Transform
{
void transform(Point& out, const Point& in) const { return Derivate::transform(out, in); }
}
в ответ AlexOtt 20.09.09 22:03
В ответ на:
да - тут вообще не обязателен ООП. пример можно найти в разделе 2.2.4 в SICP, это реализуется и в C++ без особых проблем
да - тут вообще не обязателен ООП. пример можно найти в разделе 2.2.4 в SICP, это реализуется и в C++ без особых проблем
Завтра посмотрю, но я пока склоняюсь применить статический полиморфизм
template <typename Derivate, typename Point>
class Transform
{
void transform(Point& out, const Point& in) const { return Derivate::transform(out, in); }
}