[comp.object] What is OOP?

jeff@aiai.ed.ac.uk (Jeff Dalton) (10/11/89)

I suspect that one reason for all the confusion and for all the
dogmatic definitions of "object-oriented" is some people will
claim almost anything is object-oriented.  In a sense, they're
right, because you can "think objects" in almost any language.
But once someone says Ada is object-oriented because it has
overloading, just for example, someone else will come up with
a definition that rules out overloading as having anything to
to with OOP.

merlyn@iwarp.intel.com (Randal Schwartz) (10/17/89)

In article <1208@skye.ed.ac.uk>, jeff@aiai (Jeff Dalton) writes:
| I suspect that one reason for all the confusion and for all the
| dogmatic definitions of "object-oriented" is some people will
| claim almost anything is object-oriented.  In a sense, they're
| right, because you can "think objects" in almost any language.
| But once someone says Ada is object-oriented because it has
| overloading, just for example, someone else will come up with
| a definition that rules out overloading as having anything to
| to with OOP.

Is this a comment about people's religious views of what it
means to be "object-oriented", or about Ada in particular? :-)

If the second, I'll throw in...

"Ada is PL/1 trying to be Smalltalk"

(no flames back please... either like it, or don't! :-)

Just another SmallTalker, stuck in this UNIX-compatible world...
-- 
/== Randal L. Schwartz, Stonehenge Consulting Services (503)777-0095 ====\
| on contract to Intel's iWarp project, Hillsboro, Oregon, USA, Sol III  |
| merlyn@iwarp.intel.com ...!uunet!iwarp.intel.com!merlyn	         |
\== Cute Quote: "Welcome to Oregon... Home of the California Raisins!" ==/

sakkinen@tukki.jyu.fi (Markku Sakkinen) (10/17/89)

In article <5065@omepd.UUCP> merlyn@iwarp.intel.com (Randal Schwartz) writes:
>[...]
>"Ada is PL/1 trying to be Smalltalk"
>
>(no flames back please... either like it, or don't! :-)

No flame, just some education:
Ada's basic design and philosophy is clearly different from the
"featurism" of PL/1 (while even PL/1 was in many ways an admirable
effort for its time).
Ada tries least of all to be Smalltalk: it is just as unfit for
very dynamic "exploratory programming" as Smalltalk is unfit for
programming embedded real-time systems for space flight.

A little aside: do we object-orienters tend to be some kind
of Stalinists, always looking out for "class enemies" like Ada
and COBOL to liquidate? Have our own languages and systems not
enough merit, so we must scorn others? (I think Ed Berard wrote
about this in his recent report on OOPSLA'89.)

>Just another SmallTalker, stuck in this UNIX-compatible world...
>[...]

Dispair not, you can already have Smalltalk on many of those
UNIX-compatibles.

Markku Sakkinen
Department of Computer Science
University of Jyvaskyla (a's with umlauts)
Seminaarinkatu 15
SF-40100 Jyvaskyla (umlauts again)
Finland

kannan@babcock.cerc.wvu.wvnet.edu (R. Kannan) (10/18/89)

This is a learners understanding of Objects in general:

	Well we really have to look back.

ASSEMBLY LANGUAGE:( I have intenionally left out all means of comm. and
	related developements that occured before computers)

	Motivated to avoid coding in bit streams. In the beginning it
must have craeted same commotion as does Objects now.

	Then people mastered it and wanted more power.

Assembler does the job of converting Mnemonics to the bit streams that the
machine can deal with.

Languages: Higher Level

	Programming Fortrans or Basic is more fun and productive than 
menmonics. System guys, bear with me, please. Rather ignore me. Dont get worked
up, BTW, what are you doing reading Object highest order in ABSTRACTION spectrum.

For example:
Organizing a Relational DBMS using Fortran would be something, I would never
dream off.

DATA STRUCTUTERS:
	
	PL/I and its class. Specials like APL. But the main point all of these
have been a step toward more complex concepts, but less work.

	For example

	X = Y.

	The programmer has to accept the underlying concepts (types, precedence
	lvalue, rvalue, constraints all the goody goodies) and 
	consequently not worry about MOVELONG instruction.

The compiler and linker do the needful, to go bit streams.

Oh yes, I can deal with RDBM with these tools. PL/I(compilers, etc) is a tool to 
do what I want more efficiently, understandably, easily with less pain and agony.

I still have to deal with the integrity of the data structures, what
can be done to them and what cannot be done to them etc.

	What is the next step. Naturally more complex, OBJECTS.

DATA TYPES : Ada and some other languages that set the tone.
Provide some integrity. Ada packaging does limit what the user can do
to a certain type, but IMHO, Ada is not OO. Ada aides OOP more than
many other languages.

Now I can deal with a type window and deal with x,y coordinate. Still
we need to deal with x,y and underlying semantics of the window.

OBJECTS:
	
	Conceptually more associations (than an integer variable in
Fortran.) And more levels of association.


To elaborate, integer variable: 
	ASSOCIATION

	DIRECT  ->	a value, 
	IMPLICIT ->	a type 
	IMPLICIT -> 	an address
	IMPLICIT -> 	scope of the variable
	EXPLICIT -> 	symbol.

An object:
	EXPLICIT -> 	symbol.
	EXPLICIT -> 	A collection of properties, slots, value
holders. And each slot may have any number of values and the type are
associated with each value.
	EXPLICIT -> Methods.
	EXPLICIT -> Relationship with other objects.

	Implicit -> there are mnany.
	
	

	Objects: behavior, class, named properties etc. Really an
integer is an object which has one nameless property, which is its
current value, belongs to the class integer. Behaves as dictated by
the overloaded math operators in a programming language.
Implementation point of view is a data structure with function pointers and
indirections to other Objects.

	Objects have an internal defintions of what they depict in the 
real world(See we have started talking about internal and external,
there has always been one, but here it is conceptual, not like the
internal byte ordering or representation ). A set of activities go
with the objects. And a system maintains or enforces the integrity
among the objects. 

Really handling windows becomes easy. I have one prototype how most
windows should behave, what each should old etc. I just create more as
and when I need. Underlying mechanism deals with the complexity. Ever
recall asking for n bytes (4 or 2) for an integer. Here we are talking
more than bytes. And the system remembers and manages the complexity
for us. We worry about higher level details. We get more work done.

Thus Objects are just a point in Human evoultionary process. I have
started on what could be more useful than Objects. But I dont have the
vision that the guys who thought of Objects had. I am still in the
same plane.


This is simple first cut at what I understand about why? what? of an
object without much of the technical details.

fargo@pawl.rpi.edu (Irwin M. Fargo) (02/12/90)

As someone who has been using Smalltalk/V 286 and has gotten an extremely
good grasp of OOP, I'd be interested in hearing what other OOP people
think OOP really is.

My mentor when learning Smalltalk said that there are a few things that
make a language object oriented.  He said they were:

encapsulated objects
message selectors and methods
classes
a class hierarchy

Do you think it makes sense to try and quantify OOP in this manner?  If so,
what ideas do you think make a language an OOPL?

I really would appreciate responses to this as I'm looking into some OOPL
design and would like some pointers.
   Thanks.

-- 
Thank you and happy hunting!             Actually: Ethan M. Young
  ____ [> SB <]    "Travel IS life"      Internet: fargo@pawl.rpi.edu
 /__   -=>??<=-       - Irwin M. Fargo   Bitnet (??): usergac0@rpitsmts.bitnet
/   ARGO : 3000 years of regression from the year 4990

zweig@brutus.cs.uiuc.edu (Johnny Zweig) (02/13/90)

I think it is important to distinguish Object-Oriented Programming in the
definitive sense from what O-O programmers do when they get to work every
day.  OOP means organizing software in a natural way that consists of objects
performing operations on one-another (as opposed to functions that operate
on more loosely-structured data).  This means that classes exist -- but does
not mean (IMHO) that you need class-hierarchies or types.  Consider a
delegation-based language:  everyone who delegates to object Foo can be
considered to be a member of a class (to wit: the class of all objects that
are similar enough that I make them all delegate to Foo).  I think you need
some notion of class to even be able to talk about an object-oriented
program -- if I have a bunch of objects, I need to be able to describe (at
least to another human; the code need not embody this knowledge) what _kind_
of object each one is, and what it's _for_.

I think class-hierarchies, inheritance and typing (ignore that last one all
you SmallTalkers) come pretty naturally once you commit yourself to making a
program that consists of objects.  It comes under the "what you do when you
get to work" part of it -- nobody would use an O-O language without some way
of reusing behavior (inheritance/delegation) if they were doing OOP and had
any way of getting away with using one that does (note the subtle Ada-bashing
in there).  The stuff people argue about ("tastes classy!" vs. "less typing!")
is really not part of "what OOP is" rather, it is part of "how I like to do
OOP".

-Johnny Distinction

jimad@microsoft.UUCP (JAMES ADCOCK) (02/14/90)

In article <+B8|X-@rpi.edu> fargo@pawl.rpi.edu (Irwin M. Fargo) writes:
...
>encapsulated objects

If you seriously look at any "object oriented" code, you will discover
that encapsulation is not an important criterion in presently programmed
OOP code.  I'd claim inheritence is antagonistic to encapsulation.  Not
to imply we shouldn't be using inheritence, nor that we shouldn't be better
encapsulating.  Just that "we" aren't.

>message selectors and methods

"Message selectors" and "methods" are Smalltalk-ese.  Other OOPLs use
other terminology for techniques spanning the whole range of speed verses
flexibility trade-offs.  And more modern optimizing OOPL compilers make
many of these trade-offs too, regardless of the terminology called out
in the language manual.

>classes

"Self" being an interesting example of an OOPL without classes.

>a class hierarchy

Ditto.

>Do you think it makes sense to try and quantify OOP in this manner?  If so,
>what ideas do you think make a language an OOPL?

I don't think it makes any more sense to try to quantify OOP than it makes
sense to quantify the "structured methodology"-nese or "top-down"-edness
of a design.  Given that OOP is good, everything must be OOP, [whether it
is, or not]  My claim is that in less than five years *everything* is
going to be "object oriented."

More sensibly, I think there are some reasonable distinctions that can
be made.  "Class-oriented" programming of Smalltalk verses "Object-oriented"
programming of Self.  [I'd claim the widely used "object oriented" is
a misnomer for what is actually "class-oriented".] Delegation verses 
inheritence.  Single verses multiple inheritence.  Strict verses non-strict
typing.  Distinctions based on method dispatch methodology are increasingly
non-sensical as we head towards good optimizing compilers.