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-а:

  1. Први је програмски језик са интегрисаним развојним окружењем .
  2. Један је од првих програмских језика са графичким окружењем које омогућава комуникацију помоћу миша.

Направљен је тако да не прекида рад програма услед неочекиваног понашања. На пример, уколико се објекту пошаље порука коју он не разуме, дебагер нам нуди опцију да дефинишемо метод који одговара датој поруци. 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

Референце уреди

Додатна литература уреди

Спољашње везе уреди