Buscar en mi blog

lunes, 15 de noviembre de 2010

Hilo

Un Hilo o  Thread  es un flujo de ejecución dentro de un proceso (un programa ejecutándose dentro de su propio espacio de direcciones). Java es un sistema multiproceso, esto significa que soporta varios procesos corriendo a la vez dentro de sus propios espacios de direcciones. Estamos más familiarizados con el término multitarea, el cual describe un escenario muy similar al multiproceso.



Ciclo de vida de un hilo


Un thread puede presentar cuatro estados

  • Nuevo (New): El thread ha sido creado, pero no se ha ejecutado todavía el método start(), por lo que todavía no se ha lanzado. 
  • Ejecutable (Runnable): El thread se está ejecutándose, pero esto no quiere decir que se esté ejecutándose en todo momento, pues ese thread tiene que repartirse el tiempo de CPU con los demás threads que sean tambien Runnable. 
  • Muerto (Dead): Cuando el thread ya acabó con su función, es decir el método run() ha finalizado, o cuando el programa principal termina, u otro caso, como un error que provoque el paro total del thread.
  • Bloqueado (Blocked o Not Runnable): El thread podría estar ejecutándose, pero hay algo que se lo impide, como por ejemplo un operación de E/S. Mientras un thread esté en este estado, no se le asigna tiempo de CPU. También cuando se llama a los métodos sleep(long) y wait([long]).


Clase que permite crear hilos

La forma más directa para hacer un programa multihilo es extender la clase Thread, y redefinir el método run(). Este método es invocado cuando se inicia el hilo (mediante una llamada al método start() de la clase Thread). El hilo se inicia con la llamada al método run() y termina cuando termina éste. 
public class ThreadEjemplo extends Thread 
{


}


Interface que permite crear hilos

La interface Runnable proporciona un método alternativo a la utilización de la clase Thread, para los casos en los que no es posible hacer que la clase definida extienda la clase Thread. Esto ocurre cuando dicha clase, que se desea ejecutar en un hilo independiente deba extender alguna otra clase. Dado que no existe herencia múltiple, la citada clase no puede extender a la vez la clase Thread y otra más. En este caso, la clase debe implantar la interface Runnable, variando ligeramente la forma en que se crean e inician los nuevos hilos.

miércoles, 25 de agosto de 2010

Numeros Pares

Problema: Crear un POO que solicite 10 número y muestre la lista de los números pares, ordenados ascendentemente.

Diagrama de casos de uso:


Diagrama de clases:






Implementación:


Paquete Presentación
Clase Formulario.java:




package Presentacion;

import Logica.Pares;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Formulario
{
    public static void main (String arg []) throws IOException
    {
        int vector[]=new int[10];
        int i;
        System.out.println("Digite los valores: ");
        for(i=0;i<=9;i++)
        {
            vector[i]=leer();
        }
        Pares objeto=new Pares();
        System.out.println("Los numeros pares son: "+ objeto.numeros_pares(vector));
    }
    public static int leer() throws IOException
    {
        InputStreamReader entrada=new InputStreamReader (System.in);
        BufferedReader lectura=new BufferedReader (entrada);
        String numero=lectura.readLine();
        return(Integer.parseInt(numero));
    }
}








Paquete Lógica.
Clase Pares.java:


package Logica;

public class Pares
{
    private int dato;

    public boolean verifica_par(int dato)
    {
        if(dato%2==0)
        {
            return (true);
        }
        else
        {
            return(false);
        }
    }
    public String numeros_pares(int vector[])
    {
        String cadena = "";
        int lista[]=new int[10];
        int listaordenada[]=new int[10];
        int j=0;
        int temp;
        for(int i=0;i<=9;i++)
        {
            if(verifica_par(vector[i]))
            {
                lista[j]=vector[i];
                j++;
            }
        }

        for(int l=8;l>0;l--)
        {
            for(int lo=0;lo<=l;lo++)
            {
                if(lista[lo]>lista[lo+1])
                {
                    temp=lista[lo+1];
                    lista[lo+1]=lista[lo];
                    lista[lo]=temp;
                }
            }
        }

        for(int k=0;k<=9;k++)
        {
           cadena+=" "+lista[k];
        }
        return(cadena);
    }

    public int getDato() {
        return dato;
    }

    public void setDato(int dato) {
        this.dato = dato;
    }
}



NOTA: Funcionamiento OK.

miércoles, 18 de agosto de 2010

Applets

Applets:


Los applets son programas Java que representando una estructura particular le permitirán ser insertados en un documento HTML y ejecutados por la JVM del navegador. Los applets están sometidos a ciertas restricciones, como a la imposibilidad de acceder al disco duro del usuario, de leer informaciones de su sistema, de comunicarse con otro servidor que no sea desde el que se han cargado los applets (el servidor que contiene la página web que contiene los applets), o de mostrar ventanas , salvo si estas muestran un mensaje de advertencia.
El principio de estas limitaciones es el de impedir a los programadores malintencionados de realizar desperfectos el el disco duro del usuario o de leer información confidencial.

Los applets son, sin embargo, muy útiles para mostrar informaciones mediante una forma imposible de obtener a través del lenguaje HTML, o para comunicarse con el servidor del que provienen, por ejemplo para reenviar los datos de un formulario. Los applets pueden servir, de igual manera, para tratar de forma local informaciones delicadas por el usuario. Por ejemplo, en el caso de una compra a distancia, si el usuario debe entrar el número de su cuenta bancaria, un applet podrá verificar si el número está escrito en el formato correcto.  [Sancy, Nicolas. Su primer programa en Java. P 12-13]

Estructura de un Applet:


Para que un applet funcione, debe ser referenciado en un documento HTML cargado en el navegador. Cuando el navegador examina el contenido del documento HTML, se encuentra con una etiqueta a la siguiente (ejemplo):

applet code="PrimerApplet.class" height="150" width="200

Entonces el navegador carga su maquina virtual Java o JVM, y le pasa el valor del parámetro code, es decir, el nombre del archivo "PrimerApplet.class". Simultaneamente, el navegador reserva un espacio de la longitud y de la altura indicados por el parámetro width y height para la muestra del applet.

Una vez cargada, la JVM carga el archivo indicado. El contenido de este archivo, como la mayor parte de los otros elementos manipulados por Java, es un objeto. Los objetos Java contienen, ellos mismos, otros elementos llamados miembros. Los miembros pueden ser datos, que pueden ser, ellos mismos, otros objetos o grupos de objetos o métodos, que están constituidos por código ejecutable. [Sancy, Nicolas. Su primer programa en Java. P 35]

Ejecución:


Para desplegar un applet, se necesita un archivo HTML que le haga referencia, por ejemplo:

[Osorio Rivera, Fray León. Introducción a la programación en Java. P 59]

miércoles, 11 de agosto de 2010

Clase 10 Agosto 2010 - Conceptos Iniciales y Entorno de Netbeans



Principios de la programación orientada a objetos.
Modularidad: Tratar de dividir el programa en pequeñas módulos, lo que permite la facilidad de uso del código.

  • Cuando se habla de modularidad se puede hablar de bajo acoplamiento y alta cohesión.
  • Bajo acoplamiento: quiere decir que los módulos tienen la máxima independencia posible.
  • Alta cohesión: al agrupar los módulos forman una sola unidad así sean independientes (bajo acoplamiento).
Ocultamiento de la información: para esto, se usan los ámbitos de programación (público, privado y/o protegido) que son los que permiten hacer dicho ocultamiento.

Encapsular la información: es permitir agrupar en una unidad los diferentes elementos que le dan la solución a un problema. Hace referencia a que atributos y métodos estén dentro de una “capsula”.

Herencia: La reutilización de código es una de las finalidades de la herencia. Un objeto puede heredar métodos, atributos, características de la clase.

Principio abierto-cerrado: hace referencia a que uno crea programas abiertos para la extensión (adición a lo ya hecho) y cerrados para el cambio (edición de lo ya hecho), quiere decir que, por ejemplo, un programa puede tener diferentes versiones, pero las primeras versiones no son modificables.

Clase: Es una caracterización abstracta de un conjunto de objetos.

Objeto: existen objetos emisores y objetos receptores. Cuando se habla de objetos emisores y receptores se habla de objetos agentes.

Paso de mensajes: son órdenes que se dan entre objetos.

