The higher level approach would make Array classes look like true container classes (for a restricted set of types) and all operations on arrays collective, something like:
ArrayFloat a = new ArrayFloat(p, x, y) ; ArrayFloat b = new ArrayFloat(p, x, y) ; ArrayInt c = new ArrayInt(p, x, y) ; a = MATMUL(b, c) ;
Communication would be handled automatically inside array operations like MATMUL. Individual array elements would not be accessed in the Java program except, possibly, through getElement, putElement members.
This scheme can be implemented on top of an SPMD Java array library of the kind outlined in the previous section or by making the Java run as a coordination program controlling a parallel back end. It can be compared with [26, 16].
So far we have not attempted to implement (or specify in detail) such an approach for Java. The lack of user-defined operator-overloading may be particularly frustrating here.