Está en la página 1de 9

EL ARCHIPILAGO ECLIPSE

(PARTE 2 DE 4)
Fecha de la ltima revisin: 21.05.2014
Miguel ngel Abin
mabian ARROBA aidima PUNTO es

14. SWT: La controversia est servida. Introduccin.
El Standard Widget Tookit de la plataforma Eclipse ha resultado ser el aspecto de Eclipse que
mayores rechazos, adhesiones y controversias ha provocado en la comunidad Java. SWT es la respuesta,
para el desarrollo de interfaces de usuario, de IBM al AWT y al Swing de Java. De acuerdo con la
documentacin oficial de Eclipse, he aqu la descripcin del componente Standard Widget Toolkit: "El
componente SWT est diseado para proporcionar acceso portable y eficiente a las facilidades de la
interfaz de usuario de los sistemas operativos donde est implementado".
El propsito original de Swing consista en proporcionar a las aplicaciones Java el mismo aspecto
consistente en todas las plataformas (con la posibilidad de imitar hasta cierto punto la apariencia nativa).
Aunque con Swing pueden producirse, con esfuerzo, aplicaciones Java de aspecto similar a las
aplicaciones nativas, su rendimiento, en comparacin con estas ltimas, siempre ha sido pobre.
El motivo de este pobre rendimiento con AWT/Swing reside en que el cdigo que interacciona
directamente con los widgets nativos est escrito en C (forma parte de la biblioteca nativa AWT) y no
est disponible para Swing. Tambin la API que proporcionan los widgets nativos est escrita en C y
Swing no puede acceder directamente a ella. El SWT de Eclipse utiliza una estrategia sumamente
ingeniosa y mucho ms eficiente, utilizando la API JNI (Java Native Interface) de Java, que permite a los
programas Java invocar cdigo escrito en C, para llamar directamente a las APIs escritas en C del
sistema operativo nativo. SWT, a travs de la API JNI; consigue siempre que sea posible una
correspondencia uno a uno (one-to-one mapping) entre los mtodos nativos Java y las llamadas a la API
grfica nativa (escrita en C) subyacente bajo el sistema operativo.
SWT usa widgets nativos siempre que sea posible, excepto cuando un tipo de widgets no est
disponible en todas las plataformas. En ese caso, SWT lo emula en las plataformas que no lo soportan
nativamente. Por ejemplo, Motif no proporciona un widget nativo de tipo rbol, por lo tanto el SWT
proporciona un widget rbol emulado con la misma API que la implementacin nativa en Windows.
Ningn usuario de Motif notar algo raro en un componente SWT rbol pues, como no existe de forma
nativa en la plataforma, no tiene criterio para saber cmo debe comportarse.
Una vez obtenida la correspondencia uno a uno, el desarrollador puede olvidarse del cdigo JNI-C
y de los detalles de bajo nivel del sistema operativo que ste oculta, y limitarse a utilizar los mtodos
pblicos que proporcionan las clases de SWT. Por as decirlo, simplificando un poco, SWT encapsula de
modo transparente el sistema operativo nativo a travs del JNI, permitiendo utilizar todas las
caractersticas de los widgets nativos. Acta, en definitiva, como una fina capa entre Java y las
bibliotecas de la API grfica nativa. En comparacin con el AWT, SWT evita el uso de una capa
separadora (y ralentizadora) como la del AWT.
Cada plataforma con una implementacin del SWT tiene su propia biblioteca Java, que utiliza la
API JNI para establecer una correspondencia uno a uno entre los mtodos Java y los mtodos de la API
Copyright (c) 2003-2014, Miguel ngel Abin. Este documento puede ser
distribuido solo bajo los trminos y condiciones de la licencia de
Documentacin de javaHispano v1.0 o posterior (la ltima versin se
encuentra en http://www.javahispano.org/licencias/).
Page 1 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...
grfica nativa, y todas estas bibliotecas implementan una serie comn de clases. Estas clases
comunes, con las mismas declaraciones de sus mtodos pblicos, permiten que el cdigo Java que use
SWT se ejecute sin necesidad de cambios en cualquier otra plataforma donde exista una
implementacin del SWT. En ese sentido, SWT es transportable y nativo simultneamente, por
contradictorio que parezca (en SWT todas las interfaces directas a la API grfica nativa estn escritas en
Java, excepto la de ms bajo nivel).
Esta ltima faceta paradjica quizs quede ms clara con un ejemplo: consideremos un widget
SWT Button y supongamos que trabajamos con implementaciones del SWT en Windows y Solaris
(olvidemos temporalmente que hay implementaciones de SWT para ms plataformas).

La clase Button del SWT en Windows, una subclase de la clase abstracta Control, tiene el siguiente
cdigo:

package org.eclipse.swt.widgets;

// Imports
import java.lang.String;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.internal.win32.TCHAR;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.internal.win32.LRESULT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.graphics.Image;

public class Button extends Control {

// Fields
Image image;
static final int ButtonProc;
static final TCHAR ButtonClass;
static final int CheckWidth;
static final int CheckHeight;

// Constructors
public Button(Composite p0, int p1) { }

// Methods
static { }
public void addSelectionListener(SelectionListener p0) { }
int callWindowProc(int p0, int p1, int p2) { }
static int checkStyle(int p0) { }
void click() { }
public Point computeSize(int p0, int p1, boolean p2) { }
int defaultBackground() { }
int defaultForeground() { }
public int getAlignment() { }
boolean getDefault() { }
public Image getImage() { }
String getNameText() { }
public boolean getSelection() { }
public String getText() { }
boolean isTabItem() { }
boolean mnemonicHit(char p0) { }
boolean mnemonicMatch(char p0) { }
void releaseWidget() { }
Page 2 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...
public void removeSelectionListener(SelectionListener p0) { }
void selectRadio() { }
public void setAlignment(int p0) { }
void setDefault(boolean p0) { }
public boolean setFocus() { }
public void setImage(Image p0) { }
boolean setRadioFocus() { }
public void setSelection(boolean p0) { }
public void setText(String p0) { }
int widgetStyle() { }
TCHAR windowClass() { }
int windowProc() { }
LRESULT WM_GETDLGCODE(int p0, int p1) { }
LRESULT WM_KILLFOCUS(int p0, int p1) { }
LRESULT WM_SETFOCUS(int p0, int p1) { }
LRESULT wmCommandChild(int p0, int p1) { }
LRESULT wmDrawChild(int p0, int p1) { }
}

La clase Button en Solaris presenta otro cdigo, pero todos los mtodos pblicos se declaran igual
que en la clase Button de Windows (por ejemplo, la declaracin public boolean setFocus() tambin
aparece -idntica- en la clase SWT de Button en Solaris, pero no hay un mtodo con una declaracin int
callWindowProc(int p0, int p1, int p2) en la clase Button de Solaris, puesto que callWindowProc no se
define como un mtodo pblico).
Por supuesto, los mtodos pblicos de cada clase se implementan de modo completamente distinto
en Solaris y Windows; en cada caso se usa la API grfica nativa de cada plataforma, mediante el uso de
JNI. La implementacin de cada mtodo en Solaris no ser portable a Windows y viceversa, pero el
cdigo Java que utilice los mtodos pblicos de Button s lo ser puesto que ambas plataformas tienen
implementaciones de SWT.
Por ejemplo, la sentencia miBoton.setText("Soy un cuadro de dilogo SWT") har llamadas, a
travs de JNI, a mtodos nativos completamente diferentes en Windows y Solaris, pero funcionar igual
en ambas plataformas (dando distintas presentaciones grficas, claro est) al tener la misma declaracin:
public void setText(String p0) en ambas. El cdigo Java que llame al SWT no necesita saber ni
preocuparse (de hecho, si lo hiciera se violara el principio de encapsulacin y el SWT habra sido mal
diseado) de la implementacin de las clases SWT ni del cdigo JNI-C que hace llamadas a la API
grfica nativa.
Las bibliotecas JNI SWT se deben compilar para cada plataforma (dando un fichero con
extensin .dll en Windows y otro con extensin .so en Solaris). Un programa que utilice SWT usa las
bibliotecas Win32 nativas de Windows en Windows, y las bibliotecas Motif en Solaris.

Page 3 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...

Fig. 14. SWT en accin: La plataforma Eclipse en Linux-Motif. Extrado de la documentacin
oficial de Eclipse.

Fig. 15. SWT en accin: La plataforma Eclipse en Windows XP. Extrado de la
documentacin oficial de Eclipse.

Al permitir la API JNI que las aplicaciones Java puedan interaccionar directamente con el cdigo
nativo, SWT es mucho ms rpido que AWT/Swing, consume muchos menos recursos y se integra
perfectamente con el entorno nativo de cada plataforma (pudiendo reflejar inmediatamente cualquier
cambio en el L&F del interfaz de usuario del sistema operativo subyacente, como sucede con el skinning
Page 4 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...
de Windows XP). Cualquier aplicacin Java podra utilizar JNI para establecer una
correspondencia entre los mtodos Java y las capacidades grficas nativas de la plataforma usada, pero
SWT evita a los programadores tener que escribir su propio cdigo JNI (tarea que, desde luego, dista
mucho de ser trivial y que, para este caso, requiere un buen conocimiento de la plataforma -sistema
operativo, arquitectura hardware y entorno grfico- con la que se est trabajando).


15. SWT: Ventajas e inconvenientes.
Las crticas a Eclipse, dejando aparte legtimos intereses comerciales mejor o peor encubiertos, se
han encauzado hacia estos dos frentes: 1) SWT limita la portabilidad de las aplicaciones Java que lo
utilicen, y 2) SWT no es un estndar (al contrario que AWT/Swing).
Por su propia naturaleza, SWT limita la estimada capacidad multiplataforma de Java y la
portabilidad de la propia plataforma Eclipse, al hacer uso de capacidades grficas nativas. Una aplicacin
Java que use SWT slo podr funcionar en plataformas donde exista una implementacin de SWT.
Siempre puede usarse Eclipse para escribir aplicaciones Java que usen AWT o Swing, y el cdigo ser
100% transportable a otras plataformas, tengan o no implementaciones de Eclipse (siempre, claro est,
que existan implementaciones de la mquina virtual Java). Ojo: que se pueda usar Eclipse para escribir
aplicaciones Java con componentes Swing no guarda relacin alguna con que puedan usarse
componentes Swing (o AWT) en Eclipse. Esta ltima situacin requiere un anlisis detenido del
problema en cuestin para determinar si es viable.


