Smalltalk
Smalltalk је објектно-оријентисани[3], динамички, рефлективни програмски језик. Један је од многих објектно-оријентисаних језика базираних на програмском језику Симула[4]. Резултат је вишегодишњег проучавања софтвера који је погодан за прављење високо-функционалне и интерактивне комуникације са оперативним системима персоналних рачунара. Један његов део је створен за образовне сврхе, али се углавном користи за конструктивно учење. Развила га је група истраживача из компаније Xerox PARC[5] на челу са Alan Kay-ом.
Smalltalk | |
---|---|
Оригинални назив | Smalltalk |
Изговара се | смол тóк |
Модел | објектно-оријентисани |
Појавио се | 1972. |
Аутор(и) | Alan Kay, Dan Ingalls[1], Adele Goldberg[2], Ted Kaehler, Diana Merry, Scott Wallace, Peter Deutsch |
Дизајнер(и) | Alan Kay, Dan Ingalls, Adele Goldberg |
Актуелна верзија | 2.6.2 |
Утицаји | Lisp, Simula, Logo, Sketchpad |
Утицао на | Objective-C, Self, Java, PHP 5, Logtalk, Dylan, AppleScript, Lisaac, NewtonScript, Python, Ruby, Groovy, Scala, Perl 6, Common Lisp Objektni Sistem, Falcon, Io, Ioke, Fancy, Dart |
Оперативни системи | више-платформски |
Историја уреди
Alan Kay је дизајнирао најраније верзије Smalltalk-а, велики допринос у документацији о Smalltalk-у дала је Adele Goldberg, док је за његову имплементацију заслужан Dan Ingalls. Прва верзија је направљена 80-тих година 20.века и позната је као Smalltalk-71. Са настанком верзије Smalltalk-80 овај програмски језик је по први пут публикован. Она се састојала од две подверзије. Прва подверзија Smalltalk-80 Version 1 уступљена је неколицини компанија и универзитета ради тестирања и имплементације језика на њиховим платформама, док је Smalltalk-80 Version 2 представљена као финална верзија доступна широј јавности. Данас су у свету програмирања популарне две имплеметације Smalltalk-а, Squeak и VisualWorks, засноване управо на верзији Smalltalk-80.Squeak је open source имплементација изведена из Smalltalk-80 Version 1 помоћу Apple Smalltalk-а док је VisualWorks изведена из Smalltalk-80 Version 2 помоћу Smalltalk-80 2.5 и ObjectWorks-а.[6][7]
Значајан напредак, који је утицао на сва постојећа окружења Smalltalk-а, је употреба два веб оквира, Seaside и AIDA/Web.[8][9] Коришћењем ових веб оквира поједноставила се изградња сложених апликација. Године 1998, Smalltalk postaje ANSI-стандардизовани језик и добија назив ANSI Smalltalk.
Објектно-оријентисани концепт у Smalltalk-у уреди
Smalltalk је чист пример објектно-оријентисаног програмирања. Због своје изричитости по том питању, уочавају се битне разлике у односу на мејнстрим представнике ове парадигме. Он не прави разлику између вредности примитивних типова(нпр. boolean,int) и класних типова. Сви примитивни типови подржани овим програмским језиком представљају објекте њима одговарајућих класа. Као такви у могућности су да равноправно, путем порука, комуницирају са инстанцама других класа. С обзиром на такво поимање примитивних типова, програмер има могућност да, у оквиру њима одговарајућих класа, врши измене и додаје одређене функционалности или мења постојеће. Пошто су све вредности у Smalltalk-у представљене објектима, класе су такође објекти. Свака класа је инстанца неке метакласе, док су све метакласе инстанце класе Metaclass.
Рефлексија уреди
Рефлексија је термин који програмери користе за програме који имају способност да испитују сопствену структуру (нпр. тип података улазних и излазних параметара). Првенствено је била карактеристика интерпретираних језика као што су Smalltalk и Lisp. Рефлексија се заснива на тзв. мета-моделу. Мета-модел описује сам језик и користи се за обилазак, модификацију и испитивање објеката. Може се користити за проналазак свих инстанци неке структуре података (нпр. задатак је наћи све инстанце класе Метод у мета-моделу). Smalltalk-80 има потпуно рефлектујући систем, који је имплементиран унутар самог Smalltalk-а. Класе и методи које дефинишу систем Smalltalk-а су и сами за себе објекти. Smalltalk компилатор преводи изворни код објекта метода које су обично инстанце класе CompiledMethod
. Они се додају у класе тако што се чувају у речник за методе класа. Систем се проширује покретањем Smalltalk-80 кода који креира или дефинише класе и методе. Један део класне хијерархије, који дефинише саме класе, може да додаје нове класе у систем. На овај начин Smalltalk-80 систем је "живи" систем, који има могућност проширивања током рада. С обзиром да су и саме класе објекти, можемо проверити које методе оне имплементирају или која поља садрже. Овиме се објекти могу лако испитати, копирати и серијализовати[10] помоћу генеричког кода који се примењује на све објекте у систему. Smalltalk-80 пружа могућност посматрања стања рачунарског система. У језицима који су изведени из оригиналног Smalltalk-80 могуће је активирати метод помоћу објекта чије се име чува у псеудо-променљиви (једна од шест резервисаних речи) thisContext
.
Иновације уреди
Многе ствари које су у данашњем програмирању подразумеване, настале су са развојем Smalltalk-а:
- Први је програмски језик са интегрисаним развојним окружењем .
- Један је од првих програмских језика са графичким окружењем које омогућава комуникацију помоћу миша.
Направљен је тако да не прекида рад програма услед неочекиваног понашања. На пример, уколико се објекту пошаље порука коју он не разуме, дебагер нам нуди опцију да дефинишемо метод који одговара датој поруци. Smalltalk садржи TDD алате који су још увек једни од најбољих у свету програмирања.[11] Такође, у Smalltalk-у је подржана и 'Just in time' компилација.
Синтакса уреди
Smalltalk у преводу са енглеског језика значи ' ћаскање ' што илуструје његову једноставну синтаксу. Овај програмски језик не садржи примитивне типове (нпр. int[12] и boolean) kao ni kontrolne strukture (npr if, for и while петља). Такође, не подржава ни статичке променљиве.
Поруке уреди
Поруке представљају једну од фундаменталних конструкција у Smalltalk-у. У следећем примеру приказано је како се поруке записују:
36 sqrt
Овде 36 прима поруку док је sqrt селектује.Резултат овог израчунавања може да се додели некој променљивој:
koren_sestice := 36 sqrt
Методи уреди
Када одређени објекат прими поруку позива се метод који датој поруци одговара. У следећем примеру дефинишемо метод ispisi који одговара испису једноставне поруке:
ispisi
Transcript show: 'Programiranje u Smalltalku je zabavno!'
Метод може да садржи аргументе и да враћа одређену вредност:
suma: s1 and: s2
| sum
| sum:= s1 + s2
^sum
Стрингови уреди
Стрингови у Smalltalk-у су речи између наводника (' i ').
'Zdravo, svete!'
За увођење цитата користите дупле наводнике.
'Rekao sam, ''Zdravo, svete!'' njima.'
Рачунање и математичке операције уреди
Математичке операције су крајње једноставно дефинисане постављањем елемената са којима се ради и писањем оператора којим се врши операција над та два елемента израза.
2 + 4
Могуће је коришћење релационих оператора и ван петљи што је реткост у данашњим објектно-оријентисаним језицима.
3 < 5
6 > 1
Низови уреди
Низови се декларишу помоћу знака '#':
#(1 2 3 4)
Декларација променљивих уреди
У Smalltalk-у постоје два типа променљивих, класне(инстанцне) и локалне. Локалне променљиве се декларишу на следећи начин:
| promenljiva |
Вредност ове променљиве, уколико се експлицитно не наведе, је nil
.
Могуће је и декларисање више променљивих одједном:
| promenljiva1 promenljiva2 |
Наредба доделе уреди
У Smalltalk-у се за доделу вредности користи знак ':=':
rec := 'zdravo'
Овом наредбом је променљивој rec додељена вредност 'zdravo'.
Инстанцирање уреди
Креирање инстанце класе:
NekaKlasa new
Обично се новокреирани објекти додељују променљивама:
promenljiva := NekaKlasa new
Референце уреди
- ^ Дан Ингаллс | Цомпутер Хисторy Мусеум
- ^ Др. Аделе Голдберг | ИТ Хисторy Социетy
- ^ Увод у објектно-оријентисано програмирање (ООП): http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep
- ^ Симула: http://www.edelweb.de/Simula Архивирано на сајту Wayback Machine (10. новембар 2017)
- ^ Абоут ПАРЦ - ПАРЦ, а Xероx цомпанy
- ^ Сqуеак/Смаллталк
- ^ Цинцом ис тхе леадинг провидер оф цоммерциал Смаллталк ин тхе wорлд
- ^ „Архивирана копија”. Архивирано из оригинала 09. 07. 2017. г. Приступљено 28. 11. 2017.
- ^ http://www.aidaweb.si/
- ^ Сериализатион (C# ) | Мицрософт Доцс
- ^ Интродуцтион то Тест Дривен Девелопмент (ТДД)
- ^ http://whatis.techtarget.com/definition/integer
Додатна литература уреди
- Goldberg, Adele (1983). Smalltalk-80: The Interactive Programming Environment. Addison-Wesley. ISBN 978-0-201-11372-3.
- Adele Goldberg & Alan Kay, ur. (1976). Smalltalk-72 Instruction Manual (PDF). Palo Alto, California: Xerox Palo Alto Research Center. Pristupljeno 11. 11. 2011.
- Goldberg, Adele; Robson, David (1983). Smalltalk-80: The Language and its Implementation (PDF). Addison-Wesley. ISBN 978-0-201-11371-6.
- Goldberg, Adele; Robson, David (1989). Smalltalk 80: The Language. Addison-Wesley. ISBN 978-0-201-13688-3.
- Kay, Alan C. (mart 1993). „The Early History of Smalltalk” (PDF). ACM SIGPLAN Notices. ACM. 28 (3): 69—95. doi:10.1145/155360.155364.
- Glen Krasner, ur. (1983). Smalltalk-80: Bits of History, Words of Advice. Addison-Wesley. ISBN 978-0-201-11669-4.
- Nierstrasz, Oscar; Ducasse, Stéphane; Pollet, Damien; Black, Andrew P. (2009—10-07). Squeak by Example. Kehrsatz, Switzerland: Square Bracket Associates. ISBN 978-3-9523341-0-2. Proverite vrednost paramet(a)ra za datum:
|date=
(pomoć) - Nierstrasz, Oscar; Ducasse, Stéphane; Pollet, Damien; Black, Andrew P. (23. 2. 2010). Pharo by Example. Kehrsatz, Switzerland: Square Bracket Publishing. ISBN 978-3-9523341-4-0.
- Winston, Patrick Henry (3. 9. 1997). On to Smalltalk. MIT, USA: Addison Wesley. ISBN 978-0201498271.
- Brauer, Johannes (2015). Programming Smalltalk - Object-Orientation from the Beginning. Springer. ISBN 978-3-658-06823-3.
- „Special Issue on Smalltalk”. BYTE. McGraw-Hill. 6 (8). avgust 1981. Pristupljeno 18. 10. 2013.
- Goldberg, Adele (avgust 1981). „Introducing the Smalltalk-80 System”. BYTE. McGraw-Hill. 6 (8). Pristupljeno 18. 10. 2013.
- Ingalls, Dan (avgust 1981). „Design Principles Behind Smalltalk”. BYTE. McGraw-Hill. 6 (8). Pristupljeno 11. 11. 2011.
- Tesler, Larry (avgust 1981). „The Smalltalk Environment”. BYTE. McGraw-Hill. 6 (8). Pristupljeno 2. 5. 2016.