CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Smalltalk - Wikipedia

Smalltalk

Smalltalk is een objectgeoriënteerde programmeertaal met dynamische typen, die ontwikkeld werd bij Xerox PARC door Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg en anderen in de jaren 1970. De taal werd oorspronkelijk uitgebracht als Smalltalk-80 en wordt sindsdien in brede kring gebruikt.

Smalltalk wordt voortdurend verder ontwikkeld en rondom de taal is een trouwe gebruikersgemeenschap ontstaan. Smalltalk heeft grote invloed gehad op de ontwikkeling van vele andere programmeertalen, o.a. Objective C, Java en Ruby. De invloed op die laatste is zelfs zo groot dat sommige Smalltalkers Ruby beschouwen als Smalltalk met een andere syntaxis. Veel programmeerconcepten uit de jaren 1990 ontstonden in de Smalltalk-gemeenschap, bijvoorbeeld de toepassing van het concept 'design patterns' op software, Extreme Programming en refactoring. Eén Smalltalker is Ward Cunningham, de uitvinder van het WikiWiki-concept.

Inhoud

[bewerk] De grootse ideeën van Smalltalk

Enkele grote ideeën achter Smalltalk:

  • "Alles is een object." Tekenreeksen (strings), getallen, booleans, klassedefinities, codeblokken en geheugen worden allemaal voorgesteld als objecten. De uitvoering bestaat uit het versturen van boodschappen tussen objecten. Elke boodschap kan naar elk object gestuurd worden; het ontvangende object bepaalt of deze boodschap gepast is en hoe het deze gaat verwerken.
  • Alles kan aangepast worden. Als je de IDE wilt aanpassen, dan kan dat - in een draaiend systeem, zonder te hercompileren of opnieuw te beginnen. Als je een nieuwe constrolestructuur in de taal wilt hebben, dan kun je die toevoegen. In sommige implementaties kan je zelfs de syntaxis van de taal aanpassen, of de manier waarop de opruiming van objecten (garbage collection) gebeurt.
  • Typen zijn dynamisch. Dit betekent dat je typen niet hoeft te definiëren in je code, wat de taal veel compacter maakt. (Zoals gezegd is het het ontvangende object eerder dan de compiler dat uitmaakt of een bepaalde boodschap gepast is.)
  • Opbouwen van gebruikersinterfaces volgens het Model View Controller-patroon.
  • Dynamische vertaling: moderne commerciële virtuele machines compileren bytecodes naar de juiste machinecode, wat platformonafhankelijkheid combineert met snelheid. Dit idee werd zo'n tien jaar later overgenomen door Java en kreeg daar de naam Just-in-time- of JIT-compilatie.

Een van de meest verrassende aspecten van Smalltalk is dat traditionele programmeerstructuren als if-then-else, for, while, enz. geen deel uitmaken van de taal. Dit alles wordt geïmplementeerd via objecten. Beslissingen worden bijvoorbeeld genomen door een iftrue-boodschap te sturen naar een boolean-object en een codefragment door te geven dat moet uitgevoerd worden als de boolean True als resultaat geeft. Er zijn slechts drie ingebouwde uitvoerbare constructies:

  • een boodschap sturen naar een object;
  • een object toekennen aan een variabele;
  • een object teruggeven als resultaat van een methode;

en enkele syntactische constructies voor het declareren van objecten met een vaste waarde ('literal objects').

Het volgende codevoorbeeld voor het zoeken van de klinkers in een string illustreert de Smalltalk-stijl ( | dient voor de declaratie van variabelen, : voor de declaratie van parameters).

| aString vowels |
aString := 'Dit is een string'.
vowels := aString select: [:aCharacter | aCharacter isVowel].

In de laatste regel wordt naar de string een boodschap "select:" gestuurd, met het daaropvolgende codeblok als argument. Dit is de code in de superklasse Collection die al het werk doet:

| newCollection |
newCollection := self species new.
self do: [:each | 
    (aBlock value: each) 
        ifTrue: [newCollection add: each]].
^newCollection

Deze code reageert op de boodschap door in een lus alle leden te behandelen (dit doet de methode "do:") en dus de aBlock-code één keer te evalueren voor elk teken; aBlock (aCharacter isVowel geeft bij evaluatie als resultaat een boolean, waarnaar vervolgens een ifTrue: gestuurd wordt. Als de boolean waar (true) is, wordt het teken toegevoegd aan de tekenstring die als resultaat zal gegeven worden.

Omdat select gedefinieerd is in de abstracte klasse Collection, kunnen we het ook zo gebruiken:

| 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].

[bewerk] Geschiedenis

Smalltalk werd ontwikkeld door een groep onderzoekers onder leiding van Alan Kay in het XEROX Palo Alto Research Center. De eerste implementatie, onder de naam Smalltalk-71, werd in een paar ochtenden gecreëerd na een weddenschap over de mogelijkheid om een programmeertaal die gebaseerd was op het idee van het doorgeven van boodschappen (geïnspireerd door Simula) te implementeren in "één pagina code". Een latere versie, die ook echt gebruikt werd voor onderzoekswerk, is nu bekend als Smalltalk-72. De syntaxis en het uitvoeringsmodel waren heel anders dan bij het moderne Smalltalk, in die mate zelfs dat het als een andere taal kan beschouwd worden.

Na ingrijpende revisies ontstond de versie die bekend staat als Smalltalk-76. Die versie beschikte over overerving en een syntaxis die veel dichter aanleunt bij die van Smalltalk-80. Er werd ook een ontwikkelomgeving voor gemaakt, inclusief de meeste tools die Smalltalkers nu kennen.

Smalltalk-80 voegde meta-klassen toe, wat helpt om de uitspraak "alles is een object" vol te houden door eigenschappen en gedrag te associëren met individuele klassen (bijvoorbeeld om verschillende manier om instanties te creëren te ondersteunen).

Smalltalk-80 was de eerste versie die beschikbaar werd gemaakt buiten PARC, eerst als Smalltalk-80 Version 1 aan enkele bedrijven en universiteiten (voor een "peer review"). Later (in 1983) volgde een algemeen beschikbare implementatie, Smalltalk-80 Version 2, die werd uitgebracht als een "image" (platformonafhankelijk bestand met objectdefinities) en een specificatie voor een virtuele machine (Virtual Machine).

Twee van de momenteel populaire Smalltalk-implementaties zijn afstammelingen van de originele Smalltalk-80-images. Squeak is afgeleid van Smalltalk-80 Version 1 via Apple SmallTalk. VisualWorks is afgeleid van Smalltalk-80 Version 2 via Smalltalk-80 2.5 en ObjectWorks (allebei producten van ParcPlace Systems, een spin-off van XEROX PARC die opgericht werd om Smalltalk te commercialiseren). Als een interessante link tussen generaties, vind je hier een schermafbeelding van Smalltalk-80 version 2 dat loopt op Hobbes, een Smalltalk-80 VM-implementatie in VisualWorks.

[bewerk] Implementaties

[bewerk] Handleidingen

[bewerk] Externe links


Overzicht van programmeertalen

Industrieel:
Ada | AWK | Assembler | C | C++ | C# | COBOL | Fortran | F# | Java | JavaScript | Lisp | Object Pascal | Pascal | Perl | PHP | Python | Visual Basic
Academisch:
Eiffel | Haskell | Logo | ML | Prolog | Scheme | Smalltalk
Historisch:
ALGOL | APL | BASIC | Clipper | MUMPS | PL/I | PowerBuilder | Simula

 
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com