Я создаю класс Polygon в Objective-C, должен ли расчет центроида быть функцией или методом? - PullRequest
1 голос
/ 19 сентября 2009

Я делаю это, чтобы узнать о создании классов и протестировать геометрические процедуры. По мере создания класса я добавлю другие связанные с полигонами функции, такие как получение ограничивающего прямоугольника, определение выпуклости, превращение полигона в треугольники и т. П.

Лучше ли помещать такого рода код в функции или методы класса?

Ответы [ 2 ]

1 голос
/ 19 сентября 2009

Все функции, которые вы упомянули, должны быть реализованы как методы экземпляра.
Например:
Операция, которая определяет ограничивающий прямоугольник, использует только данные экземпляра (вершины многоугольника), поэтому она должна быть реализована как метод экземпляра.

- (NSRect)calculateBoundingBox;

Я не совсем уверен в том, чтобы "превратить поли в треугольники", потому что вы можете освободить многоугольник после его преобразования. Так что этот класс не будет автономным. Вы можете реализовать «преобразование полигона в треугольник» в методе класса или в отдельном контроллере. Здесь вы можете узнать больше о методах экземпляра и класса: Цель обучения C: Учебник для начинающих (в разделе «Методы и обмен сообщениями»)

Некоторые сценарии, в которых я бы использовал методы класса, статические функции или #defines вместо методов экземпляра:

  • Функции для инициализации структур (например, NSMakeRect, ...)
  • Короткие фрагменты, которые я часто использую (как правило, некоторые математические ярлыки определяет)
  • Заводские методы для создания экземпляры
0 голосов
/ 19 сентября 2009

Если он действует главным образом на экземпляр класса, он должен быть методом экземпляра этого класса. Если его функциональность не зависит от какого-либо конкретного экземпляра класса, он должен быть методом класса. Я не могу придумать какое-либо особенно хорошее общее правило для функций, которые действуют на объекты - обычно такие вещи были бы методами класса.

...