SlideShare a Scribd company logo
1 of 67
Download to read offline
Smalltalk in a Nutshell
Michele Lanza
Contents
   ‣ Introduction
   ‣ Origins of Smalltalk
   ‣ Key Concepts
   ‣ The Smalltalk Object Model
   ‣ Messages
   ‣ Metaclasses & Reflection
   ‣ Conclusion




Michele Lanza                  2   Smalltalk in a Nutshell
Sources
   ‣ Own Material from the PF2
         course
   ‣ Own Material from the Smalltalk
         course given in Bern
   ‣ External Material by
        ‣ Stéphane Ducasse, INRIA Lille
        ‣ Oscar Nierstrasz, Univ. of Bern
   ‣ “Squeak by Example” by Andrew
         Black, Stéphane Ducasse,
         Oscar Nierstrasz, Damien Pollet


Michele Lanza                        3      Smalltalk in a Nutshell
Introduction




what is Smalltalk?
What is Smalltalk?
   ‣ A pure object-oriented programming language
        ‣ “everything is an object”
        ‣ single inheritance, dynamically typed, truly reflective
   ‣ The origin of many innovations in OO development
        ‣ RDD, IDEs, MVC, XUnit, Refactorings, Design Patterns,...
   ‣ An improvement over many of its.. successors!
   ‣ An integrated development environment
        ‣ Class browser, debugger, inspector, refactoring engine, etc.
   ‣ A philosophy of development
   ‣ A “living universe” driven by a virtual machine

Michele Lanza                         5                            Smalltalk in a Nutshell
Smalltalk: a State of Mind!
   ‣ Small and uniform language
        ‣ Syntax fits on one sheet of paper
   ‣ Large library of reusable classes
   ‣ Advanced development tools
   ‣ Interactive virtual machine technology
        ‣ Truly platform-independent
   ‣ Team-working Environment
        ‣ Releasing, versioning, deploying




Michele Lanza                          6      Smalltalk in a Nutshell
Smalltalk vs. C++ vs. Java
  Death Match              Smalltalk                    C++                  Java

      Object model             Pure                     Hybrid               Hybrid


 Garbage collection         Automatic                   Manual             Automatic


        Inheritance            Single                   Multiple       Single + Interfaces


      Type System            Dynamic                     Static              Static


         Reflection         Fully reflective           Introspection       Introspection


      Concurrency      Semaphores, Monitors         Some libraries..        Monitors


                      Categories, namespaces,
          Modules      bundles, packages, ...
                                                     Namespaces            Packages

Michele Lanza                                   7                             Smalltalk in a Nutshell
Smalltalk Implementations
                    Platform                            Details
                   Unix, Linux,    based on Xerox PARC specs, but highly optimized.
   Visualworks    Windows, Mac                  Binary cross-platform
                   Windows,
  ObjectStudio     Mainframes
                                     similar to VisualWorks, one day they will merge

                    everything,        free and open, based on the ST-80 specs.
       Squeak       everything      Effort started by Kay with a focus on Multimedia
                   Unix, Linux,
  Gemstone/S        Windows
                                   server-side, persistent, multi-user, active ODBMS

                                     native widgets, tight integration with Windows.
       Dolphin      Windows
                                     Was free, became commercial, now free again
                   Unix, Linux,
    Smalltalk X     Windows
                                     splendid implementation of the ANSI standard

                   Unix, Linux,               free, well-versed for scripting
 GNU Smalltalk      Windows           maintained by our very own Paolo Bonzini :-)
                  Unix, Windows,
     VisualAge         OS/2
                                     cross-platform via source, percursor to Eclipse

Michele Lanza                           8                                   Smalltalk in a Nutshell
Community
   ‣ European Smalltalk User Group
        ‣ esug.org
   ‣ Squeakworld
        ‣ squeak.org
   ‣ Smalltalk Industry Council
        ‣ stic.org




Michele Lanza                     9   Smalltalk in a Nutshell
Recommended Books
   ‣ Andrew Black, Stéphane
         Ducasse, Oscar Nierstrasz,
         Damien Pollet, “Squeak by
         Example”, 2007
   ‣ Alec Sharp, “Smalltalk by
         Example”, MacGraw-Hill, 1997
   ‣ Kent Beck, “Smalltalk - Best
         Practice Patterns”, Prentice Hall,
         1997
   ‣ Sherman Alpert et al., “The
         Design Patterns Smalltalk
         Companion”, Addison-Wesley,
         1998
Michele Lanza                        10       Smalltalk in a Nutshell
The Origins




dealers of lightnings
The Roots
   ‣ Conceived in the late 60’s by Alan Kay, inspired by
        ‣ Douglas Engelbart - NLS (the oNLineSystem) to augment the
          human intellect, 1966
        ‣ Seymour Papert - The Logo programming language, 1968
        ‣ Ivan Sutherland - Sketchpad, 1963
        ‣ LISP (Interpreter, Garbage Collection, Blocks)
        ‣ Simula (Classes, Message sending)
        ‣ Kay’s background in biology: the concept of communicating
          “cells” which later became “objects”




Michele Lanza                        12                     Smalltalk in a Nutshell
Xerox PARC
   ‣ The “Palo Alto Research Center” of
         Xerox
   ‣ Kay moved to PARC in 1972 to lead
         the “Learning Research Group” and
         work on Smalltalk, a language for
         teaching programming to children
   ‣ PARC, incubator of many concepts of
         modern computing, such as Graphical
         User Interfaces, Interpress (the
         precursor of Postscript), the Ethernet,
         the Laser printer (!), WYSIWYG
         editors, etc.

Michele Lanza                       13             Smalltalk in a Nutshell
The Dynabook & The Alto
   ‣ The Dynabook, Kay’s vision
         of a laptop for children




   ‣ The Alto, a machine to run
         Smalltalk
        ‣ Precursor to Apple’s Lisa

                http://www.artmuseum.net/w2vr/archives/Kay/01_Dynabook.html

Michele Lanza                            14                       Smalltalk in a Nutshell
The Good Old Days...




Michele Lanza           15   Smalltalk in a Nutshell
Precursor, Innovator, Visionary
   ‣ 1st based on graphics (new hardware needed!)
   ‣ Multi-window environment (overlapping windows)
   ‣ IDE with debugger, compiler, text editor, etc.
   ‣ Browsing with a “pointing device” (yes...a mouse)
   ‣ Virtual machine
   ‣ Garbage collection
   ‣ Just in time compilation
   ‣ Everything is there, the complete source code


   ‣ Ideas were taken over by Apple and Microsoft
Michele Lanza                   16                       Smalltalk in a Nutshell
Key Concepts




power & simplicity
This is weird...

                “Try not to care - Beginning Smalltalk programmers
                often have trouble because they think they need to
                understand all the details of how a thing works before
                they can use it.

                This means it takes quite a while before they can
                master Transcript show: ‘Hello World’.

                One of the great leaps in OO is to be able to answer
                the question quot;How does this work?quot; with quot;I don’t carequot;“.

                                        Alan Knight, Smalltalk Guru




Michele Lanza                            18                         Smalltalk in a Nutshell
The Smalltalk “Image”
   ‣ Smalltalk uses image files, containing everything
        ‣ the complete source code of the language and more than 1000
                library classes & the compiled byte-code

   ‣ The VM “executes” the image, where everything is alive,
         i.e., an object: Talk to whatever you want!
                                               Smalltalk                                        Java


                                        Edit- and Run-time                       Edit-time                Run-time
                  Independence
                    Hardware




                                            The image
                                                                               Source-code                Byte-code
                                                                                 (*.java)              (*.class or *.jar)
                                 Source-code               Byte-code
                  Dependence
                   Hardware




                                     Smalltalk Virtual Machine                        Java Virtual Machine (JVM)


                                                                  Computer Hardware


