Pergunta

Tenho algumas instâncias de objetos de medição de uma série de execuções de testes armazenadas em um objeto de coleção de testes.Também tenho alguma lógica que pode comparar duas instâncias de objeto de resultado de teste e me dizer se elas estão "próximas o suficiente".

Onde essa lógica deve ser colocada?

  1. No objeto como método?Como: instance.approximately_equal(other)
  2. Na classe do objeto como um método de classe/estático? class.approximately_equal(a,b)
  3. No objeto de coleção como método? collection.approximately_equal(a,b)

Qual é o design OO correto para isso?

(Eu pergunto, já que embora o número 1 pareça a solução correta, eu nunca estaria perguntando se alguma instância é aproximadamente igual a uma instância diferente.Somente se "algum grupo de objetos" for igual entre si.Isso me fez pensar...)

Obrigado

Foi útil?

Solução

Os livros de design orientados a objetos que li sugerem colocar a funcionalidade de classe cruzada em objetos do provedor de serviços. Isso dissociará os dois objetos e reduzirá a complexidade, mas pode ser exagerado se o seu projeto for pequeno.

Outras dicas

Eu usaria a opção 1 (método da instância), pois isso permite refinar a lógica de comparação nas classes derivadas (se necessário).

Descobri que o número 3 é o menos invasivo e leva a um código menos inchado, porque tende a forçá-lo a tornar esses métodos o mais flexíveis/reutilizáveis ​​possível.Por exemplo, em C++, você potencialmente usaria apenas a sobrecarga de operador para lidar com isso;se você tiver uma classe de utilitário (ou se planeja estender um tipo de dados nativo), o efeito líquido será o mesmo, apenas com uma apresentação diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top