Es ist schwer, da so was allgemeines dazu zu sagen. Es hängt natürlich vom Anwendungsfall und der „Zielgruppe des entwickelten Codes“ ab. Für manche Sachen kann man ein „relativ mächtiges“ Interface definieren und das erfüllt dann seinen Zweck. Für andere Bereiche ist es sinnvoller, das ganze aufzudröseln.
Um zwei Extrembeispiele zu nennen, die mir gerade einfallen: Bei der Wahl einer Matrix-Library für Java reicht die Spannbreite da von JAMA, wo die Matrix-Klasse so aussieht: http://math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html , bis zum „Universal Java Matrix Package“ ( http://sourceforge.net/projects/ujmp/files/ujmp-complete/0.2.5/ ), das komplett engineered ist - wie man an einem kurzen Codeauszug schon erkennt:
public class DefaultDenseDoubleMatrix2D extends AbstractDenseDoubleMatrix2D implements
HasColumnMajorDoubleArray1D { ... }
public abstract class AbstractDenseDoubleMatrix2D extends AbstractDenseDoubleMatrix implements
DenseDoubleMatrix2D { ... }
public interface DenseDoubleMatrix2D extends DoubleMatrix2D, DenseDoubleMatrix, DenseMatrix2D { ... }
public interface DoubleMatrix2D extends DoubleMatrix, GenericMatrix2D<Double> { ... }
public interface GenericMatrix2D<A> extends GenericMatrix<A>, Matrix2D { ... }
public interface Matrix2D extends Matrix { ... }
public interface Matrix extends CoreObject, ExportMatrixInterface, CoordinateFunctions,
GettersAndSetters, BasicMatrixProperties, CanPerformCalculations, DistanceMeasures,
Comparable<Matrix>, HasAnnotation, Conversions { ... }
Natürlich wird der Bauingenieur, der mal kurz eine LU-Zerlegung braucht, zu ersterem greifen, und jemand der irgendein universelles Framework entwickeln will, eher zu letzterem.
Aber es ist eben so, dass die „untere Grenze“, dessen was überhaupt möglich ist, durch die Sprache selbst festgelegt ist. Object hat ‚equals‘, und wer irgendwas abstraktes machen will, wo er ein ‚Equality‘-Interface brauchen könnte, hat einfach Pech gehabt.
Das ganze ist aber erstmal nicht pauschal wertend gemeint. Es gibt Sprachen, die solche Abstraktionen unterstützen, die aber dafür vielleicht weniger zugänglich (oder, wenn man es so nennen will, „praxistauglich“) sind als Java. Trotzdem kann man ja mal drüber reden, welche Möglichkeiten die eine oder andere Abstraktion gebracht hätte 