In article <C8w1wD.p5@cs.bham.ac.uk> A.Sloman@cs.bham.ac.uk (Aaron Sloman) writes:
>As is well known to many readers of these news groups, different views
>as to the "essence" of object orientation abound, and they are often
>held with the strength of religious dogmas.
>
> [...]
>
>I have often noticed that one group of people (A) regard encapsulation
>(data-hiding) and data-abstraction as the main feature of object
>orientation, and others (B) have tended to regard the use of inheritance
>(and the associated polymorphism of methods) as the main feature.
>
> [...]
>
>A. For people most concerned with *safety* in software design, i.e.
>prevention of unwanted interactions between software developed by
> ...
>
>B. For people most concerned with the *expressive power* of a language,
>i.e. making it possible to design complex software with least effort,
> ...
I have been talking to a close friend, who works for a NASA software
contractor about this for some time now. He has talked to a lot of
people at JSC about the same issue. Here is what he told me his contacts
have decided - that there are two philosophies at work:
1) Object _Based_
2) Object _Oriented_
In order to understand the distinction, you first have to understand what
Object Based means. Object Based means that you _use_ various OO techniques
or even the OO "paradigm" (whatever that is :) in software development.
This would loosely correlate with A above. Your development is _not_
object oriented, because the "object" in question is code.
Object Oriented means that there is some real world object, concrete, with
observable behavior and attributes, that your code reflects. The fact that
you use certain OO techniques is a consequence of the fact that the concrete
object has behaviors that are reflected in the methods of your code "object."
Has properties that are reflected in the attributes of your code "object."
And is related to other objects in a manner that is reflected in the
inheritance hierarchy of your code "object." Now the line gets fuzzy when
your real world object is something like a user interface, or a database,
which in themselves are objects constructed of code, and are thus abstract.
(a database, however, might very well represent a collection of real objects)
The professor who teaches the OOP courses here (using C++) made the statement
that it should really be called "Class Oriented Programming." That to me
is a clear evidence that what he is talking about is not Object Oriented
Programming, but rather Object Based Programming.
Another example is a discussion I had with George Stephanopholous (ChE Dept
at MIT). He went into a discussion about the difficulties of making an
object out of the Newton Rhapson Method. What popped into my mind at the
time was: "Object?....Um...Er...Uh...I thought it was a _Method_." Again
clear evidence of Object Based Programming.
Not that Object Based Programming is somehow inferior to Object Oriented
Programming, but it is _not_ the same thing.
As far as why I am interested in OOP, (and I want to understand both
Object Oriented and Object Based), is that I believe that certain problems
that have been unsolvable by traditional methods can be solved.
James P. Henley Jr.
Department of Chemical Engineering
Auburn University
|