martes, 24 de mayo de 2011

Extra


La interfaz gráfica de usuario, conocida también como GUI (del inglés graphical user interface) es un programa informático que actúa de interfaz de usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador.
Habitualmente las acciones se realizan mediante manipulación directa, para facilitar la interacción del usuario con la computadora. Surge como evolución de los intérpretes de comandos que se usaban para operar los primeros sistemas operativos y es pieza fundamental en un entorno gráfico. Como ejemplos de interfaz gráfica de usuario, cabe citar los entornos de escritorio Windows , el X-Windows de GNU/Linux o el de Mac OS X, Aqua.
En el contexto del proceso de interacción persona-ordenador, la interfaz gráfica de usuario es el artefacto tecnológico de un sistema interactivo que posibilita, a través del uso y la representación del lenguaje visual, una interacción amigable con un sistema informático.

GUI's y Zooming user interface

Los tipos de GUIs que se encuentran en juegos de computadora, y los GUIs avanzados basados en realidad virtual, se usan con frecuencia en tareas de investigación. Muchos grupos de investigación en Norteamérica y Europa están trabajando actualmente en la interfaz de enfoque del usuario o ZUI (Zooming User Interface), que es un adelanto lógico de las GUI, mezclando 3D con 2D. Podría expresarse como "2 dimensiones y media en objetos vectoriales de una dimensión".


"Touchscreen user interface"

Algunos GUIs son diseñados para cumplir con los rigurosos requisitos de los mercados verticales. Éstos se conocen como "GUIs de uso específico." Un ejemplo de un GUI de uso específico es el ahora familiar Touchscreen o Pantalla Táctil (pantalla que al ser tocada efectúa los comandos del ratón en el software). Es encontrado en muchos restaurantes alrededor del mundo y en tiendas de autoservicio. Primero iniciado por Gene Mosher en la computadora del ST de Atari en 1986, el uso que el específico GUI en el Touchscreen ha encabezado una revolución mundial en el uso de las computadoras a través de las industrias alimenticias y de bebidas, y en venta al por menor.
Otros ejemplos de GUIs de uso específico, relacionados con el Touchscreen son los cajeros automáticos, los kioscos de información y las pantallas de monitoreo y control en los usos industriales, que emplean un sistema operativo de tiempo real (RTOS). Los teléfonos móviles y los sistemas o consolas de juego también emplean el Touchscreen. Además la domótica no es posible sin una buena interfaz de usuario, o GUI.


Interfaz Natural de Usuario

Las NUI naturales son aquellas en las que se interactúa con un sistema, aplicación, etc., sin utilizar dispositivos de entrada como ratón, teclado, lápiz óptico, etc. En lugar de éstos se utilizan las manos o las yemas de los dedos. http://expressionlab.net/tag/interfaz-natural-de-usuario

para trabajar con java  podemos utiliza el software netbeans el cual podemos descargar de la sig paguina:
http://netbeans.org/downloads/es cual es muy sencillo de utilizar

Extra

Pruebas unitarias


Una prueba unitaria es la manera de probar el buen funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente independientemente uno del otro.

El objetivo es escribirle casos de prueba a cada método en el módulo de forma que cada caso sea independiente de lo demás.
Las pruebas unitarias sirven para utilizar otro código fuente llamado directamente a los métodos de una clase, pasando los parámetros necesarios y después, si se incluyen instrucciones Assert se pueden comparar valores esperados, los métodos de las clases unitarias se basan en clases Test, que se almacenan en archivos de código fuente.

Características de las pruebas unitarias
Las pruebas unitarias deben cumplir con los siguientes requisitos para que sean buenas:
  • Automatizable: Es decir no se debería hacer manualmente.
  • Completas: Deben de contener la mayor cantidad de código.
  • Repetibles: Se deben crear pruebas para ejecutarlas varias veces.
  • Independientes: La ejecución de una prueba no tendrá nada que ver con la ejecución de otra prueba, deben ser independientes.
  • Profesionales: Las pruebas deben ser tomadas en cuenta con la misma importancia que el código, con documentación, etc. 

