Programación Orientada a objetos. (Luis Joyanes Aguilar) (E-book)

Anuncios

Lenguajes de programación emergentes (2a. y última parte).

Continuamos con la lista de 10 lenguajes de programación emergentes iniciada desde la semana anterior. Al final les ofrezco algunos comentarios.

6. Kodu

  • Creado por: Anderson, Cheng y MacLauring, del grupo de Sistemas Creativos de Microsoft Research.
  • Año de creación: 2009.
  • Paradigma: Visual.
  • Descripción: Kodu no es un lenguaje de programación visual únicamente, también es un ambiente para diseñar, construir y jugar tus propios videojuegos. Los programas están compuestos de páginas, a su vez desglosadas en reglas, y luego éstas en condiciones y acciones. Los elementos básicos del lenguaje son puramente íconos. Incluye 20 personajes con diferentes habilidades.
  • Inspirado en: Logo y Squeak.
  • Instalación: Descarga (gratuitamente) e instala para Windows XP, Vista y 7. También para Xbox 360.
  • Ejemplo:

7. Scala

  • Creado por: El Dr. Martin Odersky, investigador del pretigioso EPFL.
  • Año de creación: 2003.
  • Paradigma: Multiparadigma; orientado a objetos (puro), funcional, imperativo.
  • Descripción: Fue programado en Java, y puede interactuar directamente con este lenguaje. Todo es un objeto, incluso los números. Su abstracciones pretenden ser más poderosas y uniformes. Fue creado con la idea de que la programación sea orientada a componentes.
  • Inspirado en: Smalltalk, Haskell, Erlang.
  • Instalación: En Ubuntu: sudo apt-get install scala
  • Ejemplo:

   object Numeros {
    def main(args: Array[String]) {
     for (i <- 1 until 11)
      print(i+" ")
    }
   }

8. Ioke

  • Creado por: Ola Bini, uno de los principales programadores de JRuby.
  • Año de creación: 2008.
  • Paradigma: Orientado a objetos, prototipado.
  • Descripción: Dinámico, fuertemente tipeado, corre sobre la JVM y la CLR. Se dice que es código plegable, es decir, código que crea código. Como lenguaje, su principal objetivo es ser expresivo.
  • Inspirado en: Smalltalk, Lisp, Ruby.
  • Instalación:

    1. Descarga y descomprime
    2. Ioke y otros ejecutables están en el directorio ./ioke/bin
  • Ejemplo

      x = 1
    until(x == 11,
    "#{x} " print
    x++
    )

9. Trylon

  • Creado por: Steve Folta, reconocido ex-programador de BeOS.
  • Año de creación: 2007.
  • Paradigma: Orientado a objetos.
  • Descripción: Usa indentaciones para estructurar los programas, igual que Python; con sintaxis similar a la de Smalltalk. Usa tipeado dinámico en los objetos, aunque los programas se compilan (estáticamente) con un compilador de lenguaje C.
  • Inspirado en: Python, Smalltalk.
  • Instalación:

    1. Descarga y descomprime
    2. Entra al directorio
    3. En Ubuntu instala los archivos de cabecera del recolector de basura: sudo apt-get install libgc-dev
    4. make
    5. sudo make install
  • Ejemplo:

   trylon numeros
   main: args
     x = 1
     while x <= 10
      print: x string + " "
      x+=1

10. Objective-J

  • Creado por: 280 North, Inc., empresa formada por ex-empleados de Apple.
  • Año de creación: 2008.
  • Paradigma: Multiparadigma: Reflectivo, orientado a objetos, funcional, imperativo.
  • Descripción: Como el nombre lo dice, es una implementación de Objective-C en JavaScript. La sintaxis es casi idéntica al primero. Como el compilador está creado con JavaScript, no es necesario instalar ningún complemento para el navegador. El framework Capuccino —que implementa el API de Cocoa— está escrito con Objective-J.
  • Inspirado en: Objective-C y JavaScript.
  • Instalación:

    1. Descarga y descomprime
    2. Prueba la instalación abriendo con el navegador el archivo /Starter/NewApplication/index.html

