Всецело зависит от того, что делает выражение вашей программы более четким и более согласованным с проблемой, которую вы пытаетесь решить. Так что в некоторой степени все вышеперечисленное должно быть хорошо в разных контекстах.
Однако, вообще говоря, я немного склонен в пользу Rect::contains(Point)
, а не Point::Is_inside(Rect)
. Это потому, что я думаю, что класс Point
, поскольку он будет использоваться всеми классами (например, «Круг», «Шестиугольник» и т. Д.), Должен быть очень базовым и содержать только минимальный интерфейс.
Math::contains(Rect, Point)
будет моим вторым выбором. Я бы использовал этот подход, если бы я хотел, чтобы мой класс Rectangle был очень примитивным и не добавлял к нему слишком много «удобных» функций.
Важно помнить, что не считайте дизайн ваших классов написанным на камне. Просто выбери дизайн, который выглядит лучше всего сейчас . Всякий раз, когда ваши потребности меняются, вы можете, и вы должны изменить это. Это то, что называется рефакторинг .