domingo, 15 de octubre de 2017

MÉTODO BÚSQUEDA

MÉTODO BÚSQUEDA
BÚSQUEDA SECUENCIAL
Consiste en ingresar un dato a buscar, por lo cual el programa examina cada uno de los elementos del vector.es decir, el elemento a buscar es comparado con cada uno de los elementos que contiene el Array. Si el Array tiene 100 elementos y el dato a Buscar esta en la
posición 100, entonces se realizara 100 comparaciones puesto que comparará hasta llegar al elemento buscado.

Ejemplo: Búsqueda Secuencial
BÚSQUEDA BINARIA
Para poder ejecutar el Método de Búsqueda Binaria, se debe de contar con un Array ordenado. El procedimiento que se realiza es el siguiente:
•EL Programa internamente selecciona el elemento central del Array.
•Si el elemento a buscar es el dato central el proceso termina. •Si el elemento a buscar no coincide con el elemento central, continua la búsqueda:
•Se subdivide en dos partes al Array.
•Si el elemento a buscar es menor que el dato central, entonces selecciona la mitad de la parte izquierda.
•La parte seleccionada se subdivide nuevamente y se repite todo el proceso.
•El proceso termina cuando el dato es encontrado; teniendo en cuenta que el dato a buscar no puede encontrarse en el Array.
Ejemplo: Búsqueda Binaria


Programación en Java "Algoritmos y programación orientada a objetos". Luis Joyanes Aguilar Pag 443

Interfaz Gráfica GUI

Interfaz Gráfica GUI

Llamamos Interfaz Gráfica GUI (Graphical User Interface) al conjunto de componentes gráficos que posibilitan la interacción entre el usuario y la aplicación. Es decir ventnas, botones, combos, listas, cajas de diálogo, campos de texto, etc.
Primero tenemos que diseñar la aplicación,programarla y por último los eventos que se generan a medida que el usuario interactua con la Interfaz.
Los componentes son objetos de las clases que heredan de la clase base componente como Button, List, TextField, TextArea, Label, etc.
En una GUI los componentes son contenidos en Contenedores o containers. Un Containes es un objeto cuya clase hereda de Container(clase que a su vez es subclase de Component) y tiene la responsabilidad de contener Componentes.
Generalmente una GUI se monta sobre un Frame. Esté sera el Container principal que contendrá a los componentes de la Interfaz Gráfica, un Container podría contener a otros containers.
Distribución de componentes (layouts)
Los containers contienen componentes y estos son acomodados dentro del espacio visual del container respetanto unaa cierta distribución que llamaremos layout.
AWT y Swing
Java provee dos API's con las que podemos trabajar para desarrollar GUIs, la más básica es AWT (Abstrct Window Toolkit). Las más desarrolladas se hacen con Swing, las cuales son más identificables ya que todas comienzan con "J", por ejemplo: JButton, JTextField, JTextArea, JPanel y JFrame son clases de Swing.
Todo el manejo de eventos y layouts es exactamente el mismo para AWT y Swing.
Distribuciones Relativas
Los layouts determinan el criterio con el que se vaan a distribuir los componentes dentro del container
FlowLayout : Distribuye los componentes uno al lado del otro en la parte superior del container. Por defecto provee una alineación centrada, pero también puede alinear a la izquierda o derecha.
BorderLayout: Divide el espacio del container en 5 regiones: NORTH, SOUTH, EAST, WEST y CENTER, admite un único componente por región
GridLayout: Divide el espacio del container en una grilla de n filas por m columnas, en donde las celdas son de igual tamaño
GridBagLayout: Divide el espacio del container en una grilla donde cada componente puede ocupar varias filas y columnas. Además permite distribuir el espacio interno de cada celda.
FlowLayout
Empezaremos con un ejercicio:
 La clase Frame nos presenta la típica ventana de Windows, en el código podemos ver que la clase Ventana1 extiende a Frame por lo tanto Ventana1 es un Frame y hereda de ésta clase los métodos setLayoutaddsetSize y setVisible
En el constructor definimos cuál sera el layout que queremos utilizar en la ventana. en este caso utilizamos un FlowLayout, cuya política para distribuir los componentes es centrarlos en la parte superior del container, pero podemos cambiar la alineación de los mismos al momento de instanciarlos
Veamos como podemos alinearlos a la izquierda:

BorderLayout 
Este layout divide el espacio del container en cinco renglones o bordes y una region central. Admite sólo un componente por región, por lo tanto un container con esta distribución sólo podrá contener a lo sumo cinco componentes.


GridLayout
Divide el espacio del container en una grilla de n filas por m columnasdonde todas las celdas tienenexactamente la misma dimensión

Herramientas básicas para desarrollar GUI en Java