Ejemplo: Por razones de espacio sólo presento la función que implementa un botón al que con cada clic aumenta en uno el valor de una variable, lo cual se muestra en el navegador. Si la variable rebasa el valor de 10, se reestablece a 0.

 - (void)numeros:(id)sender {
if ([label stringValue] == "Números!!") {
i=i+1;
[label setStringValue:i];
}
else {
i=i+1;
[label setStringValue:i];

if ([label stringValue] == 11) {
[label setStringValue:"Números"];
i=0;
}
}
}

Comentarios.

La elaboración de esta lista estuvo inspirada por la del campamento de lenguajes de programación emergentes de la Open Source Conference sucedida hace muy pocos días. Los lenguajes presentados aquí fueron elegidos por obra del azar —y la curiosidad, siempre.

Como habrán notado ya, la mayoría de los lenguajes son jóvenes, aunque con diferentes niveles de madurez. Se observa una fuerte tendencia a ser construidos encima de plataformas como la Java Virtual Machine y la Common Language Runtime. Muchos de ellos son multiparadigma, pero sobre todo orientados a objetos, siempre con el ánimo de ser expresivos a la vez que sencillos. Smalltalk sigue siendo un modelo a seguir.

Quedaron una inmensidad de lenguajes en el tintero, algunos más raros y experimentales que otros: el flexible ooc, el prudente noop, el humilde coherence, el funcional ur, el concurrente coffescript,… Y muchos más, por supuesto.

Les invito a realizar el ejercicio de probar nuevos lenguajes de cuando en cuando. El conocimiento de nuevos paradigmas enriquecerá su programación con impensables e interesantes formas de modelar el mundo.

Fuente | bitelia.com

Lenguajes de programación emergentes.

Los lenguajes de programación son mi fascinación. No sólo se trata de programar/codificar con ellos. Se trata también de conocer los detalles de las diferentes sintaxis, así como la expresividad que tiene cada uno para resolver problemas de todo tipo. Cada uno, como sucede con cualquier idioma hablado, es una forma de ver y entender el mundo.

En lo que sigue te presento la primera parte de dos sobre 10 lenguajes de programación emergentes. Todos son libres/abiertos. Todos son raros, únicos de alguna manera —allí comienza mi curiosidad—. Casi todos tienen menos de 10 años de vida. Los hay orientados a objetos, funcionales, orientados a pila y más. Y no es que debas probarlos todos, pero sí te invito echarles un vistazo con el mismo espíritu con el que un arqueólogo descubre lenguajes inimaginables. En todos los casos presento una breve ficha técnica, así como un ejemplo: no el clásico “Hello, world!”, sino un pequeño programa para listar los números del 1 a 10. Da clic en los títulos para ir a la página oficial del lenguaje en cuestión.

1. Io

  • Año de creación: 2002.
  • Paradigma: Orientado a objetos, basado en prototipos (como en JavaScript).
  • Descripción: Simple, muy dinámico, introspectivo y concurrente. Multiplataforma y extensible. Fue diseñado para unir la expresividad de Smalltalk con la velocidad de C.
  • Inspirado en: Smalltalk (principalmente), Lisp, Lua, Self.

  • Instalación: En Ubuntu:

    1. Descarga
    2. Descomprime
    3. Ingresa al directorio
    4. mkdir build && cd build
    5. cmake ..
    6. sudo make install
    7. ldconfig
  • Ejemplo:

      for ( i, 1, 10, write(i, " ") )

2. Clojure

  • Año de creación: 2007.
  • Paradigma: Funcional, pero de propósito general.
  • Descripción: Compilado, eficiente, robusto, multihilado, con sistema de macros. Corre sobre dos máquinas virtuales: JVM y CLR.
  • Inspirado en: Lisp, Haskell.
  • Instalación:

    1. En Ubuntu: sudo apt-get install clojure.
    2. De otra forma, descarga el código; entonces compila e instala con ant.
  • Ejemplo:

      (dotimes [i 10] (print (inc i) ""))

