Dunno just where interface concept arose. But someone else mentioned
Objective C, which pre-dates both Java and Windows95 by ten years.
I dunno either, but I will present a bit of personal history. I
find my part interesting, even if no one else does: I have no idea whether
anything I'm about to relate has any bearing on the question, or whether it's a
dead end of the red herring persuasion.
tl;dr version: the words
interface, implementation, and contract, as used in Java
and denoting the Java concepts, date to 1976 at the latest.
In the 1970's,
Burroughs Medium Systems gang had developed a modularity scheme for BPL, their
new programming language for systems software. The BPL folks, and management,
were dismayed that it did not have the desired property of allowing the modules
to remain separated — a change to any module propagated into nearly all,
if not all, the other modules, triggering a compilation cascade.
I took on
the task of understanding why, and proposing a cure. It was required that any
solution be a language-based one that could be enforced by the compiling system
— an unenforceable, informal mechanism, like the c-users' convention of .h
and .c files would not be acceptable.
With full awareness of prof Dijkstra's
lessons on separation of concerns, it became apparent after very little study
that the problem arose from merging the private stuff with the published stuff.
There was no distinction made between these two radically different ideas,
'stuff you can't see' and 'stuff you can mess with.' Without that distinction,
it was not possible to distinguish a change that affected downstream from those
that did not. Every change had to be propagated.
To make communication
possible, I settled on terminology: 'interface' for the 'stuff you can use',
'implementation' for 'stuff you can't use, or even know about', and 'contract'
for the relationship across an interface. The choice of terminology was
obvious. At 35 years remove, I can't say whether any prior CS usage had
made this terminology so obvious, or whether it was obvious just from everyday
meanings.
I soon lost touch with them: I don't think they ever fixed their
problem.
In 1978 or '79, there was a conference at UC San Diego over
(informal) standards for Pascal extensions. By then, I had moved on from
Burroughs to Tektronix Computer Research Labs. At the conference, I presented
work I had done on modularity extensions for Pascal, using the lessons I had
learned in Pasadena. There was some interest expressed, primarily by the folks
from Apple. The language features of my proposals eventually showed up with
modification in Apple's Pascal. (I always preferred uses over
import and provides over export. Still do.)
In
those years, modularity was the subject of concern by a lot of folks. I was
never academically minded — I published precious little, and was able to
read little more. I worked in largely proprietary environments, where we were
always too busy 'doing stuff' to take the time to write it up for
publication.
I therefore knew little of work others were doing, and couldn't
share much with them — the UCSD conference and later Pascal
standardisation work were about it. The ISO Extended Pascal features were, in
part, my contribution; but nobody seems to have picked it up from there.
It's nice to conjecture that I have contributed outside my immediate
environment, but I'm not competent to evaluate whether I ever made any
difference in the state of the art. I hope I did. In any case, the words
interface, implementation, and contract, as used in Java, date to, at the
latest, 1976. --- --Bill. NAL: question the answers, especially mine. [ Reply to This | Parent | # ]
|