section 8: simula smalltalk evolution of software...
TRANSCRIPT
![Page 1: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/1.jpg)
Evolution of Software Languages 1
Evolution of
Software Languages
Theo D'Hondt
Bachelor of Computer Science Faculty of Sciences and Bio-Engineering Sciences
Vrije Universiteit Brussel Academic Year 2015-2016
Section 8: Simula⇾Smalltalk
6: Simula⇾Smalltalk
![Page 2: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/2.jpg)
Evolution of Software Languages 2
Ole-Johan Dahl Kristen Nygaard
6: Simula⇾Smalltalk
http://www.jot.fm/issues/issue_2002_09/eulogy/
Simulation language Simula I ⇾ Simula 67 Extension of Algol 60 Call-by-value default Call-by-name still around Hoare’s Record Classes
![Page 3: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/3.jpg)
Evolution of Software Languages 3
Simula basics
6: Simula⇾Smalltalk
The development of the SIMULA languages Kristen Nygaard, Ole-Johan Dahl
HISTORY OF PROGRAMMING LANGUAGES 439, 1981 ACM ISBN 0-12-745040-8
Class class C( ... ); begin ... end;
Prefix class A class B; begin ... end;
Nested classes class A; begin
class B; begin ... end; B class C; begin ... end; ...
end;
No multiple inheritance X, Y class Z( ... ); begin ... end;
Assignment begin x := y; p :- q; end;
Garbage collection
Prefix blocks A begin
... B ...
end;
Procedures setter :- boolean procedure ( ... ) begin ... end;
Casts a qua B.c
Dot notation C.v
Class parameters class C( ... )
... new C( ...)
Virtual entities virtual procedure V( ... ) begin ... end;
![Page 4: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/4.jpg)
Evolution of Software Languages 4
Hoare’s Record Classes
6: Simula⇾Smalltalk
https://www.cs.cmu.edu/~charlie/courses/15-214/2014-fall/slides/25-history-oo.pdf
Hoare’s Record Classes
• C. A. R. Hoare proposed Record Classes in 1966– Goal: capture similarity and variation in data structures
record class Expression (
subclassesConstant(real value),
Variable(string name),
BinaryExpr(reference(Expression) left, right;
subclasses Sum, Difference, Product, Quotient));
• Each class described a particular record structure
• A subclass shared fields from its parent
• Variables could take any type in the subclass hierarchy
• A record class discriminator provided case analysis on the record type
OO HistoryPrinciples of Software System Construction
© 2014 Jonathan Aldrich8
Expression
Constant
value: realVariable
name: stringBinaryExpr
left: reference(Expression)
right: reference(Expression)
Sum
Product Quotient
Difference
Subclassing through concatenation
![Page 5: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/5.jpg)
Evolution of Software Languages 5
Simula example: overriding
6: Simula⇾Smalltalk
Vehicle class Bike; begin procedure sound; begin OutText("Ding ding"); OutImage; end; end;
ref (Vehicle) array vehicles (1 : 2); Integer i; vehicles (1) :- new Car; vehicles (2) :- new Bike; for i := 1 step 1 until 2 do vehicles(i).sound end;
begin class Vehicle; virtual: procedure sound is procedure sound;; begin end;
Vehicle class Car ; begin procedure sound; begin OutText("Beep beep"); OutImage; end; end;
https://www.cs.cmu.edu/~charlie/courses/15-214/2014-fall/slides/25-history-oo.pdf
taken from:
![Page 6: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/6.jpg)
Evolution of Software Languages 6
Simula example: simulation
6: Simula⇾Smalltalk
begin ref (Car) aCar; ref (Truck) aTruck;
class Car; begin Integer N; detach; for N := 1 step 1 until 10 do begin OutText("Driving me insane"); OutImage; resume(aTruck); end; end;
class Truck; begin Integer N; detach; for N := 1 step 1 until 10 do begin OutText("Keep on truckin'"); OutImage; resume(aCar); end; end;
aCar :- new Car; aTruck :- new Truck; resume(aCar); end;
https://www.cs.cmu.edu/~charlie/courses/15-214/2014-fall/slides/25-history-oo.pdf
taken from:
![Page 7: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/7.jpg)
Evolution of Software Languages 7
Alan Kay: Xerox PARC
6: Simula⇾Smalltalk
http://www.thepositiveencourager.global/alan-kay-on-creativity-3/
http://www.mac-history.net/
computer-history/2012-03-22/apple-and-xerox-parc
![Page 8: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/8.jpg)
Evolution of Software Languages 8
Smalltalk 80
6: Simula⇾Smalltalk
• Requires a workstation • 1Mpixels memory-mapped display • 1Mb memory • 32bits processor • pointing device with 2 buttons
• Uses a virtual machine with bytecodes • Uses a garbage collecting memory manager • Uses a uniform memory model (image) • Uses an integrated graphical kernel • Uses an object model for all language concepts • Single inhertance, ad-hoc poymorphism • Uses strong and dynamic typing of all values • Metaprogramming and computational reflection • A true IDE
![Page 9: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/9.jpg)
Evolution of Software Languages 9
Smalltalk-80 “the Blue Book”
6: Simula⇾Smalltalk
http://stephane.ducasse.free.fr/FreeBooks/BlueBook/Bluebook.pdf
![Page 10: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/10.jpg)
Evolution of Software Languages 10
Smalltalk @ VUB
6: Simula⇾Smalltalk
![Page 11: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/11.jpg)
Evolution of Software Languages 11
Terminology1
6: Simula⇾Smalltalk
Element of Smalltalk composed of private datastructures and a set of operations.
Request for an object to perform one of its operations.
Object that receives a message.
Set of messages identified by an object.
Specification of the set of objects with identical behaviour
Representative of a Class
Object
Message
Receiver
Interface
Class
Instance
![Page 12: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/12.jpg)
Evolution of Software Languages 12
Terminology1
6: Simula⇾Smalltalk
Element of Smalltalk composed of private datastructures and a set of operations.
Request for an object to perform one of its operations.
Object that receives a message.
Set of messages identified by an object.
Specification of the set of objects with identical behaviour
Representative of a Class
Object
Message
Receiver
Interface
Class
InstanceEveryth
ing is an object
![Page 13: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/13.jpg)
Evolution of Software Languages 13
Terminology2
6: Simula⇾Smalltalk
Instance variable
Method
Primitive method
System class
Name of a private datastructure of an object
Implementation of an operation of an object
Method directly executed by the Smalltalk virtual machine.
Class of the Smalltalk virtual image
![Page 14: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/14.jpg)
Evolution of Software Languages 14
Literal objects
6: Simula⇾Smalltalk
Numerical Character String Symbol Aggregate
literal objects
#('January' 27 1985)
#((‘one' 1 $1) ('two' 2 $2) . . .
(‘zero' 0 $0))
![Page 15: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/15.jpg)
Evolution of Software Languages 15
Variables
6: Simula⇾Smalltalk
Variable name
Private variables
Shared variables
Letters, digits
Lower case initial
Upper case initial
![Page 16: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/16.jpg)
Evolution of Software Languages 16
Pseudo variables
6: Simula⇾Smalltalk
nil Undefined variable true, false Boolean values self, super Reference to receiver
Boolean object = object with interface all messages for logical operations
• Names that refer to specific objects
• Cannot be assigned a value with <-
• Some are constant
• Some have a value depending on the context
![Page 17: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/17.jpg)
Evolution of Software Languages 17
Temporary variables
6: Simula⇾Smalltalk
• argument names and self only exist during the method activation
• moreover one can introduce local variables with the same characteristics
• these are being enumerated nominatively between message - pattern and method, preceded and followed by $| ; these are initialized to nil
![Page 18: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/18.jpg)
Evolution of Software Languages 18
Assignment
6: Simula⇾Smalltalk
name1 <- name2 <- ... <- nameN <- expression
• binds structure as well as contents to a name
• name refers to an instance of the class determined by the expression
colour <- #('red' 'orange' 'green')
![Page 19: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/19.jpg)
Evolution of Software Languages 19
Messages
6: Simula⇾Smalltalk
<receiver> = object that receives and implements the <selector> = identity of the message <arguments> = additional expressions that play a role in the method that implements the message
= interactions between objects
<receiver> <selector> [ <arguments> ]
![Page 20: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/20.jpg)
Evolution of Software Languages 20
Message patterns
6: Simula⇾Smalltalk
one or two non alpha–numerical symbols ( last ≠ $–); there is exactly one argument
unary message
keyword message
numerator / denominator
operator message
alpha-numerical name and no arguments
discriminant sqrt
one or more alpha-numerical names each followed by $:; each keyword associated with an argument
letter from:'Donald' on:#(12 2 85)
![Page 21: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/21.jpg)
Evolution of Software Languages 21
Message evaluation
6: Simula⇾Smalltalk
• The result of the evaluation of a method, consequence of the sending of a corresponding message, is an object
• Messages are bi-directional
sum <- 1 + 2 binds the integer object implementing 3 to sum
• The object returned by a method is not necessarily used
• Messages are 2nd class function calls
![Page 22: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/22.jpg)
Evolution of Software Languages 22 6: Simula⇾Smalltalk
• Left to right for unary messages and operators
• Unary messages have precedence
D <- (b * b – (4 * a * c)) sqrt
• Parentheses are used for reversal of this rule
perimeter <- ((rectangle width) + (rectangle height)) * 2
![Page 23: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/23.jpg)
Evolution of Software Languages 23
Expression evaluation2
6: Simula⇾Smalltalk
• in case of non–unary messages complex arguments have to be enclosed in parentheses
R width: x height y
R width: (x height y)
• operators have priority over non–unary messages
rectangle width: x * 2 height: y * 4
≠
![Page 24: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/24.jpg)
Evolution of Software Languages 24
Cascading
6: Simula⇾Smalltalk
multiple successive messages to one object
turtle FD: 10; RT: 90; BK: 5
![Page 25: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/25.jpg)
Evolution of Software Languages 25
Blocks
6: Simula⇾Smalltalk
• Expression of one or more sequential interactions enclosed by $[ and $] and separated by $.
• Blocks can be assigned to variables :
move <- [ turtle FD: 10. turtle RT: 90. turtle BK: 5 ]
• Does not imply the execution
• Execution occurs after sending the message value
move value
![Page 26: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/26.jpg)
Evolution of Software Languages 26
Control structures1
6: Simula⇾Smalltalk
iteration
<integer> timesRepeat: <block>
4 timesRepeat [turtle FD: 50; RT: 90]
selection
<boolean expression> ifTrue: <block> ifFalse: <block>
x <– a > b ifTrue:[ a ] ifFalse: [ b ]
![Page 27: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/27.jpg)
Evolution of Software Languages 27
Control structures2
6: Simula⇾Smalltalk
block arguments
= variable names with $: prefix appearing at the beginning of the block, terminated by $|
[:count :sum| [count < 10] whileTrue: [count <– count + 1. sum <– sum + array at: tel]. sum <– sum / count ] value: #(0 0)
i <– 1 . [i <= 10] whileTrue: [sum <– sum + (list at: i). i <– i + 1]
![Page 28: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/28.jpg)
Evolution of Software Languages 28
Control structures2
6: Simula⇾Smalltalk
block arguments
= variable names with $: prefix appearing at the beginning of the block, terminated by $|
[:count :sum| [count < 10] whileTrue: [count <– count + 1. sum <– sum + array at: tel]. sum <– sum / count ] value: #(0 0)
i <– 1 . [i <= 10] whileTrue: [sum <– sum + (list at: i). i <– i + 1]
closures
![Page 29: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/29.jpg)
Evolution of Software Languages 29
Applicative operations
6: Simula⇾Smalltalk
do: -message
collect: -message
sum <– 0 . #(1 2 3 4 5) do: [:sq | sum <– sum + (sq * sq)]
list <– #(1 2 3 4 5) collect: [:sq | sq * sq]
![Page 30: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/30.jpg)
Evolution of Software Languages 30
Classes
6: Simula⇾Smalltalk
Objects
• For all elements in Smalltalk ( from constant to entire compiler )
• Interaction by way of messages that make functionality of the object available .
• The implementation is hidden
Each object is an instance of a class
• All objects of a class have the same interface
![Page 31: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/31.jpg)
Evolution of Software Languages 31
Classes1
6: Simula⇾Smalltalk
• { instance variables } U { methods }
• Identified by a shared variable
- An object identifies its class
- Classes are manipulated within an expression
• A class is an object
• an instance of a class is created by sending it a
message
rt <– Rectangle new • Some classes accept additional messages
now <– Date today
![Page 32: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/32.jpg)
Evolution of Software Languages 32
Protocol
6: Simula⇾Smalltalk
a class is implemented in 2 stages
• defines # and structure of accepted messages
• says what, not how
• is composed of message patterns
<message selector> <arguments>
selector to be used when sending the message
symbolic name(s) for the argument
![Page 33: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/33.jpg)
Evolution of Software Languages 33
Message pattern
6: Simula⇾Smalltalk
rt <– Rectangle new.
rt lowerLeft: # (0 0) upperRight: # (10 20)
lowerLeft: lb upperRight: ra
a message pattern is compared ( " matched " ) to a message when sent, and expressions are bound to the symbolic names
message
message pattern
![Page 34: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/34.jpg)
Evolution of Software Languages 34
Message implementation
6: Simula⇾Smalltalk
A method implements a message
• argument names refer to expressions within the message, expressions are evaluated one by one; read - only
• The return - value is stated in one of these two ways :
( 1 ) implicit, the receiver
( 2 ) explicit with arithmetic expressions, i.e. expression with prefix $^
![Page 35: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/35.jpg)
Evolution of Software Languages 35
Variables
6: Simula⇾Smalltalk
• name of the class • instance variables • methods
remark : ±free syntax differentiation by way of fonts
a method has access to
( 1 ) instance ( 2 ) temporal ( 3 ) class ( 4 ) global ( 5 ) " pool "
![Page 36: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/36.jpg)
Evolution of Software Languages 36
Instance variables
6: Simula⇾Smalltalk
• lower case initial
• exist for the total life time of the object
• are only visible for the implementation of the object
• represent the state of the object
![Page 37: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/37.jpg)
Evolution of Software Languages 37
Temporary variables
6: Simula⇾Smalltalk
• lower case initial )
• only exist during the execution of a method
• are only visible for this method
• are being created / destroyed with sending of message
![Page 38: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/38.jpg)
Evolution of Software Languages 38
Class variables
6: Simula⇾Smalltalk
• upper case initial
• identify each of the classes present ( mostly shared variables )
• visible everywhere
![Page 39: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/39.jpg)
Evolution of Software Languages 39
Global variables
6: Simula⇾Smalltalk
• upper case initial
• instance of an object, beginning with upper case letter
• visible everywhere
![Page 40: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/40.jpg)
Evolution of Software Languages 40
Pool variables
6: Simula⇾Smalltalk
• upper case initial
• shared " variable with limited visibility
• common to every instance of a subset of the { all classes }
![Page 41: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/41.jpg)
Evolution of Software Languages 41
Primitive methods
6: Simula⇾Smalltalk
• most methods are implemented by sending messages to other objects
• some are directly interpreted by Smalltalk :
the primitive methods
• there are more or less a 100 " standard " primitive methods
![Page 42: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/42.jpg)
Evolution of Software Languages 42
Named instance variables
6: Simula⇾Smalltalk
• added to the list of instance variables
• are referenced in message expressions making up the methods
• default initialisation "nil"
![Page 43: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/43.jpg)
Evolution of Software Languages 43
Indexed instance variables1
6: Simula⇾Smalltalk
• added to the list implicitly
• there is only one indexed instance per object
• are indexed with the
at: and at:put:
messages • indexed with numbers from [ 1, … [
• 2 instances have = named i.v. but not necessary = # indexed i.v.
![Page 44: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/44.jpg)
Evolution of Software Languages 44
Indexed instance variables2
6: Simula⇾Smalltalk
For instance in String:
at: index ( size < index ) ifTrue: [ ^ nil ] ifFalse: [ ^ self at: index ]
at: index put: value (size < index ) ifTrue: [ self error "overflow"] ifFalse: [ ^ self at: index put: value ]
![Page 45: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/45.jpg)
Evolution of Software Languages 45
Indexed instance variables3
6: Simula⇾Smalltalk
• indexed classes ( = classes with indexed instance variables) being instantiated with
new: max
• if at: and at: put: are defined as messages upon an indexed class, then aggregates can be assigned
![Page 46: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/46.jpg)
Evolution of Software Languages 46
Self reference
6: Simula⇾Smalltalk
• via the self pseudo variable.
• self refers to the receiver of the message that is being executed .
factorial
(self = 0) ifTrue: [ ^ 1 ]. (self < 0) ifTrue: [ self wrong: 'wrong' ] ifFalse: [ ^ self * (self - 1) factorial ]
![Page 47: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/47.jpg)
Evolution of Software Languages 47
Subclasses
6: Simula⇾Smalltalk
• is derived from an existing class
• the instance variables are automatically copied • the list of instance variables may be extended • the methods, if not "overridden" are being copied
• " overriding" happens by introducing a homonym at the subclass level
![Page 48: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/48.jpg)
Evolution of Software Languages 48
Class names
6: Simula⇾Smalltalk
• class-names are unique
• instance variable names are unique within a class definition
• method-names ( message pattern) are unique within a class definition
• unique within a range of superclasses
![Page 49: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/49.jpg)
Evolution of Software Languages 49
Superclasses
6: Simula⇾Smalltalk
• a superclass of a class K = a class which K is a subclass of
• normally :for each class K there is one superclass
for each class K there are 0 or more subclasses
• this defines an hierarchical structure at the root of which we find a unique class that has no superclass: Object
![Page 50: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/50.jpg)
Evolution of Software Languages 50
Superclass chain
6: Simula⇾Smalltalk
• consider a class K
• the series of classes, beginning at Object and ending at K such that any 2 succesive classes are each other's superclass / subclass is the superclass chain of K
• if a message M with pattern P is sent to an instance I of K, the first method encountered with pattern P in the superclass chain of K is executed
![Page 51: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/51.jpg)
Evolution of Software Languages 51
Method lookup
6: Simula⇾Smalltalk
(1) M - pattern in K ---> corresponding method is executed
(2) M - pattern not in K
---> (a) K = Object ---> abort
(b) K <> Object ---> substitute super (K) for K and ---> (1)
![Page 52: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/52.jpg)
Evolution of Software Languages 52
ZZZ
6: Simula⇾Smalltalk
self • refers to M's receiver ( = instance I of K )
• M's method lookup starts in K
• if delegation ---> superclass this remains the case
super • = to self
• M's method lookup starts with the superclass of the class containing the method that contains the message
![Page 53: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/53.jpg)
Evolution of Software Languages 53
Abstract superclasses
6: Simula⇾Smalltalk
• only serve to be transformed in subclasses
• should "never" be instantiated
![Page 54: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/54.jpg)
Evolution of Software Languages 54
Subclass framework
6: Simula⇾Smalltalk
subclassResponsibility
• standard message in Object
• self subclassResponsability generates an errormessage, and is used as implementation of a message in an abstract subclass, which should be overridden in a subclass
shouldNotImplement
• standard message in Object
• self shouldNotImplement generates an errormessage and is used as implementation of a method that is impossible to implement.
![Page 55: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/55.jpg)
Evolution of Software Languages 55
Metaclasses1
6: Simula⇾Smalltalk
• classes are objects ---> each class is instance of a class, called metaclass
• Object is superclass of each class
![Page 56: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/56.jpg)
Evolution of Software Languages 56
Metaclasses2
6: Simula⇾Smalltalk
the class CLASS is:
• an abstract superclass of all metaclasses
• subclass of Object
a class and its (meta)class
• are defined together
• distinction is made between " class methods " and "instance methods "
• used for for class instantiation
![Page 57: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/57.jpg)
Evolution of Software Languages 57
Metaclasses3
6: Simula⇾Smalltalk
metaclasses inherit from superclasses with a restriction: there is a parallellism in sub / superclasses between metaclasses and classes
IF :class c1 instance of metaclass m1
class c2 instance of metaclass m2
c1 subclass of c2 m1 subclass of m2
THEN :
![Page 58: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/58.jpg)
Evolution of Software Languages 58
Object interface1
6: Simula⇾Smalltalk
functionality:
class ---> receiver's class
isKindOf: aClass ---> true if aClass
(super*) = receiver's class
isMemberOf: aClass ---> true if aClass = receiver's class
respondsTo: aSymbol ---> true if aSymbol element is of the interface of the receiver's class
![Page 59: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/59.jpg)
Evolution of Software Languages 59
Object interface2
6: Simula⇾Smalltalk
== anobject
= anobject
~ = anobject
~~ = anobject
hash
---> true if receiver and anobject = ---> true if receiver and anobject refer to the same components
---> unique integer reference of the receiver
---> true if receiver and anobject are not ==
---> true if receiver and anobject are not =
comparison:
![Page 60: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/60.jpg)
Evolution of Software Languages 60
Object interface3
6: Simula⇾Smalltalk
copy :
copy ---> instance with equal instance-variable content or shared variable
shallowCopy ---> instance with shared instance variables
deepCopy ---> instance with copy of the instance variables
![Page 61: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/61.jpg)
Evolution of Software Languages 61
Object interface4
6: Simula⇾Smalltalk
access:
at : index
at : index put : anobject
basicAt : index
basicAt : index put : anobject
size
basicSize
![Page 62: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/62.jpg)
Evolution of Software Languages 62
Object interface5
6: Simula⇾Smalltalk
error handling:
doesNotUnderstand: aMessagestates that the receiver does not understand "aMessage"
error : aString statement of error identified by "aString" to receiver
primitiveFailed statement that systemprimitive is abused by receiver
shouldNotImplement
subClassResponsabilitysee before
![Page 63: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/63.jpg)
Evolution of Software Languages 63
Dictionary framework1
6: Simula⇾Smalltalk
Object subclass: #AbstractDictionary instanceVariableNames: 'names values' classVariableNames: '' poolDictionaries: '' category: 'DemoDictionaries'
class methods
instantiation
new "instantiate new dictionary" | size | size := self minimalSize. ^ (super new ) initialize: size
private
minimalSize "implementation dependent initial size" self subclassResponsibility
instance methods statistics
size "dictionary size" self subclassResponsibility
![Page 64: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/64.jpg)
Evolution of Software Languages 64
Dictionary framework2
6: Simula⇾Smalltalk
access
at: key "retrieve value corresponding to key" ^self at: key notFound: [ self error: 'key not found']
at: key notFound: block "retrieve value corresponding to key, with user error handling" | index | index := self indexAtKey: key. (index = 0) ifTrue: [ block value ] ifFalse: [ ^values at: index ]
at: key put: value "insert new key / value pair" self at: key put: value duplicate: [ self error: 'duplicate key' ]
![Page 65: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/65.jpg)
Evolution of Software Languages 65
Dictionary framework3
6: Simula⇾Smalltalk
at: key put: value duplicate: block "insert new key / value pair with user error handling" | index | index <- self newIndexAtKey: key. (index = 0) ifTrue: [ block value ] ifFalse: [ values at: index put: value ]
at: key replace: value "replace value in existing pair" self at: key replace: value notFound: [self error: 'key not found' ]
at: key replace: value notFound: block "replace value in existing pair with user error handling" | index | index := self indexAtKey: key. (index = 0) ifTrue: [ block value ] ifFalse: [ values at: index put: value ]
![Page 66: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/66.jpg)
Evolution of Software Languages 66
Dictionary framework4
6: Simula⇾Smalltalk
newIndexAtKey: key "locate index for new key in names" (( self indexAtKey: key) = 0) ifTrue: [ self extend . names at: names size put: key. ^ names size ] ifFalse: [ ^ 0 ]
extend "extend implementation by one pair" | oldNames oldValues newSize | oldNames := names. oldValues := values. newSize := names size + 1. names := Array new: newSize. values := Array new: newSize. (1 to: oldNames size) do: [ :index | names at: index put: ( oldNames at: index ). values at: index put: ( oldValues at: index ) ]
![Page 67: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/67.jpg)
Evolution of Software Languages 67
Dictionary framework5
6: Simula⇾Smalltalk
AbstractDictionary subclass: #FastDictionary instanceVariableNames: 'size ' classVariableNames: '' poolDictionaries: '' category: 'DemoDictionaries'
class methods
instantiation
new "instantiate new fast dictionary" ^ (super new ) initializeSize
private
minimalSize "implementation dependent initial size" ^4
instance methods
statistics
size "dictionary size" ^size
private
![Page 68: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/68.jpg)
Evolution of Software Languages 68
Dictionary framework6
6: Simula⇾Smalltalk
indexAtKey: key "locate index of key in names" | index | index := ( key hash \\ names size ) + 1 . [ ( names at: index ) = key ] whileFalse: [ (names at: index) isNil ifTrue: [ ^ 0 ] . index := ( index \\ names size ) + 1 ] . ^ index
newIndexAtKey: key "locate index for new key in names" | index | (size = names size) ifTrue: [ self extend ] . index := ( key hash \\ names size ) + 1 . [ ( names at: index ) = key ] whileFalse: [ (names at: index) isNil ifTrue: [ size := size + 1 . names at: index put: key . ^ index ] . index := ( index \\ names size ) + 1 ] . ^ 0
![Page 69: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/69.jpg)
Evolution of Software Languages 69
Dictionary framework7
6: Simula⇾Smalltalk
extend "extend implementation by doubling the number of pairs" | oldNames oldValues newSize | oldNames := names. oldValues := values. newSize := names size * 2. names := Array new: newSize. values := Array new: newSize. size := 0 . (1 to: oldNames size) do: [ :index | self at: ( oldNames at: index ) put: ( oldValues at: index ) ]
initializeSize "set initial size to 0" size := 0
![Page 70: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/70.jpg)
Evolution of Software Languages 70
Conduit framework1
6: Simula⇾Smalltalk
7
sourcesource
pipesink
join
pipe
![Page 71: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/71.jpg)
Evolution of Software Languages 71
Conduit framework1
6: Simula⇾Smalltalk
Object subclass: #Conduit instanceVariableNames: 'name time capacity content ' classVariableNames: 'ConduitCollection ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
name: aName capacity: aCapacity "initialize a new Conduit" time := 0. content := 0. name := aName. capacity := aCapacity. self report: 'capacity:' with: capacity
![Page 72: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/72.jpg)
Evolution of Software Languages 72
Conduit framework1
6: Simula⇾Smalltalk
Object subclass: #Conduit instanceVariableNames: 'name time capacity content ' classVariableNames: 'ConduitCollection ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
name: aName capacity: aCapacity "initialize a new Conduit" time := 0. content := 0. name := aName. capacity := aCapacity. self report: 'capacity:' with: capacity
reporting
error: aMessage "report error message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: 'error:'; tab. Transcript show: aMessage; cr. self halt
report: aMessage with: aNumber "report status message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: aMessage; tab. Transcript show: aNumber printString; cr
![Page 73: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/73.jpg)
Evolution of Software Languages 73
Conduit framework1
6: Simula⇾Smalltalk
Object subclass: #Conduit instanceVariableNames: 'name time capacity content ' classVariableNames: 'ConduitCollection ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
name: aName capacity: aCapacity "initialize a new Conduit" time := 0. content := 0. name := aName. capacity := aCapacity. self report: 'capacity:' with: capacity
reporting
error: aMessage "report error message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: 'error:'; tab. Transcript show: aMessage; cr. self halt
report: aMessage with: aNumber "report status message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: aMessage; tab. Transcript show: aNumber printString; cr
processing
fill "instruct the conduit to fill itself" self subclassResponsibility
process "instruct the conduit to process itself" ^ self fill
tick "try to advance the clock" | flow | flow := self process. flow isNil ifFalse: [ content := content + flow. time := time + 1. self report: 'filled' with: flow. self report: 'contains' with: content ]
![Page 74: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/74.jpg)
Evolution of Software Languages 74
Conduit framework1
6: Simula⇾Smalltalk
Object subclass: #Conduit instanceVariableNames: 'name time capacity content ' classVariableNames: 'ConduitCollection ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
name: aName capacity: aCapacity "initialize a new Conduit" time := 0. content := 0. name := aName. capacity := aCapacity. self report: 'capacity:' with: capacity
reporting
error: aMessage "report error message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: 'error:'; tab. Transcript show: aMessage; cr. self halt
report: aMessage with: aNumber "report status message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: aMessage; tab. Transcript show: aNumber printString; cr
processing
fill "instruct the conduit to fill itself" self subclassResponsibility
process "instruct the conduit to process itself" ^ self fill
tick "try to advance the clock" | flow | flow := self process. flow isNil ifFalse: [ content := content + flow. time := time + 1. self report: 'filled' with: flow. self report: 'contains' with: content ]
class methods
instance creation
name: aName capacity: aCapacity "instantiate a new Conduit" | conduit | conduit := super new name: aName capacity: aCapacity. ConduitCollection add: conduit. ^ conduit
new "disable message " self shouldNotImplement
simulation
run: aCount "perform simulation" aCount timesRepeat: [ ConduitCollection do: [ : conduit | conduit tick] ]
initialisation
initialize "initialise Conduit framework" Transcript clear; show: 'Conduit simulation'; cr. ConduitCollection := OrderedCollection new
![Page 75: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/75.jpg)
Evolution of Software Languages 75
Conduit framework1
6: Simula⇾Smalltalk
Object subclass: #Conduit instanceVariableNames: 'name time capacity content ' classVariableNames: 'ConduitCollection ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
name: aName capacity: aCapacity "initialize a new Conduit" time := 0. content := 0. name := aName. capacity := aCapacity. self report: 'capacity:' with: capacity
reporting
error: aMessage "report error message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: 'error:'; tab. Transcript show: aMessage; cr. self halt
report: aMessage with: aNumber "report status message" Transcript show: 't ='; tab. Transcript show: time printString; tab. Transcript show: name; tab. Transcript show: aMessage; tab. Transcript show: aNumber printString; cr
processing
fill "instruct the conduit to fill itself" self subclassResponsibility
process "instruct the conduit to process itself" ^ self fill
tick "try to advance the clock" | flow | flow := self process. flow isNil ifFalse: [ content := content + flow. time := time + 1. self report: 'filled' with: flow. self report: 'contains' with: content ]
class methods
instance creation
name: aName capacity: aCapacity "instantiate a new Conduit" | conduit | conduit := super new name: aName capacity: aCapacity. ConduitCollection add: conduit. ^ conduit
new "disable message " self shouldNotImplement
simulation
run: aCount "perform simulation" aCount timesRepeat: [ ConduitCollection do: [ : conduit | conduit tick] ]
initialisation
initialize "initialise Conduit framework" Transcript clear; show: 'Conduit simulation'; cr. ConduitCollection := OrderedCollection new
example
simulate "Conduit simulate" | source1 source2 pipe1 pipe2 pipe3 join1 sink1 | Conduit initialize. source1 := Source name: 'Source 1' capacity: 5 profile: #((10 1) (20 3) (40 1) (50 4) (80 1) (90 5)). pipe1 := Pipe name: 'Pipe 1' capacity: 4 inConduit: source1. source2 := Source name: 'Source 2' capacity: 4 profile: #((10 2) (20 4) (40 1) (50 2) (80 1) (90 4)). pipe2 := Pipe name: 'Pipe 2' capacity: 2 inConduit: source2. join1 := Join name: 'Join 1' capacity: 3 inConduit1: pipe1 inConduit2: pipe2 . pipe3 := Pipe name: 'Pipe 3' capacity: 3 inConduit: join1. sink1 := Sink name: 'Sink 1' capacity: 4 inConduit: pipe3. Conduit run: 50
![Page 76: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/76.jpg)
Evolution of Software Languages 76
Conduit framework1
6: Simula⇾Smalltalk
Conduit subclass: #Sink instanceVariableNames: 'inConduit ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
fill "instruct the Sink to fill itself" ^ inConduit drain: capacity
private
inConduit: aDrainableConduit "initialize a new Sink" inConduit := aDrainableConduit
class methods
instance creation
name: aName capacity: aCapacity inConduit: aDrainableConduit "instantiate a new Source" ^ (super name: aName capacity: aCapacity) inConduit: aDrainableConduit
fill
capacity ~ section
![Page 77: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/77.jpg)
Evolution of Software Languages 77
Conduit framework1
6: Simula⇾Smalltalk
Conduit subclass: #DrainableConduit instanceVariableNames: 'lastFlow ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
drain: maxFlow "drain the Conduit" | flow | lastFlow isNil ifFalse: [ lastFlow := nil. flow := self flush: maxFlow. content := content - flow. self report: 'drained' with: flow. ^flow ] ifTrue: [ self report: 'requested' with: maxFlow. ^ nil ]
![Page 78: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/78.jpg)
Evolution of Software Languages 78
Conduit framework1
6: Simula⇾Smalltalk
Conduit subclass: #DrainableConduit instanceVariableNames: 'lastFlow ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
drain: maxFlow "drain the Conduit" | flow | lastFlow isNil ifFalse: [ lastFlow := nil. flow := self flush: maxFlow. content := content - flow. self report: 'drained' with: flow. ^flow ] ifTrue: [ self report: 'requested' with: maxFlow. ^ nil ]
flush: maxFlow "flush the Conduit" content > maxFlow ifTrue: [ ^ maxFlow ] ifFalse: [ ^ content ]
process "instruct the conduit to process itself" lastFlow isNil ifTrue: [ lastFlow := self fill ]. ^ lastFlow
![Page 79: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/79.jpg)
Evolution of Software Languages 79
Conduit framework1
6: Simula⇾Smalltalk
DrainableConduit subclass: #Pipe instanceVariableNames: 'inConduit cells ' classVariableNames: 'PipeLength ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
inConduit: aDrainableConduit "specific initialisation" PipeLength isNil ifTrue: [ PipeLength := 10 ]. inConduit := aDrainableConduit. cells := (Array new: PipeLength) atAllPut: 0
drainfillcapacity ~ section
delay ~ length
![Page 80: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/80.jpg)
Evolution of Software Languages
DrainableConduit subclass: #Pipe instanceVariableNames: 'inConduit cells ' classVariableNames: 'PipeLength ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
inConduit: aDrainableConduit "specific initialisation" PipeLength isNil ifTrue: [ PipeLength := 10 ]. inConduit := aDrainableConduit. cells := (Array new: PipeLength) atAllPut: 0
80
Conduit framework1
6: Simula⇾Smalltalk
processing
fill "instruct the Pipe to fill itself" | flow free used available | used := cells at: 1. flow := inConduit drain: capacity - used. flow isNil ifTrue: [ ^ nil ]. cells at: 1 put: used + flow. PipeLength to: 2 by: -1 do: [ : index | available := cells at: index - 1. used := cells at: index. free := capacity - used. available <= free ifTrue: [ cells at: index - 1 put: 0. cells at: index put: used + available ] ifFalse: [ cells at: index - 1 put: available - free. cells at: index put: capacity ] ]. ^ flow
![Page 81: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/81.jpg)
Evolution of Software Languages
DrainableConduit subclass: #Pipe instanceVariableNames: 'inConduit cells ' classVariableNames: 'PipeLength ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
inConduit: aDrainableConduit "specific initialisation" PipeLength isNil ifTrue: [ PipeLength := 10 ]. inConduit := aDrainableConduit. cells := (Array new: PipeLength) atAllPut: 0
81
Conduit framework1
6: Simula⇾Smalltalk
processing
fill "instruct the Pipe to fill itself" | flow free used available | used := cells at: 1. flow := inConduit drain: capacity - used. flow isNil ifTrue: [ ^ nil ]. cells at: 1 put: used + flow. PipeLength to: 2 by: -1 do: [ : index | available := cells at: index - 1. used := cells at: index. free := capacity - used. available <= free ifTrue: [ cells at: index - 1 put: 0. cells at: index put: used + available ] ifFalse: [ cells at: index - 1 put: available - free. cells at: index put: capacity ] ]. ^ flow
flush: maxFlow "flush the Pipe" | available | available := cells at: PipeLength. available > maxFlow ifTrue: [ cells at: PipeLength put: (available - maxFlow). ^ maxFlow ] ifFalse: [ cells at: PipeLength put: 0. ^ available ]
![Page 82: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/82.jpg)
Evolution of Software Languages
DrainableConduit subclass: #Pipe instanceVariableNames: 'inConduit cells ' classVariableNames: 'PipeLength ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
private
inConduit: aDrainableConduit "specific initialisation" PipeLength isNil ifTrue: [ PipeLength := 10 ]. inConduit := aDrainableConduit. cells := (Array new: PipeLength) atAllPut: 0
82
Conduit framework1
6: Simula⇾Smalltalk
processing
fill "instruct the Pipe to fill itself" | flow free used available | used := cells at: 1. flow := inConduit drain: capacity - used. flow isNil ifTrue: [ ^ nil ]. cells at: 1 put: used + flow. PipeLength to: 2 by: -1 do: [ : index | available := cells at: index - 1. used := cells at: index. free := capacity - used. available <= free ifTrue: [ cells at: index - 1 put: 0. cells at: index put: used + available ] ifFalse: [ cells at: index - 1 put: available - free. cells at: index put: capacity ] ]. ^ flow
flush: maxFlow "flush the Pipe" | available | available := cells at: PipeLength. available > maxFlow ifTrue: [ cells at: PipeLength put: (available - maxFlow). ^ maxFlow ] ifFalse: [ cells at: PipeLength put: 0. ^ available ]
class methods
instance creation
name: aName capacity: aCapacity inConduit: aDrainableConduit "instantiate a new Pipe" ^(super name: aName capacity: aCapacity) inConduit: aDrainableConduit
![Page 83: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/83.jpg)
Evolution of Software Languages 83
Conduit framework1
6: Simula⇾Smalltalk
DrainableConduit subclass: #Join instanceVariableNames: 'inConduit1 inConduit2 flow1 flow2 ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
fill "instruct the Join to fill itself" | flow | flow1 isNil ifTrue: [ flow1 := inConduit1 drain: (capacity - content) // 2 ]. flow2 isNil ifTrue: [ flow2 := inConduit2 drain: (capacity - content + 1) // 2 ]. flow1 isNil | flow2 isNil ifTrue: [ ^ nil ] ifFalse: [ flow := flow1 + flow2. flow1 := nil. flow2 := nil. ^ flow ]
drain
delay ~ standard
fill fill
capacity ~ section
![Page 84: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/84.jpg)
Evolution of Software Languages
DrainableConduit subclass: #Join instanceVariableNames: 'inConduit1 inConduit2 flow1 flow2 ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
fill "instruct the Join to fill itself" | flow | flow1 isNil ifTrue: [ flow1 := inConduit1 drain: (capacity - content) // 2 ]. flow2 isNil ifTrue: [ flow2 := inConduit2 drain: (capacity - content + 1) // 2 ]. flow1 isNil | flow2 isNil ifTrue: [ ^ nil ] ifFalse: [ flow := flow1 + flow2. flow1 := nil. flow2 := nil. ^ flow ]
84
Conduit framework1
6: Simula⇾Smalltalk
processing
fill "instruct the Pipe to fill itself" | flow free used available | used := cells at: 1. flow := inConduit drain: capacity - used. flow isNil ifTrue: [ ^ nil ]. cells at: 1 put: used + flow. PipeLength to: 2 by: -1 do: [ : index | available := cells at: index - 1. used := cells at: index. free := capacity - used. available <= free ifTrue: [ cells at: index - 1 put: 0. cells at: index put: used + available ] ifFalse: [ cells at: index - 1 put: available - free. cells at: index put: capacity ] ]. ^ flow
private
inConduit1: aDrainableConduit1 inConduit2: aDrainableConduit2 "initialize a new Join" inConduit1 := aDrainableConduit1. inConduit2 := aDrainableConduit2. flow1 := nil. flow2 := nil
class methods
instance creation
name: aName capacity: aCapacity inConduit1: aDrainableConduit1 inConduit2: aDrainableConduit2 "instantiate a new Join" ^ (super name: aName capacity: aCapacity) inConduit1: aDrainableConduit1 inConduit2: aDrainableConduit2
![Page 85: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/85.jpg)
Evolution of Software Languages 85
Conduit framework1
6: Simula⇾Smalltalk
DrainableConduit subclass: #Source instanceVariableNames: 'sourceProfile produced ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
fill "instruct the Source to fill itself" | flow | flow := sourceProfile check: time. (content + flow) > capacity ifTrue: [ self report: 'overflow' with: content + flow - capacity. flow := capacity - content ]. produced := produced + flow. self report: 'produced' with: produced. ^ flow
capacity ~ volume
drain
fill
![Page 86: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/86.jpg)
Evolution of Software Languages
DrainableConduit subclass: #Source instanceVariableNames: 'sourceProfile produced ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
fill "instruct the Source to fill itself" | flow | flow := sourceProfile check: time. (content + flow) > capacity ifTrue: [ self report: 'overflow' with: content + flow - capacity. flow := capacity - content ]. produced := produced + flow. self report: 'produced' with: produced. ^ flow
86
Conduit framework1
6: Simula⇾Smalltalk
private
profile: aSequence "specific initialisation" | item | produced := 0. sourceProfile := Profile new. 1 to: aSequence size do: [ : index | item := aSequence at: index. sourceProfile register: (item at: 1) with: (item at: 2) ]
![Page 87: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/87.jpg)
Evolution of Software Languages
DrainableConduit subclass: #Source instanceVariableNames: 'sourceProfile produced ' classVariableNames: '' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
processing
fill "instruct the Source to fill itself" | flow | flow := sourceProfile check: time. (content + flow) > capacity ifTrue: [ self report: 'overflow' with: content + flow - capacity. flow := capacity - content ]. produced := produced + flow. self report: 'produced' with: produced. ^ flow
87
Conduit framework1
6: Simula⇾Smalltalk
private
profile: aSequence "specific initialisation" | item | produced := 0. sourceProfile := Profile new. 1 to: aSequence size do: [ : index | item := aSequence at: index. sourceProfile register: (item at: 1) with: (item at: 2) ]
class methods
instance creation
name: aName capacity: aCapacity profile: aSequence "instantiate a new Source" ^ (super name: aName capacity: aCapacity) profile: aSequence Conduit initialize
![Page 88: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/88.jpg)
Evolution of Software Languages 88
Conduit framework1
6: Simula⇾Smalltalk
Object subclass: #Profile instanceVariableNames: 'times flows top ' classVariableNames: 'MaxTable MaxTime ' poolDictionaries: '' category: 'Conduit-simulation'
instance methods
accessing
check: aTime "retrieve current flow" | time | top = 0 ifTrue: [ self error: 'Profile not initialized' ]. time := aTime rem: MaxTime. 1 to: top do: [ :index | (times at: index) >= time ifTrue: [ ^ flows at: index ] ]. ^ flows at: 1
configuration
register: aTime with: aFlow "set times and flows" top = MaxTable ifTrue: [ self error: 'Profile overflow' ]. top := top + 1. times at: top put: aTime. flows at: top put: aFlow
private
initProfile "initialize a new Profile" MaxTable isNil ifTrue: [ MaxTable := 10. MaxTime := 100 ]. top := 0. times := Array new: MaxTable. flows := Array new: MaxTable
class methods
instance creation
new "instantiate a new Profile " ^ super new initProfile
10 20
1
2
3
4
30 40 50 60 70 80 90
![Page 89: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/89.jpg)
Evolution of Software Languages 89
Smalltalk goodies
6: Simula⇾Smalltalk
• Memory management with handles (become:)
• Garbage collection
• Integrated graphics (bitblt)
• Metaprogramming
• Processes
• Model view controller
• Collections
• ...
![Page 90: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/90.jpg)
Evolution of Software Languages
• Memory management with handles (become:)
• Garbage collection
• Integrated graphics (bitblt)
• Metaprogramming
• Processes
• Model view controller
• Collections
• ...
90
Smalltalk goodies
6: Simula⇾Smalltalk
• No vararg (perform:)
• Closures ≠ methods
• Single image
• ...
BUT...
![Page 91: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/91.jpg)
Evolution of Software Languages 91
Conclusion
6: Simula⇾Smalltalk
• Smalltalk is major milestone: less powerful than Lisp but much more accessible
• It made objects popular
• It made dynamic languages popular
• It made metaprogramming popular
• It made garbage collection popular
• It showed the way for GUI / IDE
• It enabled versioning and OO databases
• It led the way to Self, Java, ...
• It was/is a commercially viable platform
• And so many things more ...
![Page 92: Section 8: Simula Smalltalk Evolution of Software …soft.vub.ac.be/~tjdhondt/ESL/Simula_to_Smalltalk_files...Evolution of Software Languages 3 Simula basics 6: Simula⇾Smalltalk](https://reader030.vdocument.in/reader030/viewer/2022041020/5ecf6ecc0ccc7120b4533757/html5/thumbnails/92.jpg)
Evolution of Software Languages 92
Assignment
6: Simula⇾Smalltalk
1. Make Squeak run (http://squeak.org)
2. Make Squeak run the Conduit simulation