Java is a
product of Sun Microsystems with its principal creator being James Gosling. If
one talks to Sun, that is if one reaches for the general corporate message
about Java, one is told that Java is much more than a programming language. It
is portrayed as a comprehensive environment for allowing software to be written
and to operate in a network environment. In fact, Java does encompass many of
these far-reaching characteristics. But, from our perspective, the most
interesting characteristics are those that would portray Java as a language; in
particular, a powerful object-oriented language. As with the C language, Java
adopts the algebraic formula constructs first popularized in FORTRAN. But, it
is in the formulation of its object-orientedness that Java offers some
significant enhancements to the metaphorical abstraction process that
object-oriented programming brings to the table.
Java was
originally written to be moved around various computer platforms of a wide-area
network and to run wherever it found temporary or permanent residence. To
enable this capability, a Java program had to be well insulated from the
environment in which it found itself; it had to operate within a highly
restricted sensori-motor environment. The greater the sensori-motor facilities
required by a program, the greater was the surrounding support environment. In
the extreme, the support environment could be so comprehensive that it was
likely to be found on only a small portion of the platforms in a wide-area
network. However, as Java was thrust forward to compete with the entrenched
operating systems of the day, with Windows or UNIX, it had to adopt many of the
heavy-weighted facilities of those systems. But, where Java could be viewed in
its more focused context as a programming language, it offered some truly
mutational characteristics. Principal among these is security.
A Java program
was envisioned as an instruction set for a virtual computer. This has proven a
valuable trait for other languages and other environments. Perhaps the most
innovative aspect of Java was the provision of a protected context for that
virtual computer; this context was termed a sandbox.
It is a very telling metaphor. Many of us remember a sandbox as a playtime
environment from our formative years. It was an environment in which we could
construct a variety of make-believe worlds, products of our own innovation
guided by our own perceptions of the world around us as evidenced by our
sensori-motor experiences. Indeed, as we will see just a bit later, sandboxes
tend to be relished during the cognitive development stage in which fantasy is
a significant aspect of the way that we think. If sandboxes were well
constructed, each child’s area was distinctly separate from others. If more
than one was to play in a sandbox at one time, it was truly necessary for us to
play nicely together. If we could not accomplish this, then the experience was
probably going to turn out badly. Within one sandbox, it was just too easy to
destroy the adjacent imaginary worlds. This is perhaps a bit more of a buildup
than is necessary to talk about Java, but it is central to the metaphorical
constructs that Java enables.
In its earliest
incarnations, Java enabled its sandbox through the characteristics of the
language itself. The language provided constructs that allowed a programmer to
exploit fully the extent of the sandbox, but the language would not allow a
program even to refer to the areas outside of the sandbox. As we have
previously noted, if a high-level language does not encompass certain
abstractions, it can be very difficult or even impossible to carry on a
discourse about these abstractions. For example, Java allowed a programmer to
establish a data domain in the form of objects. If the Java compiler then
followed the rules of Java, the program could not even refer to objects that
were not of its own creation. One could simply not express the thought to “read
data from an object outside the sandbox.”
Because of
market pressures, Java has evolved in the direction of a more traditional
language and computer-programming environment. The earlier purity of its
methodology was extremely well
|