'. '

Smalltalk

From APIDesign

(Difference between revisions)
Jump to: navigation, search
Current revision (04:22, 19 July 2011) (edit) (undo)
(Is Java an OOP system?)
 
(7 intermediate revisions not shown.)
Line 1: Line 1:
-
Dissatisfied with relational or [[OOP]] mappings of the real world? Let's create our own world inside a computer. Let's write in [[wikipedia::Smalltalk|Smalltalk]]!
+
Dissatisfied with relational or [[OOP]] mappings of the real world? Let's create a better world inside a computer! Let's write in [[wikipedia::Smalltalk|Smalltalk]]! [[Smalltalk]] is unique/strange, but I like [[Smalltalk]]'s [[Hotswap]]. Long time ago [[Smalltalk]] could do things [[Java]] is still [[Hotswap|dreaming about]].
-
I don't like that each [[Smalltalk]] system ends up being completely unique, as it is common to add new and new methods to the base Object. Usually things like isInteger, isString, etc. This is not how [[API]]s should be designed, as that prevents merge of systems developed independently, imho.
+
== Extending Root Hierarchy Class ==
-
However I like [[Smalltalk]]'s [[Hotswap]]. Long time ago [[Smalltalk]] could do things [[Java]] is still [[Hotswap|dreaming about]].
+
[[Smalltalk]] systems (as far as I remember) come with a bunch of predefined classes which everyone can use and modify. Of course, the nature of [[OOP]] system is to be extensible. Thus one can create new subclasses (OK, that is the same as in [[Java]]), but one can also add new methods to existing classes. Sure, lovers of meta-programming may be happy with that, but on and on, this is not a system that could work in a [[distributed development]] easily.
 +
 
 +
The classical [[Smalltalk]] style to implement '''instanceof''' (e.g. to find out if an object is instance of a certain type) is based on a bunch of '''isSomething''' methods:
 +
 
 +
<source lang="smalltalk">
 +
> 1 isNumber
 +
true
 +
> 'text' isNumber
 +
false
 +
> 'text' isString
 +
true
 +
</source>
 +
 
 +
What can developers do when they define new types like '''Person''' and want to recognize their instances? They add '''isPerson''' method to '''Object''' to return '''false''' and override it in '''Person''' class to return '''true''':
 +
 
 +
<source lang="smalltalk">
 +
> Object subclass: #Person
 +
> !Object methodsFor: 'Checking Person'! isPerson ^false !!
 +
> !Person methodsFor: 'Checking Person'! isPerson ^true !!
 +
</source>
 +
 
 +
One can then easily check on any object if it is a person or not:
 +
 
 +
<source lang="smalltalk">
 +
> 1 isPerson
 +
false
 +
> Person new isPerson
 +
true
 +
</source>
 +
 
 +
As a result, if you want to understand a [[Smalltalk]] program/system, you should look at the added '''isSomething''' methods in the '''Object'''. Some might argue, that this is the way [[OOP]] should be done. On the other hand, such kind of programming creates not pure [[OOP|object oriented systems]], but different flavors (in the above case a ''person oriented system''), where capabilities of each object are driven by the variety of '''isSomething''' methods on root class.
 +
 
 +
I don't like that each [[Smalltalk]] system ends up being completely unique. Merging two such systems together may create a lot of accidental conflicts preventing merge of systems developed independently, as far as I can tell.
 +
 
 +
== Is [[Java]] an [[OOP]] system? ==
 +
 
 +
But enough about [[Smalltalk]] and let's look at [[Java]]'s root class {{JDK|java/lang|Object}}. Can you guess what kind of ''oriented system'' [[Java]] is?
 +
 
 +
I think the answer is clear. [[Java]] is a '''hash oriented language''' and also '''lock oriented language'''.
 +
 
 +
<comments/>

Current revision

Dissatisfied with relational or OOP mappings of the real world? Let's create a better world inside a computer! Let's write in Smalltalk! Smalltalk is unique/strange, but I like Smalltalk's Hotswap. Long time ago Smalltalk could do things Java is still dreaming about.

Extending Root Hierarchy Class

Smalltalk systems (as far as I remember) come with a bunch of predefined classes which everyone can use and modify. Of course, the nature of OOP system is to be extensible. Thus one can create new subclasses (OK, that is the same as in Java), but one can also add new methods to existing classes. Sure, lovers of meta-programming may be happy with that, but on and on, this is not a system that could work in a distributed development easily.

The classical Smalltalk style to implement instanceof (e.g. to find out if an object is instance of a certain type) is based on a bunch of isSomething methods:

> 1 isNumber
true
> 'text' isNumber
false
> 'text' isString
true

What can developers do when they define new types like Person and want to recognize their instances? They add isPerson method to Object to return false and override it in Person class to return true:

> Object subclass: #Person
> !Object methodsFor: 'Checking Person'! isPerson  ^false !!
> !Person methodsFor: 'Checking Person'! isPerson  ^true !!

One can then easily check on any object if it is a person or not:

> 1 isPerson
false
> Person new isPerson
true

As a result, if you want to understand a Smalltalk program/system, you should look at the added isSomething methods in the Object. Some might argue, that this is the way OOP should be done. On the other hand, such kind of programming creates not pure object oriented systems, but different flavors (in the above case a person oriented system), where capabilities of each object are driven by the variety of isSomething methods on root class.

I don't like that each Smalltalk system ends up being completely unique. Merging two such systems together may create a lot of accidental conflicts preventing merge of systems developed independently, as far as I can tell.

Is Java an OOP system?

But enough about Smalltalk and let's look at Java's root class Object. Can you guess what kind of oriented system Java is?

I think the answer is clear. Java is a hash oriented language and also lock oriented language.

<comments/>

Personal tools
buy