El día de hoy hablaremos sobre la programación conducida por eventos
Los programas tradicionales (basados en texto) tienen dos características primordiales. La primera es que el software controla el flujo de la ejecución, y la segunda es que el programa controla la secuencia de los datos e instrucciones que entran.
En escenarios para usuarios experimentados, este tipo de programas son útiles en el sentido de que le dan más opciones al usuario. Desafortunadamente, la mayoría de los usuarios se sienten intimidados por los programas basados en texto, dificultando así la operación de los programas y el cumplimiento de las tareas que deben realizar. Es por esto que existen los programas con GUI.
El software desarrollado con con GUI tiene una característica importante: es “event-driven”, es decir, está conducido por eventos.
En otras palabras:
  • La secuencia de las entradas que el usuario realice controlarán el flujo de la ejecución del software
  • El sistema, teniendo ya las entradas, correrá código del usuario.
La generación de los eventos es clave en este tipo de sistemas, y es algo que debe estar controlado para evitar problemas durante la ejecución del software, sea una aplicación o un sitio web. La primer pregunta que nos debemos hacer es ¿Como se pueden generar dichos eventos?
  1. Acciones como presionar un botón, mover el mouse a través de la pantalla o hasta dictar un comando (Como en la búsqueda de Google). son reconocidas e identificadas por los sistemas operativos (OS) o la JVM.
  2. Por cada acción que el usuario realice, el sistema operativo, junto con la JVM, determinarán cuál de los programas que se están ejecutando recibirán la entrada del usuario.
  3. Las señales que la aplicaciones reciben del SO/JVM como resultado de una acción es lo que nosotros llamamos un evento.
Ahora bien, una vez que tenemos esos eventos registrados ¿Como los manejamos?
  • Una aplicación responde a las entradas del usuario ejecutando código adecuado para cada tipo particular de eventos.
  • No todos los eventos necesitan ser tenidos en cuenta por  una aplicación. Por ejemplo: Una aplicación para crear dibujos puede estar interesada sólo en movimientos del mouse.
  • Como diseñador de una aplicación administrada por eventos,  deberá escribir clases/métodos para manejar los eventos relevantes.
He aquí la importancia de la Java GUI ¿Por qué? Sencillo: Java provee por de facto dos librerías para diseñar GUIs:
  • Java AWT (Abstract Window Toolkit)
  • Java Foundation Classes (JFC/Swing), a partir de Java 2.0
Hablemos de Swing.
  • Esta librería es implementada sin usar código nativo (100% Java),  con lo cual la GUI se verá de la misma forma en distintas plataformas.
  • Está basada en la arquitectura MVC.
  • Ofrece una amplia variedad de colores y diseños, lo que permite diseñar GUI’s muy diversas. Con esto, el diseñador puede crear GUI’s únicas, con diseños atractivos.
  • Los componentes de Swing continuarán siendo mejorados en el futuro.
AWT y Swing: ¿Cuáles son sus caracteristicas básicas?
  • Los componentes de Swing tienen nombres que  comienzan con J.:
    Ejemplo de ello es Button en AWT, y JButton en Swing
  • Los componentes de AWT están en el paquete java.awt, mientras que los de Swing los encontramos en javax.swing.

     
Aplicaciones basadas en GUI ¿Qué debemos saber para crear una?
El desarrollo de una aplicación que esté basada en GUI requiere la comprensión de los siguientes temas:
  • La estructura que sostiene la jerarquía de herencia, la cual define el comportamiento y atributos de los componentes en la GUI de la aplicación.
  • La estructura que contiene la jerarquía de contenedores, la define cómo se disponen todos los componentes en la GUI de la aplicación.
  • Manejo de eventos.
¿Cuáles son los componentes de Swing?
  • La clase Component (y sus subclases) proveen soporte  para manejo de eventos, cambio del tamaño de un   componente, control de color y fuentes, pintado.
  • Un componente siempre es un objeto de una subclase concreta.
Se distinguen dos clases de componentes:
  • Componentes de control de la GUI: la interacción de la GUI con el usuario  se realiza a través de ellos.
  • Contenedores: contienen otros componentes (u otros      contenedores).
Contenedores
  • Anidamiento de componentes (Jerarquía de contenedores en contraste con la Jerarquía de herencia). Cada  programa Swing contiene al menos una.
  • Swing provee 4 contenedores de alto nivel (ventana base de la GUI):
    JFRAME, JAPPLET, JDIALOG Y JWINDOW.
  • La jerarquía está compuesta de diversascapas.
Cada contenedor de alto nivel contiene un contenedor  intermedio conocido como “content pane ”. En la gran mayoría de los programas no es necesario conocer qué hay entre el   contenedor de alto nivel y el content pane.
Jerarquía de contenedores
La apariencia que tendrá una GUI está determinada por los siguientes elementos:
  • La jerarquía de contenedores
  • El Layout Manager que conforma a cada contenedor
  • Las propiedades que integran cada uno de los componentes individuales
Todos estos ítems trabajan en conjunto para determinar  el efecto visual final.
Veamos un ejemplo:
Content Panes
  • Usualmente es un JPanel.
  • En la mayoría de las aplicaciones de Java, Swing contiene casi todo, excepto la barra de menú.
  • Debe ser creado explícitamente.
