30
Smalltalk: первое знакомство Борис Беркгаут [email protected]

Smalltalk: первое знакомство

  • Upload
    -

  • View
    1.031

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Smalltalk: первое знакомство

Smalltalk: первое знакомство

Борис Беркгаут[email protected]

Page 2: Smalltalk: первое знакомство

Smalltalk: первое знакомство

План:1. Сжатое изложение синтаксиса2. Работа с системой3. Главные особенности Smalltalk4. ?????5. PROFIT!

Page 3: Smalltalk: первое знакомство

Литералы

37199332678990121746799944815083520000000016rDEADBEAF

'Здравствуй, мир!'#Symbol

#(127 0 0 1)#(#formatVersion 1.0)

Page 4: Smalltalk: первое знакомство

Посылка сообщений объектам

1 negated

Page 5: Smalltalk: первое знакомство

Посылка сообщений объектам

1 negatedreceiver: 1selector: #negated

Page 6: Smalltalk: первое знакомство

Посылка сообщений объектам

1 negatedresult: -1

Page 7: Smalltalk: первое знакомство

Посылка сообщений объектам

3 + 2

Page 8: Smalltalk: первое знакомство

Посылка сообщений объектам

3 + 2receiver: 3selector: #+argument: 2

Page 9: Smalltalk: первое знакомство

Посылка сообщений объектам

3 + 2result: 5

NB! Приоритета операторов нетассоциативность всегда левая3 + 2 * 3 = 15

Page 10: Smalltalk: первое знакомство

Посылка сообщений объектам

Dialog warn: 'Здравствуй, мир!'

Page 11: Smalltalk: первое знакомство

Посылка сообщений объектам

Dialog warn: 'Здравствуй, мир!'receiver: <Dialog class>selector: #warn:argument: 'Здравствуй, мир!'

Page 12: Smalltalk: первое знакомство

Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200

Page 13: Smalltalk: первое знакомство

Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200

receiver: 0selector: #@argument: 0

Page 14: Smalltalk: первое знакомство

Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200

result: 0@0

Page 15: Smalltalk: первое знакомство

Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200

receiver: 100selector: #@argument: 200

Page 16: Smalltalk: первое знакомство

Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200

result: 100@200

Page 17: Smalltalk: первое знакомство

Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200

receiver: Rectangleselector: #origin:corner:arguments:

1. 0@02. 100@200

Page 18: Smalltalk: первое знакомство

Посылка сообщений: объекты работают вместеWindow currentWindow graphicsContextdisplayRectangle: (Rectangle origin: 0@0 corner: 100@200)at: 300@300

Page 19: Smalltalk: первое знакомство

Временные переменные

|myRect|myRect := Rectangle origin: 0@0 corner: [email protected] currentWindow graphicsContextdisplayRectangle: myRectat: 300@300

Page 20: Smalltalk: первое знакомство

А теперь создадим метод!

|myRect|myRect := Rectangle origin: 0@0 corner: [email protected] currentWindow graphicsContextdisplayRectangle: (myRect inflateBy: 50@50)at: 300@300

Page 21: Smalltalk: первое знакомство

А теперь создадим метод!

|myRect|myRect := Rectangle origin: 0@0 corner: [email protected] currentWindow graphicsContextdisplayRectangle: (myRect inflateBy: 50@50)at: 300@300

(метод создается прямо в открывшемся отладчике)

Page 22: Smalltalk: первое знакомство

Блоки

#(1 2 3) collect: [:x | 2 * x]

(1 to: 20) select: [:x | (x \\ 2) ~= 0]

Page 23: Smalltalk: первое знакомство

Условная конструкция

(1 to: 9) collect: [:x |x \\ 2 == 0ifTrue: [x]ifFalse: [1]]

Page 24: Smalltalk: первое знакомство

Условная конструкция: вид изнутри

Boolean >> ifTrue: trueBlock ifFalse: falseBlock^self subclassResponsibility

True >> ifTrue: trueBlock ifFalse: falseBlock^trueBlock value

False >> ifTrue: trueBlock ifFalse: falseBlock^falseBlock value

Page 25: Smalltalk: первое знакомство

Refactoring Browser

демонстрация

Page 26: Smalltalk: первое знакомство

Метамодель

Если классы -- это объекты, то какого же класса?

Page 27: Smalltalk: первое знакомство

Метамодель

Если классы -- это объекты, то какого же класса?

Page 28: Smalltalk: первое знакомство

Главные особенности Smalltalkи их следствия- Классы являются объектами- Числа, true, false, nil являются объектами- Процессы, контексты, методы являются объектами- Все вызовы полиморфны по определению- Переменные экземпляра доступны только методам- Динамическая типизация- Развитые средства интроспекции и самомодификации- Библиотека реализована на Smalltalk- Инструментальные средства реализованы на Smalltalk- Инкрементальная компиляция и object morphing- Сохранение состояния ВМ в виде образа (image)

Page 29: Smalltalk: первое знакомство

О чём ещё стоит упомянуть

- Средства версионирования- SUnit и mock objects- Профайлер- Управление GC, тонкая настройка- Взаимодействие со внешними библиотеками(в т.ч. callbacks)

- Работа с COM (в т.ч. call-ins), OLE- Glorp (ORM)- Seaside (Web Application Framework)

Page 30: Smalltalk: первое знакомство

Questions