[Newbies] Teaching Smalltalk

Samuel Williams space.ship.traveller at gmail.com
Wed May 5 02:10:05 UTC 2010


Hi,

Thanks for all your feedback.

While it isn't that great, an object oriented solution "similar" to the Java example is fine too:
	http://programming.dojo.net.nz/languages/java/index

It doesn't really rely on object oriented features, but it shows how a class is instantiated and a method is called.

This could be useful in the Smalltalk example.

Kind regards,
Samuel

On 5/05/2010, at 4:58 AM, Hannes Hirzel wrote:

> Yes, the documentation value of the OO solution is much higher
> (assuming that you are aware of the concepts and know Smalltalk in
> this case). It is actually a simple simulation.
> 
> --Hannes
> 
> On 5/4/10, laurent laffont <laurent.laffont at gmail.com> wrote:
>> Cool. I've just understood the 100 doors problem looking at your code. I was
>> too lazy to try to understand the original one on
>> http://programming.dojo.net.nz/languages/smalltalk/index :)
>> 
>> Laurent Laffont
>> 
>> 
>> On Tue, May 4, 2010 at 5:55 PM, John McKeon <p3anoman at gmail.com> wrote:
>> 
>>> Looking at rosettacode <http://rosettacode.org/wiki/100_doors> most
>>> languages look nearly identical (or, at the very least, ugly/crappy) when
>>> written out procedurely so that one might end up deciding to just stick
>>> with
>>> C.
>>> 
>>> I know I am going off the deep end a bit, but the whole answer to "why
>>> Smalltalk?" lies in the fact that problems should/would be approached in a
>>> completely different manner. As I am sure they would in most of the other
>>> languages if one were not restricted to 20 or so lines of code.
>>> 
>>> Since it is example code, at least in the case of Smalltalk, an object
>>> oriented solution would be in order - i.e. show how it would be solved
>>> using
>>> "everything is an object". Unfortunately, it doesn't really fit into "a
>>> few
>>> lines of code" to display on a page (even though the classes/objects and
>>> code required to implement them is little more than a few lines). And you
>>> also don't get any feel for the great tools. Perhaps, some insight into
>>> how
>>> one would run the code in Java/Eclipse, or Visual C <chuckle> with all the
>>> includes and project setup, etc might be a useful addition to the
>>> comparisons...
>>> 
>>> Object subclass: #Corridor
>>>    instanceVariableNames: 'doors count'
>>>    classVariableNames: ''
>>>    poolDictionaries: ''
>>>    category: '100Doors'
>>> 
>>> initialize: anInteger
>>>    "initialize the receiver with the given number of doors"
>>>    count := anInteger.
>>>    doors := OrderedCollection new.
>>>    anInteger timesRepeat: [ doors add: Door new ]
>>> 
>>> pass
>>>    "iterate over the doors"
>>>    1 to: count do: [ :i | self passBy: i ]
>>> 
>>> passBy: anInteger
>>>    "if the nth door is open close it otherwise open it"
>>>    doors by: anInteger do: [ :door | door toggle ]
>>> 
>>> printOn: aStream
>>>    "print  the open doors"
>>>    aStream cr.
>>>    doors withIndexDo: [ :door :i | door isOpen ifTrue: [ aStream
>>> nextPutAll: i asString, ' is open'; cr ]]
>>> 
>>> Corridor class
>>> 
>>> pass: anInteger
>>>    "return a new Corridor with the given number of doors that has been
>>> passed thru"
>>>    ^self new
>>>        initialize: anInteger;
>>>        pass
>>> 
>>> 
>>> ==================================================================
>>> 
>>> Object subclass: #Door
>>>    instanceVariableNames: 'isOpen'
>>>    classVariableNames: ''
>>>    poolDictionaries: ''
>>>    category: '100Doors'
>>> 
>>> isOpen
>>>    "Answer the value of isOpen"
>>>    ^ isOpen
>>> 
>>> toggle
>>>    "if the receiver is open close it else open it"
>>>    isOpen := isOpen not
>>> 
>>> initialize
>>>    "initialize the receiver to be closed"
>>>    super initialize.
>>>    isOpen := false
>>> 
>>> ===========================================================
>>> Patch to iterate over a collection by each nth item
>>> 
>>> OrderedCollection>>by: anInteger do: aBlock
>>>    | index |
>>>    index := anInteger.
>>>    [index <= lastIndex]
>>>        whileTrue:
>>>            [aBlock value: (array at: index).
>>>            index := index + anInteger]
>>> 
>>> 
>>> Probably silly for the problem given but just my 2 cents
>>> John
>>> 
>>> 
>>> --
>>> http://john-mckeon.us/seaside
>>> 
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners at lists.squeakfoundation.org
>>> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>>> 
>>> 
>> 
> _______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners



More information about the Beginners mailing list