Michele Lanza                                                          19                                                   Smalltalk in a Nutshell
Syntax on a post card

                                                                                 tax
     example      WithNumber: x                         of Smal ltalk method syn
                                   tr  ates every part                         sages,
     “A m     ethod that illus                       binary,  and key word mes
                  t primitives    . It has unary,                block temporarie
                                                                                  s),
           excep                                       (but not
                                     and temporaries                          ), uses
           de  clares arguments                     not an i nstance variable
                   ses a globa   l variable (but               , integer, float
                                                                                ), uses
           acces                                        string
                                    h aracter, symbol,                        d has
           li  terals (array, c                     nil, sel f, and super, an
                                 ble true false,                            zero
            the pseudo varia                     and casc ade. It has both
             sequence   , ass ignment, return              oesn’t  do anything usef
                                                                                    ul,
                                   argum  ent blocks. It d
             argument and one
             though.”
                                                                          t].
      	

        |y|                             Nil) if False: [self hal
      	

        true & fal    se not & (nil is
                                              size.
       	

       y := se    lf size + super
                                                  ach |
                 #($a #a ‘a    ’ 1 1.0) do: [:e
       	

                                           name);
                 Transcript sh    ow: (each class
                                                         g);
                    	

 	

     show:   (each printStrin
        	

 	

                    	

 	

     show: ‘ ‘].
        	

 	

         	

      ^ x < y



Michele Lanza                                 20                                Smalltalk in a Nutshell
Smalltalk syntax in a nutshell
                Element         explained               exemplified

                  ^               return               ^’hello world’

                   ‘              string                  a string’

                   “            comment              “smalltalk stinks”

                   .            separator             self foo. self bar

                   ;            cascade                 self foo; bar

                  #           literal objects        #mac       #(1 2 3)

                  []              block             [: var | | tmp | expr ]

                  ||      local or block variable          | temp |

                  :=           assignment                 foo := 27

                  $             character                 $b $a $r

                   :      end of selector name            do:with:
Michele Lanza                       21                            Smalltalk in a Nutshell
Hello World!
   ‣ Transcript show: ‘Hello World!’
        ‣ This is a message
        ‣ The object (actually it’s a class ;-) Transcript is the receiver of
          the message
        ‣ The selector of the message is #show:
        ‣ The argument is the string ‘Hello World!’
   ‣ Vocabulary concerns: Message passing or sending is
     equivalent to “invoking a method” in Java or C++




Michele Lanza                           22                          Smalltalk in a Nutshell
Smalltalk is weird
   ‣ It looks like an interpreted language
        ‣ but in reality it’s compiled just in time
   ‣ You can interact with all objects within the image
        ‣ DoIt; execute the currently selected code
        ‣ PrintIt; do & print the currently selected code
        ‣ InspectIt; do & inspect the currently selected code
        ‣ AcceptIt; in the context of methods and classes: compile!
   ‣ These are not messages, only an idiom for interaction!




Michele Lanza                           23                      Smalltalk in a Nutshell
Defining Classes & Variables
   ‣ Edit the class creation template




                                           class name
                                        superclass name
                                        instance variables




Michele Lanza                  24                            Smalltalk in a Nutshell
Defining Methods: Fill in the template




   ‣ Smalltalk methods always return the object they belong
     to, unless specified otherwise

Michele Lanza                 25                     Smalltalk in a Nutshell
Let’s see this Smalltalk thingy!




Michele Lanza           26          Smalltalk in a Nutshell
The Smalltalk Type System
   ‣ Smalltalk is a dynamically typed
         language
   ‣ You don’t care about the types of
         your variables, as long as they
         can respond to the message you
         send them
        ‣ Ruby programmers call this “duck
                typing”

   ‣ There are some fancy things like
         #become: but it’s out of scope



Michele Lanza                       27       Smalltalk in a Nutshell
Blocks and Control Constructs
   ‣ All Smalltalk control constructs are implemented by
     message passing
        ‣ No keywords; open & extensible
   ‣ A block is a closure (== a lambda abstraction)
        ‣ A function that captures variable names in its lexical context
        ‣ A first-class value that can be stored, passed, evaluated
        ‣ Useful to delay evaluation
[ :arg1 :arg2 | | temp1 temp2 | expression. expression ]

|sqr|
sqr := [ :n | n*n].
sqr value: 5

[:x :y | x + y + 3 ] value: 3 value: 4

Michele Lanza                          28                        Smalltalk in a Nutshell
Booleans
   ‣ Slick implementation
   ‣ true and false are unique                                     Object
         instances of True and False                         ...
                                                             ...


   ‣ Lazy evaluation with and: and                                 Boolean
         or:                                                 ifTrue:IfFalse:
                                                             not
                                                             &
false and: [ 1 / 0 ]
10 odd ifTrue: [ .. ] ifFalse: [ .. ]
                                                 True                              False



   ‣ Blocks and Booleans are Crucial
                                           ifTrue:IfFalse:                  ifTrue:IfFalse:
                                           not                              not
                                           &                                &
         for the implementation of loops



Michele Lanza                      29                                       Smalltalk in a Nutshell
Looping Madness
   ‣ Various kinds of loops are possible
| n |
n := 10.
[ n > 0 ] whileTrue:
    [ Transcript show: n printString; cr. n := n - 1 ]

1 to: 10 do: [ :n | Transcript show: n printString; cr ]

10 timesRepeat: [ Transcript show: ‘hi’; cr ].




   ‣ But loops without Collections are just half as fun..




Michele Lanza                    30                        Smalltalk in a Nutshell
Collections
   ‣ The Collection hierarchy offers many of the most powerful
     classes in the Smalltalk system
        ‣ It would be enough material for a lecture itself!
        ‣ Some of these classes have been around for more than 30
          years! Therefore: Do not program your own collections...
                                                                 Object


                                                               Collection


                                      SequenceableCollection                       Set      Bag


                  ArrayedCollection       OrderedCollection    LinkedList      Dictionary


                Array   String     Text   SortedCollection      Interval    IdentityDictionary


                ByteString       Symbol                          Heap
Michele Lanza                                          31                                         Smalltalk in a Nutshell
Classic Ways to Iterate
aCollection do: aOneParameterBlock
#(15 10 19 68) do: [ :each | Transcript show: each printString; cr ]

aCollection collect: aOneParameterBlock
#(15 10 19 68) collect: [ :i | i odd ] PrintIt => #(true false true false)

aCollection with: anotherCollection do: aBinaryBlock
#(1 2 3) with: #(10 20 30) do: [:x :y | Transcript show: (y * x) printString; cr ]

aCollection select: aOneParameterPredicateBlock
#(15 10 19 68) select: [ :n | n odd ] => PrintIt => #(15 19)

aCollection reject: aOneParameterPredicateBlock
#(15 10 19 68) reject: [ :i | i odd ] => PrintIt => #(10 68)

aCollection detect: aOneParameterPredicateBlock
#(12 10 19 68 21) detect: [ :j | j odd ] => PrintIt => 19

aCollection detect: aOneParameterPredicateBlock ifNone: aBlock
#(12 10 16 68) detect: [ :j | j odd ] ifNone: [ ‘no odd stuff here’] => PrintIt =>
‘no odd stuff here’

More cool stuff: #includes:, #size, #isEmpty, #contains: #anySatisfy




Michele Lanza                           32                             Smalltalk in a Nutshell
Break
The Smalltalk Object Model




   everything is an object
The Smalltalk Object Model
   ‣ Simple & uniform
        ‣ everything is an object
        ‣ objects communicate by sending each other messages
   ‣ The rules of the model
        1. Everything is an object
        2. Every object is an instance of a class
        3. Every class has a superclass
        4. Everything happens by message sends
        5. Method lookup follows the inheritance chain



Michele Lanza                         35                  Smalltalk in a Nutshell
Everything is an object
   ‣ The Smalltalk mantra: Smalltalk is a consistent, uniform
     world written in itself
        ‣ The whole language is there and can be easily modified
        ‣ Everything is an object!
                ‣   The workspace, the window, the scroll bar, 1, 3+4, 100 factorial,
                    ‘hello world’, the mouse, the parser, the compiler, the process
                    scheduler, etc. etc.
                ‣   Classes are objects too!
                    ‣   What? Yes, they are even first-class objects...you can send them messages,
                        inspect them, etc.
                    ‣   Smalltalk is a truly reflective system!




Michele Lanza                                         36                             Smalltalk in a Nutshell
Every object is an instance of a class
   ‣ A class defines the structure of its instances via instance
     variables and the behavior of its instances via instance
     methods
        ‣ Each method has a name, called its selector, which is unique
          within the class
   ‣ Every object has a class, find out by sending the
     message #class to it

                1 class              ->    SmallInteger
                20 factorial class   ->    LargePositiveInteger
                ‘hello’ class        ->    ByteString
                #(1 2 3) class       ->    Array
                (4@5) class          ->    Point
                Object new class     ->    Object



Michele Lanza                         37                          Smalltalk in a Nutshell
Instance Variables
   ‣ Instance variables are “private” to the instance..
        ‣ Java or C++ allow instance variables (called “members” or
          “fields”) to be accessed by any other instance of the same
          class
                ‣   The encapsulation boundary of objects in Java/C++ is the class, in
                    Smalltalk it is the instance

   ‣       ..and “protected” to the subclasses
        ‣ Otherwise it is impossible to access them, unless one defines
          accessor methods




Michele Lanza                                  38                            Smalltalk in a Nutshell
Instance Methods
   ‣ All methods are “public”
   ‣ Methods are grouped into protocols the indicate their
     intent
        ‣ They are conventions, not constraints..
   ‣ Methods can access all instances variables of the object
        ‣ Some Smalltalkers prefer to do so only through accessors
                ‣   While this does not imply a performance penalty, it’s a questionable
                    practice because you expose the state..




Michele Lanza                                   39                            Smalltalk in a Nutshell
Wait a second...
   ‣ If classes are objects too and every object is an instance
     of a class...
   ‣ Yes, classes are also instances of classes
        ‣ They are instances of metaclasses
        ‣ A metaclass is a class whose instance is a class
                ‣   It defines the structure and behavior of its instance, the class
                ‣   In 95% of the cases the metaclass is empty
        ‣ Whenever you create a class, the system automatically
          creates the corresponding metaclass




Michele Lanza                                    40                            Smalltalk in a Nutshell
The Instance Side and The Class Side
   ‣ Classes are objects, therefore they have their own (class)
     instance variables and (class) methods
   ‣ A class and its metaclass are separate but tightly related
        ‣ The browser enforces this separation through the GUI
   ‣ Class methods & variables are similar to “static” members
     in primitive languages




Michele Lanza                       41                       Smalltalk in a Nutshell
Every class has one superclass
   ‣ Single inheritance
   ‣ The root of the world is Object
   ‣ Abstract classes and methods
        ‣ No syntactic construct to indicate abstractness
        ‣ Convention: A method is abstract it its body is “self
          subclassResponsibility”
                ‣   A class is abstract if it contains an abstract method




Michele Lanza                                    42                         Smalltalk in a Nutshell
Everything happens by message sends
   ‣ The essence of Smalltalk: you do not care who
     implements things
        ‣ You politely ask objects to perform things for you
                ‣   ...who in turn may ask other objects for doing those things
        ‣ This leads to short methods and lots of message sends
                ‣   “Don’t do anything that you can push off onto someone else”

   ‣ Everything is dynamic, even messages to classes who in
     turn are just objects!




Michele Lanza                                   43                            Smalltalk in a Nutshell
Nearly everything happens by message sends
   ‣ At some point action must take place
        ‣ Variable declarations
        ‣ Variable assignments
        ‣ Returns
        ‣ Primitives
   ‣ Pretty much everything else truly happens by message
     sends
        ‣ In particular accessing fields: since there are only private
          fields, you must provide accessor methods




Michele Lanza                         44                         Smalltalk in a Nutshell
Method lookup follows the inheritance chain
   ‣ What happens when an object receives a message?
        ‣ The class of the receiver looks up the method to use to handle
          the message
                ‣   If the class does not have that method, it asks its superclass, and so
                    on, up the inheritance chain
        ‣ When the method is found, the arguments are bound to the
          parameters of the method, and the VM executes it
   ‣ What if a method does not return a value?
   ‣ What if a class re-implements superclass methods?
   ‣ What happens when no method is found?
   ‣ What is the difference between super and self?

Michele Lanza                                   45                             Smalltalk in a Nutshell
What if a class reimplements superclass methods?
   ‣ The overridden method in the superclass will become
     “invisible” to the object
        ‣ To access its behavior you must use “super”
        ‣ The best example is given by the #initialize methods
   ‣ What is the difference between self and super?
        ‣ A self send triggers a dynamic method lookup starting in the
          class of the receiver
        ‣ A super send triggers a static method lookup starting in the
          superclass of the class implementing the method performing
          the super send



Michele Lanza                        46                          Smalltalk in a Nutshell
What happens when no method is found?
   ‣ Object is the root of the world, lookup stops here..
   ‣ The VM will then send the message “self
     doesNotUnderstand: #foo”, where #foo is the selector of
     the method that was not found
   ‣ The lookup will start again in the original object, but this
     time we are looking for the method #doesNotUnderstand:
   ‣ If nothing is done about it, lookup will arrive again in the
     class Object, whose implementation says: Throw an
     exception and pop up the debugger!
        ‣ But...you can write your own emergency code by overriding
          #doesNotUnderstand: in your classes..
                ‣   The implications are massive, but it’s out of scope here..
Michele Lanza                                   47                               Smalltalk in a Nutshell
Messages




receiver selector argument(s)
Objects communicate via messages
   ‣ All communication in Smalltalk has the form receiver
     selector argument(s)
        ‣ 1+2
        ‣ linePrinter nextNode: macNode
        ‣ Packet send: ‘Packet went to ‘ to: #lpr
        ‣ Workstation withName: #mac1




Michele Lanza                         49             Smalltalk in a Nutshell
Messages instead of keywords
   ‣ In most languages, basic operators and control
     constructs are defined as language constructs and
     (reserved) keywords
   ‣ In Smalltalk, there’s only messages sent to objects
        ‣ bitshift: (>>) is just a message sent to a number
                                10 bitShift: 2

        ‣ ifTrue: (if-then-else) is just a message sent to a boolean
                 (X > 1) ifTrue: [ Transcript show: ‘bigger’ ]

        ‣ do:; to:do: (loops) are just messages sent to collections
          of numbers
           #(a b c d) do: [ :each | Transcript show: each; cr ].
           1 to: 10 do: [ :i | Transcript show: i printString; cr]
Michele Lanza                          50                        Smalltalk in a Nutshell
Message Syntax in a Bottle
   ‣ Every expression is a message send
   ‣ There are 3 types of messages
   1. Unary messages
                              Transcript cr
                              5 factorial
                              25 squared


   2. Binary messages         3 + 4
                              5 * 6




   3. Keyword messages        Transcript show: ‘hello world’
                              2 raisedTo: 32
                              3 raisedTo: 10 modulo: 5



Michele Lanza                51                       Smalltalk in a Nutshell
Precedence
   ‣ (...) > Unary > Binary > Keyword
   1. Evaluate left-to-right
   2. Unary messages have highest precedence
   3. Next are binary messages
   4. Keyword messages have lowest precedence
   5. Use parentheses to change precedence


    2 raisedTo: 1 + 3 factorial   128

    1 + 2 * 3                     9

    1 + (2 * 3)                   7

Michele Lanza                         52        Smalltalk in a Nutshell
Metaclasses & Reflection




  elegance & uniformity
Metaclasses & Reflection in 7 points
   ‣ Every object is an instance of a class
   ‣ Every class eventually inherits from Object
   ‣ Every class is an instance of a metaclass
   ‣ The metaclass hierarchy parallels the class hierarchy
   ‣ Every metaclass inherits from Class and Behavior
   ‣ Every metaclass is an instance of Metaclass
   ‣ The metaclass of Metaclass in an instance of Metaclass




Michele Lanza                   54                    Smalltalk in a Nutshell
Every object is an instance of a class
   ‣ Implication: every object points
         to its class
        ‣ If an object receives a message,
                the object will “ask” its class how it
                should act                                          Student


                ‣   The behavior (== the methods) is
                    implemented in the class

                ‣
                                                         aStudent
                    The class also defines how much
                    space an object occupies




Michele Lanza                                  55                        Smalltalk in a Nutshell
Every class eventually inherits from Object
   ‣ Student “is a” Person “is an” Object
   ‣ “is a” mean that if an object receives a
         message, the method (in case it’s not
         implemented in the object’s class) will be
         looked up through the inheritance chain, if
         necessary up until Object
   ‣ Object represents the common object
         behavior
   ‣ Object does not have a superclass


Michele Lanza                       56                 Smalltalk in a Nutshell
Every class is an instance of a metaclass
   ‣ Classes are objects too!
   ‣ Every class X is the unique
         instance of its metaclass called
         X class
   ‣ Metaclasses are created
         implicitly when a class is created
        ‣ There is no explicit metaclass
        ‣ You cannot share metaclasses
                ‣   They are unique to their class




Michele Lanza                                   57   Smalltalk in a Nutshell
A closer look at metaclasses...
Person subclasses
Person allSubclasses
DietPerson selectors
DietPerson allSelectors
DietPerson methodDictionary
Person allInstances
Person instVarNames
Person canUnderstand: #diet
Person allSubclasses do: [ :eachClass |
   eachClass selectors do: [ :eachSelector |
      Transcript show: eachClass name, '>>', eachSelector ; cr ]]

OrderedCollection(WWTutor,DietPerson,FMPlayer)
OrderedCollection(WWTutor,DietPerson,FMPlayer,WWPerson,SpagPerson)
IdentitySet (#diet)
<IdentitySet with 283 symbols)
MethodDictionary (#diet)
...
#('name' 'gender')
false
...

Michele Lanza                    58                        Smalltalk in a Nutshell
The metaclass hierarchy parallels the class hierarchy

   ‣ Uniformity between classes and
         metaclasses
        ‣ Classes are objects too:
                ‣   Everything that holds for objects
                    holds for classes too

                ‣   Same method lookup strategy!
                    ‣   ..but in the method dictionary of the
                        metaclass

                ‣   Imagine you would send new to
                    Student..what happens?




Michele Lanza                                          59       Smalltalk in a Nutshell
Every metaclass inherits from Class and Behavior

   ‣ Every class “is a “ class
        ‣ Every metaclass inherits from
                Class who inherits eventually from
                Behavior
                ‣   Behavior implements the minimum
                    state necessary for objects to have
                    instances

                ‣   Behavior is the basic interface to the
                    compiler and does things like
                    creating method dictionaries,
                    compiling methods, accessing
                    variables and instances, accessing
                    the class hierarchy (superclass,
                    subclasses, etc.)

        ‣ So...a quiz: Where is new defined?
Michele Lanza                                    60          Smalltalk in a Nutshell
Who defines new?
   ‣ Behavior...                                                              Behavior


        ‣ because it models the                                                                       7

                behavior that a class                                           Class-
                                                                             Description
                should have, and creating                                                         6
                an instance of a class is a                                      Class
                                                    8
                thing that a class should be        quot;<<creates>>
                                                                                                          5

                able to do
                                                                                           Object
                                                                   Object
                                                                                            class
                                                                                                              4

                                                                                           Person
                                                                   Person
                                                                                            class



                                                                                           Student             3
                                                                   Student
                                                                                            class


                                                                             1
                                                                                           2
                                                                                   new
                                                    aStudent

Michele Lanza                                  61                                          Smalltalk in a Nutshell
Every metaclass is an instance of Metaclass
   ‣ Metaclass represents common
         metaclass behavior
   ‣ It is responsible for
        ‣ instance creation
        ‣ creating initialized instances of the
                metaclass’ sole instance
        ‣ class information (inheritance link,
                instance variables, etc.)




Michele Lanza                               62    Smalltalk in a Nutshell
The metaclass of Metaclass is an instance of Metaclass




Michele Lanza              63                   Smalltalk in a Nutshell
Meta-madness Quiz
“The class hierarchy”              “The metaclass hierarchy”
Student superclass                 Student class class
= Person                           = Metaclass
Person superclass                  Person class class
= Object                           = Metaclass
Object superclass                  Object class class
= nil                              = Metaclass
“The parallel metaclass            Class class class
hierarchy”                         = Metaclass
Student class name                 ClassDescription class class
= ‘Student class’                  = Metaclass
Student class superclass           Behavior class class
= Person class                     = Metaclass
Object class superclass            Metaclass superclass
= Class                            = ClassDescription
Class superclass                   Metaclass superclass superclass
= ClassDescription                 = Behavior
ClassDescription superclass        “The fixpoint”
= Behavior                         Metaclass class class
Behavior superclass                = Metaclass
= Object

Michele Lanza                 64                          Smalltalk in a Nutshell
Conclusion




beauty and the beholder
A Glimpse of Style
   ‣ There is much more to say & learn about Smalltalk
   ‣ We did not even scratch the surface of reflection
   ‣ There is a reason why most of the important recent
     innovations in software development came through
     Smalltalk
        ‣ But it’s impossible to convey that in 90 minutes..
   ‣ If you are intrigued grab an ESUG DVD and play with it
        ‣ Then come & talk to me and my research group

[ you areStillInterested ]
  ifTrue: [ come and: [ talk to: me or: [ my group ]]]
  ifFalse: [ bother not ]

Michele Lanza                         66                       Smalltalk in a Nutshell
The End




thank you

More Related Content

Viewers also liked

Action-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVCAction-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVCPaul Jones
 
MVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,MobileMVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,Mobilenaral
 
The Visual Terminator
The Visual TerminatorThe Visual Terminator
The Visual TerminatorMichele Lanza
 
Beauty is in the Eye of the Beholder
Beauty is in the Eye of the BeholderBeauty is in the Eye of the Beholder
Beauty is in the Eye of the BeholderMichele Lanza
 
Of Code and Change: Beautiful Software
Of Code and Change: Beautiful SoftwareOf Code and Change: Beautiful Software
Of Code and Change: Beautiful SoftwareMichele Lanza
 
Action-Domain-Responder: A Web-Specific Refinement of Model-View-Controller
Action-Domain-Responder: A Web-Specific Refinement of Model-View-ControllerAction-Domain-Responder: A Web-Specific Refinement of Model-View-Controller
Action-Domain-Responder: A Web-Specific Refinement of Model-View-ControllerPaul Jones
 
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...Michele Lanza
 
Software Visualization 101+
Software Visualization 101+Software Visualization 101+
Software Visualization 101+Michele Lanza
 
Software Visualization - Promises & Perils
Software Visualization - Promises & PerilsSoftware Visualization - Promises & Perils
Software Visualization - Promises & PerilsMichele Lanza
 
A Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software SystemsA Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software SystemsMichele Lanza
 
Object-Oriented Metrics in Practice
Object-Oriented Metrics in PracticeObject-Oriented Metrics in Practice
Object-Oriented Metrics in PracticeMichele Lanza
 
Algorithm and Programming (Introduction of Algorithms)
Algorithm and Programming (Introduction of Algorithms)Algorithm and Programming (Introduction of Algorithms)
Algorithm and Programming (Introduction of Algorithms)Adam Mukharil Bachtiar
 
Introduction to Algorithms
Introduction to AlgorithmsIntroduction to Algorithms
Introduction to AlgorithmsVenkatesh Iyer
 
Fundamentals of Web Development For Non-Developers
Fundamentals of Web Development For Non-DevelopersFundamentals of Web Development For Non-Developers
Fundamentals of Web Development For Non-DevelopersLemi Orhan Ergin
 

Viewers also liked (17)

Action-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVCAction-Domain-Responder: A Refinement of MVC
Action-Domain-Responder: A Refinement of MVC
 
MVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,MobileMVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,Mobile
 
The Visual Terminator
The Visual TerminatorThe Visual Terminator
The Visual Terminator
 
Beauty is in the Eye of the Beholder
Beauty is in the Eye of the BeholderBeauty is in the Eye of the Beholder
Beauty is in the Eye of the Beholder
 
Of Code and Change: Beautiful Software
Of Code and Change: Beautiful SoftwareOf Code and Change: Beautiful Software
Of Code and Change: Beautiful Software
 
Action-Domain-Responder: A Web-Specific Refinement of Model-View-Controller
Action-Domain-Responder: A Web-Specific Refinement of Model-View-ControllerAction-Domain-Responder: A Web-Specific Refinement of Model-View-Controller
Action-Domain-Responder: A Web-Specific Refinement of Model-View-Controller
 
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
 
Software Visualization 101+
Software Visualization 101+Software Visualization 101+
Software Visualization 101+
 
Seeing Software
Seeing SoftwareSeeing Software
Seeing Software
 
Software Visualization - Promises & Perils
Software Visualization - Promises & PerilsSoftware Visualization - Promises & Perils
Software Visualization - Promises & Perils
 
A Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software SystemsA Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software Systems
 
Object-Oriented Metrics in Practice
Object-Oriented Metrics in PracticeObject-Oriented Metrics in Practice
Object-Oriented Metrics in Practice
 
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
 
Algorithm and Programming (Introduction of Algorithms)
Algorithm and Programming (Introduction of Algorithms)Algorithm and Programming (Introduction of Algorithms)
Algorithm and Programming (Introduction of Algorithms)
 
Introduction to Algorithms
Introduction to AlgorithmsIntroduction to Algorithms
Introduction to Algorithms
 
Software Evolution
Software EvolutionSoftware Evolution
Software Evolution
 
Fundamentals of Web Development For Non-Developers
Fundamentals of Web Development For Non-DevelopersFundamentals of Web Development For Non-Developers
Fundamentals of Web Development For Non-Developers
 

Similar to Smalltalk In a Nutshell

Similar to Smalltalk In a Nutshell (20)

Take the Smalltalk Red Pill
Take the Smalltalk Red PillTake the Smalltalk Red Pill
Take the Smalltalk Red Pill
 
F-Script
F-ScriptF-Script
F-Script
 
Introduction of java
Introduction  of javaIntroduction  of java
Introduction of java
 
Java Class1
Java Class1Java Class1
Java Class1
 
Stable Squeak World Tour
Stable Squeak World TourStable Squeak World Tour
Stable Squeak World Tour
 
State Of Ajax Zend Con 08
State Of Ajax   Zend Con 08State Of Ajax   Zend Con 08
State Of Ajax Zend Con 08
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Peyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_futurePeyton jones-2011-parallel haskell-the_future
Peyton jones-2011-parallel haskell-the_future
 
Smalltalk and Business
Smalltalk and BusinessSmalltalk and Business
Smalltalk and Business
 
Kamaelia lightning2010opensource
Kamaelia lightning2010opensourceKamaelia lightning2010opensource
Kamaelia lightning2010opensource
 
Os Rego
Os RegoOs Rego
Os Rego
 
Java
JavaJava
Java
 
Java 2 computer science.pptx
Java 2 computer science.pptxJava 2 computer science.pptx
Java 2 computer science.pptx
 
.NET, OSS & Mono
.NET, OSS & Mono.NET, OSS & Mono
.NET, OSS & Mono
 
Squeak
SqueakSqueak
Squeak
 
Domain specific languages and Scala
Domain specific languages and ScalaDomain specific languages and Scala
Domain specific languages and Scala
 
20 Years of Java - Story of HER life
20 Years of Java - Story of HER life20 Years of Java - Story of HER life
20 Years of Java - Story of HER life
 
Dr. Rajeshree Khande :Intoduction to java
Dr. Rajeshree Khande :Intoduction to javaDr. Rajeshree Khande :Intoduction to java
Dr. Rajeshree Khande :Intoduction to java
 
Intoduction to java
Intoduction to javaIntoduction to java
Intoduction to java
 
Java
JavaJava
Java
 

Recently uploaded

Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)IES VE
 
20140402 - Smart house demo kit
20140402 - Smart house demo kit20140402 - Smart house demo kit
20140402 - Smart house demo kitJamie (Taka) Wang
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNeo4j
 
How to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxHow to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxKaustubhBhavsar6
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdfThe Good Food Institute
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)codyslingerland1
 
