2. Smalltalk Basics. © Oscar Nierstrasz ST — Smalltalk Basics 2.2 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages 

Slides:



Advertisements
Similar presentations
Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz.
Advertisements

Programming Languages and Paradigms The C Programming Language.
12. Common Errors, a few Puzzles. © O. Nierstrasz P2 — Common Errors, a few Puzzles 12.2 Common Errors, a few Puzzles Sources  Cay Horstmann, Computing.
The Web Warrior Guide to Web Design Technologies
Object Oriented Programming Chapter 7 Programming Languages by Ravi Sethi.
11. A bit of Smalltalk. © O. Nierstrasz P2 — A bit of Smalltalk 11.2 A bit of Smalltalk Overview  Some history  Smalltalk syntax & object model  The.
PHP Introduction.
Principles of Object-Oriented Software Development The language Smalltalk.
2. Smalltalk Basics. © Oscar Nierstrasz ST — Smalltalk Basics 2.2 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages 
7. Understanding Classes and Metaclasses. © Oscar Nierstrasz ST — Understanding Classes and Metaclasses 7.2 Roadmap  Metaclasses in 7 points  Indexed.
ESE Einführung in Software Engineering N. XXX Prof. O. Nierstrasz Fall Semester 2009.
© Oscar Nierstrasz ST — Smalltalk Basics 2.1 Change sets  Make sure your changes are logged to a new change set.
6. Debugging. Birds-eye view © Oscar Nierstrasz ST — Introduction 1.2 It can be easier to talk to objects than to read classes — The system is alive.
Stéphane Ducasse 1 The Taste of Smalltalk.
7. Fixed Points. © O. Nierstrasz PS — Fixed Points 7.2 Roadmap  Representing Numbers  Recursion and the Fixed-Point Combinator  The typed lambda calculus.
13. A bit of Smalltalk. © Oscar Nierstrasz 2 Roadmap  The origins of Smalltalk  What is Smalltalk?  Syntax in a nutshell  Seaside — web development.
Dynamic Object-Oriented Programming with Smalltalk 1. Introduction Prof. O. Nierstrasz Summer Semester 2006.
Metamodeling Seminar X. CHAPTER Prof. O. Nierstrasz Spring Semester 2008.
PZ06BX Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, PZ06BX - Introduction to Smalltalk Programming Language.
Some Basic Points on Classes
© Oscar Nierstrasz ST — Smalltalk Basics 2.1 Change sets  Make sure your changes are logged to a new change set.
S.Ducasse Stéphane Ducasse 1 A Taste of Smalltalk.
ESE Einführung in Software Engineering X. CHAPTER Prof. O. Nierstrasz Wintersemester 2005 / 2006.
6. Debugging. © Oscar Nierstrasz ST — Debugging 6.2 Roadmap  Common syntactic errors  Common semantic errors  Encapsulation errors  Class/instance.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 13 Object-Oriented Programming I am surprised.
N. XXX Prof. O. Nierstrasz Thanks to Jens Palsberg and Tony Hosking for their kind permission to reuse and adapt the CS132 and CS502 lecture notes.
7. Fixed Points. © O. Nierstrasz PS — Fixed Points 7.2 Roadmap Overview  Representing Numbers  Recursion and the Fixed-Point Combinator  The typed.
12. Common Errors, a few Puzzles. © O. Nierstrasz P2 — Common Errors, a few Puzzles 12.2 Common Errors, a few Puzzles Sources  Cay Horstmann, Computing.
6. Debugging. © Oscar Nierstrasz ST — Debugging 6.2 Roadmap  Common syntactic errors  Common semantic errors  Encapsulation errors  Class/instance.
JavaScript, Third Edition
Object-oriented programming and design 1 Smalltalk in a Nutshell Objects & classes Messages & methods Inheritance & metaclasses.
OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz.
CP — Concurrent Programming X. CHAPTER Prof. O. Nierstrasz Wintersemester 2005 / 2006.
3. Standard Classes. © Oscar Nierstrasz ST — Standard Classes 3.2 Roadmap  Object  Numbers, Characters, Strings and Arrays  Variables  Blocks and.
Stéphane Ducasse5.1 Smalltalk in a Nutshell OO Model in a Nutshell Syntax in a Nutshell.
12. A bit of Smalltalk. © O. Nierstrasz P2 — A bit of Smalltalk 11.2 Roadmap  Some history  Smalltalk syntax & object model  The Smalltalk environment.
4. Smalltalk Coding Idioms. © Oscar Nierstrasz ST — Smalltalk Coding Idioms 4.2 Roadmap  Snakes and Ladders — Cascade and Yourself  Lots of Little Methods.
12. eToys. © O. Nierstrasz PS — eToys 12.2 Denotational Semantics Overview:  … References:  …
Stéphane Ducasse 1 Smalltalk in a Nutshell.
Stéphane Ducasse4.1 A Taste of Smalltalk Two examples: –‘hello world’ –A Tomagoshi To give you an idea of: –the syntax –the elementary objects and classes.
S.Ducasse Stéphane Ducasse 1 The Taste of Smalltalk.
Introduction to Ruby CSE 413 Autumn 2008 Credit: Dan Grossman, CSE341.
Introduction to Java Appendix A. Appendix A: Introduction to Java2 Chapter Objectives To understand the essentials of object-oriented programming in Java.
Tutorial: Squeak — An Open-Source Smalltalk Environment Oscar Nierstrasz scg.unibe.ch TOOLS Europe 2008 Zürich, July 1, 2008.
Chapter 3: Data Types and Operators JavaScript - Introductory.
CS 598 Scripting Languages Design and Implementation 7. Smalltalk 80.
1 JavaScript in Context. Server-Side Programming.
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Smalltalk (and Squeak) Aida Dungan and Rick Shreve.
Basic Java Syntax COMP 401, Spring 2014 Lecture 2 1/14/2014.
JavaScript Scripting language What is Scripting ? A scripting language, script language, or extension language is a programming language.
Python Primer 1: Types and Operators © 2013 Goodrich, Tamassia, Goldwasser1Python Primer.
Smalltalk in a.NET World How to write a Smalltalk compiler without writing a VM John Brant
 In the java programming language, a keyword is one of 50 reserved words which have a predefined meaning in the language; because of this,
