Бесплатный хостинг картинок 4imgs.ru
Перейти на главную страницу сайта


загрузка...

Smalltalk


Smalltalk
Семантика:

объектно-ориентированная

Появился в:

Разработка начата в 1969 г., стал доступен для широкого использования в 1980

Автор(ы):

Алан Кэй, Дэн Ингаллс, Xerox PARC

Типизация данных:

динамическая

Основные реализации:

Pharo, Squeak, VisualWorks, GNU Smalltalk

Испытал влияние:

Simula, Sketchpad, Lisp, Logo

Повлиял на:

Objective-C, AppleScript, C#, Dylan, Groovy, Io, Java, Lisaac, NewtonScript, Python, Ruby, Scala, Self

Smalltalk (произносится [смолток]) — объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и другими в 1970-х годах. Язык был представлен как Smalltalk-80. Smalltalk продолжает активно развиваться и собирает вокруг себя сообщество пользователей.

Smalltalk оказал большое влияние на развитие многих других языков, таких как: Objective-C, Actor, Java, Groovy и Ruby. Многие идеи 1980-х и 1990-х по написанию программ появились в сообществе Smalltalk. К ним можно отнести рефакторинг, шаблоны проектирования (применительно к ПО), карты Класс-Обязанности-Взаимодействие и экстремальное программирование в целом. Основатель концепции Wiki, Вард Каннингем, также входит в сообщество Smalltalk.

Содержание

  • 1 Основные идеи
  • 2 История
  • 3 «Здравствуй, мир»
    • 3.1 Простой пример
    • 3.2 Пример объекта
      • 3.2.1 Определение класса
      • 3.2.2 Определение метода
      • 3.2.3 Вызов метода
  • 4 Реализации
  • 5 Примечания
  • 6 Ссылки
  • 7 Литература

Основные идеи

Основными идеями Smalltalk являются:

  • Всё — объекты. Строки, целые числа, логические значения, определения классов, блоки кода, стеки, память — всё представляется в виде объектов. Выполнение программы состоит из посылок сообщений между объектами. Любое сообщение может быть послано любому объекту; объект-получатель определяет, является ли это сообщение правильным, и что надо сделать, чтобы его обработать.
  • Всё доступно для изменения. Если вы хотите изменить интегрированную среду разработки, вы можете сделать это в работающей системе, без остановки, перекомпиляции и перезапуска. Если вам необходима в языке новая управляющая структура, вы можете добавить её. В некоторых реализациях вы можете также изменить синтаксис языка или способ работы сборщика мусора.
  • Динамическая типизация — это означает, что вы не указываете типы переменных в программе, что делает язык гораздо лаконичней. (Как объяснено выше, является ли операция правильной, определяет объект-получатель, а не компилятор).
  • Model-view-controller (MVC) шаблон структуры пользовательского интерфейса. (В последнее время используют и другие концепции реализации пользовательского интерфейса — например, Morphic в Squeak и Pollock в VisualWorks).
  • Dynamic translation: современные коммерческие виртуальные машины компилируют байткоды в машинные коды для быстрого выполнения.

Smalltalk также использует другие современные идеи:

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

Одной из неожиданных особенностей Smalltalk является то, что традиционные конструкции: if-then-else, for, while, и т. д. не являются частью языка. Все они реализованы с помощью объектов. Например, решение принимается с помощью посылки сообщения ifTrue:логическому объекту, и передаёт управление фрагменту текста, если логическое значение истинно. Есть всего три конструкции:

  • посылка сообщения объекту;
  • присваивание объекта переменной;
  • возвращение объекта из метода;

и несколько синтаксических конструкций для определения объектов-литералов и временных переменных.

Чтобы лучше понять, как работает механизм обмена сообщениями, можно представить каждый объект как веб-сервер, отвечающий на запросы. При этом, на запросы можно просто выдавать заранее предопределённый ответ, аналог этому — выдача веб-страницы, расположенной по определённому пути; можно перенаправить запрос-сообщение другому объекту, аналог — прокси-сервер; изменить запрос по определённым правилам, аналог — техника url rewriting. Если для реакции на сообщение нет предопределённого метода, то вызывается метод #doesNotUnderstand:, так же, как веб-сервер открывает страницу с сообщением об ошибке, если задан несуществующий путь к веб-странице.

