Smalltalk
__БЕЗКН__

-{Smalltalk}- je objektno-orijentisani, dinamički, reflektivni programski jezik. Jedan je od mnogih objektno-orijentisanih jezika baziranih na programskom jeziku Simula. Rezultat je višegodišnjeg proučavanja softvera koji je pogodan za pravljenje visoko-funkcionalne i interaktivne komunikacije sa operativnim sistemima personalnih računara. Jedan njegov deo je stvoren za obrazovne svrhe, ali se uglavnom koristi za konstruktivno učenje. Razvila ga je grupa istraživača iz kompanije -{Xerox PARC}- na čelu sa -{Alan Kay}--om.

Istorija 
-{Alan Kay}- je dizajnirao najranije verzije -{Smalltalk}--a, veliki doprinos u dokumentaciji o -{Smalltalk}--u dala je -{Adele Goldberg}-, dok je za njegovu implementaciju zaslužan -{Dan Ingalls}-. Prva verzija je napravljena 80-tih godina 20.veka i poznata je kao -{Smalltalk}--71. Sa nastankom verzije -{Smalltalk-80}- ovaj programski jezik je po prvi put publikovan. Ona se sastojala od dve podverzije. Prva podverzija -{Smalltalk-80 Version 1}- ustupljena je nekolicini kompanija i univerziteta radi testiranja i implementacije jezika na njihovim platformama, dok je -{Smalltalk-80 Version 2}- predstavljena kao finalna verzija dostupna široj javnosti. Danas su u svetu programiranja popularne dve implemetacije -{Smalltalk}--a, -{Squeak}- i -{VisualWorks}-, zasnovane upravo na verziji -{Smalltalk-80}-.-{Squeak}- je -{open source}- implementacija izvedena iz -{Smalltalk-80 Version 1}- pomoću -{Apple Smalltalk}--a dok je -{VisualWorks}- izvedena iz -{Smalltalk-80 Version 2}- pomoću -{Smalltalk}--80 2.5 i -{ObjectWorks}--a.

Značajan napredak, koji je uticao na sva postojeća okruženja -{Smalltalk}--a, je upotreba dva veb okvira, -{Seaside}- i -{AIDA/Web}-. Korišćenjem ovih veb okvira pojednostavila se izgradnja složenih aplikacija. Godine 1998, -{Smalltalk postaje}- -{ANSI}--standardizovani jezik i dobija naziv -{ANSI Smalltalk}-.

Objektno-orijentisani koncept u -{Smalltalk}--u 
-{Smalltalk}- je čist primer objektno-orijentisanog programiranja. Zbog svoje izričitosti po tom pitanju, uočavaju se bitne razlike u odnosu na mejnstrim predstavnike ove paradigme. On ne pravi razliku između vrednosti primitivnih tipova(npr. -{boolean,int}-) i klasnih tipova. Svi primitivni tipovi podržani ovim programskim jezikom predstavljaju objekte njima odgovarajućih klasa. Kao takvi u mogućnosti su da ravnopravno, putem poruka, komuniciraju sa instancama drugih klasa. S obzirom na takvo poimanje primitivnih tipova, programer ima mogućnost da, u okviru njima odgovarajućih klasa, vrši izmene i dodaje određene funkcionalnosti ili menja postojeće. Pošto su sve vrednosti u -{Smalltalk}--u predstavljene objektima, klase su takođe objekti. Svaka klasa je instanca neke metaklase, dok su sve metaklase instance klase -{Metaclass}-.

Refleksija 
Refleksija je termin koji programeri koriste za programe koji imaju sposobnost da ispituju sopstvenu strukturu (npr. tip podataka ulaznih i izlaznih parametara). Prvenstveno je bila karakteristika interpretiranih jezika kao što su -{Smalltalk}- i -{ Lisp}-. Refleksija se zasniva na tzv. meta-modelu. Meta-model opisuje sam jezik i koristi se za obilazak, modifikaciju i ispitivanje objekata. Može se koristiti za pronalazak svih instanci neke strukture podataka (npr. zadatak je naći sve instance klase Metod u meta-modelu). -{Smalltalk-80}- ima potpuno reflektujući sistem, koji je implementiran unutar samog -{Smalltalk}--a. Klase i metodi koje definišu sistem -{Smalltalk}--a su i sami za sebe objekti. -{Smalltalk}- kompilator prevodi izvorni kod objekta metoda koje su obično instance klase CompiledMethod. Oni se dodaju u klase tako što se čuvaju u rečnik za metode klasa. Sistem se proširuje pokretanjem -{Smalltalk-80}- koda koji kreira ili definiše klase i metode. Jedan deo klasne hijerarhije, koji definiše same klase, može da dodaje nove klase u sistem. Na ovaj način -{Smalltalk-80}- sistem je "živi" sistem, koji ima mogućnost proširivanja tokom rada. S obzirom da su i same klase objekti, možemo proveriti koje metode one implementiraju ili koja polja sadrže. Ovime se objekti mogu lako ispitati, kopirati i serijalizovati pomoću generičkog koda koji se primenjuje na sve objekte u sistemu. -{Smalltalk-80}- pruža mogućnost posmatranja stanja računarskog sistema. U jezicima koji su izvedeni iz originalnog -{Smalltalk-80}- moguće je aktivirati metod pomoću objekta čije se ime čuva u pseudo-promenljivi (jedna od šest rezervisanih reči) thisContext.

