Diseño de Interfaz Gráfica de Usuario con el lenguaje Java

Diseño de interfaz gráfica de usuario en el desarrollo de software


En el desarrollo de un producto software el diseño de la interfaz gráfica de usuario tiene un rol muy importante en el momento de establecer una  buena comunicación con el cliente y usuario del sistema a construir. En un proceso de construcción de software moderno es necesario incluir al usuario del sistema en el proceso constructivo. En un proceso de desarrollo tradicional se consideraba solamente la realimentación entre las fases de desarrollo. Hay muchos modelos llamados ciclos de vida del desarrollo de software que no incluyen al usuario durante todo el proceso de desarrollo y tienen una mirada muy técnica, tecnológica, basada en normas, estándares  y herramientas CASE.

Proceso constructivo tradicional de un producto software


Diseño de Interfaz de usuario


El diseño de interfaces de usuarios en el proceso de desarrollo de software brinda una oportunidad muy buena para establecer en cada fase del desarrollo una comunicación que ayude a mejorar la calidad del producto software que se está construyendo.

Proceso constructivo moderno de desarrollo de un producto software basado en el diseño de la interfaz para usuario


Muchas metodologías orientadas a la gestión de proyectos de construcción de productos software tienen un conjunto de principios que las caracterizan. El conjunto de principios se centran en el cliente.

Los métodos ágiles promueven los siguientes principios y valores


  • Valores: http://agilemanifesto.org/iso/es/manifesto.html
    • Individuos e interacciones sobre procesos y herramientas
    • Software funcionando sobre documentación extensiva
    • Colaboración con el cliente sobre negociación contractual
    • Respuesta ante el cambio sobre seguir un plan (Los clientes cambian los requerimientos)

  • Principios: http://agilemanifesto.org/iso/es/principles.html
    • Satisfacer al cliente mediante la entrega temprana y continua de software con valor.
    • Aceptar que los requisitos cambian, aprovechar el cambio para proporcionar ventaja competitiva al cliente.
    • Entregas de productos software al cliente que sea funcional en tiempos cortos.
    • El cliente y usuarios trabajamos juntos de forma cotidiana durante todo el proyecto.
    • Los proyectos se desarrollan con clientes, usuarios y equipos de desarrollo motivados.
    • Clientes, usuarios y equipos  de desarrollo se comunican verbalmente y cara a cara. El software funcionando y probado por el cliente es la medida principal de progreso.
    • Los procesos Ágiles promueven el desarrollo sostenible, continuo e indefinido. Los  desarrolladores, usuarios y cliente trabajan de forma continua.
    • La atención continua a la excelencia técnica y al buen diseño mejora la Agilidad.
    • La simplicidad, o el arte de maximizar la cantidad de trabajo no realizado, son esenciales.
    • Las mejores arquitecturas, requisitos y diseños emergen de equipos auto-organizados.
    • A intervalos regulares el equipo reflexiona sobre cómo ser más efectivo para a continuación ajustar y perfeccionar su comportamiento en consecuencia.

El método RUP promueve los siguientes principios

  • Principios: https://es.wikipedia.org/wiki/Proceso_Unificado_Racional
    • Adaptar el proceso
      • El proceso deberá adaptarse a las necesidades del cliente ya que es muy importante interactuar con él.
    • Equilibrar prioridades
      • Los requisitos de los diversos participantes pueden ser diferentes, contradictorios o disputarse recursos limitados.
    • Demostrar valor iterativamente
      • Los proyectos se entregan al cliente, aunque sea de un modo interno, en etapas iteradas.
    • Colaboración entre equipos
      • El desarrollo de software no lo hace una única persona sino múltiples equipos.
    • Enfocarse en la calidad
      • El control de calidad no debe realizarse al final de cada iteración, sino en todos los aspectos de la producción, entregas funcionales y continuas al cliente.
    • Elevar el nivel de abstracción (Usar representaciones visuales para el cliente, usuarios y desarrolladores)
      • Este principio dominante motiva el uso de conceptos reutilizables tales como patrones de diseño del software, lenguajes 4GL o esquemas (frameworks) por nombrar algunos. Estos se pueden acompañar por las representaciones visuales de la arquitectura, por ejemplo con UML (Lenguaje Unificado de Modelado), GUI (Interfaz Gráfica de Usuario).

Conclusión


Las interfaces gráficas de usuarios irrumpieron en la sociedad en la década de los 90’ del siglo pasado, tienen más de 30 años de crecimiento y de desarrollo de ingeniería informática. Deben ser valorizadas dentro del proceso de desarrollo de software tradicional y unir a dicho proceso las metodologías modernas de gestión de proyectos.

Sinergia de procesos en busca de la calidad del producto software

  • Ingeniería del software (cascada, espiral, prototipo, etc.)
    • Interfaces gráficas de usuario, GUI (Valorizar el diseño de GUI como herramienta de comunicación con el cliente)
  • Proceso de construcción de software ágil (SCRUM, KANBAN, XP, etc.)
  • Procesos de construcción de software modernos RUP
  • Procesos de modelados de software modernos UML
  • Uso de herramientas CASE modernas que brinden soporte a todo el ciclo de vida del desarrollo de software
    • JDeveloper 12g de Oracle
  • Otras tecnologías …



