Smalltalk (вимовляється [смо́лток]) — об'єктно-орієнтована мова програмування з динамічною типізацією, розроблена в Xerox PARC Аланом Кейем, , , Адель Голдберг у 1970-х роках. Мова була представлена як Smalltalk-80 і з тих пір широко використовується. Smalltalk продовжує активно розвиватися і збирає навколо себе співтовариство користувачів. Smalltalk істотно вплинула на розвиток багатьох інших мов, таких як: Objective-C, , Java та Ruby. Багато ідей 1980-х і 1990-х із написання програм з'явилися в співтоваристві Smalltalk. До них можна віднести рефакторинг, шаблони проектування (стосовно ПЗ), карти Клас-Обов'язки-Взаємодія і екстремальне програмування в цілому. Засновник концепції Вікі, Ворд Каннінгем, також входить в співтовариство Smalltalk.
Smalltalk | |
---|---|
Парадигма | об'єктно-орієнтована |
Дата появи | Розробка почалася у 1969 Випуск 1980 |
Творці | PARC, Алан Кей, , , Адель Голдберг |
Розробник | PARC, Алан Кей, , , Адель Голдберг |
Останній реліз | ANSI Smalltalk (19 травня 1998)[1] |
Система типізації | динамічною типізацією |
Основні реалізації | Squeak, |
Під впливом від | LISP, Simula |
Вплинула на | Objective-C, , Self, , Java, Dylan (мова програмування), AppleScript, , Python, Ruby, Scala |
Звичайні розширення файлів | .st |
|
Історія
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 і .
Основні ідеї Smalltalk
Основними ідеями Smalltalk'а є:
- «Все — об'єкти» — Рядки, цілі числа, логічні значення, визначення класів, блоки коду, стеки, пам'ять — все представляється у вигляді об'єктів. Виконання програми складається з посилань повідомлень між об'єктами. Будь-яке повідомлення може бути послане будь-якому об'єктові; об'єкт-одержувач визначає, чи є це повідомлення правильним, і що треба зробити, щоб його обробити. Все доступно для зміни. Якщо ви хочете змінити інтегроване середовище розробки, ви можете зробити це в працюючій системі, без зупинки, перекомпіляції і перезапуску. Існує можливість розширення мови новими керуючими конструкціями. У деяких реалізаціях ви можете також змінити синтаксис мови або спосіб роботи збирача сміття.
- Модель-вид-контролер (MVC) — шаблон структури інтерфейсу користувача. (Останнім часом використовують і інші концепції реалізації інтерфейсу користувача — наприклад, Morphic в Squeak і Pollock в VisualWorks).
- Динамічна трансляція — сучасні комерційні віртуальні машини компілюють байткоди в машинні коди для швидкого виконання.
Smalltalk також використовує інші сучасні ідеї:
- Автоматичне прибирання сміття вбудоване в мову і непомітне розробникові.
- Програми Smalltalk зазвичай компілюються в байткоди і виконуються віртуальною машиною (ВМ), що дозволяє виконувати їх на будь-якому устаткуванні, для якого існує ВМ.
Однією з несподіваних особливостей Smalltalk є те, що традиційні конструкції: if-then-else, for, while, тощо не є частиною мови. Всі вони реалізовані за допомогою об'єктів. Наприклад, рішення ухвалюється за допомогою посилки повідомлення ifTrue: логічному об'єктові, і передає управління фрагменту коду, якщо логічне значення істинне. Є всього три конструкції:
- посилка повідомлення об'єктові;
- призначення об'єкта змінній;
- повернення об'єкта з методу;
- і декілька синтаксичних конструкцій для визначення літеральних об'єктів і тимчасових змінних.
Щоб краще зрозуміти, як працює механізм обміну повідомленнями, можна уявити кожен об'єкт як вебсервер, що відповідає на запити. При цьому, на запити можна просто видавати заздалегідь зумовлену відповідь, аналог цьому — видача вебсторінки, розташованої за певним шляхом; можна перенаправити запит-повідомлення іншому об'єктові, аналог — проксі-сервер; змінити запит за певними правилами, аналог — техніка . Якщо для реакції на повідомлення немає зумовленого методу, то викликається метод #doesNotUnderstand:, так само, як вебсервер відкриває сторінку з повідомленням про помилку, якщо сторінка за заданим шляхом не існує.
Приклади програм
Наступний приклад показує пошук голосних в рядку та ілюструє стиль Smalltalk. Символ "|" визначає змінні, «:» визначає параметри, а символи «[» і «]» можна, спершу, сприймати, як аналог фігурних дужок «{» і «}» в С-подібних мовах:
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].
У останньому рядку посилається повідомлення select:
з аргументом у вигляді блоку коду. Далі йде код в базовому класі Collection
який виконує роботу:
| newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollection
Він відповідає на повідомлення шляхом перебору своїх елементів (це метод do:
) виконуючи код aBlock
для кожної літери; коли виконується 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.
Transcript show: 'Привіт, світе!'
Перше, це «посилка повідомлення». У 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 («MessagePublisher new»), потім йому посилається повідомлення «publish». Зверніть увагу, що для створення об'єкта використовується не ключове слово мови (як в , Java, C#), а посилається звичайне повідомлення «new» до класу «MessagePublisher». Повідомлення для створення об'єктів іноді перевизначають. Наприклад якийсь абстрактний клас може у відповідь на «new» повертати екземпляр один з своїх конкретних класів.
MessagePublisher new publish
Див. також
- Об'єктно-орієнтоване програмування
- Деякі мови програмування створені під впливом Smalltalk:
- Pharo
- Seaside (фреймворк)
Посилання
- Стандарт ANSI Smalltalk [ 28 вересня 2007 у Wayback Machine.]
- http://www.smalltalk.org/(англ.) [ 13 серпня 2004 у Wayback Machine.]
- http://www.smalltalk.ru/(рос.) [ 28 вересня 2004 у Wayback Machine.]
- http://www.squeak.org/(англ.) [ 24 жовтня 2004 у Wayback Machine.]
- https://wiki.squeak.org/squeak/172
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Smalltalk vimovlyayetsya smo ltok ob yektno oriyentovana mova programuvannya z dinamichnoyu tipizaciyeyu rozroblena v Xerox PARC Alanom Kejem Adel Goldberg u 1970 h rokah Mova bula predstavlena yak Smalltalk 80 i z tih pir shiroko vikoristovuyetsya Smalltalk prodovzhuye aktivno rozvivatisya i zbiraye navkolo sebe spivtovaristvo koristuvachiv Smalltalk istotno vplinula na rozvitok bagatoh inshih mov takih yak Objective C Java ta Ruby Bagato idej 1980 h i 1990 h iz napisannya program z yavilisya v spivtovaristvi Smalltalk Do nih mozhna vidnesti refaktoring shabloni proektuvannya stosovno PZ karti Klas Obov yazki Vzayemodiya i ekstremalne programuvannya v cilomu Zasnovnik koncepciyi Viki Vord Kanningem takozh vhodit v spivtovaristvo Smalltalk SmalltalkParadigmaob yektno oriyentovanaData poyaviRozrobka pochalasya u 1969 Vipusk 1980TvorciPARC Alan Kej Adel GoldbergRozrobnikPARC Alan Kej Adel GoldbergOstannij relizANSI Smalltalk 19 travnya 1998 1 Sistema tipizaciyidinamichnoyu tipizaciyeyuOsnovni realizaciyiSqueak Pid vplivom vidLISP SimulaVplinula naObjective C Self Java Dylan mova programuvannya AppleScript Python Ruby ScalaZvichajni rozshirennya fajliv st Mediafajli u VikishovishiIstoriyaSmalltalk bula rozroblena grupoyu doslidnikiv ocholyuvanoyu Alanom Keyem v doslidnickomu centri Xerox PARC Persha realizaciya vidoma yak Smalltalk 71 bula stvorena za dekilka misyaciv yak rezultat superechki pro te sho mova programuvannya zasnovana na ideyi posilki povidomlen pidkazanoyu Simuloyu povinna realizovuvatisya na storinci kodu Piznisha versiya dijsno vikoristana dlya doslidnickoyi roboti vidoma zaraz yak Smalltalk 72 Yiyi sintaksis i model vikonannya silno vidriznyalisya vid suchasnogo Smalltalk nastilki sho yiyi treba rozglyadati yak inshu movu Pislya istotnih pererobok yaki zafiksuvali dekilka storin semantiki vikonannya dlya zbilshennya efektivnosti bula stvorena versiya vidoma yak Smalltalk 76 U cij versiyi dodalisya uspadkuvannya sintaksis blizhchij do Smalltalk 80 i seredovishe rozrobki sho vklyuchaye bilshist instrumentiv znajomih zaraz Smalltalk eram U Smalltalk 80 buli dodani metaklassi sho robilo frazu vse ob yekti istinnoyu shlyahom pov yazannya z individualnimi klasami vlastivostej i povedinki napriklad pidtrimka riznih sposobiv stvorennya ekzemplyariv Smalltalk 80 buv pershoyu versiyeyu dostupnoyu za mezhami PARC spochatku yak Smalltalk 80 Version 1 rozdanij nevelikij kilkosti kompanij i universitetiv dlya ekspertnoyi ocinki Piznishe u 1983 buli vipusheni zagalnodostupna realizaciya vidoma yak Smalltalk 80 Version 2 yak obraz nezalezhnij vid platformi fajl sho mistit ob yekti i specifikaciyi virtualnoyi mashini Zaraz isnuye dvi realizaciyi Smalltalk sho ye pryamimi nashadkami Smalltalk 80 Ce Squeak i Osnovni ideyi SmalltalkOsnovnimi ideyami Smalltalk a ye Vse ob yekti Ryadki cili chisla logichni znachennya viznachennya klasiv bloki kodu steki pam yat vse predstavlyayetsya u viglyadi ob yektiv Vikonannya programi skladayetsya z posilan povidomlen mizh ob yektami Bud yake povidomlennya mozhe buti poslane bud yakomu ob yektovi ob yekt oderzhuvach viznachaye chi ye ce povidomlennya pravilnim i sho treba zrobiti shob jogo obrobiti Vse dostupno dlya zmini Yaksho vi hochete zminiti integrovane seredovishe rozrobki vi mozhete zrobiti ce v pracyuyuchij sistemi bez zupinki perekompilyaciyi i perezapusku Isnuye mozhlivist rozshirennya movi novimi keruyuchimi konstrukciyami U deyakih realizaciyah vi mozhete takozh zminiti sintaksis movi abo sposib roboti zbiracha smittya Model vid kontroler MVC shablon strukturi interfejsu koristuvacha Ostannim chasom vikoristovuyut i inshi koncepciyi realizaciyi interfejsu koristuvacha napriklad Morphic v Squeak i Pollock v VisualWorks Dinamichna translyaciya suchasni komercijni virtualni mashini kompilyuyut bajtkodi v mashinni kodi dlya shvidkogo vikonannya Smalltalk takozh vikoristovuye inshi suchasni ideyi Avtomatichne pribirannya smittya vbudovane v movu i nepomitne rozrobnikovi Programi Smalltalk zazvichaj kompilyuyutsya v bajtkodi i vikonuyutsya virtualnoyu mashinoyu VM sho dozvolyaye vikonuvati yih na bud yakomu ustatkuvanni dlya yakogo isnuye VM Odniyeyu z nespodivanih osoblivostej Smalltalk ye te sho tradicijni konstrukciyi if then else for while tosho ne ye chastinoyu movi Vsi voni realizovani za dopomogoyu ob yektiv Napriklad rishennya uhvalyuyetsya za dopomogoyu posilki povidomlennya ifTrue logichnomu ob yektovi i peredaye upravlinnya fragmentu kodu yaksho logichne znachennya istinne Ye vsogo tri konstrukciyi posilka povidomlennya ob yektovi priznachennya ob yekta zminnij povernennya ob yekta z metodu i dekilka sintaksichnih konstrukcij dlya viznachennya literalnih ob yektiv i timchasovih zminnih Shob krashe zrozumiti yak pracyuye mehanizm obminu povidomlennyami mozhna uyaviti kozhen ob yekt yak vebserver sho vidpovidaye na zapiti Pri comu na zapiti mozhna prosto vidavati zazdalegid zumovlenu vidpovid analog comu vidacha vebstorinki roztashovanoyi za pevnim shlyahom mozhna perenapraviti zapit povidomlennya inshomu ob yektovi analog proksi server zminiti zapit za pevnimi pravilami analog tehnika Yaksho dlya reakciyi na povidomlennya nemaye zumovlenogo metodu to viklikayetsya metod doesNotUnderstand tak samo yak vebserver vidkrivaye storinku z povidomlennyam pro pomilku yaksho storinka za zadanim shlyahom ne isnuye Prikladi programNastupnij priklad pokazuye poshuk golosnih v ryadku ta ilyustruye stil Smalltalk Simvol viznachaye zminni viznachaye parametri a simvoli i mozhna spershu sprijmati yak analog figurnih duzhok i v S podibnih movah aString vowels aString This is a string vowels aString select aCharacter aCharacter isVowel U ostannomu ryadku posilayetsya povidomlennya select z argumentom u viglyadi bloku kodu Dali jde kod v bazovomu klasi Collection yakij vikonuye robotu newCollection newCollection self species new self do each aBlock value each ifTrue newCollection add each newCollection Vin vidpovidaye na povidomlennya shlyahom pereboru svoyih elementiv ce metod do vikonuyuchi kod aBlock dlya kozhnoyi literi koli vikonuyetsya aBlock aCharacter isVowel vin stvoryuye logichne znachennya yakomu potim posilayetsya ifTrue Yaksho ce znachennya true bukva dodayetsya v ryadok sho povertayetsya Pozayak select viznacheno v abstraktnomu klasi Collection jogo mozhna vikoristovuvati tak 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 Prostij priklad Privit svite U comu prikladi pokazano dvi storoni Smalltalk Transcript show Privit svite Pershe ce posilka povidomlennya U Smalltalk vsi obchislennya provodyatsya shlyahom posilki povidomlen ob yektam V danomu vipadku povidomlennya ce show Privit svite i vono posilayetsya Transcript Dlya obrobki cogo povidomlennya bude viklikanij metod Transcript show yakij maye rozglyanuti svij argument ryadok Privit svite i vidobraziti cej argument na Transcript Zauvazhte sho u vas maye buti vidkrite vikno Transcript shob pobachiti rezultat Druge cej priklad pokazuye osnovnij sintaksis posilki povidomlennya v Smalltalk e lt ODERZhUVACh POVIDOMLENNYa gt lt PROBIL gt lt POVIDOMLENNYa gt Na vidminu vid C nemaye krapok pislya oderzhuvacha i nemaye duzhok navkolo argumentiv Robota z ob yektami Viznachennya klasu Object subclass MessagePublisher instanceVariableNames classVariableNames poolDictionaries category Smalltalk Examples Ce proste viznachennya klasu z viznachennyam im yam i kategoriyi Chasto seredovishe rozrobki nadavatime vam veliku chastinu kodu z cogo prikladu Viznachennya metodu publish Transcript show Hello world Ce viznachennya metodu z im yam publish Tilo metodu take zh yak v prostomu prikladi Viklik U comu prikladi stvoryuyetsya ekzemplyar MessagePublisher MessagePublisher new potim jomu posilayetsya povidomlennya publish Zvernit uvagu sho dlya stvorennya ob yekta vikoristovuyetsya ne klyuchove slovo movi yak v C Java C a posilayetsya zvichajne povidomlennya new do klasu MessagePublisher Povidomlennya dlya stvorennya ob yektiv inodi pereviznachayut Napriklad yakijs abstraktnij klas mozhe u vidpovid na new povertati ekzemplyar odin z svoyih konkretnih klasiv MessagePublisher new publishDiv takozhOb yektno oriyentovane programuvannya Deyaki movi programuvannya stvoreni pid vplivom Smalltalk C Sharp Ruby Pharo Seaside frejmvork Posilannya Standart ANSI Smalltalk 28 veresnya 2007 u Wayback Machine http www smalltalk org angl 13 serpnya 2004 u Wayback Machine http www smalltalk ru ros 28 veresnya 2004 u Wayback Machine http www squeak org angl 24 zhovtnya 2004 u Wayback Machine https wiki squeak org squeak 172