Inovacije 
Mnoge stvari koje su u današnjem programiranju podrazumevane, nastale su sa razvojem -{Smalltalk}--a:
 Prvi je programski jezik sa integrisanim razvojnim okruženjem .
 Jedan je od prvih programskih jezika sa grafičkim okruženjem koje omogućava komunikaciju pomoću miša.

Napravljen je tako da ne prekida rad programa usled neočekivanog ponašanja. Na primer, ukoliko se objektu pošalje poruka koju on ne razume, debager nam nudi opciju da definišemo metod koji odgovara datoj poruci. -{Smalltalk}- sadrži -{TDD}- alate koji su još uvek jedni od najboljih u svetu programiranja. Takođe, u -{Smalltalk}--u je podržana i -{'Just in time'}- kompilacija.

Sintaksa 
-{Smalltalk}- u prevodu sa engleskog jezika znači ' ćaskanje ' što ilustruje njegovu jednostavnu sintaksu. Ovaj programski jezik ne sadrži primitivne tipove (npr. -{int}- i -{boolean}-) kao ni kontrolne strukture (npr -{if}-, -{for}- i -{while}- petlja). Takođe, ne podržava ni statičke promenljive.

Poruke 
Poruke predstavljaju jednu od fundamentalnih konstrukcija u -{Smalltalk}--u. U sledećem primeru prikazano je kako se poruke zapisuju:
36 sqrt
Ovde 36 prima poruku dok je -{sqrt}- selektuje.Rezultat ovog izračunavanja može da se dodeli nekoj promenljivoj:
koren_sestice := 36 sqrt

Metodi 
Kada određeni objekat primi poruku poziva se metod koji datoj poruci odgovara. U sledećem primeru definišemo metod -{ispisi}- koji odgovara ispisu jednostavne poruke:

ispisi
   Transcript show: 'Programiranje u Smalltalku je zabavno!'
Metod može da sadrži argumente i da vraća određenu vrednost:
suma: s1 and: s2
   | sum 
| sum:= s1 + s2
   ^sum

Stringovi 
Stringovi u -{Smalltalk}--u su reči između navodnika (' -{i}- ').

'Zdravo, svete!'

Za uvođenje citata koristite duple navodnike.

'Rekao sam, ''Zdravo, svete!'' njima.'

Računanje i matematičke operacije 
Matematičke operacije su krajnje jednostavno definisane postavljanjem elemenata sa kojima se radi i pisanjem operatora kojim se vrši operacija nad ta dva elementa izraza.

2 + 4

Moguće je korišćenje relacionih operatora i van petlji što je retkost u današnjim objektno-orijentisanim jezicima.

3 < 5
6 > 1

Nizovi 
Nizovi se deklarišu pomоću znaka '#':

#(1 2 3 4)

Deklaracija promenljivih 
U -{Smalltalk}--u postoje dva tipa promenljivih, klasne(instancne) i lokalne. Lokalne promenljive se deklarišu na sledeći način:
| promenljiva |
Vrednost ove promenljive, ukoliko se eksplicitno ne navede, je nil.

Moguće je i deklarisanje više promenljivih odjednom:
| promenljiva1 promenljiva2 |

Naredba dodele 
U -{Smalltalk}--u se za dodelu vrednosti koristi znak ':=':
rec := 'zdravo'
Ovom naredbom je promenljivoj -{rec}- dodeljena vrednost -{'zdravo'}-.

Instanciranje 
Kreiranje instance klase:
NekaKlasa new
Obično se novokreirani objekti dodeljuju promenljivama:
promenljiva := NekaKlasa new

Reference

Dodatna literatura

Spoljašnje veze 
 Zvanični sajt GNU Smalltalk-a
 Dokumentacija za GNU Smalltalk
 Squeak Smalltalk (slobodan softver)

