viernes, 22 de mayo de 2015

CONVERSIÓN DE TIPOS DE DATOS EN JAVA


CONVERSIÓN DE TIPOS DE DATOS EN JAVA


En Java es posible transformar el tipo de una variable u objeto en otro diferente al original con el que fue declarado. Este proceso se denomina "conversión", "moldeado" o "tipado" y es algo que debemos manejar con cuidado pues un mal uso de la conversión de tipos es frecuente que dé lugar a errores.

Una forma de realizar conversiones consiste en colocar el tipo destino entre paréntesis, a la izquierda del valor que queremos convertir de la forma siguiente: Tipo VariableNueva = (NuevoTipo) VariableAntigua;
Por ejemplo: int miNumero = (int) ObjetoInteger;      char c = (char)System.in.read();

En el primer ejemplo, extraemos como tipo primitivo int el valor entero contenido en un campo del objeto Integer. En el segundo caso, la función read devuelve un valor int, que se convierte en un char debido a la conversión (char), y el valor resultante se almacena en la variable de tipo carácter c.
El tamaño de los tipos que queremos convertir es muy importante. No todos los tipos se convertirán de forma segura. Por ejemplo, al convertir un long en un int, el compilador corta los 32 bits superiores del long (de 64 bits), de forma que encajen en los 32 bits del int, con lo que si contienen información útil, ésta se perderá. Este tipo de conversiones que suponen pérdida de información se denominan “conversiones no seguras” y en general se tratan de evitar, aunque de forma controlada pueden usarse puntualmente.
De forma general trataremos de atenernos a la norma de que "en las conversiones debe evitarse la pérdida de información". En la siguiente tabla vemos conversiones que son seguras por no suponer pérdida de información.

TIPO ORIGEN
TIPO DESTINO
byte
double, float, long, int, char, short
short
double, float, long, int
char
double, float, long, int
int
double, float, long
long
double, float
float
Double
 Int a doublé
int i; 
double r; 
r = i*1.0; 
Doublé a int
Para convertir un double a int, redondeando siempre hacia abajo, hacer lo siguiente:
  • int d = (int) x;

o bien
  • int d = (int) Math.floor(x);
Por ejemplo, si x fuese 2.75, con este método, d pasaría a valer 2. Podemos pensarlo como que se quitan los dígitos decimales.


Int a string
Para convertir int(entero) a String sólo debemos hacer una llamada al método estático de la clase Integer, toString

Ejemplo:

int entero = 1;
String enteroString = Integer.toString(entero);
Double a string
String cadena=""; 
double valor = 13.5; 
double otroValor; 

//De double a String 
cadena = String.valueOf(valor); 

//De String a double 
otroValor = Double.parseDouble(cadena); 




Estructuras de control
En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.
Con las estructuras de control se puede:
·         De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else)
·         De acuerdo al valor de una variable, ejecutar un grupo u otro de sentencias (Select-Case)
·         Ejecutar un grupo de sentencias mientras se cumpla una condición (Do-While)
·         Ejecutar un grupo de sentencias hasta que se cumpla una condición (Do-Until)
·         Ejecutar un grupo de sentencias un número determinado de veces (For-Next)

Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. Las estructuras de control se puede clasificar en : secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programación se rija por los principios de la 
programación estructurada.
Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura.

·       Sentencias de salto: if, switch
Una sentencia if consiste en una expresión booleana seguida de una o más sentencias. Veamos la sintaxis:
if(expresion_Booleana)
{
   //Sentencias se ejecutan si la expresión booleana es verdadera
}
Una sentencia switch permite a una variable ser probada por una lista de condiciones. Cada condición se llama case.Veamos la sintaxis:
switch (expresion) {

    
case valor1:
        / / Declaraciones
        break; / / opcional
     case valor2:
        / / Declaraciones
        break; / / opcional
     / / Usted puede tener cualquier número de sentencias case.
     default: / / Opcional
        / / Declaraciones que cumplirá si la variable no entra en ningún caso.
}

·        Sentencias de bucle: for, while, do-while

Una sentencia For tiene esta forma:
for (<sentencia1> ; <expresión> ;<sentencia2>) <sentencia3>

Funciona de la manera siguiente. Primero se ejecuta la sentencia1. Entonces se evalúa la expresión. Si es verdadera, se ejecuta la sentencia3; entonces la sentencia2 y luego se evalúa nuevamente la expresión. Esto continúa hasta que la expresión sea falsa.
Ejemplo
El siguiente programa inicializa un array llamada “lista” de longitud 10 con los valores 1-10.

{
  for (i=0; i<=9; i+=1) lista[i] = i+1;
}


La sentencia while permite ejecutar repetidamente un bloque mientras la condición sea verdadera. Una sentencia while es un ejemplo de lo que denominamos declaración repetitiva, adicionalmente, puede emplear una cláusula opcional else.
#!/usr/bin/python
# Filename : while.py
 
numero = 23
detener = False
 
while not detener:
        adivina = int(raw_input('Ingrese un entero : '))
 
        if adivina == numero:
                print 'Felicitaciones, haz adivinado!.'
                detener = True # Esto causa que el loop se detenga
        elif adivina < numero:
                print 'No, es un numero mayor.'
        else: # debes adivinar
                print 'No, es un numero menor.'
else:
        print 'El ciclo while ha terminado.'
        print 'Puedo hacer lo que quiero aqui.'

 
print 'Hecho.'

La sentencia de iteración do-while es de tipo posprueba. Primero realiza las acciones luego pregunta. La sintaxis es la siguiente:
 do sentencia while ( condición );


Sentencias: break, continue, return, try, catch,trow break

