Re[2]: Codepedia. Взгляд вглубь. (читать придется много :) )
От: anonymous Россия http://denis.ibaev.name/
Дата: 30.09.05 06:30
Оценка: +1 -1
Здравствуйте, FreshMeat, Вы писали:

FM>
  • Класс отрезка на плоскости (segment2).
    FM>Реализовывать его целиком, смысла нет, поэтому опишем реализацию одного из обязательных алгоритмов — определение точки пересечения двух отрезков (метод intersect).
    FM>Возможное решение:
    FM>Проводим прямые через вершины отрезков, находим точку их пересечения (*) и проверяем, принадлежит ли она обеим отрезкам.
    FM>Стоп. Прямые проводить нельзя — это уже другой класс, а мы договорились избегать зависимостей. Workaround — вставляем код определения пересечения прямых прямо в тело метода intersect и натыкаемся на большую засаду — дублирование кода — один и тот же кусок кода придется использовать для каждой новой сущности — прямой, луча, ломанной, треугольника... Аналогичная ситуация для других алгоритмов.
    FM>Звезда синтаксического оверхеда померкла и превратилась в тусклую точку.
    FM>Еще один момент — мы не сможем написать код пересечения отрезка и прямой, ведь они локализованы и ничего не знают друг о друге.
    FM>Прошу заметить — помимо очевидного дублирования, раздутие кода вступает в конфликт с изначальным положением "окинуть весь код сниппета одним взглядом".
    FM>И на самом-то деле, выбор у нас небольшой — создавать связи между классами и отказывать от идеи независимости или дублировать код.

    все-таки мне кажется, что сниппет не должен быть больше функции (и уж точно не классом, по крайней мере пока)... и тогда вопрос предельно упрощается: есть четыре точки, через которые проходят две прямые, пресекаются ли они?... итог: функция, на входе которой 8 переменных с координатами, на выходе — булево значение... и теперь любой программист может взять её и использовать в одном из собственных классов описывающих геометрию, т. о. дублирования кода не будет...
  •  
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.