Veamos un ejemplo:

Componentes de una GUI
  1. Crear una instancia del objeto
  2. Configurar los siguientes elementos
    * Propiedades

    * Métodos:
  3. Añadir
  4. Manejar eventos
Características especiales
Los componentes de Swing ofrecen ciertas características especiales que ayudan al desarrollo del programa:
Tool tipCuando el cursor del mouse se posiciona sobre un componente se muestra una línea de texto.
MnemonicSe ejecuta una tarea ó acción como consecuencia del pulsado de una combinación de teclas.
DisablePermite que un componente sea explícitamente habilitado o deshabilitado.
BorderRodea un componente con un borde.
  • Tool tips
  • Mnemonic
  • Disable

     
Veamos un ejemplo:
  • Bordes

    * Empty                      * Titled * Line                         * Matte
    * Etched                    * Compound
    * Bevel
Uso de un componente GUI
  1. Crearlo
  2. Configurarlo
  3. Añadir hijo (si es contenedor)
  4. Añadir al padre (si no es JFrame)
  5. Manejar los eventos
Window Layout
  • Cada contenedor administrala disposición de sus  componentes.
  • La única tarea del desarrollador es añadir los componentes, el contenedor se encarga de la disposición de los mismos.
  • El contenedor utiliza un Layout Manager para manejar la disposición de los componentes en el mismo.
  • Para darle más poder al creador, existen diferentes Layout Managers.
  • El layout a usar puede ser determinado especificando Layout  Managers para los contenedores.
Layout Managers
  • Existen muchos Layout Managers predefinidos en:
    * FlowLayout      (en java.awt)
    * BorderLayout   (en java.awt)
    * CardLayout      (en java.awt)
    * GridLayout       (en java.awt)
    * GridBagLayout (en java.awt)
    * BoxLayout       (en javax.swing)
    * OverlayLayout  (en javax.swing)
Layout Managers (LM)
  • Cada contenedor tiene un Layout Manager por defecto, aunque se puede establecer otro LM para el mismo, de forma explícita. Para anular el LM por defecto se usa el método setLayout (para  contenedores de alto nivel se usa getContentPane().setLayout().
  • El Layout Manager intenta ajustar la disposición de los   componentes en el contenedor cuando se añade un nuevo  componente o cuando el contenedor cambia de tamaño.
  • Puede crear su propio LM.
Filechooser
La clase JFileChooser proporciona un UI para elegir un archivo de una lista. Un selector de archivos es un componente que podemos situar en cualquier lugar del GUI de nuestro programa.
Los selectores de archivos se utilizan comúnmente para dos propósitos:
  • Para presentar una lista de ficheros que pueden ser abiertos por la aplicación.
  • Para permitir que el usuario seleccione o introduzca el nombre de un fichero a grabar.
Existen tres métodos los cuales retornan lo siguiente:
  1. JFileChooser.CANCEL_OPTION, si el usuario hace clic en Cancelar.
  2. JFileChooser.APPROVE_OPTION, si el usuario pulsa en OK / Abrir / Guardar
  3. JFileChooser.ERROR_OPTION, si el usuario cierra el cuadro de diálogo
Ejemplo
Filtrar la lista de ficheros
Por defecto, un selector de ficheros muestra todos los ficheros y directorios que se han detectado. Un programa puede aplicar uno o varios filtros de ficheros a un selector de ficheros para que el selector sólo muestre algunos de los existentes. Una vez hecho esto, el selector llama al método accept del filtro con cada fichero para determinar si debería ser mostrado. El trabajo de un filtro de ficheros consiste en aceptar o rechazar un fichero basándose en algún criterio como el tamaño, el tipo, su propietario, o cualquier otra característica elegida.
JFileChooser soporta tres clases de filtrado. Los filtros se eligen en el orden aquí listado. Por eso un filtro del segundo tipo solo puede filtrar los ficheros aceptados por el primero, etc.
  • Filtrado interno
    El filtrado se configura a través de llamadas a métodos específicos de un selector de ficheros. Actualmente el único filtro interno disponible es para los ficheros ocultos. Se llama a setFileHidingEnabled(true) para desactivar la selección de ficheros ocultos (como aquellos que empiezan con ‘.’ en sistemas UNIX).
  • Filtrado controlado por la aplicaciónLa aplicación determina los ficheros a mostrar. Se crea una subclase de FileFilter, se ejemplariza, y se utiliza el ejemplar como un argumento para setFileFilter. El selector de fiheros sólo mostrará los ficheros que acepte el filtro.
  • Filtrado seleccionable por el usuario
    El GUI selector de ficheros proporciona una lista de filtros de la que el usuario puede elegir uno. Cuando el usuario elige un filtro, el selector de ficheros muestra sólo aquellos ficheros que acepte el filtro.

Creación de un nodo de entrada en Java

Un nodo de entrada se utiliza para recibir un mensaje en un flujo de mensajes, normalmente de un origen no soportado por los nodos de entr...