Mostrando entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

miércoles, 8 de abril de 2009

J2ME: Java 2 Micro Edition

En el mundo de la programación existen una gran variedad de lenguajes que nos permiten desarrollar aplicaciones para los ordenadores y dispositivos. En este post veremos una descripción de J2ME.

J2ME es el acrónimo de Java 2 Micro Edition. J2ME es la versión de Java orientada a los dispositivos móviles. J2ME es una versión reducida de JAVA, fue diseñado por Sun en el año 1999 para dispositivos que cuentan con una potencia de cálculo baja e interfaces de usuario pobres. Estos utilizan una máquina virtual más pequeña desarrollada por Sun denominada "KVM" proviene de Kilobyte (haciendo referencia a la baja ocupación de memoria, entre 40Kb y 80Kb).

Los dispositivos móviles cuentan con dos diferentes tipos de configuraciones:
  • Connected Limited Device Configuration (CLDC).
  • Connected Device Configuration (CDC).

Para el desarrollo de aplicaciones para moviles se crearán MIDlet, el cual es un programa capaz de correr en un dispositivo móvil. En J2ME se no existen los tipos float y double.

Quizas te preguntaras que tipo de aplicaciones podemos hacer ? Pues con J2ME se pueden desarrollar todo tipo de aplicaciones, podemos crear nuestras propias aplicaciones para el envio de sms, juegos, y muchisimo mas.

IDE's de desarrollo ? Te recomiendo utilices Netbeans consume recursos pero es una buena opcion, tambien puedes visitar el sitio de Sun que tambien posee un IDE.

Mas adelante, veremos un ejemplo de una aplicacion CDLC acrónimo de "Configuración de dispositivos limitados con conexión", enfocada a dispositivos dotados de conexión y con restricciones de procesamiento y memoria, limitaciones en cuanto a capacidad gráfica. Un ejemplo de éstos dispositivos son: teléfonos móviles, buscapersonas (pagers), PDAs, organizadores personales, etc.

Algunas de éstas restricciones vienen dadas por el uso de la KVM, necesaria al trabajar con la CLDC debido a su pequeño tamaño.

Los CDC acrónimo de Configuración de dispositivos con conexión, están enfocados a dispositivos con más recursos. La CDC está orientada a dispositivos con cierta capacidad computacional y de
memoria. Por ejemplo, decodificadores de televisión digital, televisores con internet, algunos electrodomésticos y sistemas de navegación en automóviles. CDC usa una Máquina Virtual Java similar en sus características a una de J2SE, pero con limitaciones en el apartado gráfico y de memoria del dispositivo. Ésta Máquina Virtual es la que hemos visto como CVM (Compact Virtual Machine).

Aquí veremos un pequeño ejemplo de una aplicación J2ME:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HolaMundo extends MIDlet{

private Display pantalla;
private Form formulario = null;

public HolaMundo(){
/* Éste es el constructor de clase. Aquí debemos
inicializar nuestras variables.
*/

pantalla = Display.getDisplay(this);
formulario = new Form(“Hola Mundo”);
}

public void startApp(){
/* Aquí incluiremos el código que queremos que el
MIDlet ejecute cuándo se active.
*/
pantalla.setCurrent(formulario);
}

public void pauseApp(){
/* Aquí incluiremos el código que queremos que el
MIDlet ejecute cuándo entre en el estado de pausa
(Opcional)
*/
}

public void destroyApp(boolean unconditional){
/* Aquí incluiremos el código que queremos que el
MIDlet ejecute cuándo sea destruido. Normalmente
aquí se liberaran los recursos ocupados por el
MIDlet como memoria, etc. (Opcional)
*/
pantalla = null;
formulario = null;
notifyDestroyed();
}
}

Al realizar tu aplicacion puedes compilarla, dentro de tu proyecto se creara una carpeta llamada "dist", donde se encontraran los archivos *.jar y *.jad que debes subir a tu movil.

Que lo disfruten !!!

lunes, 31 de marzo de 2008

Java: Estructura de Datos. Grafos.

Desarrollar la Clase Grafo con representación de matriz de adyacencia.

Un grafo consiste de un conjunto de nodos o vértices y un conjunto de ejes o aristas. Usualmente se lo denota = (). Las aristas son pares de vértices () con 2. Si () 2, se dice que y están conectados o son adyacentes. Un trazado o dibujo de un grafo = () usando segmentos de 1 recta para las aristas es una asignación de una posición en el plano a cada vértice en V. En las versiones más simples, los vértices son dibujados como puntos y las aristas como segmentos entre vértices. De aquí en más supondremos que el trazado usa segmentos para las aristas, excepto cuando se aclare lo contrario. También se supondrá que el grafo es conexo, ya que si el grafo a trazar no lo es, se puede trazar cada componente conexa por separado.

Los grafos sólo contienen información relacional entre los vértices, así que en principio no tienen ninguna forma \natural" de ser dibujados. Sin embargo, de las infinitas formas de trazar un grafo en el plano, algunas son claramente peores que otras, siempre teniendo en cuenta que el objetivo es visualizar el grafo.