Ventajas 
El objetivo de las pruebas unitarias es aislar cada parte del programa y probar su correcto funcionamiento, estas pruebas individuales proporcionan 5 ventajas básicas: 

  • Fomentan el cambio: Facilitan al programador encontrar errores para así poder reeprogramar el código.
  • Simplifica la integración: Ya que si el código funciona correctamente indivdualmente se facilita más adaptarlo para las pruebas de integración.
  • Documenta el código: En dónde las propias pruebas unitarias son documentación del código ya que se puede ver como utilizarlo.
  • Separa la interfaz y la implementación
  • Los errores son más fáciles de encontrar

Limitaciones

Se debe de saber que las pruebas unitarias no descubrirán todos los errores del código. Ya que sólo prueban unidades por si solas. Entonces no son capaces de descubrir errores de integracion, problemas de rendimiento, entre otros.




JUnit es un conjunto de clases (framework) que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera. Es decir, en función de algún valor de entrada se evalúa el valor de retorno esperado; si la clase cumple con la especificación, entonces JUnit devolverá que el método de la clase pasó exitosamente la prueba; en caso de que el valor esperado sea diferente al que regresó el método durante la ejecución, JUnit devolverá un fallo en el método correspondiente.
JUnit es también un medio de controlar las pruebas de regresión, necesarias cuando una parte del código ha sido modificado y se desea ver que el nuevo código cumple con los requerimientos anteriores y que no se ha alterado su funcionalidad después de la nueva modificación.
El propio framework incluye formas de ver los resultados (runners) que pueden ser en modo texto, gráfico (AWT o Swing) o como tarea en Ant.
En la actualidad las herramientas de desarrollo como NetBeans y Eclipse cuentan con plug-ins que permiten que la generación de las plantillas necesarias para la creación de las pruebas de una clase Java se realice de manera automática, facilitando al programador enfocarse en la prueba y el resultado esperado, y dejando a la herramienta la creación de las clases que permiten coordinar las pruebas.


Los pasos para crear pruebas unitarias exitosas son los siguientes:

  • Antes de implementar una determinada funcionalidad, piensa cómo deberías probarla para verificar que se comporta correctamente. Esto permite desarrollar la funcionalidad teniendo las ideas muy claras de lo que debería hacer.
  • Escribe el código que implementa la funcionalidad deseada.
  • Escribe el código de las pruebas inmediatamente después.
  • Ejecuta las pruebas que hiciste.
  • Corrige la unidad de código que implementa la funcionalidad deseada hasta que pase todas y cada una de las pruebas.
  • Al añadir una nueva funcionalidad, repite el ciclo: piensa en cómo probarla, codifica la funcionalidad, codifica las pruebas, ejecuta todas las pruebas que hiciste (nuevas y viejas). No sigas hasta que el código pase absolutamente todas las pruebas.
  • Así una y otra vez para cada nueva funcionalidad que implementes.

Extra

¿Qué son las BD?
● Colección de información organizada y relacionada entre ella.
● Estructura similar a una matriz (tabla) con filas (registros o entradas) y columnas (campos).
● La intersección de fila/columna se llama celda.
● El tipo de información de un campo se conoce como atributo.




¿Qué son las BD?
● Características importantes
– Principios:
● Coherencia de datos: no puede existir datos contradictorios en la base de datos.
● Localidad: los datos no tienen porqué residir en local. Pueden estar distribuidas. Aparece el “gestor de la base de datos”.
– Operaciones sobre las bases de datos
● Modificación (inserción, borrado y actualización).
● Consultas (petición de datos)

Gestores más conocidos



Bases de datos estáticas

Éstas son bases de datos de sólo lectura, utilizadas primordialmente para almacenar datos históricos que posteriormente se pueden utilizar para estudiar el comportamiento de un conjunto de datos a través del tiempo, realizar proyecciones y tomar decisiones.

Bases de datos dinámicas
Éstas son bases de datos donde la información almacenada se modifica con el tiempo, permitiendo operaciones como actualización, borrado y adición de datos, además de las operaciones fundamentales de consulta. Un ejemplo de esto puede ser la base de datos utilizada en un sistema de información de un supermercado, una farmacia, un videoclub o una empresa;