Fig. 16. Ejemplo de una aplicacin, desarrollada con Eclipse, que utiliza componentes Swing.

Muchas veces hay que llegar a un compromiso entre lo que se desea y lo que se puede. Conseguir
construir aplicaciones cliente Java que puedan competir en igualdad de condiciones (o casi) con
aplicaciones nativas cliente (como las de Windows) sin echar mano de las capacidades grficas nativas
del sistema operativo subyacente resulta sencillamente imposible. Swing posiblemente mejorar, pero no
podr superar, en cuanto a rendimiento y semejanza a las aplicaciones nativas, a SWT.
Es cierto que Swing no est siendo todo lo bien utilizado por los programadores Java que podra
serlo y que, con un poco de trabajo y conocindolo bien, puede proporcionar aplicaciones ms parecidas
Page 5 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...
a las nativas Windows, pero cuesta mucho tiempo y esfuerzo conseguir programar de forma ptima
en Swing, adems de ser necesario tener muy claro el diseo de cada interfaz desde el principio. Muchos
programadores prefieran concentrarse en otros problemas que no sean la interfaz grfica. Existe en
http://www.jgoodies.com/metamorphosis una aplicacin llamada Metamorphosis que incluye una
aplicacin de ejemplo que simula el L&F de Eclipse mediante Swing y da consejos sobre la construccin
de interfaces de usuario con Swing. La aplicacin ha sido realizada por Karsten Lentszch.
AWT y Swing tienen la ventaja indiscutible de ser estndares Java. No se puede, por ejemplo,
disponer de SWT en IRIX, OS/390, OS/400, OS/2 o FreeBSD, al no haber todava implementaciones
para estas plataformas, mientras que puede desarrollarse con AWT/Swing en cualquier plataforma donde
exista una maquina virtual Java (como ocurre con las anteriores).
Actualmente SWT se encuentra disponible para:

- HP UX/Motif
- AIX/Motif
- Linux/Motif
- Linux/GTK
- Linux/QT
- MacOS/Carbon
- Windows/Windows
- Windows CE/Windows
- Solaris/Motif
- QNX/Photon

No todas las implementaciones se encuentran en el mismo estadio de desarrollo. Posiblemente la de
Windows sea la ms completa y comprobada (lo cual apunta directamente las intenciones de IBM). La de
Mac OS X, sin embargo, presenta [Marzo, 2003] bastantes caractersticas ausentes y no est muy
optimizada, pese a los numerosos retrasos que lleva con respecto a los planes previstos.

Swing, en particular, constituye una biblioteca grfica con una arquitectura robusta y compleja, en
cuyo diseo se usaron patrones y todas las caractersticas de la orientacin a objetos, mientras que la
biblioteca SWT es ms sencilla y fcil de utilizar, aunque ms limitada. Lgicamente, al ser SWT
relativamente nuevo, no se conocen del todo sus bugs y limitaciones, aunque hay indicios de que las
implementaciones actuales pueden tener problemas con la escalabilidad. Un aspecto de SWT que podra
llegar a ser problemtico es la necesidad de liberar recursos. En SWT se requiera la liberacin explcita
de recursos (fuentes, colores, etc.) por parte del programador. Tal y como figura en la documentacin de
Eclipse: Si lo cre, librelo. Esta regla, muy sencilla de aplicar con pequeas aplicaciones, puede
tornarse muy difcil de aplicar en proyectos de cierta envergadura. Es ms, el recolector de basura de
Java se cre para evitar los errores de liberacin de recursos tan comunes en C++. Ser necesario que
aparezca de aqu a un tiempo un recolector de objetos SWT?
[Nota tcnica: En Swing es necesario utilizar el mtodo dispose() con las clases derivadas del tipo
ventana (JFrame y JDialog) para liberar recursos una vez se ha terminado con ellas. Independientemente
de si se trata de un error o no (posiblemente s), estos casos particulares constituyen excepciones.]
Personalmente, me gusta que las aplicaciones Java tengan la misma apariencia en todas las
plataformas, pero comprendo que los usuarios finales de aplicaciones cliente Java puedan sentirse
desconcertados o confundidos. Sin embargo, llevo ya un tiempo trabajando con Eclipse en Windows 98,
XP y Red Hat, y reconozco que SWT consigue un mimetismo casi perfecto con respecto al aspecto de las
aplicaciones nativas: un usuario de aplicaciones que utilicen el SWT no se dar cuenta de que esta
ejecutando una aplicacin Java (cosa muy difcil de conseguir por los programadores sin suficiente
experiencia con Swing: cualquier usuario que, ante una aplicacin Swing realizada por un principiante,
no note al poco tiempo algo raro con respecto a las aplicaciones Windows posiblemente sea ciego o haya
podido escapar con xito de utilizar cualquier aplicacin hasta la fecha. Mi enhorabuena a aquellos o
aquellas que estn en este ltimo caso; es duro conseguirlo, pero no vale la pena).
Existen herramientas profesionales que utilizan Swing (JBuilder, IntelliJ, Forte for Java) y que
permiten desarrollar aplicaciones empresariales, pero su voracidad de recursos y su escasa velocidad no
tienen igual en el campo de las herramientas nativas. En el caso de JBuilder, algunos nostlgicos
recuerdan, en los foros estadounidenses del producto, con aoranza y lgrimas virtuales y materiales en
los ojos los buenos tiempos en que JBuilder no estaba escrito en Java e iba mucho ms rpido.
Page 6 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...
Pienso que disponer de SWT ofrece una posibilidad ms, completamente opcional, a los
desarrolladores en Java. Dado que actualmente Java se emplea sobre todo en aplicaciones servidor sin
componentes grficos, SWT podra, quin sabe, revitalizar un poco el inters de los usuarios en los
clientes Java.


