Sfondo
Pensando a OOP sento che lega insieme dati e comportamenti, prendendo l'esempio del mondo reale abbiamo già un tipo di dati array che è una collezione di tipo omogeneo e in Java abbiamo creato una bella astrazione su di esso, quindi, abbiamo metodi come clone
che fa perfettamente il suo lavoro, cioè abbiamo dati e abbiamo associato un'operazione per rendere il client code
semplice e logica di clone incapsulato dietro una bella API .
Spero di essere corretto fino ad ora.
Domanda
Quindi, supponiamo di dover ordinare un array, sarebbe bene avere il metodo sort
esposto come l'API che fa l'ordinamento sugli elementi dell'array il cui ordinamento è basato sul tipo di elemento che sembra perfetto ma aspetto che non vedo tali metodi su Array ADT e qui arriva la confusione che abbiamo pagina piena di documentazione qui che elenca un numero di metodi statici . Se ricordo bene, è un modello molto odiato nella comunità TDD di avere metodi statici perché rende un test un inferno, anche noi ignoriamo la loro preoccupazione, quindi anche io vedo una violazione del concetto OOP qui, abbiamo già dati quindi perché non hanno tutti questi metodi nella matrice stessa?
Aggiorna
La presenza dell'esempio di Array qui non significa che io sia confuso riguardo l'Array in Java, la mia preoccupazione principale riguarda il metodo statico in generale. Normalmente mi trovo nella situazione in cui penso che sarebbe meglio avere un metodo statico, ma molte volte ho visto la comunità andare contro di esso quindi ci dovrebbe essere un solido ragionamento sul fatto che il mio design sia imperfetto o che il metodo statico sia la migliore alternativa in quella situazione.