Automation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsAutomation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsDianaGray10
 
.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptxHansamali Gamage
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...DianaGray10
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameKapil Thakar
 
UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4DianaGray10
 
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxGraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxNeo4j
 
Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024
Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024
Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024Alkin Tezuysal
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechProduct School
 
Top 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTop 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTopCSSGallery
 
Oracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxOracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxSatishbabu Gunukula
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0DanBrown980551
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationKnoldus Inc.
 

Recently uploaded (20)

Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile Brochure
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)
 
20140402 - Smart house demo kit
20140402 - Smart house demo kit20140402 - Smart house demo kit
20140402 - Smart house demo kit
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4j
 
How to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxHow to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptx
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)
 
Automation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsAutomation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projects
 
.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First Frame
 
UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4
 
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptxGraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
GraphSummit Copenhagen 2024 - Neo4j Vision and Roadmap.pptx
 
Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024
Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024
Design and Modeling for MySQL SCALE 21X Pasadena, CA Mar 2024
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
 
Top 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTop 10 Squarespace Development Companies
Top 10 Squarespace Development Companies
 
Oracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxOracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptx
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its application
 

Smalltalk In a Nutshell

  • 1. Smalltalk in a Nutshell Michele Lanza
  • 2. Contents ‣ Introduction ‣ Origins of Smalltalk ‣ Key Concepts ‣ The Smalltalk Object Model ‣ Messages ‣ Metaclasses & Reflection ‣ Conclusion Michele Lanza 2 Smalltalk in a Nutshell
  • 3. Sources ‣ Own Material from the PF2 course ‣ Own Material from the Smalltalk course given in Bern ‣ External Material by ‣ Stéphane Ducasse, INRIA Lille ‣ Oscar Nierstrasz, Univ. of Bern ‣ “Squeak by Example” by Andrew Black, Stéphane Ducasse, Oscar Nierstrasz, Damien Pollet Michele Lanza 3 Smalltalk in a Nutshell
  • 5. What is Smalltalk? ‣ A pure object-oriented programming language ‣ “everything is an object” ‣ single inheritance, dynamically typed, truly reflective ‣ The origin of many innovations in OO development ‣ RDD, IDEs, MVC, XUnit, Refactorings, Design Patterns,... ‣ An improvement over many of its.. successors! ‣ An integrated development environment ‣ Class browser, debugger, inspector, refactoring engine, etc. ‣ A philosophy of development ‣ A “living universe” driven by a virtual machine Michele Lanza 5 Smalltalk in a Nutshell
  • 6. Smalltalk: a State of Mind! ‣ Small and uniform language ‣ Syntax fits on one sheet of paper ‣ Large library of reusable classes ‣ Advanced development tools ‣ Interactive virtual machine technology ‣ Truly platform-independent ‣ Team-working Environment ‣ Releasing, versioning, deploying Michele Lanza 6 Smalltalk in a Nutshell
  • 7. Smalltalk vs. C++ vs. Java Death Match Smalltalk C++ Java Object model Pure Hybrid Hybrid Garbage collection Automatic Manual Automatic Inheritance Single Multiple Single + Interfaces Type System Dynamic Static Static Reflection Fully reflective Introspection Introspection Concurrency Semaphores, Monitors Some libraries.. Monitors Categories, namespaces, Modules bundles, packages, ... Namespaces Packages Michele Lanza 7 Smalltalk in a Nutshell
  • 8. Smalltalk Implementations Platform Details Unix, Linux, based on Xerox PARC specs, but highly optimized. Visualworks Windows, Mac Binary cross-platform Windows, ObjectStudio Mainframes similar to VisualWorks, one day they will merge everything, free and open, based on the ST-80 specs. Squeak everything Effort started by Kay with a focus on Multimedia Unix, Linux, Gemstone/S Windows server-side, persistent, multi-user, active ODBMS native widgets, tight integration with Windows. Dolphin Windows Was free, became commercial, now free again Unix, Linux, Smalltalk X Windows splendid implementation of the ANSI standard Unix, Linux, free, well-versed for scripting GNU Smalltalk Windows maintained by our very own Paolo Bonzini :-) Unix, Windows, VisualAge OS/2 cross-platform via source, percursor to Eclipse Michele Lanza 8 Smalltalk in a Nutshell
  • 9. Community ‣ European Smalltalk User Group ‣ esug.org ‣ Squeakworld ‣ squeak.org ‣ Smalltalk Industry Council ‣ stic.org Michele Lanza 9 Smalltalk in a Nutshell
  • 10. Recommended Books ‣ Andrew Black, Stéphane Ducasse, Oscar Nierstrasz, Damien Pollet, “Squeak by Example”, 2007 ‣ Alec Sharp, “Smalltalk by Example”, MacGraw-Hill, 1997 ‣ Kent Beck, “Smalltalk - Best Practice Patterns”, Prentice Hall, 1997 ‣ Sherman Alpert et al., “The Design Patterns Smalltalk Companion”, Addison-Wesley, 1998 Michele Lanza 10 Smalltalk in a Nutshell
  • 12. The Roots ‣ Conceived in the late 60’s by Alan Kay, inspired by ‣ Douglas Engelbart - NLS (the oNLineSystem) to augment the human intellect, 1966 ‣ Seymour Papert - The Logo programming language, 1968 ‣ Ivan Sutherland - Sketchpad, 1963 ‣ LISP (Interpreter, Garbage Collection, Blocks) ‣ Simula (Classes, Message sending) ‣ Kay’s background in biology: the concept of communicating “cells” which later became “objects” Michele Lanza 12 Smalltalk in a Nutshell
  • 13. Xerox PARC ‣ The “Palo Alto Research Center” of Xerox ‣ Kay moved to PARC in 1972 to lead the “Learning Research Group” and work on Smalltalk, a language for teaching programming to children ‣ PARC, incubator of many concepts of modern computing, such as Graphical User Interfaces, Interpress (the precursor of Postscript), the Ethernet, the Laser printer (!), WYSIWYG editors, etc. Michele Lanza 13 Smalltalk in a Nutshell
  • 14. The Dynabook & The Alto ‣ The Dynabook, Kay’s vision of a laptop for children ‣ The Alto, a machine to run Smalltalk ‣ Precursor to Apple’s Lisa http://www.artmuseum.net/w2vr/archives/Kay/01_Dynabook.html Michele Lanza 14 Smalltalk in a Nutshell
  • 15. The Good Old Days... Michele Lanza 15 Smalltalk in a Nutshell
  • 16. Precursor, Innovator, Visionary ‣ 1st based on graphics (new hardware needed!) ‣ Multi-window environment (overlapping windows) ‣ IDE with debugger, compiler, text editor, etc. ‣ Browsing with a “pointing device” (yes...a mouse) ‣ Virtual machine ‣ Garbage collection ‣ Just in time compilation ‣ Everything is there, the complete source code ‣ Ideas were taken over by Apple and Microsoft Michele Lanza 16 Smalltalk in a Nutshell
  • 17. Key Concepts power & simplicity
  • 18. This is weird... “Try not to care - Beginning Smalltalk programmers often have trouble because they think they need to understand all the details of how a thing works before they can use it. This means it takes quite a while before they can master Transcript show: ‘Hello World’. One of the great leaps in OO is to be able to answer the question quot;How does this work?quot; with quot;I don’t carequot;“. Alan Knight, Smalltalk Guru Michele Lanza 18 Smalltalk in a Nutshell
  • 19. The Smalltalk “Image” ‣ Smalltalk uses image files, containing everything ‣ the complete source code of the language and more than 1000 library classes & the compiled byte-code ‣ The VM “executes” the image, where everything is alive, i.e., an object: Talk to whatever you want! Smalltalk Java Edit- and Run-time Edit-time Run-time Independence Hardware The image Source-code Byte-code (*.java) (*.class or *.jar) Source-code Byte-code Dependence Hardware Smalltalk Virtual Machine Java Virtual Machine (JVM) Computer Hardware Michele Lanza 19 Smalltalk in a Nutshell
  • 20. Syntax on a post card tax example WithNumber: x of Smal ltalk method syn tr ates every part sages, “A m ethod that illus binary, and key word mes t primitives . It has unary, block temporarie s), excep (but not and temporaries ), uses de clares arguments not an i nstance variable ses a globa l variable (but , integer, float ), uses acces string h aracter, symbol, d has li terals (array, c nil, sel f, and super, an ble true false, zero the pseudo varia and casc ade. It has both sequence , ass ignment, return oesn’t do anything usef ul, argum ent blocks. It d argument and one though.” t]. |y| Nil) if False: [self hal true & fal se not & (nil is size. y := se lf size + super ach | #($a #a ‘a ’ 1 1.0) do: [:e name); Transcript sh ow: (each class g); show: (each printStrin show: ‘ ‘]. ^ x < y Michele Lanza 20 Smalltalk in a Nutshell
  • 21. Smalltalk syntax in a nutshell Element explained exemplified ^ return ^’hello world’ ‘ string a string’ “ comment “smalltalk stinks” . separator self foo. self bar ; cascade self foo; bar # literal objects #mac #(1 2 3) [] block [: var | | tmp | expr ] || local or block variable | temp | := assignment foo := 27 $ character $b $a $r : end of selector name do:with: Michele Lanza 21 Smalltalk in a Nutshell
  • 22. Hello World! ‣ Transcript show: ‘Hello World!’ ‣ This is a message ‣ The object (actually it’s a class ;-) Transcript is the receiver of the message ‣ The selector of the message is #show: ‣ The argument is the string ‘Hello World!’ ‣ Vocabulary concerns: Message passing or sending is equivalent to “invoking a method” in Java or C++ Michele Lanza 22 Smalltalk in a Nutshell
  • 23. Smalltalk is weird ‣ It looks like an interpreted language ‣ but in reality it’s compiled just in time ‣ You can interact with all objects within the image ‣ DoIt; execute the currently selected code ‣ PrintIt; do & print the currently selected code ‣ InspectIt; do & inspect the currently selected code ‣ AcceptIt; in the context of methods and classes: compile! ‣ These are not messages, only an idiom for interaction! Michele Lanza 23 Smalltalk in a Nutshell
  • 24. Defining Classes & Variables ‣ Edit the class creation template class name superclass name instance variables Michele Lanza 24 Smalltalk in a Nutshell
  • 25. Defining Methods: Fill in the template ‣ Smalltalk methods always return the object they belong to, unless specified otherwise Michele Lanza 25 Smalltalk in a Nutshell
  • 26. Let’s see this Smalltalk thingy! Michele Lanza 26 Smalltalk in a Nutshell
  • 27. The Smalltalk Type System ‣ Smalltalk is a dynamically typed language ‣ You don’t care about the types of your variables, as long as they can respond to the message you send them ‣ Ruby programmers call this “duck typing” ‣ There are some fancy things like #become: but it’s out of scope Michele Lanza 27 Smalltalk in a Nutshell
  • 28. Blocks and Control Constructs ‣ All Smalltalk control constructs are implemented by message passing ‣ No keywords; open & extensible ‣ A block is a closure (== a lambda abstraction) ‣ A function that captures variable names in its lexical context ‣ A first-class value that can be stored, passed, evaluated ‣ Useful to delay evaluation [ :arg1 :arg2 | | temp1 temp2 | expression. expression ] |sqr| sqr := [ :n | n*n]. sqr value: 5 [:x :y | x + y + 3 ] value: 3 value: 4 Michele Lanza 28 Smalltalk in a Nutshell
  • 29. Booleans ‣ Slick implementation ‣ true and false are unique Object instances of True and False ... ... ‣ Lazy evaluation with and: and Boolean or: ifTrue:IfFalse: not & false and: [ 1 / 0 ] 10 odd ifTrue: [ .. ] ifFalse: [ .. ] True False ‣ Blocks and Booleans are Crucial ifTrue:IfFalse: ifTrue:IfFalse: not not & & for the implementation of loops Michele Lanza 29 Smalltalk in a Nutshell
  • 30. Looping Madness ‣ Various kinds of loops are possible | n | n := 10. [ n > 0 ] whileTrue: [ Transcript show: n printString; cr. n := n - 1 ] 1 to: 10 do: [ :n | Transcript show: n printString; cr ] 10 timesRepeat: [ Transcript show: ‘hi’; cr ]. ‣ But loops without Collections are just half as fun.. Michele Lanza 30 Smalltalk in a Nutshell
  • 31. Collections ‣ The Collection hierarchy offers many of the most powerful classes in the Smalltalk system ‣ It would be enough material for a lecture itself! ‣ Some of these classes have been around for more than 30 years! Therefore: Do not program your own collections... Object Collection SequenceableCollection Set Bag ArrayedCollection OrderedCollection LinkedList Dictionary Array String Text SortedCollection Interval IdentityDictionary ByteString Symbol Heap Michele Lanza 31 Smalltalk in a Nutshell
  • 32. Classic Ways to Iterate aCollection do: aOneParameterBlock #(15 10 19 68) do: [ :each | Transcript show: each printString; cr ] aCollection collect: aOneParameterBlock #(15 10 19 68) collect: [ :i | i odd ] PrintIt => #(true false true false) aCollection with: anotherCollection do: aBinaryBlock #(1 2 3) with: #(10 20 30) do: [:x :y | Transcript show: (y * x) printString; cr ] aCollection select: aOneParameterPredicateBlock #(15 10 19 68) select: [ :n | n odd ] => PrintIt => #(15 19) aCollection reject: aOneParameterPredicateBlock #(15 10 19 68) reject: [ :i | i odd ] => PrintIt => #(10 68) aCollection detect: aOneParameterPredicateBlock #(12 10 19 68 21) detect: [ :j | j odd ] => PrintIt => 19 aCollection detect: aOneParameterPredicateBlock ifNone: aBlock #(12 10 16 68) detect: [ :j | j odd ] ifNone: [ ‘no odd stuff here’] => PrintIt => ‘no odd stuff here’ More cool stuff: #includes:, #size, #isEmpty, #contains: #anySatisfy Michele Lanza 32 Smalltalk in a Nutshell
  • 33. Break
  • 34. The Smalltalk Object Model everything is an object
  • 35. The Smalltalk Object Model ‣ Simple & uniform ‣ everything is an object ‣ objects communicate by sending each other messages ‣ The rules of the model 1. Everything is an object 2. Every object is an instance of a class 3. Every class has a superclass 4. Everything happens by message sends 5. Method lookup follows the inheritance chain Michele Lanza 35 Smalltalk in a Nutshell
  • 36. Everything is an object ‣ The Smalltalk mantra: Smalltalk is a consistent, uniform world written in itself ‣ The whole language is there and can be easily modified ‣ Everything is an object! ‣ The workspace, the window, the scroll bar, 1, 3+4, 100 factorial, ‘hello world’, the mouse, the parser, the compiler, the process scheduler, etc. etc. ‣ Classes are objects too! ‣ What? Yes, they are even first-class objects...you can send them messages, inspect them, etc. ‣ Smalltalk is a truly reflective system! Michele Lanza 36 Smalltalk in a Nutshell
  • 37. Every object is an instance of a class ‣ A class defines the structure of its instances via instance variables and the behavior of its instances via instance methods ‣ Each method has a name, called its selector, which is unique within the class ‣ Every object has a class, find out by sending the message #class to it 1 class -> SmallInteger 20 factorial class -> LargePositiveInteger ‘hello’ class -> ByteString #(1 2 3) class -> Array (4@5) class -> Point Object new class -> Object Michele Lanza 37 Smalltalk in a Nutshell
  • 38. Instance Variables ‣ Instance variables are “private” to the instance.. ‣ Java or C++ allow instance variables (called “members” or “fields”) to be accessed by any other instance of the same class ‣ The encapsulation boundary of objects in Java/C++ is the class, in Smalltalk it is the instance ‣ ..and “protected” to the subclasses ‣ Otherwise it is impossible to access them, unless one defines accessor methods Michele Lanza 38 Smalltalk in a Nutshell
  • 39. Instance Methods ‣ All methods are “public” ‣ Methods are grouped into protocols the indicate their intent ‣ They are conventions, not constraints.. ‣ Methods can access all instances variables of the object ‣ Some Smalltalkers prefer to do so only through accessors ‣ While this does not imply a performance penalty, it’s a questionable practice because you expose the state.. Michele Lanza 39 Smalltalk in a Nutshell
  • 40. Wait a second... ‣ If classes are objects too and every object is an instance of a class... ‣ Yes, classes are also instances of classes ‣ They are instances of metaclasses ‣ A metaclass is a class whose instance is a class ‣ It defines the structure and behavior of its instance, the class ‣ In 95% of the cases the metaclass is empty ‣ Whenever you create a class, the system automatically creates the corresponding metaclass Michele Lanza 40 Smalltalk in a Nutshell
  • 41. The Instance Side and The Class Side ‣ Classes are objects, therefore they have their own (class) instance variables and (class) methods ‣ A class and its metaclass are separate but tightly related ‣ The browser enforces this separation through the GUI ‣ Class methods & variables are similar to “static” members in primitive languages Michele Lanza 41 Smalltalk in a Nutshell
  • 42. Every class has one superclass ‣ Single inheritance ‣ The root of the world is Object ‣ Abstract classes and methods ‣ No syntactic construct to indicate abstractness ‣ Convention: A method is abstract it its body is “self subclassResponsibility” ‣ A class is abstract if it contains an abstract method Michele Lanza 42 Smalltalk in a Nutshell
  • 43. Everything happens by message sends ‣ The essence of Smalltalk: you do not care who implements things ‣ You politely ask objects to perform things for you ‣ ...who in turn may ask other objects for doing those things ‣ This leads to short methods and lots of message sends ‣ “Don’t do anything that you can push off onto someone else” ‣ Everything is dynamic, even messages to classes who in turn are just objects! Michele Lanza 43 Smalltalk in a Nutshell
  • 44. Nearly everything happens by message sends ‣ At some point action must take place ‣ Variable declarations ‣ Variable assignments ‣ Returns ‣ Primitives ‣ Pretty much everything else truly happens by message sends ‣ In particular accessing fields: since there are only private fields, you must provide accessor methods Michele Lanza 44 Smalltalk in a Nutshell
  • 45. Method lookup follows the inheritance chain ‣ What happens when an object receives a message? ‣ The class of the receiver looks up the method to use to handle the message ‣ If the class does not have that method, it asks its superclass, and so on, up the inheritance chain ‣ When the method is found, the arguments are bound to the parameters of the method, and the VM executes it ‣ What if a method does not return a value? ‣ What if a class re-implements superclass methods? ‣ What happens when no method is found? ‣ What is the difference between super and self? Michele Lanza 45 Smalltalk in a Nutshell
  • 46. What if a class reimplements superclass methods? ‣ The overridden method in the superclass will become “invisible” to the object ‣ To access its behavior you must use “super” ‣ The best example is given by the #initialize methods ‣ What is the difference between self and super? ‣ A self send triggers a dynamic method lookup starting in the class of the receiver ‣ A super send triggers a static method lookup starting in the superclass of the class implementing the method performing the super send Michele Lanza 46 Smalltalk in a Nutshell
  • 47. What happens when no method is found? ‣ Object is the root of the world, lookup stops here.. ‣ The VM will then send the message “self doesNotUnderstand: #foo”, where #foo is the selector of the method that was not found ‣ The lookup will start again in the original object, but this time we are looking for the method #doesNotUnderstand: ‣ If nothing is done about it, lookup will arrive again in the class Object, whose implementation says: Throw an exception and pop up the debugger! ‣ But...you can write your own emergency code by overriding #doesNotUnderstand: in your classes.. ‣ The implications are massive, but it’s out of scope here.. Michele Lanza 47 Smalltalk in a Nutshell
  • 49. Objects communicate via messages ‣ All communication in Smalltalk has the form receiver selector argument(s) ‣ 1+2 ‣ linePrinter nextNode: macNode ‣ Packet send: ‘Packet went to ‘ to: #lpr ‣ Workstation withName: #mac1 Michele Lanza 49 Smalltalk in a Nutshell
  • 50. Messages instead of keywords ‣ In most languages, basic operators and control constructs are defined as language constructs and (reserved) keywords ‣ In Smalltalk, there’s only messages sent to objects ‣ bitshift: (>>) is just a message sent to a number 10 bitShift: 2 ‣ ifTrue: (if-then-else) is just a message sent to a boolean (X > 1) ifTrue: [ Transcript show: ‘bigger’ ] ‣ do:; to:do: (loops) are just messages sent to collections of numbers #(a b c d) do: [ :each | Transcript show: each; cr ]. 1 to: 10 do: [ :i | Transcript show: i printString; cr] Michele Lanza 50 Smalltalk in a Nutshell
  • 51. Message Syntax in a Bottle ‣ Every expression is a message send ‣ There are 3 types of messages 1. Unary messages Transcript cr 5 factorial 25 squared 2. Binary messages 3 + 4 5 * 6 3. Keyword messages Transcript show: ‘hello world’ 2 raisedTo: 32 3 raisedTo: 10 modulo: 5 Michele Lanza 51 Smalltalk in a Nutshell
  • 52. Precedence ‣ (...) > Unary > Binary > Keyword 1. Evaluate left-to-right 2. Unary messages have highest precedence 3. Next are binary messages 4. Keyword messages have lowest precedence 5. Use parentheses to change precedence 2 raisedTo: 1 + 3 factorial 128 1 + 2 * 3 9 1 + (2 * 3) 7 Michele Lanza 52 Smalltalk in a Nutshell
  • 53. Metaclasses & Reflection elegance & uniformity
  • 54. Metaclasses & Reflection in 7 points ‣ Every object is an instance of a class ‣ Every class eventually inherits from Object ‣ Every class is an instance of a metaclass ‣ The metaclass hierarchy parallels the class hierarchy ‣ Every metaclass inherits from Class and Behavior ‣ Every metaclass is an instance of Metaclass ‣ The metaclass of Metaclass in an instance of Metaclass Michele Lanza 54 Smalltalk in a Nutshell
  • 55. Every object is an instance of a class ‣ Implication: every object points to its class ‣ If an object receives a message, the object will “ask” its class how it should act Student ‣ The behavior (== the methods) is implemented in the class ‣ aStudent The class also defines how much space an object occupies Michele Lanza 55 Smalltalk in a Nutshell
  • 56. Every class eventually inherits from Object ‣ Student “is a” Person “is an” Object ‣ “is a” mean that if an object receives a message, the method (in case it’s not implemented in the object’s class) will be looked up through the inheritance chain, if necessary up until Object ‣ Object represents the common object behavior ‣ Object does not have a superclass Michele Lanza 56 Smalltalk in a Nutshell
  • 57. Every class is an instance of a metaclass ‣ Classes are objects too! ‣ Every class X is the unique instance of its metaclass called X class ‣ Metaclasses are created implicitly when a class is created ‣ There is no explicit metaclass ‣ You cannot share metaclasses ‣ They are unique to their class Michele Lanza 57 Smalltalk in a Nutshell
  • 58. A closer look at metaclasses... Person subclasses Person allSubclasses DietPerson selectors DietPerson allSelectors DietPerson methodDictionary Person allInstances Person instVarNames Person canUnderstand: #diet Person allSubclasses do: [ :eachClass | eachClass selectors do: [ :eachSelector | Transcript show: eachClass name, '>>', eachSelector ; cr ]] OrderedCollection(WWTutor,DietPerson,FMPlayer) OrderedCollection(WWTutor,DietPerson,FMPlayer,WWPerson,SpagPerson) IdentitySet (#diet) <IdentitySet with 283 symbols) MethodDictionary (#diet) ... #('name' 'gender') false ... Michele Lanza 58 Smalltalk in a Nutshell
  • 59. The metaclass hierarchy parallels the class hierarchy ‣ Uniformity between classes and metaclasses ‣ Classes are objects too: ‣ Everything that holds for objects holds for classes too ‣ Same method lookup strategy! ‣ ..but in the method dictionary of the metaclass ‣ Imagine you would send new to Student..what happens? Michele Lanza 59 Smalltalk in a Nutshell
  • 60. Every metaclass inherits from Class and Behavior ‣ Every class “is a “ class ‣ Every metaclass inherits from Class who inherits eventually from Behavior ‣ Behavior implements the minimum state necessary for objects to have instances ‣ Behavior is the basic interface to the compiler and does things like creating method dictionaries, compiling methods, accessing variables and instances, accessing the class hierarchy (superclass, subclasses, etc.) ‣ So...a quiz: Where is new defined? Michele Lanza 60 Smalltalk in a Nutshell
  • 61. Who defines new? ‣ Behavior... Behavior ‣ because it models the 7 behavior that a class Class- Description should have, and creating 6 an instance of a class is a Class 8 thing that a class should be quot;<<creates>> 5 able to do Object Object class 4 Person Person class Student 3 Student class 1 2 new aStudent Michele Lanza 61 Smalltalk in a Nutshell
  • 62. Every metaclass is an instance of Metaclass ‣ Metaclass represents common metaclass behavior ‣ It is responsible for ‣ instance creation ‣ creating initialized instances of the metaclass’ sole instance ‣ class information (inheritance link, instance variables, etc.) Michele Lanza 62 Smalltalk in a Nutshell
  • 63. The metaclass of Metaclass is an instance of Metaclass Michele Lanza 63 Smalltalk in a Nutshell
  • 64. Meta-madness Quiz “The class hierarchy” “The metaclass hierarchy” Student superclass Student class class = Person = Metaclass Person superclass Person class class = Object = Metaclass Object superclass Object class class = nil = Metaclass “The parallel metaclass Class class class hierarchy” = Metaclass Student class name ClassDescription class class = ‘Student class’ = Metaclass Student class superclass Behavior class class = Person class = Metaclass Object class superclass Metaclass superclass = Class = ClassDescription Class superclass Metaclass superclass superclass = ClassDescription = Behavior ClassDescription superclass “The fixpoint” = Behavior Metaclass class class Behavior superclass = Metaclass = Object Michele Lanza 64 Smalltalk in a Nutshell
  • 66. A Glimpse of Style ‣ There is much more to say & learn about Smalltalk ‣ We did not even scratch the surface of reflection ‣ There is a reason why most of the important recent innovations in software development came through Smalltalk ‣ But it’s impossible to convey that in 90 minutes.. ‣ If you are intrigued grab an ESUG DVD and play with it ‣ Then come & talk to me and my research group [ you areStillInterested ] ifTrue: [ come and: [ talk to: me or: [ my group ]]] ifFalse: [ bother not ] Michele Lanza 66 Smalltalk in a Nutshell