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
|
|
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;
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:
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);
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:
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
·
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.
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
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
expression: Object Expresión
u objeto de ActionScript.
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.

