[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Curl, multiple inheritance, and interfaces (was Re: cheerful static typing)

Dan Weinreb wrote:
> in Java, it's
>    impossible to ignore interfaces
> Well, I wouldn't describe Java with words that strong.  You could
> imagine an alternative design in which every class must implement some
> interface; that would make it impossible to ignore interfaces.  With
> Java, you can have classes that do inheritance, and that have abstract
> methods, without using Java interfaces.

You're right; interfaces are "impossible to ignore" in Java not because of
the language itself, but because of its libraries, which make heavy use of
interfaces.  Still, I think the mere act of putting the keyword 'interface'
into the Java language did a lot to disseminate good program design
practices and thinking.  It identifies interfaces as entities distinct from
classes, as opposed to relegating them to a kind of subordinate category of
classes - "classes without an implementation".

This class-bias affects the thinking of many of the users of such languages,
especially those who develop primarily or exclusively in a single language.
It commonly leads to code which over-emphasizes specific implementations and
under-emphasizes properly factored abstractions.  Abstractions then tend to
be designed around the opportunities for implementation inheritance, which
is definitely the tail wagging the dog.

Of course, a language can't fix or prevent bad program designs, but it can
help get programmers thinking in good (or bad!) directions.