Re: Searching a motivating example for upcasts
"Chris Uppal" <chris.uppal@hotmail.REMOVE-THIS.co.uk> writes:
?Sorry, could not resist? to intentionally misinterpret
the meaning of the world ?model?.
output, if you like) is to produce a model -- for traffic analysis say. That,
Maybe that is where this idea comes from, given that the
earliest OO language possibly was ?Simula? (a language
for simulation).
But I don't, myself, think that the Simula world-view is really what OO is
Now I see that you already mentioned Simula.
all. If there's anything that could be said to model a printer, it'd be the
common interface to printing provided (at least in Windows) by the OS --
Well, one can say ?If a human had something he needed to be
printed 100 years ago, he went to a craftsman called a
"printer"; if a program needs to print something today it
"goes" to a specialist called the "printer driver"?.
specifically (in Windows) by GDI and its descendants. In Java one would look
to
java.awt.print for the equivalent, but interestingly (I would say "tellingly",
but this is AWT where good examples are not the unvarying rule) there is
nothing there which looks like a model of a printer. The principle abstraction
is a print /job/.
Ok, then ?If a human had something he needed to be printed
100 years ago, he established a printing contract with a
craftsman; if a Java program needs to print something today
it establishes a print job with java.awt.print.?
Further, I'd require that for my object to be seen as
legitimately a model (in context) it must be that it's
because it acts (in some way) "the same" as the thing
modelled.
A ?model of an entity? or ?a virtual entity? to me is
something that has some properties of the entity or/and some
of its behavior, but not all the properties (usually just
those considered ?relevant? and possible to model) and not
all of the behavior. This is shown on the cover of a book:
http://farm1.static.flickr.com/27/45274594_cef86aa062_o.jpg
.
[* The "M" in MVC is nothing but pure technical jargon -- a handy, but
near-vacuous, label for one part of the architecture.]
I knew this. That's why I wrote ?SCNR? before. To indicate
that I was aware of the fact that this was just a kind of pun.
Wandering a little further afield, I think that the critical properties of
objects are autonomy, isolation, and coherence (and one can maybe throw in
polymorphism too). So, even if an object /can/ be seen as a model, that's not
Polymorphism actually is not a property of a single object,
but of a message dispatch, because the crucial point is that
the target object (and not even its class!) in a dispatch
does not need to be determined at compile time. Polymorphism
means that a variable can be the intermediate receiver of a
message and the actual object will be determined as late as
at runtime from the contents of this variable. So in the
moment, the actual receiving object is fixed, the
polymorphism is gone. Therefore, it is not a property of
any single object.
When I asked Alan Kay for the meaning of ?OOP?, he kindly
replied:
?OOP to me means only messaging, local retention and
protection and hiding of state-process, and extreme
late-binding of all things.?
http://www.purl.org/stefan_ram/pub/doc_kay_oop_en
interface-as-contract (my preferred way of thinking about Java interfaces).
The contract would be the legal requirements for
the steering wheel, dashboard, gearbox, and pedals
of a car.
I don't think the car example captures that very well.
That's exactly why I wrote the OP, to find a
better example!
(Not unless -- as perhaps may be the case -- the major controls for
cars are fixed by legislation.)
I assumed so, but do not know for sure. It might depend
on the country.