SlideShare a Scribd company logo
1 of 30
Download to read offline
Smalltalk: первое знакомство

         Борис Беркгаут
       berkgaut@gmail.com
Smalltalk: первое знакомство

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

371993326789901217467999448150835200000000
16rDEADBEAF

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

#(127 0 0 1)
#(#formatVersion 1.0)
Посылка сообщений объектам

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

1 negated
  receiver: 1
  selector: #negated
Посылка сообщений объектам

1 negated
  result: -1
Посылка сообщений объектам

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

3+2
 receiver: 3
 selector: #+
 argument: 2
Посылка сообщений объектам

3+2
 result: 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: 0
  selector: #@
  argument: 0
Посылка сообщений: строим
сложные объекты
Rectangle origin: 0@0 corner: 100@200
  result: 0@0
Посылка сообщений: строим
сложные объекты
Rectangle origin: 0@0 corner: 100@200
  receiver: 100
  selector: #@
  argument: 200
Посылка сообщений: строим
сложные объекты
Rectangle origin: 0@0 corner: 100@200
  result: 100@200
Посылка сообщений: строим
сложные объекты
Rectangle origin: 0@0 corner: 100@200
   receiver: Rectangle
   selector: #origin:corner:
   arguments:
1. 0@0
2. 100@200
Посылка сообщений: объекты
работают вместе
Window currentWindow graphicsContext
displayRectangle: (Rectangle origin: 0@0 corner: 100@200)
at: 300@300
Временные переменные

|myRect|
myRect := Rectangle origin: 0@0 corner: 100@200.
Window currentWindow graphicsContext
displayRectangle: myRect
at: 300@300
А теперь создадим метод!

|myRect|
myRect := Rectangle origin: 0@0 corner: 100@200.
Window currentWindow graphicsContext
displayRectangle: (myRect inflateBy: 50@50)
at: 300@300
А теперь создадим метод!

|myRect|
myRect := Rectangle origin: 0@0 corner: 100@200.
Window currentWindow graphicsContext
displayRectangle: (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 == 0
ifTrue: [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

More Related Content

Viewers also liked (7)

Smalltalk в распределённых системах реального времени
Smalltalk в распределённых системах реального времениSmalltalk в распределённых системах реального времени
Smalltalk в распределённых системах реального времени
 
КИТ 2013
КИТ 2013КИТ 2013
КИТ 2013
 
Tarea1 cristina ruiz_gascon
Tarea1 cristina ruiz_gasconTarea1 cristina ruiz_gascon
Tarea1 cristina ruiz_gascon
 
КИТ ДОД 2013
КИТ ДОД 2013КИТ ДОД 2013
КИТ ДОД 2013
 
MongoDB
MongoDBMongoDB
MongoDB
 
Smalltalk в распределенных бизнес-приложениях
Smalltalk в распределенных бизнес-приложенияхSmalltalk в распределенных бизнес-приложениях
Smalltalk в распределенных бизнес-приложениях
 
Tokyo Cabinet
Tokyo CabinetTokyo Cabinet
Tokyo Cabinet
 

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

Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложений
Andrew Mayorov
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL
Sergey Xek
 
вадим макишвили Errare
вадим макишвили Errareвадим макишвили Errare
вадим макишвили Errare
rit2010
 

Similar to Smalltalk: первое знакомство (20)

Elixir: The Future of Web Development | Elixir: Будущее веб-разработки
Elixir: The Future of Web Development | Elixir: Будущее веб-разработкиElixir: The Future of Web Development | Elixir: Будущее веб-разработки
Elixir: The Future of Web Development | Elixir: Будущее веб-разработки
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложений
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидах
 
"Favicon на стероидах" Александр Амосов (Avito)
"Favicon на стероидах" Александр Амосов (Avito)"Favicon на стероидах" Александр Амосов (Avito)
"Favicon на стероидах" Александр Амосов (Avito)
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)
 
Coroutines
CoroutinesCoroutines
Coroutines
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
 
Автоматический поиск уязвимостей в программах без исходных текстов
Автоматический поиск уязвимостей в программах без исходных текстовАвтоматический поиск уязвимостей в программах без исходных текстов
Автоматический поиск уязвимостей в программах без исходных текстов
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
 
вадим макишвили Errare
вадим макишвили Errareвадим макишвили Errare
вадим макишвили Errare
 
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
 

More from ФПС СПбГПУ (6)

КИТ-2010
КИТ-2010КИТ-2010
КИТ-2010
 
День откртых дверей ФПС СПбГПУ 2009
День откртых дверей ФПС СПбГПУ 2009День откртых дверей ФПС СПбГПУ 2009
День откртых дверей ФПС СПбГПУ 2009
 
КИТ2009
КИТ2009КИТ2009
КИТ2009
 
Обзор программ обучения в области СХД
Обзор программ обучения в области СХДОбзор программ обучения в области СХД
Обзор программ обучения в области СХД
 
Windows Server 2003 Seminar
Windows Server  2003 SeminarWindows Server  2003 Seminar
Windows Server 2003 Seminar
 
Семинар «Windows Server 2003 R2»
Семинар «Windows Server 2003 R2»Семинар «Windows Server 2003 R2»
Семинар «Windows Server 2003 R2»
 

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