Aparece en un bucle (for, for..in, do..while owhile) o en un bloque de sentencias asociadas con un determinado caso de una sentencia switch. Cuando se utiliza en un bucle, la sentencia break ordena a Flash que omita el resto del cuerpo del bucle, detenga la acción de bucle y ejecute la sentencia a continuación de la sentencia de bucle. Cuando se utiliza en una sentencia switch, la sentencia break ordena a Flash que omita el resto de sentencias en ese bloque de sentencias case y que salte a la primera sentencia que vaya a continuación del bloque switch.
En bucles anidados, la sentencia break sólo omite el resto del bucle inmediato, no toda la serie de bucles anidados. Para salir de toda una serie de bucles anidados, debe usar try..catch..finally.
Disponibilidad: ActionScript 1.0; Flash Player 4

Ejemplo
El ejemplo siguiente utiliza la sentencia break para salir de un bucle que, de otro modo, sería infinito:
var i:Number = 0;
while (true) {
 trace(i);
 if (i >= 10) {
 break; // esto terminará/saldrá del bucle

 
}
 i++;
}

continue

Salta por encima de todas las sentencias restantes en el bucle más interior e inicia la siguiente repetición del bucle como si se hubiera pasado el control hasta el final del bucle de la forma habitual. No tiene ningún efecto fuera de un bucle.
Disponibilidad: ActionScript 1.0; Flash Player 4
Ejemplo
En el siguiente bucle while, continue hace que el intérprete de Flash omita el resto del cuerpo del bucle y salte a la parte superior del bucle, donde se comprueba la condición:
trace("example 1");
var i:Number = 0;
while (i<10) {
 if (i % 3 == 0) {
 i++;
 continue;
 }

 trace(i);

 i++;
}

La sentencia return es empleada para regresar de una función, es decir, salir de ella; adicionalmente podemos regresar una valor de la función.

Usando la sentencia return

ejemplo
#!/usr/bin/python
# Filename : return.py
 
def max(x, y):
        if x > y:
                return x
        else:
                return y
 
print max(2, 3)

El bloque try contiene el código protegido que puede causar la excepción. Este bloque se ejecuta hasta que se produce una excepción o hasta completarse satisfactoriamente.
try
{
//Aquí debe ir nuestro programa (la parte donde se realice cierto proceso)
}

La sentencia catch se puede utilizar sin argumentos, en cuyo caso captura cualquier tipo de excepción y se conoce como sentencia catch general. También puede aceptar un argumento de objeto derivado de System.Exception, en cuyo caso trata una excepción específica.

Para capturar la excepción que se puede producir en este código necesitaremos la instrucción llamada Catch que significa Capturar.

catch(nombreDeLaExcepcion obj)
{
//Acción a seguir en caso de que ocurra un Error
}

throw 
Genera o emite un error que puede controlarse o capturarse mediante un bloque de código catch{}. Si un bloque catch no captura una excepción, la representación de cadena del valor emitido se envía al panel Salida.
Normalmente, se emiten instancias de la clase Error o de sus subclases (véase el apartado Ejemplo).
Disponibilidad: ActionScript 1.0; Flash Player 7
Parámetros
expressionObject Expresión u objeto de ActionScript.
Ejemplo
En este ejemplo, una función llamada checkEmail() comprueba si la cadena que se le pasa es una dirección de correo electrónico con el formato adecuado. Si la cadena no contiene un símbolo @, la función emite un error.

function checkEmail(email:String) {
 if (email.indexOf("@") == -1) {
 throw new Error("Invalid email address");
 }
}
checkEmail("someuser_theirdomain.com");





CONCEPTO DE OBJETOS Y CLASES EN JAVA.
Al escribir un programa en un lenguaje orientado a objetos tratamos de modelar un problema del mundo real pensando en objetos que forman parte del problema y que se relacionan entre sí.
 Objeto: entidad existente en la memoria del ordenador que tiene unas propiedades (atributos o datos sobre sí mismo almacenados por el objeto) y unas operaciones disponibles específicas (métodos).


Clase
: abstracción que define un tipo de objeto especificando qué propiedades (atributos) y operaciones disponibles va a tener.

 Estas definiciones son quizás poco clarificadoras. Con un ejemplo vamos a entenderlo mejor. En primer lugar pensemos en un programa que trata de gestionar datos sobre los vehículos de transporte público de una ciudad, por ejemplo México D.F.

En este ejemplo hemos considerado que el problema consta de tres tipos de vehículo: taxi, autobús y tranvía, y que esos tipos los denominamos clases. ¿Qué haríamos en Java para definir una clase? Indicar sus propiedades y operaciones (métodos) disponibles, por ejemplo:
/* Ejemplo Clase Taxi - aprenderaprogramar.com */
Clase Taxi {
Propiedades:
Matrícula identificativa
Distrito en el que opera
Tipo de motor diesel o gasolina
Coordenadas en las que se ubica
 Operaciones disponibles:
Asignar una matrícula
Asignar un distrito
Asignar un tipo de motor
Ubicar en unas coordenadas
}


El haber definido así el taxi significará que todo objeto de tipo Taxi que creemos tendrá una matrícula identificativa, un distrito en el que opera, un tipo de motor y unas coordenadas en las que se ubica. La creación de un objeto sería algo así como: “Crear un objeto Taxi con matrícula BFG-7452, distrito Norte, tipo de motor Diesel y coordenadas Desconocidas.”
El uso de una operación sobre un objeto sería algo así como: “Taxi BFG-7452 --> Ubicar en coordenadas (X = 128223, Y = 877533)”. Las operaciones en Java se denominan métodos, veremos cómo se definen más adelante.