Следующий пример, показывающий нахождение гласных в строке, иллюстрирует стиль Smalltalk. Символ определяет переменные, :определяет параметры, а символы [и ]можно, для начала, воспринимать, как аналог фигурных скобок {и }в Си-подобных языках:

 aString vowels 
aString := 'This is a string'.
vowels := aString select: [:aCharacter  aCharacter isVowel].

В последней строке посылается сообщение select:с аргументом (блоком кода). При этом вызывается метод select:из класса Collection(одного из предков класса String). Текст этого метода показан ниже:

select: aBlock
 newCollection 
newCollection := self species new.
self do: [:each
    (aBlock value: each)
        ifTrue: [newCollection add: each]].
^newCollection

Он осуществляет перебор своих элементов (это метод do:), выполняя переданный ему блок aBlockдля каждой буквы; когда блок выполняется (в примере — aCharacter isVowel), он создаёт логическое значение, которому затем посылается ifTrue:. Если это значение true, то буква добавляется в возвращаемую строку. Из-за того что select:определён в абстрактном классе Collection, мы также можем использовать его так:

 rectangles aPoint
rectangles := OrderedCollection
  with: (Rectangle left: 0 right: 10 top: 100 bottom: 200)
  with: (Rectangle left: 10 right: 10 top: 110 bottom: 210).
aPoint := Point x: 20 y: 20.
collisions := rectangles select: [:aRect  aRect containsPoint: aPoint].

История

Smalltalk был создан группой исследователей возглавляемой Аланом Кэйем в исследовательском центре Xerox PARC. Первая реализация, известная как Smalltalk-71, была создана за несколько месяцев как результат спора о том что язык программирования, основанный на идее посылки сообщений, подсказанной Симулой, должен реализовываться на «странице кода». Более поздняя версия, действительно использованная для исследовательской работы, известна сейчас как Smalltalk-72. Его синтаксис и модель исполнения сильно отличались от современного Smalltalk, настолько, что его надо рассматривать как другой язык.

После существенных переработок, которые зафиксировали несколько сторон семантики выполнения для увеличения эффективности, была создана версия известная как Smalltalk-76. В этой версии добавились наследование, синтаксис более близкий к Smalltalk-80, и среда разработки включающую большинство инструментов знакомых сейчас Smalltalk-ерам.

В Smalltalk-80 были добавлены метаклассы, что делало фразу «всё — объекты» истинной путём связывания с индивидуальными классами свойств и поведения (например, поддержки различных способов создания экземпляров). Smalltalk-80 был первой версией, доступной за пределами PARC — сначала как Smalltalk-80 Version 1, розданный небольшому количеству компаний и университетов для «экспертной оценки». Позже, в 1983 году, были выпущены общедоступная реализация, известная как Smalltalk-80 Version 2 — в виде образа (независимый от платформы файл, содержащий объекты) и спецификации виртуальной машины.

Сейчас существует две реализации Smalltalk, являющиеся прямыми потомками Smalltalk-80 — Squeak и VisualWorks.[1] Образ Smalltalk-80 version 2 запущен на Hobbes, виртуальной машине ST-80, реализованной на VisualWorks.

«Здравствуй, мир»

Простой пример

Transcript show: 'Здравствуй, мир!'

Этот пример показывает две стороны Smalltalk.

Во-первых, посылка сообщения: в Smalltalk все действия производятся путём посылки сообщений объектам. В данном случае сообщение это show: 'Здравствуй, мир!', и оно посылается Transcript. Для обработки этого сообщения будет вызван метод Transcript show:, который должен рассмотреть свой аргумент (строку 'Здравствуй, мир!') и отобразить этот аргумент на transcript. (Заметьте, что у вас должно быть открыто окно Transcript, чтобы увидеть результат.)

Во-вторых, этот пример показывает основной синтаксис посылки сообщения в Smalltalk: <получатель сообщения> <пробел> <сообщение>. В отличие от C++, нет точек после получателя, и нет скобок вокруг аргументов.

