Métodos de clase

Conceptualmente los métodos de clase son métodos que tienen la particularidad de pertenecer a la clase y no a las instancias de la clase. Por esto es que para invocar a un método de clase no es necesario crear una instancia de la clase que contiene el método.

En aquellos lenguajes cuya sintaxis deriva de C, los métodos de clase se identifican con la palabra clave static y de ahí que en ocasiones se los llame métodos estáticos. Conceptualmente desde la POO creo que este nombre no es correcto pues mezcla una cuestión conceptual con un detalle de implementación de algunos lenguajes particulares.

public static doFoo() {
..
}

En Ruby, los métodos de clase de clase, se los identifica en su definición con el prefijo self.

def self.doFoo
...
end

El Smalltalk (pharo) los métodos de clase son definidos en un compartimento particular.

class_methods

Dia del programador 2012

El próximo martes 11 es el Día del Programador y el MUG organizó un evento del cual me invitaron a participar dando una sesión. El tema que elegí para presentar es Smalltalk, en particular voy hablar de Pharo y algo de Amber.

¿Por qué Smalltalk? En primer lugar porque me parece que va muy bien con la ocasión. Una incumbencia central de todo programador es el lenguaje de programación, para ser considerado programador es necesario saber programar y para ello es necesario un lenguaje. En la actualidad hay muchos lenguajes y entre los más usuados podemos sin duda mencionar: Java, Ruby, C# y PHP.  ¡Ups! no mencioné Smalltalk, pues nó, Smalltalk no está actualmente en la lista de lenguajes más usados, pero sin duda Smalltalk ha inspirado a muchos de estos lenguajes. Varias características que vemos en la actualidad en los lenguajes populares fueron introducidas/impulsadas por Smalltalk.

Pero no quiero quedarme solo con este  reconocimiento “histórico” a Smalltalk, quiero hablar del presente y del futuro de Smalltalk. Desde hace un par de años Smalltalk está tomando envión, han aparecido nuevas herramientas que lo han puesto a competir mano a mano con los lenguajes populares. Personalmente creo que Pharo es en gran medida responsable de la “ola renovadora” de Smalltalk y es por ello que mi presentación estará basada en Pharo.

El evento es totalmente gratuito y se llevará a cabo en el Salón Dorado de la Legislatura de la Ciudad de Buenos Aires, Perú 160. La agenda completa esta publicada aquí.

Sobre los primeros egresados de TPI

Como mencioné anteriormente, tuve el honor de ser invitado a formar parte del jurado de evaluación del trabajo de inserción profesional de Nahuel Garbezza, egresado de la primera promoción de la Tecnicatura en Programación Informática de UNQ. Los otros miembros del jurado fueron Nicolás Passerini  y Hernán Wilkinson.

Además de ser un gran honor, fue una experiencia interesante. El trabajo en cuestión consistió en desarrollar una herramienta de BDD para Pharo Smalltalk (algo así como un análogo a Cucumber). Una vez aceptada la propuesta de ser jurado recibí el trabajo y lo fuí leyendo a medida hacia algunas pruebas con la herramienta y revisaba el código. El trabajo estaba muy bien escrito, lo cual no me extraña, ya que la directora del trabajo fue Gabi Arévalo. Desde el punto de vista técnico la herramienta estaba muy bien, con un amplio set de pruebas automatizadas y una cobertura del modelo por encima del 70%.

La defensa del trabajo tuvo lugar el viernes pasado a continuación de la defensa de Federico Sawady, el otro egresado de esta primera camada de TPI.

El trabajo de Federico (dirigido por Fidel) consistió en la implementación de un sistema de tipos para el lenguaje Gobstones que es utilizado en las primeras materias de programación en TPI.

Las defensas consistieron en presentaciones de 45 minutos seguidas por preguntas/comentarios de los jurados y del público en general. Entre el público se encontraban profesores, alumnos, familiares, autoridades de la universidad y gente de la Fundación Sadosky.

Mis felicitaciones a los egresados y al equipo de dirección de TPI por el gran trabajo que estan haciendo.

Orientación a Obejtos Pura

Es común cuando se presenta Smalltalk mencionar que es un lenguaje orientado a objetos puro. También es común que la audiencia no logré captar el significado de esta afirmación inmediatamente. Yo mismo he analizado esta afirmación montones de veces, pensando que tal vez sea un poco extrema, pero esta semana, vi la luz y me dí cuenta de que es absolutamente acertada.

Resulta que por estos dias, me encuentro entrenando a un grupo de programadores en C#. Fue en este contexto que me encontré hablando de las diferencias y relaciones entre interfaces, clases, estructuras (structs) y enumerados, ¡recorcholis! 4 artefactos del lenguaje que NO son objetos. ¡Y aún no expliqué eventos, delegados, tipos primitivos y atributos (anotaciones)!. ¡Cuantas cosas que explicar!

¡Cuanto más fácil seria explicar Smalltalk!

Smalltalks 2011, we were there

The 5 th international conference on Smalltalk technologies, Smalltalks 2011 organized by FAST, was held during the first week of November. Among the keynote speakers were Ian Piumarta and Kim Rose (from Viewpoints Research Institute), Markus Denker (from Inria and founder of Pharo project) and a couple of guys from Gemstone (Dale Henricks and James Foster among others).

Out of the sessions I attended, I would have to say that the most interesting were those given by Marcus, Mariano Peck, Hernan Wilkinson and Dale Henrichs.

We held two sessions, Angel gave one on Smalltalk, C# and Javascript and I gave the other on Pharo Customization.

Se viene la Smalltalks 2011

