ООП Дизайн: куда поместить объектный метод сравнения? - PullRequest
1 голос
/ 02 ноября 2010

У меня есть несколько экземпляров объекта измерения из серии тестовых прогонов, которые хранятся в объекте коллекции тестов.У меня также есть некоторая логика, которая может сравнивать два экземпляра объекта результата теста и сообщать мне, достаточно ли они «близки».

Где должна располагаться эта логика?

  1. На объекте какметод?Как: instance.approximately_equal(other)
  2. О классе объекта как о классе / статическом методе?class.approximately_equal(a,b)
  3. На объекте коллекции как метод?collection.approximately_equal(a,b)

Каков правильный дизайн ОО для этого?

(Я спрашиваю, поскольку, хотя # 1 может показаться правильным решением, я бы никогда не спросил, если кто-тоЭкземпляр приблизительно равен другому экземпляру. Только если «какая-то группа объектов» равна друг другу. Это заставило меня задуматься ...)

Спасибо

Ответы [ 3 ]

1 голос
/ 02 ноября 2010

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

1 голос
/ 02 ноября 2010

Я бы использовал вариант 1 (метод экземпляра), поскольку он позволяет уточнить логику сравнения в производных классах (при необходимости).

0 голосов
/ 02 ноября 2010

Я обнаружил, что # 3 является наименее навязчивым и приводит к менее раздутому коду, потому что он заставляет вас делать эти методы максимально гибкими / повторно используемыми. Например, в C ++ вы могли бы просто использовать перегрузку операторов для ее обработки; если у вас есть служебный класс (или если вы планируете расширить собственный тип данных), чистый эффект тот же, только с другим представлением.

...