SlideShare a Scribd company logo
Smalltalk
Genius lies in simplicity
История Smalltalk
● Был создан группой исследователей возглавляемой
  Аланом Кэйем в исследовательском центре Xerox
  PARC.
● Smalltalk-71 - первая реализация, разработанная за
  несколько месяцев.
● Более поздняя версия, действительно использованная
  для исследовательской работы, известна сейчас как
  Smalltalk-72
● После существенных переработок, которые
  зафиксировали несколько сторон семантики
  выполнения для увеличения эффективности, была
  создана версия известная как Smalltalk-76
● Smalltalk80 - теперь "всё - объекты!"
Smalltalk - настоящий ООП язык

● Объект - базовая единица объектно-ориентированной
  системы.
● Объекты могут обладать состоянием.
● Посылка сообщения - единственный способ обмена
  информацией между объектами.
Message passing vs. method
invocation
Обе операции состоят из двух основных этапов:
 ● поиск метода (method lookup)
 ● вызов метода (method invocation)

Статическая система: первый этап выполняется
компилятором при трансляции исходного кода в машинное
представление.

Динамическая система: оба этапа выполняются на стадии
выполнения программы.
Основные идеи

● Все является объектами
● Все доступно для изменения
● Динамическая типизация
● Сборка мусора встроена в язык и незаметна
  разработчику
● Программы Smalltalk обычно компилируются в байткоды
  и выполняются виртуальной машиной (ВМ), что
  позволяет выполнять их на любом оборудовании, для
  которого существует ВМ.
FAIL



       Date date = new Date();
Лексические особенности

"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'
Ключевые слова повсюду

t->rotate (a, v); //For C++
t.rotate (a, v); //For Java

Transformation t;
float a;
Vector v;

SmallTalk:
|t a v|

Хороший стиль:
| aTransformation angle aVector |
Genius lies in simplicity



          t.rotate (a, v); //Original
          t rotate (a, v); //Who needs dot?
          t rotate a, v; //Who needs brackets?
Genius lies in simplicity



      t rotate by a around v; //Who needs commas?
Genius lies in simplicity



      t rotate by: a around: v; //Who needs ambiguity?
      t rotateBy: a around: v //This is Smalltalk
Определение метода

rotateBy: angle around: vector
 | result |
 result := COMPUTE ANSWER.
 ^result
Определение класса

Object subclass: #MessagePublisher
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Smalltalk Examples'
Условные операторы

a negative | (b between: c and: d)
 ifTrue: [a := c negated]
Арифметика

Все действия имеют одинаковый приоритет:
1+2*3 is 9
1+(2*3) is 7
; не .

Вместо:
 account deposit: 100 dollars;
 collection add: transformation;
Следует писать:
 account deposit: 100 dollars. "dollars - это метод!"
 collection add: transformation.
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'.
Одинаковые имена методов доступа
и свойств объекта
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
Использование коллекций

|ab|
a := OrderedCollection new
  add: #red;
  add: #green;
  yourself.
b := Dictionary new
  at: #red put: #rouge;
  at: #green put: #vert;
  yourself.
Синтаксис цикла

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]. "имена клиентов"
Переменные функций

a = f (x) {return x + 1;} //C-Like syntax
a := [:x | x + 1]    //Smalltalk syntax

More Related Content

PPTX
тема 2.операторы.линейный алгоритм
PPT
PPTX
C sharp deep dive
PPT
Tema4 Иерархия операций
PPT
введение
PPTX
Тип данных Pointer
PDF
Конкурентные ассоциативные контейнеры
PPTX
Goto
тема 2.операторы.линейный алгоритм
C sharp deep dive
Tema4 Иерархия операций
введение
Тип данных Pointer
Конкурентные ассоциативные контейнеры
Goto

What's hot (15)

PPTX
Использование алгоритмов для решения задач
PPTX
Статический и динамический полиморфизм в C++, Дмитрий Леванов
PPTX
Статический и динамический полиморфизм в C++, Дмитрий Леванов
PPTX
Компилируемые в реальном времени DSL для С++
PPT
язык програмирования
PDF
functional patterns - dotnetconf'11
PPTX
презентация Microsoft power point
PPT
паскаль
PPTX
C++ idioms
PPT
паскаль. часть1
PDF
5.4 Ключевые слова static и inline
PPT
Уменьшение влияния человеческого фактора при разработке бизнес приложений
PPTX
Java8. Innovations
PDF
Максим Хижинский Lock-free maps
Использование алгоритмов для решения задач
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Компилируемые в реальном времени DSL для С++
язык програмирования
functional patterns - dotnetconf'11
презентация Microsoft power point
паскаль
C++ idioms
паскаль. часть1
5.4 Ключевые слова static и inline
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Java8. Innovations
Максим Хижинский Lock-free maps
Ad