A modo de previa, el GITI ha organizado un conjunto de charlas introductorias a Smalltalk a desarrollarse en la UTN-FRBA y en UNQ durante esta semana.

Por otro lado, ya está publicado el listado de sesiones. donde van a encontrar mi sesión “Customizing Pharo“. Muy relacionado al tema de mi sesion, habrá otra sesión de Mariano Peck quien hablará ya en términos más avanzados de generación de images utilizando Metacello.

Entre otras sesiones que han llamado mi atención y a las que intentaré asistir están: Bringing BDD ideas to Pharo y Monsters from the IT: what has IT done for education?What I learned from teaching and why I’m so happy with Smalltalk y Research at RMOD presentada por el super groso Marcus Denker.

El evento es gratuito pero requiere registración.

¡Nos vemos allí!

Variables de clase y de instancia en Smalltalk

Este tema incluye algunas particularidades que me parece en general no se le presta mucha atención y por ello hoy quiero dedicarle un par de líneas.

Analicemos la definición de clase CuentaBancaria:

Object subclass: #CuentaBancaria
	instanceVariableNames: 'numero saldo'
	classVariableNames: 'SiguienteNumero'
	poolDictionaries: ''
	category: 'algo3-ejemplos'

instanceVariableNames, indica las variables de instancia, también conocidas como atributos de instancia. En Smalltalk, estas variables tienen visibilidad protegida aunque en general se las trata como si fueran privadas. En este caso tenemos las variables de instancia numero y saldo. Un detalle interesante es que las variables son protegidas de las instancia, ¿que significa esto? supongamos que tengo dos instancias de la clase CuentaBancaria: cuenta1 y cuenta2, entonces cuenta1 no puede acceder al atributo numero de la cuenta cuenta2, pues si bien cuenta2 es una instancia del mismo tiempo, resulta que otra instancia y aqui la protección es a nivel de instancias.

classVariableNames, como su nombre sugiere son variables de clase, lo cual significa que son accesibles por el objeto clase, pero al mismo tiempo también son accesibles y compartidas por todas las instancias de la clase, o sea, si una instacia modifica el valor de dicha variable, dicho cambio afecta a todas las instancias. En este caso tenemos tenemos el siguienteNumeroDisponible como variable de clase, la cual es incrementada por cada instancia cada es inicializada.

initialize
	saldo := 0.
	numero := siguienteNumero.
	siguienteNumero := siguienteNumero + 1.

Un punto importante para considerar es que esta variable también es accesible por la clase CuentaBancanria.

Por otro lado, si vamos a la definición de la clase CuentaBancaria y vemos la parte de clase, veremos.

CuentaBancaria class
	instanceVariableNames: 'MaximoNumero'

instanceVariablesNames, en este caso representa las variables exclusivas del objeto clase y como tales son accesibles por la clase, pero no por las instancias de  la clase. Un detalle interesante respecto de estas variables es donde inicializarlas. Bien, en general se suele agregar un método de clase que se encarga de inicializarlas, pero ojo este seria un método de clase.

Bien, por último, si volvemos a la definición de la clase CuentaBancaria, veremos que aún nos queda por mencionar los poolDictionaries. Estas variables son variables compartidas por instancias de distintas clases.  Es algo relativamente raro (al menos a mi parecer) y por eso es que no se ocurre como utilizarlas en el ejemplo, pero prometo escribir otro post al respecto.

Para finalizar les ofrezco un gráfico para intentar resumir el ejemplo.

(gracias Mariano por la correción)

 

 

 

Buenas nuevas para la comunidad Pharo

En primer lugar tenemos el release de la versión 1.2.1, iupi!!!! La imagen core incluye 693 issues resueltos y entre los cambios mas relevantes se encuentran:

  • Agregado del nuevo framework de undo
  • Agregado del nuevo DummyUIManager para trabajar sin UI
  • Inclusión del preview de SimpleMorphic
  • Un nuevo finder
  • Integración con SUnit 4
  • Muchísimos cambios en la estructura de clases del sistemas que ofrecen mejor modularización

En particular este último punto me pone muy contento ya que colaboré en la detección e implementación de algunos de los cambios.

Por otro lado, Mariano finalmente se decidió a compartir su conocimiento escribiendo un blog. Como bien el propio Mariano indica en su post inicial, si sos un experto en Smalltalk, poco tal sea poco lo que puedas aprender. Pero si sos un simple usuario con ganas de aprender y compartir conocimiento, estoy seguro que el blog de Mariano te resultará muy entretenido. Para los interesados, el blog es: http://marianopeck.wordpress.com. Felicitaciones Mariano, ¡nos leemos!

Otro argumento por Pharo

Esta mañana estaba leyendo la lista de correo de Pharo y encontré un mail de Stef. Duccase sobre la visión de Pharo, transcribo algunos de los párrafos que me parecen importantes.

“Some days ago we were chatting with igor and he made an interesting remark about a kind of hidden philosophy
behind pharo: the idea that we systematically want to make the system better.
In fact I realized that what we are doing is to make a system nice, robust and powerful so that everybody can use
to realize their goals. But we want to have a system where not only smart guys can manage to do something with it but also less talented people…”

“…I want a system that let me learn from itself. I think that lot of things fall naturally in place from this vision (documentation, oo practices – not having car inheriting from wheel, tests comments, adequate abstractions, modularity). I want a system that everybody can nicely build his own software.
So in short I want pharo to be like a nice garden with greenhouses for building new garden with tools versus a jungle where only skilled adventurers can make it through.”

Totalmente de acuerdo. Y esto me lleva a pretuntarte: ¿sabes tu cual es la visión que tienen los createdores de tu lenguaje de desarrollo preferido?