SlideShare a Scribd company logo
1 of 21
Download to read offline
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

What's hot

Использование алгоритмов для решения задач
Использование алгоритмов для решения задачИспользование алгоритмов для решения задач
Использование алгоритмов для решения задачalklimchuk
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
 
Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++Компилируемые в реальном времени DSL для С++
Компилируемые в реальном времени DSL для С++corehard_by
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
functional patterns - dotnetconf'11
functional patterns - dotnetconf'11functional patterns - dotnetconf'11
functional patterns - dotnetconf'110xffAA
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power pointP_Arthur
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1igorm9so
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inlineDEVTYPE
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийngrebnev
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsPlatonov Sergey
 

What's hot (15)

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

Viewers also liked

Antonio montaño y javier
Antonio montaño y javierAntonio montaño y javier
Antonio montaño y javiervcentenario
 
Decreto-Lei 121/2013 de 22 de agosto
 Decreto-Lei 121/2013 de 22 de agosto Decreto-Lei 121/2013 de 22 de agosto
Decreto-Lei 121/2013 de 22 de agostoFernando Barroso
 
Gaia Education Poster 2015
Gaia Education Poster 2015Gaia Education Poster 2015
Gaia Education Poster 2015Gaia Education
 
Babilonia A Grande Meretriz
Babilonia A Grande MeretrizBabilonia A Grande Meretriz
Babilonia A Grande MeretrizVeja
 
Cooperation, Communication, And Collaboration
Cooperation, Communication, And CollaborationCooperation, Communication, And Collaboration
Cooperation, Communication, And Collaborationguesta2b0fc
 

Viewers also liked (8)

Profesiones
ProfesionesProfesiones
Profesiones
 
Antonio montaño y javier
Antonio montaño y javierAntonio montaño y javier
Antonio montaño y javier
 
Decreto-Lei 121/2013 de 22 de agosto
 Decreto-Lei 121/2013 de 22 de agosto Decreto-Lei 121/2013 de 22 de agosto
Decreto-Lei 121/2013 de 22 de agosto
 
Gaia Education Poster 2015
Gaia Education Poster 2015Gaia Education Poster 2015
Gaia Education Poster 2015
 
Velhos Carnavais
Velhos CarnavaisVelhos Carnavais
Velhos Carnavais
 
Hysteria shuts school
Hysteria shuts schoolHysteria shuts school
Hysteria shuts school
 
Babilonia A Grande Meretriz
Babilonia A Grande MeretrizBabilonia A Grande Meretriz
Babilonia A Grande Meretriz
 
Cooperation, Communication, And Collaboration
Cooperation, Communication, And CollaborationCooperation, Communication, And Collaboration
Cooperation, Communication, And Collaboration
 

Similar to Smalltalk

Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Ontico
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Кирилл Толкачёв
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20DefconRussia
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - BytecodeAnton Arhipov
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#Andrey Karpov
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчикMail.ru Group
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
#MBLTdev: Разработка на Swift (Ash Furrow)
#MBLTdev: Разработка на Swift (Ash Furrow)#MBLTdev: Разработка на Swift (Ash Furrow)
#MBLTdev: Разработка на Swift (Ash Furrow)e-Legion
 

Similar to Smalltalk (20)

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

More from Eduard Antsupov

More from Eduard Antsupov (8)

Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
SuSE Studio
SuSE StudioSuSE Studio
SuSE Studio
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Multiplayer
MultiplayerMultiplayer
Multiplayer
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Linux Kernel Processes
Linux Kernel ProcessesLinux Kernel Processes
Linux Kernel Processes
 
Lovely scrum
Lovely scrumLovely scrum
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