ТРИЗ: устранение программных противоречий
От: Critical Error ICQ: 123736611
Дата: 04.02.09 06:53
Оценка:
Хочу вернуться к тематике применения ТРИЗ в разработке программного обеспечения. Возникла мысль: а не сделать ли таблицу решения программных противоречий, возникающих при разработке ПО? Тема эта актуальна потому как такой таблицы пока нет в природе, а полезность ее для меня является очевидной, ведь так много разработчиков (особенно начинающих), которые просто по неопытности не знают как бороться с некоторыми проблемами и пишут код довольно низкого качества в архитектурном плане при этом удивляются, что это у них программы так медленно работают и начинают заниматься «оптимизацией» совсем не там где это надо. Таблица эта также будет полезна и опытным разработчиком так как она может натолкнуть на оригинальные технические решения. Кроме того такая таблица очень проста в использовании в отличие от тяжеловесных «CookBook-ов» и «Библий программиста».

В общем я начал составление таблицы, но моего опыта сходу не хватает чтобы покрыть все области программирования. Поэтому будет полезная абсолютно любая критика, идея или готовый прием. Вот то, что у меня получилось…

Приемы:

  1. Дробление.
  2. Объединение.
  3. Map-Reduce.
  4. Вынесение. Вынесение части объекта.
  5. Инкапсуляция. Внесение объекта внутрь другого объекта.
  6. Оптимизация части.
  7. Универсальность.
    a. Использовать стандартные библиотеки.
    b. Использовать одни и те же алгоритмы для разных данных.
    c. Использовать единые интерфейсы.
  8. Предобработка.
    a. В некоторых алгоритмах необходимо преобразовать данные, что влечет за собой снижение скорости и иногда создание дополнительного буфера. Можно исключить преобразование, обработав данные заранее.
    b. Разбить поток байт на токены с помощью конечного автомата (или регулярных выражений).
  9. Хеширование.
  10. Подмена.
    a. Можно подменить большие объекты заранее взвешенными весами, чтобы в дальнейшем обрабатывать не объекты, а их веса.
  11. Обработка на месте.
  12. Непрерывность.
    a. Сортировка при вставке.
    b. Балансировка дерева при вставке.
  13. Периодичность.
  14. Еждевенчество.
    a. Использование данных, сгенерированных в ходе работы другого алгоритма.
    b. Посчитать и сохранить веса объектов в ходе обхода или сортировки.
  15. Ленивость.
    a. Сортировка при необходимости.

Параметры, вступающие в противоречие:

Память, Скорость, Сложность, Изменчивость, Неизменчивость, Транзакционность, Надежность, Масштабируемость

Примеры решений:

Понизить расход памяти: обработка данных на месте.
Увеличить скорость: предобработка, подмена, хеширование, кэширование.
Понижаем расход памяти – уменьшается скорость: предобработка, дробление данных.
Повышаем скорость – увеличивается расход памяти: предобработка, подмена, дробление данных.
Обратить изменчивость системы: Visitor.
Разорвать связность одного объекта с другим: Inversion Of Control.
Транзакционность и устойчивость к ошибкам: Copy And Swap.
Повысить масштабируемость можно путем разрыва зависимостей между подсистемами и одновременного дробления данных.
Понизить cложность: универсальностью.
ТРИЗ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.