Smalltalk
es un
llenguatge de programacio
orientat a objectes
, dinamicament tipat i
reflexiu
. Va ser creat amb l'objectiu de ser el llenguatge que sostingui el nou mon de la informatica exemplificat per la ≪simbiosi huma-maquina≫.
[1]
Va ser dissenyat en part amb proposits educatius, i mes concretament per a un
aprenentatge construccionista
. Va ser creat per
Alan Kay
, Dan Ingalls,
Adele Goldberg
, Ted Kaehler, Scott Wallace, i d'altres col·laboradors, durant la decada de 1970.
El llenguatge va ser difos inicialment com Smalltalk-80. Llenguatges com Smalltalk son actius, en desenvolupament continu i tenen al seu voltant comunitats fidels. ANSI Smalltalk es la versio estandard de Smalltalk, despres de ser ratificat el 1998.
[2]
Un sistema Smalltalk esta compost per:
Els origens de
Smalltalk
es troben en les recerques d'
Alan Kay
, Donen Ingalls, Ted Kaehler,
Adele Goldberg
i uns altres durant els anys setanta en el Palo Alt Research Institute de Xerox (conegut com a
Xerox
PARC), per a la creacio d'un sistema informatic orientat a l'educacio. L'objectiu era crear un sistema que permetes expandir la
creativitat
dels seus usuaris, proporcionant un entorn per a l'experimentacio, creacio i recerca.
Terminologia
[
modifica
]
Un programa Smalltalk consisteix unicament d'objectes, un concepte que es fa servir universalment dins de tot sistema Smalltalk. Practicament tot, des d'un nombre natural com el 4 fins a un
servidor web
es un objecte. Els objectes Smalltalk presenten caracteristiques comunes:
- Tenen una
memoria
propia.
- Posseeixen capacitat per comunicar-se amb altres objectes.
- Posseeixen la capacitat d'heretar caracteristiques d'objectes ancestres.
- Tenen capacitat de processament.
Els objectes es comuniquen entre si mitjancant l'enviament de missatges.. Aixi mateix, un objecte pot proveir moltes operacions (actualment aixo esta determinat per cada implementacio)
Les definicions d'aquestes operacions en els objectes son cridades
metodes.
Un metode especifica la reaccio d'un objecte quan rep un missatge que es dirigit a aquest metode. La resolucio (en el sentit de lligat) d'un missatge a un metode es dinamica. La col·leccio sencera de metodes d'un objecte es cridada
protocol de missatges
o
interficie de missatges
de l'objecte. Els missatges poden ser parametritzats, aquests parametres seran objectes, i el resultat o resposta del mateix tambe sera un objecte.
Les caracteristiques comunes d'objectes esta capturat sota la nocio de classe, de tal forma que els objectes agrupats sota una
classe
son cridats
instancies
d'ella. Les instancies son creades durant l'execucio d'un programa amb algun proposit i son escombrats automaticament al moment que no son necessitats mes pel recol·lector d'escombraries. Exceptuant alguns objectes especials com els molt simples, anomenats
literals
(nombres, cadenes, etc), cada objecte te el seu propi estat local i representa una instancia diferent de la seva classe.
Caracteristiques
[
modifica
]
Smalltalk es considerat el primer dels llenguatges orientats a objectes (
OOP
), encara que en realitat el primer a implementar programacio orientada a objectes va ser
Simula.
En Smalltalk
tot
es un objecte, inclosos els nombres reals o el propi entorn
Smalltalk
.
Com a llenguatge te les seguents caracteristiques:
- Orientacio a Objectes
- Tipatge dinamic
- Interaccio entre objectes mitjancant enviament de missatges
- Herencia simple i amb arrel comuna
- Reflexio computacional completa
- Recol·leccio d'escombraries
- Compilacio en temps d'execucio o Interpretat (depenent de la distribucio o del proveidor)
- Multiples Implementacions
Smalltalk
ha tingut gran influencia sobre altres llenguatges com
Java
o
Ruby
, i del seu entorn han sorgit moltes de les practiques i eines de desenvolupament promulgades actualment per les
metodologies agils
(refactorizacion, desenvolupament incremental, desenvolupament dirigit per tests, etc.).
L'entorn Smalltalk
[
modifica
]
Les implementacions de Smalltalk de major pes (VisualWorks, Squeak, VisualSmalltalk, VisualAge, Dolphin, Pharo Smalltalk, Smalltalk X) posseeixen un
entorn
d'interaccio molt diferent a l'entorn de desenvolupament tipic d'altres tecnologies com
Microsoft Visual Studio
.
Net
o
Eclipsi
. L'entorn o ambient Smalltalk es primordialment grafic i funciona com un sistema en temps d'execucio que integra diverses eines de programacio (Smalltalk), utilitats
multimedia
, interficies per executar codi no natiu a Smalltalk i serveis del
sistema operatiu
.
[3]
Aquestes possibilitats, que han influit en la metodologia de treball i concepcio de la programacio, es tradueixen en la tendencia a considerar a Smalltalk mes que un simple
llenguatge de programacio
.
La forma de desenvolupar programari en Smalltalk no consisteix en el cicle tipic de les tecnologies tradicionals: Arrencar un
editor de text
,
compilar
i executar i acabar l'aplicacio. En Smalltalk es manipula l'entorn mateix, comunament mitjancant el Navegador del Sistema.
Tradicionalment, Smalltalk no posseeix una notacio explicita per descriure un programa sencer. Si es fa servir una sintaxi explicita per definir certs elements d'un programa, tals com a metodes, pero la manera en que tals elements estan estructurats dins d'un programa sencer generalment es definida per les multiples implementacions. L'estandard mateix no promou una altra adreca, per la qual cosa defineix una sintaxi abstracta de programes Smalltalk, que defineix tots els elements que constitueixen un programa Smalltalk i la manera en que aquests elements estan logicament composts per altres elements, no obstant aixo, cada implementacio es lliure de definir i utilitzar les moltes sintaxis possibles que estan conformes a la sintaxi abstracta estandard. Un exemple d'una sintaxi concreta es el Format d'Intercanvi Smalltalk (o SIF, de Smalltalk Interchange Format) definida en el mateix estandard.
La sintaxi de Smalltalk-80 tendeix a ser minimalista. Aixo significa que existeixen un grup petit de paraules reservades i declaracions en comparacio de la majoria dels llenguatges populars. Smalltalk posseeix un grup de 5 paraules reservades:
self
,
super
,
nil
,
true
i
false
.
Recol·leccio d'escombraries
[
modifica
]
En Smalltalk no es necessari desalocar objectes explicitament, per tant no proporciona mecanismes per a aixo. Les implementacions utilitzen tecniques de
recol·leccio d'escombraries
per detectar i reclamar espai en memoria associat amb objectes que ja no s'utilitzaran mes en el sistema. En Smalltalk la recol·leccio d'escombraries es
integrada configurable.
La forma d'execucio del recol·lector d'escombraries es en
background
, es a dir, com un proces de baixa prioritat no interactiu, encara que en algunes implementacions es possible executar-ho a demanda, sent possible definir configuracions de memoria especials per a cada sistema mitjancant politiques (per exemple en VisualWorks). La frequencia i caracteristiques de la recol·leccio depen de la tecnica utilitzada per la implementacio. Addicionalment algunes implementacions de Smalltalk proporcionen suport per a mecanismes de finalitzacio com l'us d'Ephemerons.
Reflexio computacional
[
modifica
]
Smalltalk-80 proveeix reflexio computacional estructural i comportacional, ja que es un sistema implementat en si mateix. La reflexio estructural es manifesta en que les classes i metodes que defineix el sistema son en si mateixos objectes tambe i formen part del sistema mateix.
La majoria de les implementacions de Smalltalk tendeixen a exposar el compilador Smalltalk a l'entorn de programacio, permetent que dins del sistema es compili
codi font
(textual), transformant-se en objectes metodes, que son comunament instancies de la classe
CompiledMethod.
El sistema generalment incorpora aquests metodes a les classes, emmagatzemant-los en el diccionari de metodes de la classe a la qual es vulgui agregar el comportament encarregat del metode. Aixo, aixi com la incorporacio de noves classes al sistema, es fa dins del sistema mateix; encara que la major part de les implementacions posseeixen eines visuals que oculten la complexitat d'interactuar amb la classe que usualment s'encarrega de tals tasques, el
ClassBuilder
.
La reflexio computacional de Smalltalk-80 es manifesta en la possibilitat d'observar l'estat computacional del sistema. En els llenguatges derivats del Smalltalk-80 original, durant l'enviament de missatges entre objectes, cada objecte receptor d'un missatge consulta la seva classe per tenir acces als metodes que defineix. En cas de trobar-se el metode a la classe, es diu que es "activa" el metode. Aquesta activacio d'un metode actualment en execucio, es accessible mitjancant una paraula clau cridada
thisContext.
Enviant missatges a thisContext es pot consultar questions tals com "qui em va enviar aquest missatge?". Aquestes facilitats fan possible implementar co-rutines, continuacions o back-tracking a l'estil
Prolog
sense necessitat de modificar la
maquina virtual
. Un dels usos mes interessants d'aquesta facilitat, es dona en el
framework
de web Seaside d'Avi Bryant.
Exemples de Smalltalk
[
modifica
]
En Smalltalk tot es un objecte, i a un objecte se li envien missatges. Per exemple:
Significa que a l'objecte "1" li enviem el missatge "+" amb el col·laborador extern, un altre objecte, "1". Aquest exemple llavors resulta en l'objecte "2".
Transcript
show:
'¡Hola, mon!'
En el tipic
Hola mon
, l'objecte es Transcript, que rep el missatge
show
amb el col·laborador extern 'Hola, mon!'.
Per crear una instancia d'un objecte, nomes cal enviar un missatge new a una classe:
Per obtenir les vocals d'una cadena de text:
'Aixo es un text'
select:
[
:
aCharacter
|
aCharacter
isVowel
]
.
Bibliografia
[
modifica
]
- "Smalltalk-80"
Smalltalk-80.
The Interactive Programming Environment, Adele Goldberg. Addison-Wesley Seriis in Computer Science (1983)
- "A Little Smalltalk". A Little Smalltalk, Thimothy Budd. Addison Wesley (abril de 1987).
- "Discovering Smalltalk"
Discovering Smalltalk
, Wilf Lalonde. Addison-Wesley Object Technology Series (1994).
- "The Art and Science of Smalltalk"
The Art and Science of Smalltalk
, Simon Lewis. Textbook Binding (1995).
- "Smalltalk Best Practice Patterns"
Smalltalk Best Practice Patterns
, Kent Beck. Prentice Hall PTR (1996).
- "Kent Beck's Guide to Better Smalltalk"
Kent Beck's Guide to Better Smalltalk
: A Sorted Collection, Kent Beck.
- "Advanced Smalltalk". Advanced Smalltalk, Jonathan Pletzke. Wiley Computer Publishing. John Wiley & Sons, Inc. (1997).
- "The Design Patterns Smalltalk Companion"
The Design Patterns Smalltalk Companion
, Sherman R. Alpert, Kyle Brown, Bobby Woolf. Programari Patterns Series (1998).
- "ANSI NCITS 319-1998". American National Standard for Information Technology - Programming Languages - Smalltalk. American National Standards Institute, Inc (1998).
- "Smalltalk, Objects, and Design" Smalltalk, Objects, and Design, Chamond Liu. iUniverse (April 2000).
- "Smalltalk With Style"
Smalltalk With Style
, Suzanne Skublics, Edward J. Klimas, David A. Thomas, John Pugh. Prentice Hall (2002).
- "
Llibre de Programacio amb Smalltalk
" de Diego Gomez Deck (en Espanol) (2006).
- "
Mentoring Course Smalltalk.
By Andres Valloud
" (2008).
- "
Hashing Smalltalk Practice.
By Andres Valloud
" (2008).
- "
Fundamentals Smalltalk Programming Techniques.
By Andres Valloud
" (2009).
Enllacos externs
[
modifica
]