Fig. 17. Tabla comparativa entre Swing y SWT.


Page 7 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...

Fig. 18. SWT en accin: La plataforma Eclipse se adapta automticamente al skin de
Windows XP. Extrado de la documentacin oficial de Eclipse.


16. Pero es realmente original el SWT de Eclipse? Tena otra eleccin IBM?
El planteamiento en que se basa el Standard Widget Toolkit de Java, a medio camino entre el AWT
y Swing, no es nuevo. Antes que Eclipse existan (y existen) proyectos de bibliotecas grficas para Java,
de cdigo fuente abierto, en los que se usaba la API JNI para acceder directamente al cdigo nativo, pero
ninguno de ellos ha tenido la popularidad del SWT ni su extensin a tantas plataformas.
El SWT de IBM tampoco constituye la nica alternativa realista al AWT y a Swing. Por poner un
solo ejemplo, la biblioteca LwVCL (Zaval Light Weight Visual Component Library) constituye una
alternativa "seria" al AWT y Swing; es un proyecto free source bajo licencia GNU GPL, desarrollado
integramente en Java, que proporciona una solucin alternativa al AWT y Swing sin menoscabo del
rendimiento y sin necesidad de grandes recursos hardware. Tiene algunos inconvenientes, pero, dado el
pequeo tamao de LwVCL (unos 150 Kb), proporciona una solucin muy aceptable para muchas
aplicaciones.
Ni siquiera el debate entre los partidarios de widgets con la apariencia de los nativos y los
partidarios de componentes con la misma apariencia en todas las plataformas es nuevo. Ya surgi con
SmallTalk () y provoc discusiones dentro de la propia IBM antes de la gestacin de Eclipse. Por cierto,
la batalla la ganaron los partidarios de los widgets nativos.
La originalidad de Eclipse reside en dos puntos:

