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