How do you define "object-oriented"?

Alejandro F. Reimondo aleReimondo at smalltalking.net
Fri Apr 26 23:34:16 UTC 2002


Hi Kevin,

I think that VisualBasic, C++, Python, Java are all Object Oriented
Languages (OOL), but Smalltalk is not a language and not only Object
Oriented.
Let me explain...

When you use a Language (OOL), you must "imagine" the objects (you really do
not have them).
An object system is a powerful product of the work you do in your mind.
You formalize the expertise in the destination domain building knowledge
structures with the form of objects.
The objects are the product of your work and a powerful specification of
your system (a closed/defined system).
If you work IN an Object Environment (like Smalltalk), the objects contained
in the environment are the sources of your work.
The environment is the space where you build your system, not its
definition.
The objects are NOT in your mind, they are in the virtual environment (and
can be shared with full precision in abstract and concrete instances).

Why Object Orientation is powerful and very interesting for people with
instruction in science?
Object Orientation is widely accepted because let people apply all the
methods they learned in science and formal training.
Most of scientific methods are based on reductionism techniques that treat
any "problem" as an object of interest.
The reduction of the problem let you define the laws of nature of the
problem.

Any system can be treated/defined as an object. (See Bertalanffy laws of
information systems)
All the techniques related with reductionism and modularization can be
applied to OO Systems.

But. You can have more than Object Orientation.
More than Object Orientation?
What can we have if not an object?

Most people try to mark the differences of Smalltalk saying that smalltalk
is "pure objects", and that ALL in smalltalk are objects.
I think that when we use these arguments we are not focusing on the most
powerful attributes of smalltalk.

Smalltalk is more than Object Oriented.
Smalltalk is:
1. - A place full of objects (then you can apply all the reductionism
techniques)
2. - It is an ENVIRONMENT.

What I want to say with an "environment"?
An environment (as in biology and ecology) is NOT an object; it can not be
"solved" with reductionism techniques.
An environment is not a container (not an object, not aCollection), because
an environment is an open system.

Remember the first law of Information Systems:
  "A system is more than it parts"

The law enounces that a system are not only its parts, then it is not only
objects.

Using an evolving environment as an open medium to develop information
systems let's you work with reductionism (with objects) and in a holistic
way (with non-objects, or. not only with objects).

Object Oriented Languages let you work only with objects, and when the
system is DEFINED it will not evolve.
It can change, but not evolve, because it defines a closed system. It is the
product of formalism.

Object Environments (OE) like smalltalk have a syntax (language) because we
use text panes. (but they are not just the syntax, each object have a
language)
OE have "classes", but they are really species. See paper "Who put the class
into classification" J. Wilkins or an email of smalltalking mailing list
[http://groups.yahoo.com/group/smalltalking] of topic "[objetos] Conjuntos -
Clases - Especies - etc." if you can read Spanish L
They have objects but the instances can change shape and behavior at any
time, because they are not fixed to formalization laws (some Smalltalks lets
you attach methods to objects -not only to classes-).

Building a system in an open environment is not the same as defining a
system with reductionism techniques (cut the real system in parts and look
for "relations").
When you work with reductionism you must be formal, strict, and define all
the alternatives you can see (learn the domain first, then talk in the
language to express the rules).
When you use an environment, your main activities are in the building of the
system.
While building you will work on the undefined/unknown part of the system,
you build the system using it. Your activities are different and are not
only based on reductionism and formalization.

Using Smalltalk you work in an environment.
The main goal is to maintain the environment stable (system correctness is
not necessary).
As in ecology, your activities are guided by the open parts of the system.
All actions done in a reductionism way may produce lateral effects and
indeterminism. Accidental emergence can be used to know more on the system
while it works.
The building of object engines (and in its abstract form: a framework) are
emergencies of the advances in the destination domain. As a product of
instantiating experience, you build classes (prototypes evolves to a more
formal specification in the form of classification schema) and objects.
As classes changes with time, they are not "classes" like in OOL. When you
work in an evolving environments classes are formalizations (abstractions)
but with the possibility to change (more like species in nature).

You can find more on this topics on www.smalltalking.net (sorry but most
material is in Spanish and our email list is in Spanish also) and
http://smalltalking.swiki.net

I find that focusing on this topics more people are interested in learn and
use Smalltalk, and let us learn to work in an environment (open system) and
use more than formal methods.

cheers,
Ale.

----- Original Message -----
From: "Kevin Fisher" <kgf at golden.net>
To: "squeak-dev" <squeak-dev at lists.squeakfoundation.org>
Sent: Friday, April 26, 2002 3:10 PM
Subject: How do you define "object-oriented"?


> I have a bit of a question...I'm just sitting down to learn Python right
> now and I'm finding it a bit too C/C++ like for my liking.  What strikes
> me about Python is it's claim of "object orientation"--and yet, it has
> atomic types like 'int' and 'char' that are not objects  (shades of
> C++ and Java).
>
> I've read the quote on smalltalk.org from Alan that (roughly paraphrased)
> says "I invented the term object-oriented, and C++ was not what I had in
> mind."
>
> Is it safe to say that something like Python is not truly object-oriented?
> Or rather--if it's not objective right down to the smallest particle,
> can it be called object-oriented?  I realize this could be a somewhat
> flameworthy question...but I don't mean it to incite flames.
>
>
> (and then there's the other question about why all new languages go out of
> their way to be so C-like...a personal beef of mine. :)
>
>




More information about the Squeak-dev mailing list