Object-oriented programming and design 1 Smalltalk in a Nutshell Objects & classes Messages & methods Inheritance & metaclasses
Object-oriented programming and design 2 Smalltalk: Everything is an Object l Application objects: customer, inventory l GUI objects: button, text editor l Foundation: string, set, numbers, booleans l Tools: browser, debugger, compiler, GUI builder l Language implementation: class, method, context,
Object-oriented programming and design 3 Communicating with an Object All computation is done by objects. The only way to interact with an object is to "send a message" to it. Smalltalk has three kinds of syntax for sending a message. All messages have same implementation.
Object-oriented programming and design 4 Three Kinds of Message Syntax Unary messages aSalaryChange date Keyword messages earned at: date add: money Binary messages (worked - 40) max: 0
Object-oriented programming and design 5 One Way to Send a Message Object responds to message by looking in its class for a method with the same selector. If it doesn't find the method, it looks in its superclass. Repeat until it finds the method. If it never does, there is an error.
Object-oriented programming and design 6 Smalltalk in a nutshell l Classes have methods and variables. l Methods are a sequence of messages, assignments, returns. l Variables, literals, pseudovariables l Blocks l Metaclasses - classes have classes
Object-oriented programming and design 7 Smalltalk Expression Syntax Literals 3.675, 14, 'hello', #weight, $d, #( #foo 'bar' 92) Assignments and variables v := v + 1 Messages
Object-oriented programming and design 8 Smalltalk Expression Syntax Sequences. Blocks. x < y ifTrue: [z := x] ifFalse: [z := y]. paychecks do: [:each | each post] Cascades aSet add: #blue; add: #red
Object-oriented programming and design 9 Smalltalk Method Syntax Returns ^socialSecurity + federalTaxes + stateTaxes
Object-oriented programming and design 10 Variables in Smalltalk l blockArguments and temporaries l methodArguments and temporaries l instanceVariables Can be accessed only by the object's methods. l Globals, class variables Any method in the scope can access it Variable is object of class Association
Pseudovariables l nil l true, false l self l super l thisContext (in Squeak and VisualWorks, but not standard Smalltalk) Object-oriented programming and design 11
Summary l Classes are objects that define methods and variables of their instances. l Method is a sequence of message-sends, assignments, and return statements l Three kinds of syntax for messages, but one way of implementing them l Literals. Variables. Blocks. Object-oriented programming and design 12
Object-oriented programming and design 13 Message Lookup and Inheritance EmployeeTransaction has subclasses Paycheck, SalaryChange, and Timecard. EmployeeTransaction defines the instance variable date and the method: date ^date
EmployeeTransactiondate Paycheck check107/09/95 aPaycheck date
Object-oriented programming and design 15 Using Variables printOnCheckStream: aStream aStream cr; cr. aStream next: 40 put: (Character space). DateFormat print: date on: aStream. aStream cr....
Object-oriented programming and design 16 More variables test "PayrollSystem test" | payroll day1 ralph | day1 := Date newDay: 5 year: payroll := self new. ralph := Employee new name: 'Ralph Johnson'.
Object-oriented programming and design 17 (continued) ralph changeSalaryFor: day1 to: 20. payroll addEmployee: ralph. self employee: ralph hours: self aLittleOvertime starting: day1. ^payroll
Object-oriented programming and design 18 Initializing an Object Every object needs to be initialized. Uninitialized variables are nil. The initialization method often defines the type of a variable. Two methods: one class and one instance.
Object-oriented programming and design 19 Class Methods Class is an object. It can have methods, too. For class Date class newDay: dayInteger year: yearInteger ^self new day: dayInteger year: yearInteger
Object-oriented programming and design 20 Instance initializing method For class Date day: dayInteger year: yearInteger day := dayInteger. year := yearInteger
Object-oriented programming and design 21 Creating a Date Date newDay: 3 year: 1995 Date new day: 3 year: 1995 day: 3 year: day year
Object-oriented programming and design 22 Complete Smalltalk Expressions (method definition) message, assignment, sequence, block, return Variables, literals Classes, inheritance Class methods / instance methods Pseudovariables nil, true, false self, super, thisContext
Object-oriented programming and design 23 Smalltalk (the language) is trivial Complexity is class library. New language extensions fit in as well as numbers and control structures. Language extension => core language is trivial
Object-oriented programming and design 24 Implications class library = language extension => must know class library must standardize class library merging class libraries is like merging language extensions hard to make class libraries
Object-oriented programming and design 25 Applications l No programs, just objects l No “main” routine l Most applications create new classes, reuse a lot of existing ones