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

Smalltalk в распределённых системах реального времени
Smalltalk в распределённых системах реального времениSmalltalk в распределённых системах реального времени
Smalltalk в распределённых системах реального времениФПС СПбГПУ
 
Tarea1 cristina ruiz_gascon
Tarea1 cristina ruiz_gasconTarea1 cristina ruiz_gascon
Tarea1 cristina ruiz_gasconcrisalba77
 
Smalltalk в распределенных бизнес-приложениях
Smalltalk в распределенных бизнес-приложенияхSmalltalk в распределенных бизнес-приложениях
Smalltalk в распределенных бизнес-приложенияхФПС СПбГПУ
 

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: первое знакомство

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: Будущее веб-разработкиYaroslav Smirnov
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложенийAndrew Mayorov
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятиеluis_blanco_rau
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидахMoscowJS
 
"Favicon на стероидах" Александр Амосов (Avito)
"Favicon на стероидах" Александр Амосов (Avito)"Favicon на стероидах" Александр Амосов (Avito)
"Favicon на стероидах" Александр Амосов (Avito)AvitoTech
 
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 VizorDevGAMM Conference
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksMikhail Kurnosov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Alex Ott
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL Sergey Xek
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Yandex
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Mikhail Shcherbakov
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаMikhail Shcherbakov
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь ЧертенковImprove Group
 
Автоматический поиск уязвимостей в программах без исходных текстов
Автоматический поиск уязвимостей в программах без исходных текстовАвтоматический поиск уязвимостей в программах без исходных текстов
Автоматический поиск уязвимостей в программах без исходных текстовd_olex
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищиCUSTIS
 
вадим макишвили Errare
вадим макишвили Errareвадим макишвили Errare
вадим макишвили Errarerit2010
 
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...
Positive Hack Days. Олексюк. Автоматический поиск уязвимостей в программах бе...Positive Hack Days
 

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 ФПС СПбГПУ

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

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: первое знакомство