FIN del artículo.

Gestión de cadenas en Java

Es importante conocer el manejo de caracteres en un lenguaje como Java

Manejo de cadenas en Java

Construyendo una máquina de comunicación con extraterrestres

Buscando una solución


En la búsqueda de vida extraterrestre pueden aparecer muchos dilemas y preguntas, entre las preguntas más comunes están: ¿Los extraterrestres serán parecidos a nosotros los terrestres?, ¿Cómo se comunicarán los extraterrestres? Una interesante investigación es suponer varios escenarios e intentar soluciones posibles, con respecto a la forma de comunicación podemos suponer que es parecida al lenguaje español con la diferencia que los extraterrestres tienen las letras mezcladas.

String alfabetoTerrestre = "abcdefghijklmnopqrstuvwxyz";
String alfabetoExtraterrestre1 = "ucadejfgbhikmoqzrnstvxlwyp";

Puede ser que encontremos más de una civilización extraterrestre y que la comunicación es semejante al lenguaje español pero con símbolos diferentes para cada letra.

String alfabetoExtraterrestre2 = "!#$%&/()=?¡'¿+{[}]_-^~*>|<";

Dar una solución al problema


La pregunta es, ¿Existe algún algoritmo que pueda convertir listas de palabras entre una civilización y otra?

Por ejemplo:

public String[] convertirLista(String listaPalabras[], String alfabetoCivilizacion1, String alfabetoCivilizacion2 ) {

  String[] listaSolucion = null;
  //Algoritmo solución del problema ...
  //...
  //Fin algoritmo
  return solucion;

}

Solución al problema


La solución al problema planteado de la comunicación entre habitantes del universo es la siguiente clase llamada Civilizacion{...}

public class Civilizacion {
  public Civilizacion() {
    super();
  }

  public String[] convertirLista(String listaPalabras[], String alfabetoCivilizacion1, String alfabetoCivilizacion2 ) {
    String[] listaSolucion = null;
    //Algoritmo solución del problema ...
    listaSolucion = new String[listaPalabras.length];
    StringBuilder palabraAConvertir = null;
    String palabraConvertida = ""; char caracter; int lugarCaracter;
    for(int conPalabras=0; conPalabras<listaPalabras.length; conPalabras++){
      palabraAConvertir = new StringBuilder(listaPalabras[conPalabras]);
      for(int conCaracter=0; conCaracter<palabraAConvertir.length();  conCaracter++){
        caracter=palabraAConvertir.charAt(conCaracter);
        lugarCaracter = alfabetoCivilizacion1.indexOf("" + caracter);
        palabraConvertida = palabraConvertida + alfabetoCivilizacion2.charAt(lugarCaracter);
      }
      listaSolucion[conPalabras] = palabraConvertida;
      palabraConvertida = "";
    }
    return listaSolucion;
  }//fin solución

  public static void main(String[] args) {
    Civilizacion civilizacion = new Civilizacion();
    String lista[] = { "hola", "esto", "es", "un", "saludo", "terrestre" };
    String alfabetoTerrestre = "abcdefghijklmnopqrstuvwxyz";
    String alfabetoExtraterrestre = "!#$%&/()=?¡'¿+{[}]_-^~*>|<";
    String[] solucion = new String[lista.length];
    solucion = civilizacion.convertirLista(lista, alfabetoTerrestre,    alfabetoExtraterrestre);
    for(int con=0; con<lista.length; con++){
      System.out.print(lista[con] + " ");
    }
    System.out.println();
    for(int con=0; con<solucion.length; con++){
      System.out.print(solucion[con] + " ");
    }
  }//fin main()
}//fin clase


Ejecutar la solución del problema


La salida por pantalla sería la siguiente después de compilar y ejecutar la clase Civilizacion{...}

hola esto es un saludo terrestre
){'! &_-{ &_ ^+ _!'^%{ -&]]&_-]&

Process exited with exit code 0.



FIN del artículo.

Soporte de arrastrar y soltar en Java - Drag and Drop en Java

Soporte de arrastrar y soltar imágenes, drag and drop, de Java

Hay cuatro formas  de hacer el mecanismo de arrastrar y soltar en Java:


  1. Arrastrar y soltar imágenes, propiedades, entre objetos
  2. Arrastrar y soltar texto entre objetos
  3. Arrastrar y soltar objetos a objetos contenedores 
  4. Uso del porta papeles 

Caso número uno - Arrastrar y soltar imágenes, propiedades, entre objetos


Swing presenta una clase llamada TransferHandler que facilita toda la tarea de arrastrar y soltar en Java. Para ser productivos en java y hacer que las aplicaciones implementes rápidamente el mecanismo de arrastrar y soltar es conveniente crear una clase personalizada y heredar la clase TransferHandler que se encargará de realizar la tarea. A un componente Swing se le puede decir que use un determinado objeto del tipo TransferHandler y entonces el componente Swing podrá intercambiar propiedades con otro componente Swing. Por ejemplo: dos componentes Swing JLabel de Java pueden intercambiar sus propiedades “icon” como respuesta de un procedimiento de arrastrar y soltar. Un componente Swing tiene un único TransferHandler.