Usuari:Mcapdevila/Smalltalk

De la Viquipèdia, l'enciclopèdia lliure

Plantilla:Fitxa de llenguatge de programació

Smalltalk és un sistema informàtic que permet realitzar tasques de computació mitjançant la interacció amb un entorn d'objectes virtuals. Metafòricament, es pot considerar que un Smalltalk és un món virtual on viuen objectes que es comuniquen mitjançant l'enviament de missatges.

Un sistema Smalltalk està compost per:

Història[modifica]

Els orígens de Smalltalk es troben en les investigacions realitzades per Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg i altres durant els anys setanta en el Palo Alto Research Institute de Xerox (conegut com Xerox PARC ), per a la creació d'un sistema informàtic orientat a l'educació. L'objectiu era crear un sistema que permetés expandir la creativitat dels seus usuaris, proporcionant un entorn per a l'experimentació, creació i investigació.

Terminologia[modifica]

Un programa Smalltalk consisteix únicament d'objectes, un concepte que s'utilitza universalment dins de tot sistema Smalltalk. Pràcticament tot, des d'un nombre natural com el 4 fins a un servidor web és considerat un objecte. Els objectes Smalltalk presenten característiques comunes

  • Tenen una memòria pròpia.
  • Tenen capacitat per a comunicar-se amb altres objectes.
  • Tenen la capacitat d'heretar característiques d'objectes avantpassats.
  • Tenen capacitat de processament.

Els objectes es comuniquen entre si mitjançant l' enviament de missatges . Un missatge s'envia entre un objecte emissor i un receptor, l'objecte emissor demana una operació que l'objecte receptor pot proporcionar. Així mateix, un objecte pot proveir moltes operacions (actualment això està determinat per cada implementació).

Les definicions d'aquestes operacions en els objectes són anomenades mètodes . Un mètode especifica la reacció d'un objecte quan rep un missatge que és dirigit a aquest mètode. La resolució (en el sentit de lligat) d'un missatge a un mètode és dinàmica. La col·lecció sencera de mètodes d'un objecte s'anomena protocol de missatges o interfície de missatges de l'objecte. Els missatges poden ser parametritzats, aquests paràmetres seran objectes, i el resultat o resposta d'aquest també serà un objecte.

Les característiques comunes d'una categoria d'objectes està capturat sota la noció de classe , de tal manera que els objectes agrupats sota una classe són anomenats instàncies d'ella. Les instàncies són creades durant l'execució d'un programa amb algun propòsit i són escombrats automàticament en el moment que no són necessitats més pel recol·lector d'escombraries. Exceptuant alguns objectes especials com els molt simples, anomenats literals (nombres, cadenes, etc), cada objecte té el seu propi estat local i representa una instància diferent de la seva classe.

Característiques[modifica]

Es busca que tot el que es pugui fer amb un ordinador es pugui realitzar mitjançant un sistema Smalltalk, pel que en alguns casos es pot considerar que fins i tot serveix com a Sistema Operatiu.

Smalltalk és considerat el primer dels llenguatges orientats a objectes (OOP). En Smalltalk tot és un objecte, inclosos els nombres reals o el propi entorn Smalltalk .

Com a llenguatge té les següents característiques:

Smalltalk ha tingut gran influència sobre altres llenguatges com Java o Ruby, i del seu entorn han sorgit moltes de les pràctiques i eines de desenvolupament promulgades actualment per les metodologies àgils (refactorització, desenvolupament incremental, desenvolupament dirigit per tests, etc.).

L'entorn Smalltalk[modifica]

Les implementacions de Smalltalk de major pes (VisualWorks, Squeak, VisualSmalltalk, VisualAge i Dolphin) tenen un entorn d'interacció molt diferent al entorn de desenvolupament típic d'altres tecnologies com Microsoft Visual Studio. Net o Eclipsi. L'entorn o ambient Smalltalk és primordialment gràfic i funciona com un sistema en temps d'execució que integra diverses eines de programació (Smalltalk), utilitats multimèdia, interfícies per a executar codi no natiu a Smalltalk i serveis del sistema operatiu.[1] Aquestes possibilitats, que han influït en la metodologia de treball i concepció de la programació, es tradueixen en la tendència a considerar Smalltalk més que un simple llenguatge de programació. La forma de programar en Smalltalk no consisteix en el cicle típic de les tecnologies tradicionals: arrencada d'un editor de text, compilar i executar i acabar l'aplicació. En Smalltalk es manipula l'entorn mateix, comunament mitjançant el Navegador del Sistema.

