Está en la página 1de 36

Pharo Es una implementacin libre creada 2009 bajo licencia PUSO del lenguaje de programacin Smalltalk. La versin 1.

0 de Pharo ha salido el 15 de abril de 2010. Pharo Es un medio ambiente de programacin dinmica. Es una implementacin eficiente del lenguaje Smalltalk, basada en una mquina virtual escrita ancha parte Smalltalk ella-misma. Pharo que es un fork de Squeak es pues como todo Smalltalk salido de trabajos llevados primeramente al Xerox PARQUE, despus en Apple despus finalmente en Disney Interactiva por un equipo constituido en torno a Dan Ingals y Alan Kay.

Entorno y lenguaje OO Puro. Sintaxis y semantica sencilla Sistema expresiva y flexible. Vinculacion dinamica de variables. El proyecto Pharo se propone suprimir todo lo que no es esencial en el cdigo de Squeak y tambin de devenir la implementacin de referencia de Seaside.

Pharo es un lenguaje de programacin reflexivo ya que permite modificar su estructura y su comportamiento durante el tiempo de ejecucin. Tipado dinmico: Contra ciertos lenguajes (de tipado estatico) Esto quiere decir que las variables pueden tomar cualquier valor.

En Pharo solo hay seis identificadores reservados - pseudo-variables:


true, false, nil, self, super y thisContext.

Hay cinco tipos de objetos literales:


Nmeros (5, 2.5, 1.9e15, 2r111),