Пример объекта

Определение класса

Object subclass: #MessagePublisher
     instanceVariableNames: ''
     classVariableNames: ''
     poolDictionaries: ''
     category: 'Smalltalk Examples'

Это простое определение класса с определением имени и категории. Обычно среда разработки предоставляет заготовку с большей частью текста этого примера.

Определение метода

publish
     Transcript show: 'Hello, world!'

Это определение метода с именем publish. Тело метода такое же, как в простом примере.

Вызов метода

 MessagePublisher new publish

В данном примере создаётся экземпляр класса MessagePublisher(MessagePublisher new), затем ему посылается сообщение publish. Обратите внимание что для создания объекта используется не ключевое слово языка (как в C++, Java, C#), а посылается обычное сообщение newклассу MessagePublisher. Сообщения для создания объектов иногда переопределяют. Например некий абстрактный класс может в ответ на newвозвращать экземпляр одного из своих конкретных подклассов.

Реализации

  • VisualWorks (англ.)русск.[2]
  • Squeak — современная открытая реализация Smalltalk с полноценной средой разработки (окна, редактор и т. д.). Один из основателей — Алан Кей.
  • Pharo[3]
  • ObjectStudio[4]
  • IBM VisualAge for Smalltalk[5]
  • Dolphin Smalltalk (англ.)русск.[6]
  • Smalltalk/X[7]
  • GNU Smalltalk (англ.)русск.[8]
  • Smalltalk MT (англ.)русск.[9]
  • LSW Vision-Smalltalk[10]
  • Ambrai Smalltalk[11]
  • Huemul Smalltalk[12]

Примечания

  1. Скриншот Smalltalk-80
  2. Cincom Smalltalk сайт, Wiki, Cincom Smalltalk Blog
  3. Pharo Smalltalk сайт
  4. net.net - One of the Internet's premiere addresses
  5. IBM — VisualAge Smalltalk — Product Overview
  6. Welcome to the home of Dolphin Smalltalk
  7. Smalltalk/X — an object-oriented IDE
  8. GNU Smalltalk The Smalltalk for those who can type
  9. Object Connect Home
  10. LSW Vision-Smalltalk 2008
  11. Ambrai Smalltalk
  12. http://www.guillermomolina.com.ar/huemul/

Ссылки

Имеется викиучебник по теме
«Smalltalk»
  • Основной сайт (англ.)
  • Книги о Smalltalk
  • Smalltalk по-русски
  • Russain Smalltalk User Group (RSUG)
  • Русскоязычный форум по Smalltalk (рус.)
  • Smalltalk по-русски на wikia
  • Smalltalk в России
  • SqueakSource — Monticello-репозиторий для Squeak и Pharo
  • Смолток. Язык и его реализация (PDF, 2.4 МБ)
  • Язык программирования Smalltalk-80, перевод книги А. Голдберг и Д. Робсона
  • Стандарт ANSI Smalltalk (PDF, 1.2 МБ)
  • Таблица со сравнительными характеристиками диалектов Smalltalk на wikia
  • An Overview of the Programming Language Smalltalk-72 by John Shoch(недоступная ссылка)
  • The Smalltalk-76 Programming System. Design and Implementation by Dan Ingalls (недоступная ссылка)
  • Smalltalk: Концепция объектно-ориентированного программирования, А. Г. Иванов, Ю. Е. Кремер, Компьютер Пресс, № 4, 1992

Литература

  • Роберт У. Себеста. 2.15. Объектно-ориентированное программирование: язык Smalltalk // Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — С. 109—112. — 672 с. — 5000 экз. — ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.)
  • Ю. А. Кирютенко, В. А. Савельев. Объектно-ориентированное программирование. Язык Smalltalk. — М.: Вузовская книга, 2007. — 328 с. — ISBN 5-9502-0097-7
  Основные языки программирования (сравнение • IDE • история • хронология)
Используемые
в разработке

Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • C • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET)

Академические

Clean • Curry • Лого • ML • РЕФАЛ • Симула • Оберон

IEC 61131-3

