smalltalk: первое знакомство
Post on 15-Jun-2015
1.031 Views
Preview:
TRANSCRIPT
Smalltalk: первое знакомство
Борис Беркгаутberkgaut@gmail.com
Smalltalk: первое знакомство
План:1. Сжатое изложение синтаксиса2. Работа с системой3. Главные особенности Smalltalk4. ?????5. PROFIT!
Литералы
37199332678990121746799944815083520000000016rDEADBEAF
'Здравствуй, мир!'#Symbol
#(127 0 0 1)#(#formatVersion 1.0)
Посылка сообщений объектам
1 negated
Посылка сообщений объектам
1 negatedreceiver: 1selector: #negated
Посылка сообщений объектам
1 negatedresult: -1
Посылка сообщений объектам
3 + 2
Посылка сообщений объектам
3 + 2receiver: 3selector: #+argument: 2
Посылка сообщений объектам
3 + 2result: 5
NB! Приоритета операторов нетассоциативность всегда левая3 + 2 * 3 = 15
Посылка сообщений объектам
Dialog warn: 'Здравствуй, мир!'
Посылка сообщений объектам
Dialog warn: 'Здравствуй, мир!'receiver: <Dialog class>selector: #warn:argument: 'Здравствуй, мир!'
Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200
Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200
receiver: 0selector: #@argument: 0
Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200
result: 0@0
Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200
receiver: 100selector: #@argument: 200
Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200
result: 100@200
Посылка сообщений: строим сложные объектыRectangle origin: 0@0 corner: 100@200
receiver: Rectangleselector: #origin:corner:arguments:
1. 0@02. 100@200
Посылка сообщений: объекты работают вместеWindow currentWindow graphicsContextdisplayRectangle: (Rectangle origin: 0@0 corner: 100@200)at: 300@300
Временные переменные
|myRect|myRect := Rectangle origin: 0@0 corner: 100@200.Window currentWindow graphicsContextdisplayRectangle: myRectat: 300@300
А теперь создадим метод!
|myRect|myRect := Rectangle origin: 0@0 corner: 100@200.Window currentWindow graphicsContextdisplayRectangle: (myRect inflateBy: 50@50)at: 300@300
А теперь создадим метод!
|myRect|myRect := Rectangle origin: 0@0 corner: 100@200.Window currentWindow graphicsContextdisplayRectangle: (myRect inflateBy: 50@50)at: 300@300
(метод создается прямо в открывшемся отладчике)
Блоки
#(1 2 3) collect: [:x | 2 * x]
(1 to: 20) select: [:x | (x \\ 2) ~= 0]
Условная конструкция
(1 to: 9) collect: [:x |x \\ 2 == 0ifTrue: [x]ifFalse: [1]]
Условная конструкция: вид изнутри
Boolean >> ifTrue: trueBlock ifFalse: falseBlock^self subclassResponsibility
True >> ifTrue: trueBlock ifFalse: falseBlock^trueBlock value
False >> ifTrue: trueBlock ifFalse: falseBlock^falseBlock value
Refactoring Browser
демонстрация
Метамодель
Если классы -- это объекты, то какого же класса?
Метамодель
Если классы -- это объекты, то какого же класса?
Главные особенности Smalltalkи их следствия- Классы являются объектами- Числа, true, false, nil являются объектами- Процессы, контексты, методы являются объектами- Все вызовы полиморфны по определению- Переменные экземпляра доступны только методам- Динамическая типизация- Развитые средства интроспекции и самомодификации- Библиотека реализована на Smalltalk- Инструментальные средства реализованы на Smalltalk- Инкрементальная компиляция и object morphing- Сохранение состояния ВМ в виде образа (image)
О чём ещё стоит упомянуть
- Средства версионирования- SUnit и mock objects- Профайлер- Управление GC, тонкая настройка- Взаимодействие со внешними библиотеками(в т.ч. callbacks)
- Работа с COM (в т.ч. call-ins), OLE- Glorp (ORM)- Seaside (Web Application Framework)
Questions
top related