Smalltalk


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

Smalltalk является одним из многих объектно-ориентированных языков, основанных на языке Симула[2], который сам оказал большое влияние на развитие таких объектно-ориентированных языков, как: Objective-C, Actor, Java, Erlang[3], Groovy, Ruby и многих других. Многие идеи 1980-х и 1990-х по написанию программ появились в сообществе Smalltalk. К ним можно отнести рефакторинг, шаблоны проектирования (применительно к ПО), карты «класс — обязанности — взаимодействие» и экстремальное программирование в целом. Основатель концепции вики Уорд Каннингем также входит в сообщество Smalltalk.

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

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