caracteres ($a), cadenas ('hola'), smbolos (#hola) y arrays (#('hola' #hola))

Entorno
Accept
Compilacion de definicion de metodos y clases.

DoIt
Para evaluar expresiones.

PrintIt
Evaluar e imprimir el resultado (#printOn:)

InspectIt
Evaluar una expresion e inspeccionar el resultado (#inspect)

Algo de sintaxis

Creacion de Objetos
OrderedCollection new Array with: 1 with: 2

1@2 1/2

"a Point" "a Fraction"

Proyectos comerciales o Libres


Seaside (framework): Desarrollo de aplicaciones web, con un muy elevado nivel de abstraccin. Pier: CMS basado en Seaside (framework). Magritte: Un framework para mta-modelos utilizados sobre todo para generar y validar formularios web. AidaWeb: Framework Web. Magma: SGBD. Moose: Conjunto de herramientas y de bibliotecas dedicados al anlisis de programas en diferentes lenguajes. OpenCroquet: Plataforma 3D collaborative

Abstraccin La abstraccin en pharo, el trmino se refiere al nfasis en el "qu hace?" ms que en el "cmo lo hace?" (Caracterstica de caja negra).

Clases abstractas
Las clases abstractas proveen de un comportamiento a sus subclases, pero nunca tendrn sus propias instancias. Hay dos tipos de mtodos que las clases abstractas proveen.
El primer tipo, brinda un mtodo completo para que una subclase lo herede El segundo, brinda una "interfaz" del mtodo que es comn a todas las subclases pero que no posee cdigo.

Jerarqua

Las clases abstractas: Collection, SequenceableCollection, AdditiveSequenceableCollection, and ArrayedCollection proveen un conjunto de mensajes comunes a sus subclases. Cada subclase se provee de un cdigo propio para redefinir al mtodo "interfaz". Este mtodo "interfaz" se define como un protocolo comn a todas las subclases pero que no brinda una implementacin comn (la implementacin estar dada por cada subclase).

Encapsulamiento Ocultar los detalles de su implementacin. El principio se cumple. Es imposible (Sintcticamente) invocar desde un objeto, un mtodo de un objeto que sea una variable de otro.

Modularidad Modularidad: Ningn componente en un sistema complejo debera depender de los detalles internos de ningn otro componente.

En Pharo una clase describe otros objetos, su estado interno, el protocolo de mensajes que reconocen, y los mtodos internos para responder a esos mensajes. Los objetos as descriptos se llaman instancias de la clase. Incluso las propias clases entran en este esquema; simplemente son instancias de la clase Class

Colecciones
Las Colecciones son un importante conjunto de clases. Estas clases manejan grupos de objetos; es casi imposible escribir cdigo en Smalltalk sin utilizar una coleccin. Una coleccin es simplemente un conjunto de elementos donde cada elemento es un puntero a un objeto.

Herencia El mecanismo de herencia nos permite definir las propiedades particulares de un nuevo objeto y heredar las propiedades comunes ya existentes.

Los mtodos de una clase pueden acceder, adems de a sus propias variables de instancia, a todas las variables de instancia de todas sus superclases y pueden invocar a todos los mtodos definidos en todas sus superclases.

Todo objeto es instancia de una clase. Las clases definen la estructura de sus instancias a travs de variables de instancia privadas y su comportamiento mediante mtodos pblicos. Cada clase es la nica instancia de su metaclase

Creacion de Clases
Number subclass: #Complex instanceVariableNames: 'real imaginary' classVariableNames: '' poolDictionaries: '' category: 'ComplexNumbers'

Toda clase tiene una superclase. La raz de la jerarqua de herencia es ProtoObject. Las clases que definas, sin embargo, deberan normalmente heredar de Object o sus subclases. Pharo soporta solo herencia simple, es fcil compartir implementaciones de mtodos agrupndolos como traits.

Toda clase es instancia de una metaclase. Las metaclases son implcitas. Una metaclase se crea automticamente cuando se crea la clase que es su nica instancia. La jerarqua de metaclases tiene la misma estructura que la jerarqua de clases

Convencion de creacion de metodos


Metodos de instancia Node>>accept: aPacket
Metodos de clase Node class>>withName: aSymbol

Polimorfismo: Un programa slo debera especificar el comportamiento esperado de los objetos, no su representacin.

Un afirmacin inferida de este principio es que un programa nunca debera declarar que cierto objeto es un SmallInteger (entero chico) o un LargeInteger (entero grande), sino slo que responde al protocolo de los enteros. Esta descripcin genrica es crucial para los modelos del mundo real.

Envio de mensajes Esencialmente, slo hay sintaxis para el envo de mensajes.


Por ejemplo, en lugar de una estructura de control if-then-else, Smalltalk enva mensajes como ifTrue: a objetos Boolean. Las nuevas (sub)clases se crean enviando un mensaje a sus superclases.

Tipos de mensajes
1. Los mensajes unarios no reciben ningn argumento.

1 factorial enva el mensaje factorial al objeto 1.


2. Los mensajes binarios reciben exactamente un argumento.

1 + 2 enva el mensaje + con el argumento 2 al objeto 1.


3. Los mensajes de palabra clave reciben un nmero arbitrario de argumentos.
2 raisedTo: 6 modulo: 10 enva el mensaje que el selector del mensaje raisedTo:modulo: y argumentos 6 y 10 al objeto consiste en los

Precendencia
1. Los mensajes unarios son siempre enviados primero, luego los mensajes binarios y finalmente los mensajes keyword. 2. Los mensajes entre parntesis son enviados antes que cualquier otro tipo de mensaje. 3. Los mensajes del mismo tipo son evaluados de izquierda a derecha.

2 raisedTo: 1 + 3 factorial > 128 1 + 2 * 3 > 9

Secuencia de expresiones
Las expresiones consisten en envos de mensajes, cascadas y asignaciones, posiblemente agrupados con parntesis. Las sentencias son expresiones separadas por puntos. Transcript cr. Transcript show: 'hola mundo'. Transcript cr Transcript cr; show: 'hola mundo'; cr

Un mensaje siempre es enviado a un receptor, el cual puede ser un simple literal, un bloque, una variable o el resultado de evaluar otro mensaje.

Concurrencia En Pharo, el usuario definira un mtodo sort (ordenar) en la clase OrderedCollection (secuencia). Cuando esto ya ha sido hecho, todas las formas de secuencias en el sistema van a adquirir esta nueva capacidad a travs de la herencia. Por otra parte, vale notar que el mismo mtodo sirve tanto para alfabetizar texto como para ordenar nmeros, ya que el protocolo de comparacin es reconocido tanto por las clases de texto como por las de nmeros.

Persistencia - Ambiente Pharo


El ambiente de Pharo provee un almacenamiento persistente de objetos.

La Imagen. Esta contiene cdigo (clases y

mtodos), objetos - estado de las aplicaciones

Puede incluir las herramientas de desarrollo para inspeccionar y depurar el programa mientras se est ejecutando.

Aplicaciones
Bases de objetos (Magma, GemStone). Bases de datos relacionales (MySQL, PostgreSQL). Mapeo objeto relacional (Glorp).