package grafos;

/**
* Camino Minimo
*
* Calcula el camino minimo
*
* Clase Grafo
*
* @author Damian Adriel Perez Valdes
*
* Un grafo se compone de un conjunto de nodos que están enlazados por
* un conjunto de arcos.
* Cada arco tiene asociado un peso que puede verse como el coste de ir
* del nodo "origen" al nodo "destino"
* Un grafo queda caracterizado, por tanto, por:
* - el número de nodos que tiene
* - los arcos, que representan distancias entre los nodos
*/

public class Grafo {
/**
* Ds nodos sin un arco entre ellos, se dicen que están a distancia INFINITO.
*/
public static final int INFINITO = Integer.MAX_VALUE;

/**
* Número de nodos del grafo.
*/
public int numNodos;

/**
* Tabla con los arcos que enlazan los nodos del grafo.
* Un valor INFINITO indica que no hay conexión entre los nodos.
*/
public int[][] arcos;

/**
* Tablas con la posición (x, y) del nodo en un dibujo.
*/
public int[] posicionX;
public int[] posicionY;

/**
* Construye un grafo con el número de nodos que se pasa como argumento.
*
* @param numero Número de nodos del grafo.
*/
public Grafo(int numero) {
this.numNodos = numero;
arcos = new int[numNodos][numNodos];
posicionX = new int[numNodos];
posicionY = new int[numNodos];
for (int i = 0; i < j =" 0;" i ="=">Representación de dos algoritmos voraces (greedy) sobre la clase Grafo.

El algoritmo de Prim es un algoritmo de la teoría de los grafos para encontrar un árbol de expansión mínimo en un grafo conexo, no dirigido y cuyas aristas están etiquetadas.
En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible. Si el grafo no es conexo, entonces el algoritmo encontrará el árbol de expansión mínimo para uno de los componentes conexos que forman dicho grafo no conexo.

// Matriz bidimensional de enteros que representa el grafo.
private int grafo[][];

/**
* Método que recorre un vector para comprobar si se encuentra en él un valor
* recibido.
* @param vector Vector de enteros donde va almacenando la solución.
* @param i Número a buscar dentro del vector.
* @return Devuelve true si lo encuentra.
*/
private boolean estaRepetido(int vector[], int i) {
for (int j = 0; j < grafo =" caminos;" numnodos =" grafo.length;" i =" 0;" longitudcamino =" 0;" menor =" 0;" actual =" inicio;" i =" 0;" menor =" i;" actual =" menor;">Solución de un problema real usando el código anterior.

El problema al cuál se da solución es encontrar el camino mínimo en una red de computadoras.

package grafos;

/***
* Camino Minimo
*
* Calcula el camino minimo
*
* @author Damian Adriel Perez Valdes
*/

import java.io.*;

public class Camino extends Grafo
{
// Matriz bidimensional de enteros que representa el grafo.
private int grafo[][];

/**
* Método contructor de la clase.
*/
public Camino(int n) {
super(n);
}

/**
* Método que recorre un vector para comprobar si se encuentra en él un valor
* recibido.
* @param vector Vector de enteros donde va almacenando la solución.
* @param i Número a buscar dentro del vector.
* @return Devuelve true si lo encuentra.
*/
private boolean estaRepetido(int vector[], int i) {
for (int j = 0; j < grafo =" caminos;" numnodos =" grafo.length;" i =" 0;" longitudcamino =" 0;" menor =" 0;" actual =" inicio;" i =" 0;" menor =" i;" actual =" menor;" lectura =" new" n =" Integer.parseInt(lectura.readLine());" gf =" new" i =" 0;" j =" 0;" i=" 0;" j =" 0;" inicio =" Integer.parseInt(lectura.readLine());">= 0)
{
//Instancia de la clase camino.
Camino c = new Camino(n);

// Encontrar el camino mínimo.
solucion = c.caminoMinimo(gf.arcos, inicio);

// Mostrar el árbol mínimo abarcador.
System.out.print("\nCAMINO MÍNIMO ABARCADOR --> Solución: ");

for (int i = 0; i < style="font-weight: bold;">Ejemplo:

Ingrese el orden de la matriz de adyacencia:
3
Ingrese elemento (0,0) : 2
Ingrese elemento (0,1) : 5
Ingrese elemento (0,2) : 6
Ingrese elemento (1,0) : 4
Ingrese elemento (1,1) : 2
Ingrese elemento (1,2) : 3
Ingrese elemento (2,0) : 4
Ingrese elemento (2,1) : 1
Ingrese elemento (2,2) : 2

Matriz de Adyacencia :

2 5 6
4 2 3
4 1 2

Ingrese Nodo de Inicio :
2

CAMINO MÍNIMO ABARCADOR --> Solución: 2 1 1 2 5 6
4 2 3
4 1 2
Templates
Templates