Re[3]: Codepedia. Взгляд вглубь. (читать придется много :) )
От: henson Россия http://www.njt-rails.com
Дата: 30.09.05 07:46
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Здравствуйте, FreshMeat, Вы писали:


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

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


    Абсолютно согласен! Никаких глобальных вещей сниппет (ну и слово...) использовать не должен. Это должен быть черный ящик с набором входов, выходов и желательно без побочных эффектов, желательно с проверкой внешних зависимостей: язык, необходимые внешние библиотеки. Поэтому помимо тегов необходим язык описания сниппетов. Сюда же относятся test модули, а там глядишь и софт появится для автоматизации проверки.
  •  
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.