3C-1 Identifiers Variables Literal Objects  Numbers  Characters  Strings Control Structure  Blocks  Conditionals  Loops Messages Defining New Classes.
Stéphane Ducasse 1 Some Points on Classes.
S.Ducasse Stéphane Ducasse 1 Smalltalk in a Nutshell.
S.Ducasse Stéphane Ducasse savoie.fr e/ e/ 1 Smalltalk in a Nutshell.
CSE 3302 Programming Languages Chengkai Li Fall 2007 Smalltalk Lecture 14 – Smalltalk, Fall CSE3302 Programming Languages, UT-Arlington ©Chengkai.
Stéphane Ducasse 1 A Little Journey in the Smalltalk Syntax.
Administrative Issues Lecture 22 – Prolog (III), Fall 2007 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, HW3 (due at March 18 th ) Essay.
Information and Computer Sciences University of Hawaii, Manoa
7.1 What Is An Object Object-oriented program - Description or simulation of application Object-oriented programming is done by adopting or extending an.
Java Primer 1: Types, Classes and Operators
Programming Language Concepts (CIS 635)
Smalltalk – a Pure (and first) OOPL
Chapter 2 Squeak: Object-oriented design with multimedia applications
Introduction to Smalltalk
CSE 3302 Programming Languages
Smalltalk on a Dime.
Presentation transcript:

2. Smalltalk Basics

© Oscar Nierstrasz ST — Smalltalk Basics 2.2 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages  Methods, variables and blocks  Test-Driven Development  Managing Projects Selected material courtesy Stéphane Ducasse

© Oscar Nierstrasz ST — Smalltalk Basics 2.3 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages  Methods, variables and blocks  Test-Driven Development  Managing Projects

© Oscar Nierstrasz ST — Smalltalk Basics 2.4 Objects in Smalltalk  Everything is an object —Things only happen by message passing —Variables are dynamically bound  State is private to objects —“protected” for subclasses  Methods are public —“private” methods by convention only  (Nearly) every object is a reference —Unused objects are garbage-collected  Single inheritance