Instruction List • ST • FBD • Ladder Diagram (LD) • SFC

Прочие

Алгол • Алгол 68 • Модула-2 • Миранда • Hope

Эзотерические

HQ9+/HQ9++ • INTERCAL • Brainfuck • Brainfork • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE • LOLCODE

Визуальные

G (LabVIEW) • Microsoft VPL • Sikuli • VisSim • Алиса • ДРАКОН • Скретч


Источник: Русская википедия 2012

Вы можете разместить ссылку на этот материал у себя на сайте, блоге или форуме

HTML-cсылка на публикацию
BB-cсылка на публикацию (для форумов)
Прямая ссылка на публикацию


Похожие статьи
SmallTalk
SmallTalk Smalltalk Семантика: объектно-ориентированная Появился в: 1980 г. Автор(ы): Алан Кэй, Дэн Ингаллс, Xerox PARC Типизация данных: динамическая Основные реализации: Испытал влияние: Simula, Sketchpad, Lisp Повлиял на: AppleScript, C#, Groovy, Java, Python, Scala, смолток]) — объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и другими в 1970-х годах. Язык был представлен как Smalltalk-80 и с тех пор широко используется. Smalltalk продолжает активно развиваться и собирает вокруг себя

Smalltalk
Smalltalk Smalltalk Семантика: объектно-ориентированная Появился в: Разработка начата в 1969 г., стал доступен для широкого использования в 1980 Автор(ы): Алан Кэй, Дэн Ингаллс, Xerox PARC Типизация данных: динамическая Основные реализации: Pharo, Squeak, VisualWorks, GNU Smalltalk Испытал влияние: Simula, Sketchpad, Lisp, Logo Повлиял на: Objective-C, AppleScript, C#, Dylan, Groovy, Io, Java, Lisaac, NewtonScript, Python, Ruby, Scala, Self Smalltalk (произносится [смолток]) — объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и

Smalltalk
Smalltalk Smalltalk Семантика: объектно-ориентированная Появился в: Разработка начата в 1969 г., стал доступен для широкого использования в 1980 Автор(ы): Алан Кэй, Дэн Ингаллс, Xerox PARC Типизация данных: динамическая Основные реализации: Pharo, Squeak, VisualWorks, GNU Smalltalk Испытал влияние: Simula, Sketchpad, Lisp, Logo Повлиял на: Objective-C, AppleScript, C#, Dylan, Groovy, Io, Java, Lisaac, NewtonScript, Python, Ruby, Scala, Self Smalltalk (произносится [смолток]) — объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и

Smalltalk
Smalltalk Smalltalk Семантика: объектно-ориентированная Появился в: Разработка начата в 1969 г., стал доступен для широкого использования в 1980 Автор(ы): Алан Кэй, Дэн Ингаллс, Xerox PARC Типизация данных: динамическая Основные реализации: Pharo, Squeak, VisualWorks, GNU Smalltalk Испытал влияние: Simula, Sketchpad, Lisp, Logo Повлиял на: Objective-C, AppleScript, C#, Dylan, Groovy, Io, Java, Lisaac, NewtonScript, Python, Ruby, Scala, Self Smalltalk (произносится [смолток]) — объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и

Язык Smalltalk
Язык Smalltalk Smalltalk Семантика: объектно-ориентированная Появился в: 1980 г. Автор(ы): Алан Кэй, Дэн Ингаллс, Xerox PARC Типизация данных: динамическая Основные реализации: Испытал влияние: Simula, Sketchpad, Lisp Повлиял на: AppleScript, C#, Groovy, Java, Python, Scala, смолток]) — объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и другими в 1970-х годах. Язык был представлен как Smalltalk-80 и с тех пор широко используется. Smalltalk продолжает активно развиваться и собирает вокруг себя

Искать все статьи, похожие на текущую (Smalltalk)
Это интересно! Постоловка   Аничковский дворец   Расторгуево (станция)   нейрохирург   101-й мотострелковый полк   
Универсальная энциклопедия 2012
Карта сайта
Страница создана за 0.062174 сек. Всего документов включено в базу знаний: 5150576