Según el contenido

Bases de datos bibliográficas

Solo contienen un subrogante (representante) de la fuente primaria, que permite localizarla. Un registro típico de una base de datos bibliográfica contiene información sobre el autor, fecha de publicación, editorial, título, edición, de una determinada publicación, etc. Puede contener un resumen o extracto de la publicación original, pero nunca el texto completo, porque si no, estaríamos en presencia de una base de datos a texto completo (o de fuentes primarias —ver más abajo). Como su nombre lo indica, el contenido son cifras o números. Por ejemplo, una colección de resultados de análisis de laboratorio, entre otras.



Bases de datos de texto completo

Almacenan las fuentes primarias, como por ejemplo, todo el contenido de todas las ediciones de una colección de revistas científicas.


Directorios

Un ejemplo son las guías telefónicas en formato electrónico.


Bases de datos o "bibliotecas" de información química o biológica

Son bases de datos que almacenan diferentes tipos de información proveniente de la química, las ciencias de la vida o médicas. Se pueden considerar en varios subtipos:
  • Las que almacenan secuencias de nucleótidos o proteínas.
  • Las bases de datos de rutas metabólicas.
  • Bases de datos de estructura, comprende los registros de datos experimentales sobre estructuras 3D de biomoléculas-
  • Bases de datos clínicas.
  • Bases de datos bibliográficas (biológicas, químicas, médicas y de otros campos): PubChem, Medline, EBSCOhost.






Extra

Sistemas distribuidos.