3. D

  • Año de creación: 1999.
  • Paradigma: Multiparadigma, pero sobre todo orientado a objetos e imperativo.
  • Descripción: Es muy parecido a C/C++, pero intenta ser mucho más práctico. Gdc y ldc son compiladores libres para el lenguaje D.
  • Inspirado en: C++, Java.
  • Instalación:

    1. En Ubuntu: sudo apt-get install gdc
    2. De otra forma, descarga el código oficial, descomprime y entra a ./dmd/linux/bin.
  • Ejemplo:

      import std.stdio;

    int main()
    {
    for (int i = 1; i <= 10; i++) writef(i, " "); return 0; }

4. Go

  • Año de creación: 2009.
  • Paradigma: Imperativo y concurrente.
  • Descripción: Es como C, pero sin declaración de tipos de datos como en Python. Su sintaxis es sencilla. La compilación es, sin exagerar, excepcionalmente rápida. Ken Thompson, también co-creador de C, ayudó en el diseño.
  • Inspirado en: C, Pascal.
  • Instalación: Cambia el valor de las variables según tu conveniencia. En Ubuntu:

      export GOROOT=$HOME/gosource
    export GOARCH=386
    export GOOS=linux
    export GOBIN=$HOME/gobin
    export PATH=$PATH:$GOBIN

    source ~/.bashrc

    sudo apt-get install bison gcc libc6-dev ed gawk make
    sudo apt-get install python-setuptools python-dev build-essential
    sudo easy_install mercurial

    hg clone -r release https://go.googlecode.com/hg/ $GOROOT

    cd $GOROOT/src
    ./all.bash
  • Ejemplo:

      package main
    import "fmt"

    func main() {

    for i:=1; i<=10; i++ { fmt.Printf("%d ", i) } }

5. Factor

  • Año de creación: 2003.
  • Paradigma: Orientado a pila, concatenativo (sobre todo) y funcional.
  • Descripción: Definición dinámica de los tipos de datos, manejo automático de memoria, compilador o, si se quiere, también interactivo.
  • Inspirado en: Forth, Self.
  • Instalación: En Ubuntu:

    1. Descarga
    2. Descomprime
    3. Ingresa al directorio
    4. ./factor
  • Ejemplo: (Sé que se puede hacer mejor. Ya aprenderé.)

      { 1 2 3 4 5 6 7 8 9 10} [ "" write . ]  each

Fuente | bitelia.com

Finalmente disponible la versión 2.8 de Scala.


A pesar de lo lejos que ha llegado, de ser el lenguaje más utilizado en el mercado y aún siendo GPL, Java es víctima de gran cantidad de críticas, algunas de las cuales están más enfocadas en el modo de trabajo actual que en el lenguaje en sí. Pero que tiene problemas, los tiene y no parece dar señas de avance en un mundo cada vez más competitivo. Se ha vuelto a demorar el lanzamiento de su nueva versión para inicios del próximo año y, si bien presentará algunas innovaciones ineteresantes, tampoco es revolucionario -ni muchísimo menos. Sin embargo, aún los críticos más acérrimos del lenguaje destacan la importancia de la JVM, aunque sea como “curiosidad tecnológica”. En realidad mucho más que eso, la Java Virtual Machine nos permite trabajar con enorme cantidad de lenguajes (por sí mismos o en conjunto con Java), contando con todas las ventajas que ofrece la máquina virtual.

Por ejemplo, IBM utiliza Jython (implementación de sobre la JVM) para realizar scripts sobre WebSphere. Y con el aletargamiento de Java, no sólo se están usando cada vez más otros lenguajes en conjunto con las librerías nativas, sino que se habla directamente del “nuevos Java”, es decir lenguajes que trabajan sobre la máquina virtual que terminarán por imponerse sobre el lenguaje mismo. Entre estos, son tres los más utilizados: Groovy,Clojure (interesantísimo dialecto de Lisp) y Scala. Scala es un lenguaje multiparadigma, un híbrido entre orientación a objetos y funcional que, con una sintaxis no del todo lejana a la de Java, es recomendada para los usuarios del popular lenguaje que quieran aventurarse en nuevos terrenos. Además, con un buen par de años de recorrido, es el que cuenta con mayor proyectos y comunidad, algo importante a la hora de elegir un lenguaje y tampoco está demás recordar que últimamente se está redescubriendo el valor de los lenguajes funcionales a la hora de escribir aplicaciones en las que la concurrencia tenga una importancia crítica. Después de todo, Scala es utilizado por sitios como Twitter yFoursquare.