a) Proporciona una API comn y transportable, que se implementa en cada plataforma usando los
widgets nativos. Esta API comn y transportable (y su implementacin en ms de una plataforma, por no
decir en la mayora) est ausente en los proyectos open source que utilizan JNI. Por supuesto, resulta ms
fcil llevar a buen puerto un proyecto tan costoso si detrs hay empresas como IBM.
b) Proporciona un conjunto de widgets o componentes grficos comunes en todas las plataformas,
relacionados con los nativos siempre que sea posible, sin reducirse al pequeo conjunto de componentes
AWT comunes en todas las plataformas. Como se vio en el anterior apartado, cuando no hay un widget
nativo, SWT lo emula.

Puede considerarse que IBM, con el SWT, est haciendo "una reinvencin de la rueda... slo que
no tan bonita o redonda" (BigBlueSmoke) o que "est rompiendo la filosofa bsica de Java" (Sun o
BEA), pero no creo que -en realidad- tuviera ninguna otra opcin. Para intentar conseguir que Eclipse
Page 8 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...
sea un estndar en el desarrollo de herramientas de desarrollo competitivas y eficaces, IBM
necesitaba una interfaz grfica impactante y que pudiera competir rpidamente en igualdad de
condiciones (no maniatada y con un ojo cerrado) con las aplicaciones nativas. Resulta imposible hablar
del triunfo de un proyecto as sin haber penetrado en el mercado de desarrolladores de aplicaciones
cliente para Windows, un sector en el que Java nunca ha destacado (en parte, slo en parte, por la
apariencia y sensacin de Swing). Queda en manos de cada desarrollador utilizar Eclipse para producir
aplicaciones que usen componentes SWT o AWT/Swing.
[Fin de la tercera parte]
Acerca del autor
Miguel ngel Abin
Miguel ngel Abin naci en Soria. Obtuvo la suficiencia investigadora en el Dpto. de Fsica
Aplicada de la Universidad de Valencia con una tesina sobre electromagnetismo. Realiz varios cursos
de doctorado relacionados con electromagnetismo, electrnica, semiconductores y cristales fotnicos. Ha
recibido becas del IMPIVA (Instituto de la Mediana y Pequea Industria Valenciana) y de la Universidad
Politcnica de Valencia. Curs un Mster estadounidense en UML y Java y otro sobre tecnologas de
Internet/Intranet.
Se incorpor en 1998 a AIDIMA, donde ha participado como investigador en 24 proyectos de
investigacin nacionales e internacionales relacionados con la Web semntica, tecnologas de la
informacin, madera en construccin, biosensrica, bioelectrnica, telecomunicaciones, visin artificial;
as como en la Red de Excelencia de la Comisin Europea INTEROP 2003-2007. Algunos de los
proyectos europeos relacionados con las tecnologas semnticas en los que ha participado son ATHENA
y STASIS (http://www.stasis-project.net/).
El ao 2006 estuvo cuatro meses como investigador invitado en el departamento Lehrstuhl fr
Messsystem und Sensortechnik de la Universidad Politcnica de Munich (TUM), donde colabor en el
desarrollo de nuevos mtodos para la deteccin de defectos en superficies acabadas y en el diseo e
implementacin de sistemas distribuidos de sensores para el sector del automvil y de energas
renovables. En 2007 recibi un premio BANCAJA-UPV por un proyecto relacionado con la calidad
interna de la madera. En 2009 recibi el premio internacional Schweighofer Innovation Prize -el premio
ms prestigioso en el sector forestal y de la madera- por su aportacin al desarrollo de nuevas tecnologas
de evaluacin no destructiva de la madera en construccin.
Actualmente es Responsable del Departamento de Tecnologa y Biotecnologa de la Madera y del rea
de Construccin de Madera.
Es coautor de 7 libros y guas tcnicas relacionadas con el uso de la madera en la construccin y la visin
artificial. Tambin ha publicado varios artculos cientficos en revistas como IEEE Transactions on
Microwave Theory and Techniques y Wood Science and Technology. Ha participado como ponente en
congresos y conferencias como European Congress on Computational Methods in Applied Sciences and
Engineering, IEEE International Conference on Multisensor Fusion and Integration for Intelligent
Systems, International Conference on Space Structures (IABSE-IASS) y en reuniones COST (European
Cooperation in Science and Technology). Ha publicado ms de 22 artculos tcnicos en revistas
sectoriales y tcnicas.
Es autor o coautor de 8 patentes, algunas de ellas en trmite. Tres de ellas corresponden a dispositivos y
mtodos para detectar la biodegradacin de la madera en construccin.
Actualmente, entre otros proyectos como SHBUILDINGS, WOODTECH, WOODRUB y
CELLUWOOD, ha trabajado en SEMCONCEPT, un proyecto de I+D+i para aplicar tecnologas
semnticas (ontologas, buscadores semnticos) en el diseo conceptual de productos industriales. Sus
intereses actuales son la evolucin de la programacin orientada a objetos, Java, la Web semntica y sus
tecnologas, la arquitectura orgnica, el surrealismo y Pars, siempre Pars. .


Page 9 of 9 ARCHIPILAGO ECLIPSE
21/05/2014 file://F:\ArticuloEclipse\Art_Eclipse3\Copia de ArticuloEclip...

También podría gustarte