"Sistemas cuyos componentes hardware y software, que están en ordenadores conectados en red, se comunican y coordinan sus acciones mediante el paso de mensajes, para el logro de un objetivo. Se establece la comunicación mediante un protocolo prefijado por un esquema cliente-servidor".
  • ¿Qué es un sistema distribuido?

  • Un sistema distribuido es una colección de computadoras independientes; es decir autónomas, que aparecen ante los usuarios del sistema como una única computadora.
    Algunos ejemplos de sistemas distribuidos son:
    • Una red de estaciones de trabajo en un departamento de una universidad o compañía, donde además de cada estación personal, podría existir una pila de procesadores en el cuarto de máquinas, que no estén asignados a usuarios específicos sino que se utilicen de manera dinámica cuando sea necesario.
    • Una fábrica de robots, donde los robots actúan como dispositivos periféricos unidos a la misma computadora central.
    • Un banco con muchas sucursales por el mundo, cada oficina tiene una computadora maestra para guardar las cuentas locales y el manejo de las transacciones locales, la cuál se puede comunicar con cualquier computadora de la red. Las transacciones hechas se realizan sin importar dónde se encuentre la cuenta o el cliente.
  • Ventajas de los sistemas distribuidos con respecto de los centralizados.

    • Economía: es la razón número uno de la tendencia hacia los sistemas distribuidos ya que estos sistemas tienen en potencia una proporción precio/desempeño mucho mejor que la de un sistema centralizado.
    • Velocidad: un sistema distribuido puede tener mayor poder de cómputo que una mainframe.
    • Distribución inherente: otra razón para la construcción de un sistema distribuido es que ciertas aplicaciones son distribuidas en forma inherente; es decir, algunas aplicaciones utilizan máquinas que están separadas a cierta distancia.
    • Confiabilidad: un sistema distribuido ofrece mayor confiabilidad: al distribuir la carga de trabajo en muchas máquinas, la falla de un circuito descompondrá a lo más una máquina y el resto seguirá intacto.
    • Crecimiento por incrementos: si se necesita añadir poder de cómputo a la compañía, con un sistema distribuido, podrían añadirse sólo más procesadores al sistema, lo que permite un desarrollo gradual conforme surjan las necesidades.
  • Ventajas de los sistemas distribuidos con respecto de las PC independientes

    • Datos compartidos: Un sistema distribuido permite que varios usuarios tengan acceso a una base de datos común.
    • Dispositivos compartidos: De igual manera, se pueden compartir periféricos entre diversos usuarios como puede ser una impresora.
    • Comunicación: un sistema distribuido facilita la comunicación entre computadoras aisladas con el e-mail, por ejemplo.
    • Flexibilidad: Un sistema distribuido difunde la carga de trabajo entre las máquinas disponibles en la forma más eficaz en cuanto a los costos.
  • Desventajas de los sistemas distribuidos

    • Software: No hay mucha experiencia en el diseño, implantación y uso del software distribuido, además existe poco software para los sistemas distribuidos en la actualidad.
    • Redes: Una vez que el sistema llega a depender de la red, la pérdida o saturación de ésta puede negar algunas de las ventajas que el sistema distribuido debía conseguir.
    • Seguridad: si las personas pueden tener acceso a los datos en todo el sistema, entonces también pueden tener acceso a datos con los que no tienen nada que ver.


    jueves, 19 de mayo de 2011

    Video de taller

    Links de mis videos en youtube

    Video de la clase
    Documentación de usuario:
    Este programa es sencillo de manejar  simplemente es un control de registros de las personas que quieren viajar a un destino turístico es un programa para el administrador de la agencia el cual quiera llevar  su registro le generara dos archivos de texto en el cual le mostrara  la lista de las personas y por medios de su numero de cuenta podrá buscar en los dos archivos la persona y a que lugar se dirigió.
    Para empezar a utilizar este programa debemos  ingresar los datos  del cliente  como lo son la nombre edad y el numero de cuenta el cual  de hay seguirá llenar los dato como al destino y el lugar de hospedaje como seria la playa y el hotel.
    El botón generar debe  generarte los archivos de texto donde podras localizar los registros   en el botón nuevo podras llenar otro registro  con nuevos datos  y el el botón fin saldrás de el programa.
    Sistemas distribuidos:
    Un sistema distribuido se define como: una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones distribuida; cada máquina posee sus componentes de hardware y software que el usuario percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El usuario accede a los recursos remotos (RPC) de la misma manera en que accede a recursos locales, o un grupo de computadores que usan un software para conseguir un objetivo en común.
    Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone otro componente debe de ser capaz de reemplazarlo, esto se denomina Tolerancia a Fallos.
    Interfaz gráfica:
    En esta pantalla me  generara un formulario donde  llenaremos los datos del cliente y nos generaran los archivos de texto donde me guardara  los destinos y los datos ingresados por el cliente



     


    Pruebas unitarias
    En programación, una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado. Luego, con las Pruebas de Integración, se podrá asegurar el correcto funcionamiento del sistema o subsistema en cuestión.
    La idea es escribir casos de prueba para cada función no trivial o método en el módulo de forma que cada caso sea independiente del resto.

    Eventos, excepciones y errores:
    Aquí un pedazo de código donde utilizamos  el try y el catch para  el manejo de excepciones y errores  donde si un archivo al cual estamos llamando no ha sido creada muestra un mensaje de  archivo no ha sido encontrado asi lo implementare con mi clase destino y clase cliente.
    public static Destino[] obterArray(){
                     Destino []lugar= new Destino[100];
        StringTokenizer tokenizer ;
        String linea, Playa, Hotel, archivo = "Playas.txt";
        int Ncuenta,contador =0;
        try{
          FileReader file = new FileReader(archivo);
          BufferedReader archivoEntrada = new BufferedReader(file);
          linea = archivoEntrada.readLine();
          while (linea != null){
                tokenizer = new StringTokenizer(linea);
                Playa = tokenizer.nextToken();
                Hotel=tokenizer.nextToken();
                try {
                     Ncuenta = Integer.parseInt(tokenizer.nextToken());
                             lugar[contador++] = new Destino(Playa,Hotel,Ncuenta);
           } catch(NumberFormatException formatoNumero){}
                             linea = archivoEntrada.readLine();                                       
    }
     archivoEntrada.close();
                     
    }catch (FileNotFoundException excepcion){
                                    System.out.print("el archivo "+archivo+" no fue encontrado");   }
    catch (IOException excepcion){ System.out.println(excepcion);             }
    return lugar;
    }
    }






    Taller  Programación Orientada a Objetos
    Patrones de diseño:
    Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
    Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.
    Los patrones de diseño que utilice en mi programa seria los sig:
    Memento (Recuerdo): Permite volver a estados anteriores del sistema:
     Al momento de limpiar las casillas y volver  a ingresar un  dato  en el registro.
    Singleton (Instancia única): Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.
    Donde accedemos de la clase  principal o donde tenemos el main a las demás clases que incorporan  el proyecto. 

    miércoles, 11 de mayo de 2011


    Que es un socket?
    Un socket (enchufe), es un método para la comunicación entre un programa del cliente y un programa del servidor en una red. Un socket se define como el punto final en una conexión. Los sockets se crean y se utilizan con un sistema de peticiones o de llamadas de función a veces llamados interfaz de programación de aplicación de sockets (API, application programming interface).
    Un socket es también una dirección de Internet, combinando una dirección IP (la dirección numérica única de cuatro partes que identifica a un ordenador particular en Internet) y un número de puerto (el número que identifica una aplicación de Internet particular, como FTP, Gopher, o WWW).
    Base de datos distribuida
    Una base de datos distribuida (BDD) es un conjunto de múltiples bases de datos lógicamente relacionadas las cuales se encuentran distribuidas en diferentes espacios lógicos (pej. un servidor corriendo 2 maquinas virtuales) e interconectados por una red de comunicaciones. Dichas BDD tienen la capacidad de realizar procesamiento autónomo, esto permite realizar operaciones locales o distribuidas. Un sistema de Bases de Datos Distribuida (SBDD) es un sistema en el cual múltiples sitios de bases de datos están ligados por un sistema de comunicaciones de tal forma que, un usuario en cualquier sitio puede acceder los datos en cualquier parte de la red exactamente como si estos fueran accedidos de forma local.
    Un sistema distribuido de bases de datos se almacenan en varias computadoras. Los principales factores que distinguen un SBDD de un sistema centralizado son los siguientes:
    • Hay múltiples computadores, llamados sitios o nodos.
    • Estos sitios deben de estar comunicados por medio de algún tipo de red de comunicaciones para transmitir datos y órdenes entre los sitios.

    La computación paralela es una técnica de programación en la que muchas instrucciones se ejecutan simultáneamente.1 Se basa en el principio de que los problemas grandes se pueden dividir en partes más pequeñas que pueden resolverse de forma concurrente ("en paralelo"). Existen varios tipos de computación paralela: paralelismo a nivel de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de tareas. Durante muchos años, la computación paralela se ha aplicado en la computación de altas prestaciones, pero el interés en ella ha aumentado en los últimos años debido a las restricciones físicas que impiden el escalado en frecuencia. La computación paralela se ha convertido en el paradigma dominante en la arquitectura de computadores, principalmente en los procesadores multinúcleo. Sin embargo, recientemente, el consumo de energía de los ordenadores paralelos se ha convertido en una preocupación.
    Los ordenadores paralelos se pueden clasificar según el nivel de paralelismo que admite su hardware: los ordenadores multinúcleo y multiproceso tienen varios elementos de procesamiento en una sola máquina, mientras que los clusters, los MPP y los grids emplean varios ordenadores para trabajar en la misma tarea.
    Los programas de ordenador paralelos son más difíciles de escribir que los secuenciales porque la concurrencia introduce nuevos tipos de errores de software, siendo las condiciones de carrera los más comunes. La comunicación y la sincronización entre las diferentes subtareas son típicamente las grandes barreras para conseguir un buen rendimiento de los programas paralelos. El incremento de velocidad que consigue un programa como resultado de la paralelización viene dado por la ley de Amdahl.

    jueves, 17 de marzo de 2011

    PATRONES DE DISEÑO

    Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

    Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.


    Patrones creacionales 

    Prototype (Prototipo): Crea nuevos objetos clonándolos de una instancia ya existente.

    Patrones estructurales 

    Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.

    Patrones estructurales

    Decorator (Envoltorio): Añade funcionalidad a una clase dinámicamente.


    Los patrones de diseño nos sirven para facilitar el trabajo en la programacion orientada a objetos es una forma mas facil de programar