© Oscar Nierstrasz ST — Smalltalk Basics 2.5 Accept, DoIt, PrintIt and InspectIt  Accept —Compile a method or a class definition  DoIt —Evaluate an expression  PrintIt —Evaluate an expression and print the result (#printOn:)  InspectIt —Evaluate an expression and inspect the result (#inspect)

© Oscar Nierstrasz ST — Smalltalk Basics 2.6 Hello World  At anytime we can dynamically ask the system to evaluate an expression. To evaluate an expression, select it and with the middle mouse button apply doIt.  Transcript is a kind of “standard output” —a TextCollector instance associated with the launcher. Transcript show: 'hello world'

© Oscar Nierstrasz ST — Smalltalk Basics 2.7 “Hello World”

© Oscar Nierstrasz ST — Smalltalk Basics 2.8 Everything is an Object  Smalltalk is a consistent, uniform world written in itself. You can learn how it is implemented, you can extend it or even modify it. All the code is available and readable. —The workspace is an object. —The window is an instance of SystemWindow. —The text editor is an instance of ParagraphEditor. —The scrollbars are objects too. —'hello word' is an instance of String. —#show: is a Symbol —The mouse is an object. —The parser is an instance of Parser. —The compiler is an instance of Compiler. —The process scheduler is also an object.

© Oscar Nierstrasz ST — Smalltalk Basics 2.9 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages  Methods, variables and blocks  Test-Driven Development  Managing Projects

© Oscar Nierstrasz ST — Smalltalk Basics 2.10 Smalltalk Syntax on a Postcard exampleWithNumber: x "A method that illustrates every part of Smalltalk method syntax except primitives. It has unary, binary, and key word messages, declares arguments and temporaries (but not block temporaries), accesses a global variable (but not and instance variable), uses literals (array, character, symbol, string, integer, float), uses the pseudo variable true false, nil, self, and super, and has sequence, assignment, return and cascade. It has both zero argument and one argument blocks. It doesn’t do anything useful, though" |y| true & false not & (nil isNil) ifFalse: [self halt]. y := self size + super size. #($a #a 'a' 1 1.0) do: [:each | Transcript show: (each class name); show: (each printString); show: ' ']. ^ x < y exampleWithNumber: x "A method that illustrates every part of Smalltalk method syntax except primitives. It has unary, binary, and key word messages, declares arguments and temporaries (but not block temporaries), accesses a global variable (but not and instance variable), uses literals (array, character, symbol, string, integer, float), uses the pseudo variable true false, nil, self, and super, and has sequence, assignment, return and cascade. It has both zero argument and one argument blocks. It doesn’t do anything useful, though" |y| true & false not & (nil isNil) ifFalse: [self halt]. y := self size + super size. #($a #a 'a' 1 1.0) do: [:each | Transcript show: (each class name); show: (each printString); show: ' ']. ^ x < y

© Oscar Nierstrasz ST — Smalltalk Basics 2.11 Language Constructs ^return "…"comment #symbol or array '…'string [ ]block or byte array (VisualWorks).statement separator ;message cascade |…|local or block variable := assignment (also _ or  ) $_character :end of selector name _e_ _r_number exponent or radix !file element separator (used in change sets) for VM primitive calls

© Oscar Nierstrasz ST — Smalltalk Basics 2.12 Examples comment:"a comment" character:$c $h $a $r $a $c $t $e $r $s $# string:'a nice string' symbol:#mac #+ array:#(1 2 3 (1 3) $a 4) byte array (VW):#[1 2 3] Integer:1, 2r101 Real:1.5, 6.03e-34,4, 2.4e7 fraction:1/33 boolean:true, false pseudo variablesself, super Note is not an element of the syntax, but just a message sent to a number. This is the same for /, bitShift, ifTrue:, do:...

© Oscar Nierstrasz ST — Smalltalk Basics 2.13 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages  Methods, variables and blocks  Test-Driven Development  Managing Projects

© Oscar Nierstrasz ST — Smalltalk Basics 2.14 Messages instead of keywords  In most languages, basic operators and control constructs are defined as language constructs and keywords  In Smalltalk, there are only messages sent to objects —bitShift: (>>) is just a message sent to numbers —ifTrue: (if-then-else) is just a message sent to a boolean —do:, to:do: (loops) are just messages to collections or numbers  Minimal parsing  Language is extensible 10 bitShift: 2 (x>1) ifTrue: [ Transcript show: 'bigger' ] #(a b c d) do: [:each | Transcript show: each ; cr] 1 to: 10 do: [:i | Transcript show: i printString; cr] #(a b c d) do: [:each | Transcript show: each ; cr] 1 to: 10 do: [:i | Transcript show: i printString; cr]

© Oscar Nierstrasz ST — Smalltalk Basics 2.15 Smalltalk Syntax Every expression is a message send  Unary messages  Binary messages  Keyword messages Transcript cr 5 factorial Transcript cr 5 factorial Transcript show: 'hello world' 2 raisedTo: 32 3 raisedTo: 10 modulo: 5 Transcript show: 'hello world' 2 raisedTo: 32 3 raisedTo: 10 modulo: 5

© Oscar Nierstrasz ST — Smalltalk Basics 2.16 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: factorial * (2 * 3) * (2 * 3) 128 9(!) 7 9(!) 7

© Oscar Nierstrasz ST — Smalltalk Basics 2.17 Binary Messages  Syntax: —aReceiver aSelector anArgument —Where aSelector is made up of 1 or 2 characters from: + - / \ * ~ % | & ! ?, —Except: second character may not be $  Examples: 2 * >= 7 6 = 7 'hello', ' ', 'world' + 2<<5 64>>5 2 * >= 7 6 = 7 'hello', ' ', 'world' + 2<<5 64>>5

© Oscar Nierstrasz ST — Smalltalk Basics 2.18 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages  Methods, variables and blocks  Test-Driven Development  Managing Projects

© Oscar Nierstrasz ST — Smalltalk Basics 2.19 More syntax  Comments are enclosed in double quotes  Use periods to separate expressions  Use semi-colons to send a cascade of messages to the same object "This is a comment." Transcript cr; show: 'hello world'; cr Transcript cr. Transcript show: 'hello world’. Transcript cr "NB: don’t need one here" Transcript cr. Transcript show: 'hello world’. Transcript cr "NB: don’t need one here"

© Oscar Nierstrasz ST — Smalltalk Basics 2.20 Variables  Declare local variables with | … |  Use := or  (_) to assign a value to a variable | x y | x := 1

© Oscar Nierstrasz ST — Smalltalk Basics 2.21 Method Return  Use a caret to return a value from a method or a block  Methods always return a value —By default, methods return self max: aNumber ^ self < aNumber ifTrue: [aNumber] ifFalse: [self] max: aNumber ^ self < aNumber ifTrue: [aNumber] ifFalse: [self] 1 max: 2 2 2

© Oscar Nierstrasz ST — Smalltalk Basics 2.22 Block closures  Use square brackets to delay evaluation of expressions  Use a caret to return a value from inside a block within a method 1 < 2 ifTrue: [^'smaller'] ifFalse: [^'bigger'] ^ 1 < 2 ifTrue: ['smaller'] ifFalse: ['bigger'] 'smaller'

© Oscar Nierstrasz ST — Smalltalk Basics 2.23 Variables  Local variables within methods (or blocks) are delimited by |var|  Block parameters are delimited by :var| OrderedCollection>>collect: aBlock "Evaluate aBlock with each of my elements as the argument." | newCollection | newCollection := self species new: self size. firstIndex to: lastIndex do: [ :index | newCollection addLast: (aBlock value: (array at: index))]. ^ newCollection OrderedCollection>>collect: aBlock "Evaluate aBlock with each of my elements as the argument." | newCollection | newCollection := self species new: self size. firstIndex to: lastIndex do: [ :index | newCollection addLast: (aBlock value: (array at: index))]. ^ newCollection

© Oscar Nierstrasz ST — Smalltalk Basics 2.24 Control Structures  Every control structure is realized by message sends |n| n := 10. [n>0] whileTrue: [Transcript show: n; cr. n := n-1] |n| n := 10. [n>0] whileTrue: [Transcript show: n; cr. n := n-1] 1 to: 10 do: [:n| Transcript show: n; cr ] (1 to: 10) do: [:n| Transcript show: n; cr ]

© Oscar Nierstrasz ST — Smalltalk Basics 2.25 Creating objects  Class methods  Factory methods OrderedCollection new Array with: 1 with: 2 OrderedCollection new Array with: 1 with: 2 1/2 1/2 a Point a Fraction a Point a Fraction

© Oscar Nierstrasz ST — Smalltalk Basics 2.26 Creating classes  Send a message to a class (!) Number subclass: #Complex instanceVariableNames: 'real imaginary' classVariableNames: '' poolDictionaries: '' category: 'ComplexNumbers' Number subclass: #Complex instanceVariableNames: 'real imaginary' classVariableNames: '' poolDictionaries: '' category: 'ComplexNumbers'

© Oscar Nierstrasz ST — Smalltalk Basics 2.27 Some Conventions  Method selector: #add:  Method scope conventions —Instance Method defined in class Node: —Class Method defined in class Node (i.e., in the class of the the class Node)  aSomething is an instance of the class Something Node>>accept: aPacket Node class>>withName: aSymbol

© Oscar Nierstrasz ST — Smalltalk Basics 2.28 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages  Methods, variables and blocks  Test-Driven Development  Managing Projects

© Oscar Nierstrasz ST — Smalltalk Basics 2.29 Change sets  Make sure your changes are logged to a new change set

© Oscar Nierstrasz ST — Smalltalk Basics 2.30 SUnit

© Oscar Nierstrasz ST — Smalltalk Basics 2.31 Money TestCase subclass: #MoneyTest instanceVariableNames: 'chf2 chf8 chf10' classVariableNames: '' poolDictionaries: '' category: 'Money' TestCase subclass: #MoneyTest instanceVariableNames: 'chf2 chf8 chf10' classVariableNames: '' poolDictionaries: '' category: 'Money'  We will implement the Money example in Smalltalk —First, we develop a test case for a single currency NB: This is just a message sent to the TestCase class object (!)

© Oscar Nierstrasz ST — Smalltalk Basics 2.32 SetUp  We will need setters for the private Money state MoneyTest>>setUp chf2 := Money new currency: 'CHF'; amount: 2. chf8 := Money new currency: 'CHF'; amount: 8. chf10 := Money new currency: 'CHF'; amount: 10. MoneyTest>>setUp chf2 := Money new currency: 'CHF'; amount: 2. chf8 := Money new currency: 'CHF'; amount: 8. chf10 := Money new currency: 'CHF'; amount: 10.

© Oscar Nierstrasz ST — Smalltalk Basics 2.33 MoneyTest>>testEquals  Some obvious tests MoneyTest>>testEquals self assert: chf2 = chf2. self assert: chf2 = (Money new currency: 'CHF'; amount: 2). self assert: chf2 != chf8. MoneyTest>>testEquals self assert: chf2 = chf2. self assert: chf2 = (Money new currency: 'CHF'; amount: 2). self assert: chf2 != chf8.

© Oscar Nierstrasz ST — Smalltalk Basics 2.34 Money  We define Money as a subclass of Object, with getters and setters Object subclass: #Money instanceVariableNames: 'currency amount' classVariableNames: '' poolDictionaries: '' category: 'Money' Object subclass: #Money instanceVariableNames: 'currency amount' classVariableNames: '' poolDictionaries: '' category: 'Money' Money>>currency: aString currency := aString. Money>>currency: aString currency := aString. Money>>currency ^ currency Money>>currency ^ currency

© Oscar Nierstrasz ST — Smalltalk Basics 2.35 Failing tests

© Oscar Nierstrasz ST — Smalltalk Basics 2.36 Comparisons Money>>= aMoney ^ self currency = aMoney currency and: [ self amount = aMoney amount ] Money>>= aMoney ^ self currency = aMoney currency and: [ self amount = aMoney amount ] Money>>!= aMoney ^ (self = aMoney) not Money>>!= aMoney ^ (self = aMoney) not

© Oscar Nierstrasz ST — Smalltalk Basics 2.37 Constructors MoneyTest>>testEquals self assert: chf2 = chf2. self assert: chf2 = (Money currency: 'CHF' amount: 2). self assert: chf2 != chf8. MoneyTest>>testEquals self assert: chf2 = chf2. self assert: chf2 = (Money currency: 'CHF' amount: 2). self assert: chf2 != chf8. We need a constructor on the class side of Money

© Oscar Nierstrasz ST — Smalltalk Basics 2.38 Class methods NB: What “self” is referred to in the method body?

© Oscar Nierstrasz ST — Smalltalk Basics 2.39 Addition Money>>+ aMoney ^ Money currency: self currency amount: self amount + aMoney amount Money>>+ aMoney ^ Money currency: self currency amount: self amount + aMoney amount MoneyTest>>testAdd self assert: chf2 + chf8 = chf10 MoneyTest>>testAdd self assert: chf2 + chf8 = chf10 And so on …

© Oscar Nierstrasz ST — Smalltalk Basics 2.40 Filing out your changes  You can “file out” all your changes so they can be loaded into another image

© Oscar Nierstrasz ST — Smalltalk Basics 2.41 Change Sets 'From Squeak3.9alpha of 4 July 2005 [latest update: #7006] on 7 March 2006 at 12:52:26 pm'! Object subclass: #Money instanceVariableNames: 'currency amount' classVariableNames: '' poolDictionaries: '' category: 'Money'! !Money commentStamp: 'on 3/7/ :45' prior: 0! SUnit demo! TestCase subclass: #MoneyTest instanceVariableNames: 'chf2 chf8 chf10' classVariableNames: '' poolDictionaries: '' category: 'Money'! !MoneyTest commentStamp: 'on 3/7/ :44' prior: 0! SUnit demo! !Money methodsFor: 'arithmetic' stamp: 'on 3/7/ :52'! + aMoney ^ Money currency: self currency amount: self amount + aMoney amount! ! … 'From Squeak3.9alpha of 4 July 2005 [latest update: #7006] on 7 March 2006 at 12:52:26 pm'! Object subclass: #Money instanceVariableNames: 'currency amount' classVariableNames: '' poolDictionaries: '' category: 'Money'! !Money commentStamp: 'on 3/7/ :45' prior: 0! SUnit demo! TestCase subclass: #MoneyTest instanceVariableNames: 'chf2 chf8 chf10' classVariableNames: '' poolDictionaries: '' category: 'Money'! !MoneyTest commentStamp: 'on 3/7/ :44' prior: 0! SUnit demo! !Money methodsFor: 'arithmetic' stamp: 'on 3/7/ :52'! + aMoney ^ Money currency: self currency amount: self amount + aMoney amount! ! …

© Oscar Nierstrasz ST — Smalltalk Basics 2.42 Roadmap  Everything is an Object  Syntax on a Postcard  Three Kinds of Messages  Methods, variables and blocks  Test-Driven Development  Managing Projects

© Oscar Nierstrasz ST — Smalltalk Basics 2.43 SqueakSource.com

© Oscar Nierstrasz ST — Smalltalk Basics 2.44 Categories, Projects and Packages  A system category MyProject (and possibly MyProject-*) contains the classes of your application  A Monticello package MyProject contains the categories MyProject and MyProject-*  A SqueakSource project MyProject stores everything in the Monticello package MyProject

© Oscar Nierstrasz ST — Smalltalk Basics 2.45 Loading a project  To load a project from SqueakSource.com —Find the project in SqueakSource —Open the Monticello Browser —Add an HTTP Repository – Accept the code fragment from the SqueakSource page —Open the repository and load the latest version

© Oscar Nierstrasz ST — Smalltalk Basics 2.46 Loading a project

© Oscar Nierstrasz ST — Smalltalk Basics 2.47 Creating a project  To create a project on SqueakSource.com —Define your categories MyProject or MyProject-* —Create a SqueakSource project MyProject —Define a Monticello package MyProject —Add an HTTP Repository for MyProject – Accept the code fragment from the SqueakSource page —Save the the package

© Oscar Nierstrasz ST — Smalltalk Basics 2.48 What you should know!  How can you indicate that a method is “private”?  What is the difference between a comment and a string?  Why does 1+2*3 = 9?  What is a cascade?  How is a block like a lambda expression?  How do you create a new class?  How do you inspect an object?

© Oscar Nierstrasz ST — Smalltalk Basics 2.49 Can you answer these questions?  Why does Smalltalk support single (and not multiple) inheritance?  Is the cascade strictly necessary?  Why do you need to declare local variables if there are no static types?  How can you discover the class of GUI object?  How does SUnit differ from JUnit?

© Oscar Nierstrasz ST — Smalltalk Basics 2.50 License > Attribution-ShareAlike 2.5 You are free: to copy, distribute, display, and perform the work to make derivative works to make commercial use of the work Under the following conditions: Attribution. You must attribute the work in the manner specified by the author or licensor. Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. For any reuse or distribution, you must make clear to others the license terms of this work. Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. Attribution-ShareAlike 2.5 You are free: to copy, distribute, display, and perform the work to make derivative works to make commercial use of the work Under the following conditions: Attribution. You must attribute the work in the manner specified by the author or licensor. Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. For any reuse or distribution, you must make clear to others the license terms of this work. Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above.