Dynamic Object-Oriented Programming with
Smalltalk
1. Introduction
Prof. O. Nierstrasz
Autumn Semester 2009
ST Introduction
Smalltalk
Lecturer
Assistants
Prof. Oscar Nierstrasz
David Rthlisberger, Fabrizio Perin
Timur Altun
Lectures
IWI 001, Wednesdays @ 10h15-12h00
Exercises
IWI 001, Wednesdays @ 12h00-13h00
WWW
http://scg.unibe.ch/teaching/smalltalk
Selected material courtesy Stphane Ducasse
Oscar Nierstrasz
1.2
ST Introduction
Birds-eye view
Smalltalk is still today one of the
few fully reflective, fully dynamic,
object-oriented development
environments.
We will see how a simple, uniform
object model enables live, dynamic,
interactive software development.
Oscar Nierstrasz
1.3
ST Introduction
Roadmap
>
>
>
>
>
Course schedule, goals, resources
What is Smalltalk?
Origins of Smalltalk
Smalltalk key concepts
The Smalltalk environment
Oscar Nierstrasz
1.4
ST Introduction
Roadmap
>
Course schedule, goals, resources
>
What is Smalltalk?
>
Origins of Smalltalk
>
Smalltalk key concepts
>
The Smalltalk environment
Oscar Nierstrasz
1.5
ST Introduction
Course Schedule
Week
Date
Lecture
16-Sep-09
Introduction
23-Sep-09
Smalltalk Basics
30-Sep-09
Standard Classes
07-Oct-09
Smalltalk Coding Idioms
14-Oct-09
Seaside
21-Oct-09
Debugging
28-Oct-09
Best Practice Patterns
04-Nov-09
Refactoring and Design Patterns
11-Nov-09
Understanding Classes and Metaclasses
10
18-Nov-09
Reflection
11
25-Nov-09
Working with ByteCode
12
02-Dec-09
Virtual Machines
13
09-Dec-09
Traits and Classboxes
14
16-Dec-09
Final Exam
Oscar Nierstrasz
1.6
ST Introduction
Pharo by Example (preview)
Special preview
edition prepared
for this course
Oscar Nierstrasz
1.7
ST Introduction
Goals of this Course
>
>
>
>
>
>
Some history
A pure object-oriented model
Classes and metaclasses
Reflection (not just introspection)
Design and implementation of dynamic languages
Advanced object-oriented design concepts
Oscar Nierstrasz
1.8
LECTURE TITLE
What is surprising about Smalltalk
>
>
>
>
>
>
>
Everything is an object
Everything happens by sending messages
All the source code is there all the time
You can't lose code
You can change everything
You can change things without restarting the system
The Debugger is your Friend
Oscar Nierstrasz
ST Introduction
A Word of Advice
You do not have to know everything!!!
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
Transcriptshow:HelloWorld. One of the great
leaps in OO is to be able to answer the question How does
this work? with I dont care.
Alan Knight. Smalltalk Guru
Oscar Nierstrasz
1.10
ST Introduction
Resources
>
Pharo
www.pharo-project.org
>
History
en.wikipedia.org/wiki/Smalltalk
www.smalltalk.org/smalltalk/history.html
>
Free books
stephane.ducasse.free.fr/FreeBooks.html
>
European Smalltalk Users Group
www.esug.org
Oscar Nierstrasz
1.11
ST Introduction
Recommended Books
>
Alec Sharp, Smalltalk by Example, McGraw-Hill, 1997.
>
Kent Beck, Smalltalk Best Practice Patterns, Prentice
Hall, 1997.
>
Sherman Alpert et al., The Smalltalk Design Pattern
Companion, Addison-Wesley, 1998
Oscar Nierstrasz
1.12
ST Introduction
Roadmap
>
Course schedule, goals, resources
>
What is Smalltalk?
>
Origins of Smalltalk
>
Smalltalk key concepts
>
The Smalltalk environment
Oscar Nierstrasz
1.13
ST Introduction
Why Smalltalk?
>
Pure object-oriented language and environment
Everything is an object
>
Origin of many innovations in OO development
RDD, IDE, MVC, XUnit
>
Improves on many of its successors
Fully interactive and dynamic
Oscar Nierstrasz
1.14
ST Introduction
What is Smalltalk?
>
Pure OO language
Single inheritance
Dynamically typed
>
Language and environment
Guiding principle: Everything is an Object
Class browser, debugger, inspector,
Mature class library and tools
>
Virtual machine
Objects exist in a persistent image [+ changes]
Incremental compilation
Oscar Nierstrasz
1.15
ST Introduction
Smalltalk vs. C++ vs. Java
Smalltalk
C++
Java
Object model
Pure
Hybrid
Hybrid
Garbage collection
Automatic
Manual
Automatic
Inheritance
Single
Multiple
Single
Types
Dynamic
Static
Static
Reflection
Fully reflective
Introspection
Introspection
Concurrency
Semaphores,
Monitors
Categories,
namespaces
Some libraries
Monitors
Namespaces
Packages
Modules
Oscar Nierstrasz
1.16
ST Introduction
Smalltalk: a State of Mind
>
Small and uniform language
>
Large library of reusable classes
>
Advanced development tools
>
Interactive virtual machine technology
>
Team Working Environment
Syntax fits on one sheet of paper
Basic Data Structures, GUI classes, Database Access, Internet, Graphics
Browsers, GUI Builders, Inspectors, Change Management Tools, Crash
Recovery Tools, Project Management Tools
Truly platform-independent
Releasing, versioning, deploying
Oscar Nierstrasz
1.17
ST Introduction
Smalltalk in industry
>
Worldwide:
>
http://www.esug.org/companiesdevelopinginsmalltalk/
http://www.whysmalltalk.com/production/index.htm
http://www.stic.org/companies/companies.htm
http://www.goodstart.com/whousessmalltalk.php
In Bern:
Netstyle.ch
DVBern AG
Mobiliar (in-house)
Pulinco
Oscar Nierstrasz
1.18
ST Introduction
Roadmap
>
Course schedule, goals, resources
>
What is Smalltalk?
>
Origins of Smalltalk
>
Smalltalk key concepts
>
The Smalltalk environment
Oscar Nierstrasz
1.19
ST Introduction
Origins of Smalltalk
>
Project at Xerox PARC in 1970s
Language and environment for new generation of graphical
workstations (target: Dynabook)
>
In Smalltalk-72, every object was an independent
entity
Language was designed for children (!)
Evolved towards a meta-reflective architecture
>
Smalltalk-80 is the standard
Oscar Nierstrasz
1.20
ST Introduction
Smalltalk The Inspiration
>
>
>
>
>
>
>
>
Flex (Alan Kay, 1969)
Lisp (Interpreter, Blocks, Garbage Collection)
Turtle graphics (The Logo Project, Programming for Children)
Direct Manipulation Interfaces (Sketchpad, Alan Sutherland, 1960)
NLS, (Doug Engelbart, 1968), the augmentation of human intellect
Simula (Classes and Message Sending)
Xerox PARC (Palo Alto Research Center)
DynaBook: a Laptop Computer for Children
www.smalltalk.org/smalltalk/TheEarlyHistoryOfSmalltalk_Abstract.html
Oscar Nierstrasz
1.21
ST Introduction
Dynabook Mockup
www.artmuseum.net/w2vr/archives/Kay/01_Dynabook.html
Oscar Nierstrasz
1.22
ST Introduction
Alto: a Machine to Run Smalltalk
Smalltalk on Alto III
Oscar Nierstrasz
1.23
ST Introduction
Precursor, Innovator & Visionary
>
First to be based on Graphics
>
>
With a pointing device yes, a Mouse
Ideas were taken over
>
>
>
>
Platform-independent Virtual Machine
Garbage Collector
Just-in-time Compilation
Everything was there, the complete Source Code
Multi-Windowing Environment (Overlapping Windows)
Integrated Development Environment: Debugger, Compiler, Text
Editor, Browser
Apple Lisa, Mac
Microsoft Windows 1.0
Oscar Nierstrasz
1.24
ST Introduction
History
Oscar Nierstrasz
1.25
ST Introduction
The History (Internal)
>
1972 First Interpreter
More Agents than Objects
(every object could specify its own syntax!)
>
1976 Redesign
A hierarchy of classes with a unique root, fixed syntax, compact
bytecode, contexts, processes, semaphores, browsers, GUI
library.
Projects: ThingLab, Visual Programming Environment,
Programming by Rehearsal.
>
1978 NoteTaker Project
Experimentation with 8086 Microprocessor with only 256 KB
RAM.
Oscar Nierstrasz
1.26
ST Introduction
Oscar Nierstrasz
1.27
ST Introduction
The History (External)
>
1980 Smalltalk-80
ASCII, cleaning primitives for portability, metaclasses, blocks as firstclass objects, MVC.
Projects: Gallery Editor (mixing text, painting and animations) + Alternate
Reality Kit (physics simulation)
>
1981 Books + 4 external virtual machines
Dec, Apple, HP and Tektronix
GC by generation scavenging
>
>
>
1988 Creation of Parc Place Systems
1992 ANSI Draft
1995 New Smalltalk implementations
MT, Dolphin, Squeak, Smalltalk/X, GNU Smalltalk
>
>
2000 Fscript, GNU Smalltalk, SmallScript
2002 Smalltalk as OS: 128k ram
Oscar Nierstrasz
1.28
ST Introduction
What are Squeak and Pharo?
>
Squeak is a modern, open-source, highly portable, fast,
full-featured Smalltalk implementation
Based on original Smalltalk-80 code
>
Pharo is a lean and clean fork of Squeak
www.pharo-project.org
Oscar Nierstrasz
1.29
ST Introduction
Roadmap
>
Course schedule, goals, resources
>
What is Smalltalk?
>
Origins of Smalltalk
>
Smalltalk key concepts
>
The Smalltalk environment
Oscar Nierstrasz
1.30
ST Introduction
Smalltalk Key Concepts
>
Everything is an object
numbers, files, editors, compilers, points, tools, booleans
Everything happens by sending messages
> Every object is an instance of one class
>
which is also an object
A class defines the structure and the behavior of its instances.
>
Objects have private (protected) state
Encapsulation boundary is the object
>
Dynamic binding
Variables are dynamically typed and bound
Oscar Nierstrasz
1.31
ST Introduction
Objects and Classes
>
Every object is an instance of a class
A class specifies the structure and the behaviour of all its
instances
Instances of a class share the same behavior and have a
specific state
Classes are objects that create other instances
Metaclasses are classes that create classes as instances
Metaclasses describe class behaviour and state (subclasses,
method dictionary, instance variables...)
Oscar Nierstrasz
1.32
ST Introduction
Messages and Methods
>
Message which action to perform
aWorkstationaccept:aPacket
aMonstereat:aCookie
>
Method how to carry out the action
accept:aPacket
(aPacketisAddressedTo:self)
ifTrue:[
Transcriptshow:
'ApacketisacceptedbytheWorkstation',
selfnameasString]
ifFalse:[superaccept:aPacket]
Oscar Nierstrasz
1.33
ST Introduction
Smalltalk Run-Time Architecture
Alltheobje
Abyte
atamomen
thevir
IMAGE1.
Stand
IMAGE2
Shar
Oneperus
>
Virtual Machine + Image + Changes and Sources
>
Image = bytecodes
Sources and changes = code (text)
>
Oscar Nierstrasz
1.34
ST Introduction
Smalltalk Run-Time Architecture
>
Byte-code is translated to native code by a just-in-time
compiler
Some Smalltalks, but not Pharo
>
Source and changes are not needed to interpret the
byte-code.
Just needed for development
Normally removed for deployment
>
An application can be delivered as byte-code files that
will be executed with a VM.
The development image is stripped to remove the unnecessary
development components.
Oscar Nierstrasz
1.35
ST Introduction
Roadmap
>
Course schedule, goals, resources
>
What is Smalltalk?
>
Origins of Smalltalk
>
Smalltalk key concepts
>
The Smalltalk environment
Oscar Nierstrasz
1.36
ST Introduction
Mouse Semantics
Operate
Select
Oscar Nierstrasz
Window
1.37
ST Introduction
World Menu
Oscar Nierstrasz
1.38
ST Introduction
Hello World
Oscar Nierstrasz
1.39
ST Introduction
The Smalltalk Browser
Oscar Nierstrasz
1.40
ST Introduction
The Debugger
Oscar Nierstrasz
1.41
ST Introduction
The Inspector
Oscar Nierstrasz
1.42
ST Introduction
The Explorer
Oscar Nierstrasz
1.43
ST Introduction
Other Tools
>
File Browser
Browse, import, open files
>
Method Finder, Message Name tool
Find methods by name, behaviour
>
Change Sorter
Name, organize all source code changes
>
SUnit Test Runner
Manage & run unit tests
Oscar Nierstrasz
1.44
ST Introduction
File Browser
Oscar Nierstrasz
1.45
ST Introduction
Message Name Finder
Oscar Nierstrasz
1.46
ST Introduction
Method Finder
Oscar Nierstrasz
1.47
ST Introduction
Methods in ChangeSets & Versions
Oscar Nierstrasz
1.48
ST Introduction
Preferences
Oscar Nierstrasz
1.49
ST Introduction
SUnit
Oscar Nierstrasz
1.50
ST Introduction
Challenges of this Course
>
Mastering Smalltalk syntax
>
Pharo Programming Environment
>
Pharo Class Library
>
Object-oriented thinking
>
Fully dynamic environment
>
Smalltalk culture
Simple, but not Java-like
Requires some effort to learn at first, but worth the effort
Need time to learn what is there
This is the hardest part!
This is the most exciting part!
Best Practice Patterns (cf. book by Kent Beck)
Oscar Nierstrasz
1.51
ST Introduction
What you should know!
How does Smalltalk differ from Java or C++?
Where are Smalltalk programs stored?
Where are objects stored?
What was the Dynabook?
Is a class an object?
What is dynamic binding?
What is the difference between a message and a
method?
Oscar Nierstrasz
1.52
ST Introduction
Can you answer these questions?
What ideas did Smalltalk take from Simula? From Lisp?
Is there anything in Smalltalk which is not an object?
What exactly is stored in the changes file?
If objects have private state, then how can an Inspector
get at that state?
How do you create a new class?
What is the root of the class hierarchy?
If a class is an object, then what is its class? The class
of its class?
If you dont know, how would you find out?
Oscar Nierstrasz
1.53
ST Introduction
License
http://creativecommons.org/licenses/by-sa/3.0/
Attribution-ShareAlike 3.0 Unported
You are free:
to Share to copy, distribute and transmit the work
to Remix to adapt the work
Under the following conditions:
Attribution. You must attribute the work in the manner specified by the author or
licensor (but not in any way that suggests that they endorse you or your use of the
work).
Share Alike. If you alter, transform, or build upon this work, you may distribute the
resulting work only under the same, similar or a compatible license.
For any reuse or distribution, you must make clear to others the license terms of this work.
The best way to do this is with a link to this web page.
Any of the above conditions can be waived if you get permission from the copyright holder.
Nothing in this license impairs or restricts the author's moral rights.
Oscar Nierstrasz
1.54