Viewers also liked (8)

DOCX
Profesiones
ODP
Antonio montaño y javier
PDF
Decreto-Lei 121/2013 de 22 de agosto
PDF
Gaia Education Poster 2015
PPTX
Velhos Carnavais
DOCX
Hysteria shuts school
PPS
Babilonia A Grande Meretriz
PPT
Cooperation, Communication, And Collaboration
Profesiones
Antonio montaño y javier
Decreto-Lei 121/2013 de 22 de agosto
Gaia Education Poster 2015
Velhos Carnavais
Hysteria shuts school
Babilonia A Grande Meretriz
Cooperation, Communication, And Collaboration
Ad

Similar to Smalltalk (20)

PDF
Язык программирования Scala / Владимир Успенский (TCS Bank)
PPTX
Bytecode
PDF
Эволюционный дизайн. Joker Students Day 2016
PDF
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
PDF
static - defcon russia 20
PDF
JPoint 2016 - Bytecode
PPT
Design Principles
PDF
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
PPTX
Javascript 1
PPT
Easy authcache 2 кеширование для pro родионов игорь
PDF
Фундаментальные основы разработки под iOS. Павел Тайкало
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
PPTX
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PDF
Scala, SBT & Play! for Rapid Application Development
PDF
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
PDF
Баба Яга против!
PDF
Behat в PHP с использованием Behat и Mink
PPTX
Tdd php
PDF
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
PDF
#MBLTdev: Разработка на Swift (Ash Furrow)
Язык программирования Scala / Владимир Успенский (TCS Bank)
Bytecode
Эволюционный дизайн. Joker Students Day 2016
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
static - defcon russia 20
JPoint 2016 - Bytecode
Design Principles
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Javascript 1
Easy authcache 2 кеширование для pro родионов игорь
Фундаментальные основы разработки под iOS. Павел Тайкало
Easy authcache 2 кэширование для pro. Родионов Игорь
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
Scala, SBT & Play! for Rapid Application Development
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
Баба Яга против!
Behat в PHP с использованием Behat и Mink
Tdd php
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
#MBLTdev: Разработка на Swift (Ash Furrow)

More from Eduard Antsupov (8)

PDF
Lift, play, akka, rails part1
PDF
Backbone.js
PDF
SuSE Studio
PDF
Dev collaboration
PDF
Multiplayer
PDF
Nosql and Mongodb
PDF
Linux Kernel Processes
PDF
Lovely scrum
Lift, play, akka, rails part1
Backbone.js
SuSE Studio
Dev collaboration
Multiplayer
Nosql and Mongodb
Linux Kernel Processes
Lovely scrum

Smalltalk

  • 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 обычно компилируются в байткоды и выполняются виртуальной машиной (ВМ), что позволяет выполнять их на любом оборудовании, для которого существует ВМ.
  • 6. FAIL Date date = new Date();
  • 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'
  • 8. Ключевые слова повсюду t->rotate (a, v); //For C++ t.rotate (a, v); //For Java Transformation t; float a; Vector v; SmallTalk: |t a v| Хороший стиль: | aTransformation angle aVector |
  • 9. Genius lies in simplicity t.rotate (a, v); //Original t rotate (a, v); //Who needs dot? t rotate a, v; //Who needs brackets?
  • 10. Genius lies in simplicity t rotate by a around v; //Who needs commas?
  • 11. Genius lies in simplicity t rotate by: a around: v; //Who needs ambiguity? t rotateBy: a around: v //This is Smalltalk
  • 12. Определение метода rotateBy: angle around: vector | result | result := COMPUTE ANSWER. ^result
  • 13. Определение класса Object subclass: #MessagePublisher instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Smalltalk Examples'
  • 14. Условные операторы a negative | (b between: c and: d) ifTrue: [a := c negated]
  • 15. Арифметика Все действия имеют одинаковый приоритет: 1+2*3 is 9 1+(2*3) is 7
  • 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