Sintaxi[modifica]

Tradicionalment, Smalltalk no té una notació explícita per descriure un programa sencer. Sí que es fa servir una sintaxi explícita per definir certs elements d'un programa, com ara mètodes, però la manera que aquests elements estan estructurats dins d'un programa sencer generalment és definida per les múltiples implementacions. L'estàndard mateix no promou una altra direcció, de manera que 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 lògicament compostos per altres elements, però, cada implementació és lliure de definir i utilitzar les moltes sintaxi possibles que estan conformes a la sintaxi abstracta estàndard. Un exemple d'una sintaxi concreta és el Format d'Intercanvi Smalltalk (o SIF, d'Smalltalk Interchange Format) definida en el mateix estàndard.

La sintaxi de Smalltalk-80 tendeix a ser minimalista. Això significa que hi ha un grup noi de paraules reservades i declaracions en comparació amb la majoria dels llenguatges populars. Smalltalk té un grup de 5 paraules reservades: self , super , nil , true i false .

Recollida d'escombraries[modifica]

A Smalltalk no cal desalocar objectes explícitament, per tant no proporciona mecanismes per a això. Les implementacions utilitzen tècniques de recollida d'escombraries per detectar i reclamar espai en memòria associat amb objectes que ja no s'utilitzaran més en el sistema. A Smalltalk la recollida d'escombraries és integrada configurable . La forma d'execució del recol·lector d'escombraries és en background , és a dir, com un procés de baixa prioritat no interactiu, encara que en algunes implementacions és possible executar a demanda, i és possible definir configuracions de memòria especials per a cada sistema mitjançant polítiques (per exemple en VisualWorks). La freqüència i característiques de la recollida depèn de la tècnica utilitzada per la implementació. Addicionalment algunes implementacions de Smalltalk proporcionen suport per a mecanismes de finalització com l'ús de Ephemerons.

Reflexió computacional[modifica]

Smalltalk-80 proveeix reflexió computacional estructural i comportacional, ja que és un sistema implementat en si mateix. La reflexió estructural es manifesta en que les classes i mètodes que defineix el sistema són en si mateixos objectes també i formen part del sistema mateix. La majoria de les implementacions de Smalltalk tendeixen a exposar el compilador Smalltalk a l'entorn de programació, permetent que dins del sistema es compile la font (text), transformant-se en objectes mètodes, que són comunament instàncies de la classe CompiledMethod . El sistema generalment incorpora aquests mètodes en les classes, emmagatzemar-los al diccionari de mètodes de la classe a la qual es vulgui afegir el comportament que realitza el mètode. Això, així com la incorporació de noves classes al sistema, és realitzat dins del sistema mateix, encara que la major part de les implementacions tenen eines visuals que oculten la complexitat d'interactuar amb la classe que normalment s'encarrega d'aquestes tasques, l' ClassBuilder .

La reflexió comportacional 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 accés als mètodes que defineix. En cas de trobar el mètode a la classe, es diu que es "activa" el mètode. Aquesta activació d'un mètode actualment en execució, és accessible mitjançant una paraula clau anomenada thisContext . Enviant missatges a thisContext es pot consultar qüestions com ara "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 màquina virtual. Un dels usos més interessants d'aquesta facilitat, es dóna en el framework de web Seaside de Avi Bryant.

Exemples de Smalltalk[modifica]

En Smalltalk tot és un objecte, i a un objecte se li envien missatges. Per exemple:

1+1

Vol dir que 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, món !'

Al típic Hola món, l'objecte és Transcript, que rep el missatge show amb el col·laborador extern 'Hola, Món !'.

Per crear una instància d'un objecte, només cal enviar un missatge new a una classe:

Objecte new

Per obtenir les vocals d'una cadena de text:

'Això és un text' select: [: aCharacter|aCharacter isVowel].

Bibliografia[modifica]

Enllaços externs[modifica]

  1. Concepts of Programming Languages. Sebesta, Robert (Addison-Wesley, 1996 3a. Ed.)