Лучший подход зависит от характера информации, которую ABC должна предоставить экземплярам Point, характера отношений между этими классами и «ожидаемого» будущего для них. Другими словами, существует множество качественных факторов.
Если вы действительно передаете экземпляр Point a ABC, не , а скорее, отрабатываете подходящую абстракцию для всего, что нужно Point от ABC, и инкапсулируете ее в интерфейс. В статических терминах это похоже на простое создание нового класса для инкапсуляции информации, но динамически совсем другое.
Причина, по которой вы не должны просто передавать экземпляр ABC, заключается в том, что он создает циклическую зависимость. Не вдаваясь в подробности, это, как правило, следует рассматривать как очень плохую вещь, которую следует избегать, если в этом нет крайней необходимости.
И, на более абстрактном уровне, это будет иметь больше смысла и позволит логические изменения позже, если вы определите причину этой кажущейся круговой зависимости и вычеркните ее - то есть создадите интерфейс для представления этого «источника данных для точек» роль, которую ABC должен выполнять. Эта роль отличается от роли «контейнер для очков», и это должно быть отражено в вашем дизайне.
Вы также можете передать параметры в метод draw () - опять же, это может быть хорошо или плохо в зависимости от кучи факторов. Это, конечно, не очень плохая вещь, если вы думаете о последствиях.