Софтвер 1972.
Програмирање
Програмски језици базирани на класама
Објектно-оријентисани програмски језици
Динамички типизирани програмски језици
__БЕЗКН__ -{ Smalltalk }- je objektno-orijentisani , dinamički , reflektivni programski jezik . Jedan je od mnogih objektno-orijentisanih jezika baziranih na programskom jeziku Simula . Rezultat je višegodišnjeg proučavanja softvera koji je pogodan za pravljenje visoko-funkcionalne i interaktivne komunikacije sa operativnim sistemima personalnih računara . Jedan njegov deo je stvoren za obrazovne svrhe , ali se uglavnom koristi za konstruktivno učenje . Razvila ga je grupa istraživača iz kompanije -{ Xerox PARC }- na čelu sa -{ Alan Kay } --om . Istorija -{ Alan Kay }- je dizajnirao najranije verzije -{ Smalltalk } --a , veliki doprinos u dokumentaciji o -{ Smalltalk } --u dala je -{ Adele Goldberg }- , dok je za njegovu implementaciju zaslužan -{ Dan Ingalls }- . Prva verzija je napravljenatih godinaveka i poznata je kao -{ Smalltalk } --71 . Sa nastankom verzije -{ Smalltalk-80 }- ovaj programski jezik je po prvi put publikovan . Ona se sastojala od dve podverzije . Prva podverzija -{ Smalltalk-80 Version- ustupljena je nekolicini kompanija i univerziteta radi testiranja i implementacije jezika na njihovim platformama , dok je -{ Smalltalk-80 Version- predstavljena kao finalna verzija dostupna široj javnosti . Danas su u svetu programiranja popularne dve implemetacije -{ Smalltalk } --a , -{ Squeak }- i -{ VisualWorks }- , zasnovane upravo na verziji -{ Smalltalk-80 } -.-{ Squeak }- je -{ open source }- implementacija izvedena iz -{ Smalltalk-80 Version- pomoću -{ Apple Smalltalk } --a dok je -{ VisualWorks }- izvedena iz -{ Smalltalk-80 Version- pomoću -{ Smalltalk } --805 i -{ ObjectWorks } --a . Značajan napredak , koji je uticao na sva postojeća okruženja -{ Smalltalk } --a , je upotreba dva veb okvira , -{ Seaside }- i -{ AIDA/ Web }- . Korišćenjem ovih veb okvira pojednostavila se izgradnja složenih aplikacija . Godine -{ Smalltalk postaje }- -{ ANSI } --standardizovani jezik i dobija naziv -{ ANSI Smalltalk }- . Objektno-orijentisani koncept u -{ Smalltalk } --u -{ Smalltalk }- je čist primer objektno-orijentisanog programiranja . Zbog svoje izričitosti po tom pitanju , uočavaju se bitne razlike u odnosu na mejnstrim predstavnike ove paradigme . On ne pravi razliku između vrednosti primitivnih tipova( npr. -{ boolean,int }- ) i klasnih tipova . Svi primitivni tipovi podržani ovim programskim jezikom predstavljaju objekte njima odgovarajućih klasa . Kao takvi u mogućnosti su da ravnopravno , putem poruka , komuniciraju sa instancama drugih klasa . S obzirom na takvo poimanje primitivnih tipova , programer ima mogućnost da , u okviru njima odgovarajućih klasa , vrši izmene i dodaje određene funkcionalnosti ili menja postojeće . Pošto su sve vrednosti u -{ Smalltalk } --u predstavljene objektima , klase su takođe objekti . Svaka klasa je instanca neke metaklase , dok su sve metaklase instance klase -{ Metaclass }- . Refleksija Refleksija je termin koji programeri koriste za programe koji imaju sposobnost da ispituju sopstvenu strukturu ( npr. tip podataka ulaznih i izlaznih parametara ) . Prvenstveno je bila karakteristika interpretiranih jezika kao što su -{ Smalltalk }- i - { Lisp }- . Refleksija se zasniva na tzv. meta-modelu . Meta-model opisuje sam jezik i koristi se za obilazak , modifikaciju i ispitivanje objekata . Može se koristiti za pronalazak svih instanci neke strukture podataka ( npr. zadatak je naći sve instance klase Metod u meta-modelu ). -{ Smalltalk-80 }- ima potpuno reflektujući sistem , koji je implementiran unutar samog -{ Smalltalk } --a . Klase i metodi koje definišu sistem -{ Smalltalk } --a su i sami za sebe objekti. -{ Smalltalk }- kompilator prevodi izvorni kod objekta metoda koje su obično instance klase CompiledMethod . Oni se dodaju u klase tako što se čuvaju u rečnik za metode klasa . Sistem se proširuje pokretanjem -{ Smalltalk-80 }- koda koji kreira ili definiše klase i metode . Jedan deo klasne hijerarhije , koji definiše same klase , može da dodaje nove klase u sistem . Na ovaj način -{ Smalltalk-80 }- sistem je " živi " sistem , koji ima mogućnost proširivanja tokom rada . S obzirom da su i same klase objekti , možemo proveriti koje metode one implementiraju ili koja polja sadrže . Ovime se objekti mogu lako ispitati , kopirati i serijalizovati pomoću generičkog koda koji se primenjuje na sve objekte u sistemu. -{ Smalltalk-80 }- pruža mogućnost posmatranja stanja računarskog sistema . U jezicima koji su izvedeni iz originalnog -{ Smalltalk-80 }- moguće je aktivirati metod pomoću objekta čije se ime čuva u pseudo-promenljivi ( jedna od šest rezervisanih reči ) thisContext . Inovacije Mnoge stvari koje su u današnjem programiranju podrazumevane , nastale su sa razvojem -{ Smalltalk } --a : Prvi je programski jezik sa integrisanim razvojnim okruženjem \ . Jedan je od prvih programskih jezika sa grafičkim okruženjem koje omogućava komunikaciju pomoću miša . Napravljen je tako da ne prekida rad programa usled neočekivanog ponašanja . Na primer , ukoliko se objektu pošalje poruka koju on ne razume , debager nam nudi opciju da definišemo metod koji odgovara datoj poruci. -{ Smalltalk }- sadrži -{ TDD }- alate koji su još uvek jedni od najboljih u svetu programiranja . Takođe , u -{ Smalltalk } --u je podržana i -{ ' Just in time ' }- kompilacija . Sintaksa -{ Smalltalk }- u prevodu sa engleskog jezika znači ' ćaskanje ' što ilustruje njegovu jednostavnu sintaksu . Ovaj programski jezik ne sadrži primitivne tipove ( npr. -{ int }- i -{ boolean }- ) kao ni kontrolne strukture ( npr -{ if }- , -{ for }- i -{ while }- petlja ) . Takođe , ne podržava ni statičke promenljive . Poruke Poruke predstavljaju jednu od fundamentalnih konstrukcija u -{ Smalltalk } --u . U sledećem primeru prikazano je kako se poruke zapisuju : 36 sqrt Ovdeprima poruku dok je -{ sqrt }- selektuje.Rezultat ovog izračunavanja može da se dodeli nekoj promenljivoj : koren_sestice \ :=sqrt Metodi Kada određeni objekat primi poruku poziva se metod koji datoj poruci odgovara . U sledećem primeru definišemo metod -{ ispisi }- koji odgovara ispisu jednostavne poruke : ispisi Transcript show : ' Programiranje u Smalltalku je zabavno ! ' Metod može da sadrži argumente i da vraća određenu vrednost : suma : s1 and : s2 | sum | sum:= s1 + s2 ^sum Stringovi Stringovi u -{ Smalltalk } --u su reči između navodnika ( ' -{ i }- ' ) . ' Zdravo , svete !' Za uvođenje citata koristite duple navodnike . ' Rekao sam , ' ' Zdravo , svete !' ' njima . ' Računanje i matematičke operacije Matematičke operacije su krajnje jednostavno definisane postavljanjem elemenata sa kojima se radi i pisanjem operatora kojim se vrši operacija nad ta dva elementa izraza. 2 + 4 Moguće je korišćenje relacionih operatora i van petlji što je retkost u današnjim objektno-orijentisanim jezicima. 3 < 5 6 > 1 Nizovi Nizovi se deklarišu pomоću znaka ' # ' : #( 13 Deklaracija promenljivih U -{ Smalltalk } --u postoje dva tipa promenljivih , klasne( instancne ) i lokalne . Lokalne promenljive se deklarišu na sledeći način : | promenljiva | Vrednost ove promenljive , ukoliko se eksplicitno ne navede , je nil . Moguće je i deklarisanje više promenljivih odjednom : | promenljiva1 promenljiva2 | Naredba dodele U -{ Smalltalk } --u se za dodelu vrednosti koristi znak ' := ' : rec \ := ' zdravo ' Ovom naredbom je promenljivoj -{ rec }- dodeljena vrednost -{ ' zdravo ' }- . Instanciranje Kreiranje instance klase : NekaKlasa new Obično se novokreirani objekti dodeljuju promenljivama : promenljiva \ := NekaKlasa new Reference Dodatna literatura Spoljašnje veze Zvanični sajt GNU Smalltalk-a Dokumentacija za GNU Smalltalk Squeak Smalltalk ( slobodan softver ) Софтвер Програмирање Програмски језици базирани на класама Објектно-оријентисани програмски језици Динамички типизирани програмски језици