UML: lenguaje unificado de modelado.
                Privado: (  - )
                Público: ( + )
                Protegido: ( # )

Nombre de la clase
- Atributos
+ Métodos
Arquitectura multinivel: 

Capas: permiten dividir la aplicación para que tenga una estructura lógica. Existen:

  • Capa de presentación: captura de datos y validaciones.
  • Capa lógica: manipulación de datos y manipulaciones.
  • Capa física: acceso de datos almacenados de forma persistente.
Ejemplo No. 1:

Problema: Es necesario construir una aplicación que permita identificar a los niños de primero de primaria cuándo hay un número par.

Análisis (Diagrama de UML):
1. Identificar actores.




Calculadora
- dato
+ verificar_Par() string

ü  Los métodos get...() {Mostrar} y set…(){Leer} no van dentro del diagrama.

Capa de presentación:
Formulario
Calculadora obj
Main ()
static leer () int
Para la implementación en NETBEANS:

1. Abrir Netbeans
2. Ir a Archivo, Proyecto Nuevo.


3. Luego, en la ventana saliente, escoger categoría: Java, Proyectos: Aplicación Java, click en siguiente.



4. En la siguiente ventana, dar un nombre al proyecto y quitar la selección "Crear clase principal", hacer click en Terminar.

5. Luego de que sea creado el árbol en la parte izquierda, crear dos Paquetes Java (uno por uno) haciendo click derecho en el nombre del proyecto, nuevo y selecciona Paquete Java.


6. Dar un nombre al paquete (en el ejemplo uno se llamará Logica y el otro Presentancion)


7. Después, dentro de Presentación, se crea una clase haciendo click derecho en el paquete Presentación, nuevo y Clase Java, lo mismo dentro de  Logica.




8. Se nombran cada una de las clases (una por una), para el ejemplo, la de Logica se llama Calculadora (se crea Calculadora.java) y la de Presentacion se llama Formulario (se crea Formulario.java)




9. Después se inicia con la escritura del código. Esta se empieza a realizar dentro de los corchetes de la estructura "public class *", donde (*) se refiere al nombre de la clase. (El código insertado es el que está sombreado)




10. Hay que caer cuenta que las etiquetas Set()... y Get()... Netbeans las tiene automáticamente, solo hay que insertarlas. Para ello, se hace click derecho en la posición donde se desee insertar y a contuación se selecciona "Insertar  código", finalmente, "Getter y Setter..."




11. Después, en el recuadro saliente, marcar la casilla "dato : int", luego Generar.





Finalmente, estos son los códigos de cada una de las clases:

Código de Calculadora.java:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Logica;

/**
 *
 * @author microsoft
 */
public class Calculadora
{
    private int dato;
    public String verifica_Par() //no se  pueden dejar espacios entre el método.
    {
        if ((dato%2)==0)
            return("Numero Par");
        else
            return("Numero impar");
    }

    public int getDato() //Retorna
    {
        return dato;
    }

    public void setDato(int dato) //Recibe
    {
        this.dato = dato;
}



Código Formulario.java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Presentacion;

/**
 *
 * @author microsoft
 */
import Logica.Calculadora;
import java.io.*; //Llamado a librerias.
 //Importar Calculadora.
public class Formulario
{
    public static void main (String arg []) throws IOException
    {
        Calculadora obj=new Calculadora (); //Separar memoria para generar el objeto Calculadora
        int dato=leer();
        obj.setDato(dato);
        System.out.println(obj.verifica_Par());
        //Permite mostrar cadenas de caracteres en consola
    }


public static int leer()throws IOException
{
    InputStreamReader entrada=new InputStreamReader (System.in);
    BufferedReader lectura=new BufferedReader (entrada);
    String cadena=lectura.readLine();
    return(Integer.parseInt(cadena));
}
}







lunes, 9 de agosto de 2010

Conceptos Iniciales Programación Orientada a Objetos





  • Objeto: Es un tipo abstracto de datos al que se añaden importantes innovaciones en compartición de código y reutilización. [ Joyanes, Luis. Programación Orientada a Objetos. P 14 ]
  • Clase: Es una caracterización abstracta de un conjunto de objetos, todos los objetos similares pertenecen a una clase determinada.Es el bloque de construcción fundamental de un lenguaje de programación orientada a objetos . [ Joyanes, Luis. Programación Orientada a Objetos. P 17 ]
  • Herencia: Es un de los mecanismos por los cuales se  pueden comunicar los objetos a través de mensajes , y la herencia es uno de estos, este mecanismo permite el paso de diferentes tipos de datos, para compartir el mismo código, permitiendo una reducción en el tamaño del código  y un incremento en la funcionalidad. [ Joyanes, Luis. Programación Orientada a Objetos. P 14 ]
  • Paso de mensajes: esta es la idea fundamental en cuanto a la comunicación de los objetos, y se hace mediante dos mecanismos tales como la herencia y el polimorfismo. [ Joyanes, Luis. Programación Orientada a Objetos. P 14 ]
  • Atributo: Es la característica que describe a los objetos. [ Joyanes, Luis. Programación Orientada a Objetos. P 1 ]
  • Método: Es el procedimiento y la función que reside en el objeto y determina como actúa este cuando recibe un mensaje. [ Joyanes, Luis. Programación Orientada a Objetos. P 73 ]
  • Polimorfismo: Es una propiedad que permite que un objeto indicarle que ejecute, literalmente, que la entidad tome muchas formas, es decir, el polimorfismo permite que un mismo mensaje pueda actuar sobre objetos diferentes y comportarse de un modo distinto. [ Joyanes, Luis. Programación Orientada a Objetos. P 19 ]
  • UML: (Lenguaje Unificado de Modelado) es un lenguaje para especificar, visualizar, construir y documentar artefactos del proceso de creación un programa de software. [ Si Alhir, Sinan. Guide to Applying de UML. P 2 ]
  • JAVA: Tipos de datos: permiten dimensionar un dato en memoria. Hay dos tipos de dato en Java: simples y compuestos. Los simples son los numéricos, los booleanos y los caracteres. Dichos tipos son manejados directamente por el compilador, y no necesitan de bibliotecas Java específicas. Los compuestos son las tablas, las cadenas de caracteres y los nombres de clases o interfaces. Su uso puede necesitar clases específicas de la biblioteca de java. [ ENI, Ediciones. JAVA 2 Manual Práctico. P 40 ]
  • Programación orientada a objetos: Es una extensión natural de la actual tecnología de programación, y representa un enfoque nuevo y distinto al tradicional. Al igual que cualquier otro programa, el diseño de un programa orientado a objetos es único en el sentido de que se organiza en función de los objetos que manipulará. De hecho, probablemente la parte más difícil de la creación de software orientado a objetos es identificar las clases necesarias y el modo en que interactúan entre sí.   [ Joyanes, Luis. Programación Orientada a Objetos. P Prólogo XXI ]
  • Paradigma de programación: es una colección de patrones conceptuales que moldean la forma de razonar sobre problemas, de formular soluciones y de estructurar programas. Los paradigmas de programación son:
    • Programación imperativa.
    • Programación funcional.
    • Programación lógica.
    • Programación orientada a objetos. [ Rodríguez Sala, Jesús. Introducción a la programación. P 4 ]
  • Cohesión: se puede definir como la medida de la fuerza o relación funcional de los elementos de un módulo, entendiendo por elementos a la sentencia o grupo de sentencias que lo componen, a las definiciones de datos o a las llamadas a otros módulos. Los niveles de cohesión con un comportamiento aceptable (de mejor a peor) son los siguientes:
    • Cohesión funcional.
    • Cohesión secuencial.
    • Cohesión comunicacional.
    • Cohesión lógica.
    • Cohesión coincidental. [ Rodríguez Sala, Jesús. Introducción a la programación. P 44-45 ]
  • Acoplamiento: se puede definir como el grado de independencia entre los distintos módulos y depende del número de parámetros que se intercambian para su comunicación. el objetivo que se debe conseguir es minimizar el acoplamiento, es decir, hacer que los módulos sean tan independientes como sea posible, aunque esto no siempre se consiga. [ Rodríguez Sala, Jesús. Introducción a la programación. P 43 ]
  • Encapsulamiento: es la propiedad que permite asegurar que el contenido de la información de un objeto está oculta al mundo exterior: el objeto A no conoce lo que hace el objeto B, y viceversa. El encapsulamiento (también se conoce como ocultación de la información), en esencia, es el proceso de ocultar todos los secretos de un objeto que no contribuyen a sus características esenciales. [ Joyanes, Luis. Programación Orientada a Objetos. P 18 ]
  • Lenguaje de programación: es un lenguaje artificial que se usa para expresar programas de ordenador. [ Rodríguez Sala, Jesús. Introducción a la programación. P 44 ]
  • Archivo fuente: Es un archivo de texto que se escribe usando un lenguaje de programación. Se conoce a este archivo fuente como CÓDIGO FUENTE. [ Espejo González, Enrique. Domina C. Iniciación. P 13 ]

jueves, 5 de agosto de 2010

Mi primer blog

Estoy en este momento estrenando mi blog, un poco molesto por la verificación que hace gmail de mi número de celular, tengo entendido que ellos recibieron una demanda por requerir información personal, pero bueno.