El asunto que me hace escribir estas líneas es que finalmente, después de una espera bastante grande, acaba de ser anunciado el lanzamiento de la versión 2.8 del lenguaje. Y a pesar de lo que pueda parecer, se trata de un cambio enorme, una actualización importante como la que representó la versión 3.0 de Python. De todos modos, una importante característica de Scala, heredada de Java, es que a pesar de todos los cambios efectuados mantienen prácticamente al 100% la compatibilidad con el código fuente de versiones anteriores. Algunos de los cambios más importantes son:

  • La biblioteca de colecciones fue rediseñada por completo.
  • Se ha simplificado el manejo de arrays.
  • Argumentos nombrados y por defecto.
  • Anotaciones anidadas.
  • Se ha mejorado a los actores (para concurrencia).
  • Fueron solucionados gran cantidad de bugs.
  • Los paquetes, además de clases y objetos, ahora pueden contener métodos, campos y alias.
  • Se ha mejorado notablemente tanto el REPL como el IDE oficial de Scala para el Eclipse.


Esperado lanzamiento con cambios que, espero, cumplan todas las expectativas generadas. Y para quienes no estén familiarizados para nada con la sintaxis del lenguaje, termino la entrada con el clásico “Hola mundo” escrito en Scala:

object HolaMundo {   def main(args: Array[String]) =     
println("Hola, mundo") }
Fuente | bitelia.com

Diseño Ágil con TDD (Desarrollo guiado por pruebas).

disenoAgilConTDD

Fuentes | wiki |.net TDD | TDD | Foro

Webkit Inspector.

DevLab: WebKit inspector from Mario A Chavez on Vimeo.

En el videocast se muestra el uso de la herramienta WebKit Inspector, la cual es de gran ayuda tanto para los diseñadores web, así como para los programadores web.

La herramienta permite inspeccionar el código html de una pagina web, realizar cambios a la misma “en vivo”, también es posible inspeccionar el CSS de la pagina y de igual forma realizar cambios al momento.

También cuenta con una opción para medir el tiempo de carga y tamaño de nuestra pagina, dandonos un detalle, de cuales son los elementos que tardan mas en descargarse o cuales son los mas “pesados” en términos de bytes.

Por último también se muestra la herramienta para depurar javascript e inspeccionar los valores de las variables del código que se este ejecutando, ademas de incorporar una herramienta de “profile” para analizar que partes de nuestros javascript son las más lentas en su ejecución.

Fuente | mario-chavez
Enlaces | webkit | wiki | Blog

El compilador GCC soportará el lenguaje Go de Google.

Con este brevísimo mensaje se anunció que el “Steering Committee” del GCC (GNU Compiler Collection) aceptó el frontend gccgo para su inclusión en su versión 4.5 o posterior, el que agregará soporte para el lenguaje de programacón Go de Google en la imprescindible colección de compiladores del proyecto GNU.

Esta noticia llega sólo días después de que en el último el índice de TIOBE, empresa que publica mensualmente un ránking de la popularidad de los lenguajes a nivel mundial, Go apareciera por primera vez en el puesto número 13 convirtiéndose en el escalador más rápido de todos y ubicándose sólo detrás de Objective-C (el del iPhone y Mac OS X) a pesar de haber sido lanzado oficialmente hace menos de 3 meses.

Además de C y C++, GCC incluye actualmente frontends para lenguajes como Ada, Fortran, Java, Objective-C y Objective-C++; otros frontends disponibles pero que todavía no son parte oficial de GCC incluyen a Cobol, D, Pascal y Modula-2/3, entre otros.

  • Artículo completo en LWN.