# BlueJ

BlueJ es un entorno integrado de desarrollo (de sus siglas en inglés IDE - Integrated Development Environment) para el lenguaje de programación Java, desarrollado principalmente con propósitos educacionales, pero también es adecuado para el desarrollo de software a pequeña escala.
BlueJ fue desarrollado para apoyar la enseñanza y el aprendizaje de la programación orientada a objetos, y como resultado, su diseño difiere de otros entornos de desarrollo. La pantalla principal muestra gráficamente la estructura de clases de una aplicación en desarrollo (en un diagrama muy parecido a UML), y los objetos pueden ser creados y probados interactivamente. Combinado con una interfaz de usuario simple, esta facilidad de interacción permite experimentar de manera fácil con los objetos en desarrollo. Los conceptos de la orientación a objetos (clases, objetos, comunicación a través de llamadas a métodos) son representadas visualmente en el diseño de interacción en la interfaz.

## Características

Las características de BlueJ son diferentes a las de otros programas de su categoría por estar orientado a ayudar a aprender conceptos de programación orientada a objetos. Así, algunas herramientas comunes difieren de las de otros entornos, bien por su ausencia, bien por su presencia imprevista. Sus principales características son:
* Representación de orientación a objetos – los conceptos de clases y objetos son presentados en forma visual. Ambas tiene distintas representaciones visuales, y es fácil demostrar que un código está asociado directamente con una clase, que un objeto tiene un tipo de clase, y que el tipo de clase de un objeto determina directamente los métodos y campos disponibles, así como su comportamiento. * Simplicidad de la interfaz – La interfaz gráfica de usuario es más simple que en ambientes de alta escala profesionales, y por ello más fácil de aprender. El objetivo es que el entorno de desarrollo "desaparezca". Los alumnos deberían ser capaces de concentrarse en las tareas de programación sin necesidad de pelear con el entorno.
* Interacción con objetos – Los programadores son capaces de experimentar con objetos creándolos en el banco de objetos ("Object Bench") y usando métodos individuales interactivamente (incluyendo paso de parámetros e inspección de resultados). Con esto se pretende incentivar la realización temprana y frecuente de pruebas y experimentos para ayudar a entender el modelo de programación.
* El "Code Pad" – El code pad es una herramienta que evalúa instantáneamente expresiones y frases arbitrarias escritas en Java.
* Testeo de regresión – BlueJ soporta pruebas de regresión gracias a su integración con JUnit. Además de la escritura a mano de clases JUnit classes, se pueden grabar tests interactivos y se pueden crear a partir de ellos casos de prueba JUnit.
* Soporte de trabajo en grupo – BlueJ proporciona soporte simple para trabajo grupal vía un subconjunto de funcionalidad CVS y Subversion.
* Soporte de Java ME – Los proyectos Java ME (Micro Edition) pueden ser desarrollados e implementados desde BlueJ.
* Sistema de extensiones flexibles – Las extensiones (a.k.a. Plug-Ins) se pueden desarrollar usando una API de extensiones públicas para extender la funcionalidad del entorno básico del programa.
* Creación de archivos Jar y applets – Se pueden crear archivos ejecutables jar y applets.
* Traducciones – La interfaz del sistema BlueJ ha sido traducida a al menos 14 idiomas, entre ellos el español.
Las funciones de interacción visual de BlueJ están diseñadas para permitir a uno retrasar la introducción de ciertos conceptos programáticos considerados complicados o dificultosos por los educadores. Esto incluye:
* Sintaxis tal como public static void main(String args) – que requiere introducir innecesariamente las palabras clave public y static, así como argumentos de método y arrays. BlueJ permite a las clases arbitrarias ser instanciadas y a los métodos arbitrarios ser invocados interactivamente.
* Input/output del programa. En BlueJ tanto los valores del parámetro como los valores de retorno desde llamadas del método se pueden introducir e inspeccionar directamente, así que los estudiantes no tiene que luchar con terminales I/O o escribir interfaces gráficas de usuario cuando aún están aprendiendo los conceptos básicos de la programación informática.
Algunas de las funciones pioneras de BlueJ en entornos modernos de desarrollo son: interactive instantiation, interacción directa con objetos, grabado de unidades de prueba, visión de navegación del editor, y scope highlighting. Son normalmente útiles para desarrollo de software, pero sin embargo no se encuentran habitualmente en otros entornos de desarrollo. Otras aplicaciones informáticas han intentado replicar algunas de estas funciones. Por ejemplo, el Visual Studio de Microsoft implementó una especie de banco de objetos similar al de BlueJ, sin embargo permaneció de alguna manera oscuro porque no está incluido en todas las versiones de dicho programa.

### Pedagogía

El acercamiento pedagógico representado en BlueJ está basado en constructivismo y visualización. Trabajar con el entorno BlueJ proporciona experiencias concretas para entornos abstractos, tales como relaciones entre clases/objetos, object instantiation, llamada a método, y pase de parámetros. Estos conceptos abstractos son difíciles de comprender para novatos, y proporcionar representaciones concretas de ellos se entiende para ayudar en el proceso de aprendizaje. Las visualizaciones de los procesos y estructuras (tales como objetos en el banco de objetos, e inspectores de objetos) apoyan este proceso.
El objetivo de este acercamiento es permitir que los usuarios noveles desarrollen más fácilmente un modelo mental consistente de sistemas orientados a objetos, sus propiedades y su ejecución.

## Versiones

La última versión estable, la 3.1.5, fue lanzada el 29 de marzo de 2015. Esta versión proporciona funciones mejoradas del editor tales como completado de código o destacamiento de alcance (scope highlighting).
Está disponible un libro llamado Objects First with Java – a Practical Introduction Using BlueJ escrito por David J. Barnes y Michael Kölling, en inglés.