2. История Smalltalk
● Был создан группой исследователей возглавляемой
Аланом Кэйем в исследовательском центре Xerox
PARC.
● Smalltalk-71 - первая реализация, разработанная за
несколько месяцев.
● Более поздняя версия, действительно использованная
для исследовательской работы, известна сейчас как
Smalltalk-72
● После существенных переработок, которые
зафиксировали несколько сторон семантики
выполнения для увеличения эффективности, была
создана версия известная как Smalltalk-76
● Smalltalk80 - теперь "всё - объекты!"
3. Smalltalk - настоящий ООП язык
● Объект - базовая единица объектно-ориентированной
системы.
● Объекты могут обладать состоянием.
● Посылка сообщения - единственный способ обмена
информацией между объектами.
4. Message passing vs. method
invocation
Обе операции состоят из двух основных этапов:
● поиск метода (method lookup)
● вызов метода (method invocation)
Статическая система: первый этап выполняется
компилятором при трансляции исходного кода в машинное
представление.
Динамическая система: оба этапа выполняются на стадии
выполнения программы.
5. Основные идеи
● Все является объектами
● Все доступно для изменения
● Динамическая типизация
● Сборка мусора встроена в язык и незаметна
разработчику
● Программы Smalltalk обычно компилируются в байткоды
и выполняются виртуальной машиной (ВМ), что
позволяет выполнять их на любом оборудовании, для
которого существует ВМ.
7. Лексические особенности
"this is a comment"
'this is a string'
#'this is a symbol'
#thisIsASymbolToo
:= //Means assignment
= //Means equality comparison
== //Means identity comparison
#(1 2 3 4 5)
'string1', 'string2'
16. ; не .
Вместо:
account deposit: 100 dollars;
collection add: transformation;
Следует писать:
account deposit: 100 dollars. "dollars - это метод!"
collection add: transformation.
17. Genius lies in simplicity
Вместо
|p|
p := Client new.
p name: 'Jack'.
p age: 32.
p address: 'Earth'.
можно писать
|p|
p := Client new
name: 'Jack';
age: 32;
address: 'Earth'.
18. Одинаковые имена методов доступа
и свойств объекта
C++:
long getAge () {return age;}
void setAge (long newAge) {age = newAge;}
Java:
long age () {return age;}
void age (long newAge) {age = newAge;}
SmallTalk:
age ^age
age: newAge age := newAge
Головоломка:
age age age: age age + age age
19. Использование коллекций
|ab|
a := OrderedCollection new
add: #red;
add: #green;
yourself.
b := Dictionary new
at: #red put: #rouge;
at: #green put: #vert;
yourself.
20. Синтаксис цикла
a do: [:item |
USE item FOR SOMETHING].
b do: [:item |
USE item FOR SOMETHING].
anAirplane passengers do: [:person |
person age <= 12
ifTrue: [..DO SOMETHING with person..]]
c := clients select: [:client | client netWorth > 500000]. "Очень
богатые клиенты"
d := clients collect: [:client | client name]. "имена клиентов"
21. Переменные функций
a = f (x) {return x + 1;} //C-Like syntax
a := [:x | x + 1] //Smalltalk syntax