Smalltalk

De Viquipèdia
Dreceres ràpides: navegació, cerca
Infotaula de llenguatge de programacióSmalltalk
Tipus llenguatge de programació orientat a objectes, class-based programming language i llenguatge de programació
Data de creació 1972
Disseny Alan Kay
Desenvolupador Alan Kay
Paradigma de programació orientado a objetos
Darrera versió estable ANSI Smalltalk
Influenciat per Lisp i Simula 67
Pàgina web Web oficial
Modifica dades a Wikidata

Smalltalk és un llenguatge de programació orientat a objectes, dinàmicament tipat, i reflexiu. Va ser creat amb l'objectiu de ser el llenguatge que sustentaria el "nou món" de la informàtica exemplificat per la "simbiosi home-maquina".[1] Va ser dissenyat en part amb propòsits educatius, i més concretament per a un aprenentatge construccionista. Els creadors van ser Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Scott Wallace, i d'altres col·labors, durant la dècada de 1970.

El llenguatge va ser difós inicialment com Smalltalk-80. Llenguatges com Smalltalk són actius, en desenvolupament continu i tenen al seu voltant comunitats fidels. ANSI Smalltalk és la versió estàndard de Smalltalk, després de ser ratificat el 1998.[2]

Descripció[modifica | modifica el codi]

Un sistema Smalltalk està compost per:

  • Una Màquina virtual (Virtual machine)
  • Un arxiu anomenat "Imatge", que conté a tots els objectes del sistema
  • Un llenguatge de programació (també conegut com Smalltalk)
  • Una enorme biblioteca de "objectes reusables"
  • I generalment, un entorn de desenvolupament que a més pot funcionar com un sistema en temps d'execució.

Història[modifica | modifica el codi]

Els orígens de Smalltalk es troben en les recerques realitzades per Alan Kay, Donen Ingalls, Ted Kaehler, Adele Goldberg i uns altres durant els anys setanta en el Pal Alt 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 recerca.

Terminologia[modifica | modifica el codi]

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 un objecte. Els objectes Smalltalk presenten característiques comunes:

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

Els objectes es comuniquen entre si mitjançant l'enviament de missatges.. 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 cridades 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 cridada 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 del mateix també serà un objecte.

Les característiques comunes d'objectes està capturat sota la noció de classe, de tal forma que els objectes agrupats sota una classe són cridats 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 al 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 | modifica el codi]

Smalltalk és considerat el primer dels llenguatges orientats a objectes (OOP), encara que en realitat el primer a implementar programació orientada a objectes va ser Simula. En Smalltalk tot és un objecte, inclosos els nombres reals o el propi entorn Smalltalk.

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

  • Orientació a Objectes
  • Tipatge dinàmic
  • Interacció entre objectes mitjançant enviament de missatges
  • Herència simple i amb arrel comuna
  • Reflexió computacional completa
  • Recol·lecció d'escombraries
  • Compilació en temps d'execució o Interpretat (depenent de la distribució o del proveïdor)
  • Múltiples Implementacions

Smalltalk ha tingut gran influencia 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 (refactorización, desenvolupament incremental, desenvolupament dirigit per tests, etc.).

L'entorn Smalltalk[modifica | modifica el codi]

Les implementacions de Smalltalk de major pes (VisualWorks, Squeak, VisualSmalltalk, VisualAge, Dolphin, Pharo Smalltalk, Smalltalk X) posseeixen un entorn d'interacció molt diferent a l'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 executar codi no natiu a Smalltalk i serveis del sistema operatiu.[3]Aquestes possibilitats, que han influït en la metodologia de treball i concepció de la programació, es tradueixen en la tendència a considerar a Smalltalk més que un simple llenguatge de programació. La forma de desenvolupar programari en Smalltalk no consisteix en el cicle típic de les tecnologies tradicionals: Arrencar 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 | modifica el codi]

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

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

Recol·lecció d'escombraries[modifica | modifica el codi]

En Smalltalk no és necessari desalocar objectes explícitament, per tant no proporciona mecanismes per a això. Les implementacions utilitzen tècniques de recol·lecció d'escombraries per detectar i reclamar espai en memòria associat amb objectes que ja no s'utilitzaran més en el sistema. En Smalltalk la recol·lecció 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-ho a demanda, sent 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 recol·lecció 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 | modifica el codi]

Smalltalk-80 proveeix reflexió computacional estructural i comportacional, ja que és un sistema implementat en si mateix. La reflexió estructural es manifesta en què 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 compili codi font (textual), transformant-se en objectes mètodes, que són comunament instàncies de la classe CompiledMethod. El sistema generalment incorpora aquests mètodes a les classes, emmagatzemant-los en el diccionari de mètodes de la classe a la qual es vulgui agregar 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 posseeixen eines visuals que oculten la complexitat d'interactuar amb la classe que usualment s'encarrega de tals tasques, el ClassBuilder.

La reflexió 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 accés als mètodes que defineix. En cas de trobar-se 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 cridada thisContext. Enviant missatges a thisContext es pot consultar qüestions 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 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 | modifica el codi]

En Smalltalk tot és 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".

En el típic Hola món, l'objecte és Transcript, que rep el missatge xou 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:

Per obtenir les vocals d'una cadena de text:

Vegeu també[modifica | modifica el codi]

Referències[modifica | modifica el codi]

  1. Kay, Alan. «The Early History of Smalltalk». [Consulta: 13 setembre 2007].
  2. «Smalltalk.org&#153 | versions | ANSIStandardSmalltalk.html». Smalltalk.org. [Consulta: 25 juny 2013].
  3. Concepts of Programming Languages.

Bibliografia[modifica | modifica el codi]

Enllaços externs[modifica | modifica el codi]