No se si os ha ocurrido, pero en ocasiones el operador que nos da servicio a Internet nos da unas IPs de servidores DNS que en ocasiones no todas funcionan (por eso nos dan varios). Si al configurar la red se colocan primero en orden servidores que están caídos el navegador y cualquier aplicación o servicio que use el DNS van a tardar mucho en hacer la conexión ya quehace las peticiones por orden.
La solución es muy simple, llega con cambiar el orden de los servidores y listo.
También se puede ser un poco más metódico.
Veámoslo con un ejemplo:
Tenemos una conexión con los servidores dns 213.60.205.75 y 213.60.205.174 (colocados en ese orden) y la conexión nos va lenta. Lo primero es ejecutar un ping para saber si funciona o no el servidor:
ping 213.60.205.174
ping 213.60.205.75
Si resulta que el 213.60.205.75 está caído no nos va a responder al ping. En ese caso llega con cambiar el orden y poner 213.60.205.174 primero y 213.60.205.75 después (o eliminar este último).
jueves, 15 de noviembre de 2012
jueves, 21 de junio de 2012
Programación en Java: Conceptos básicos de programación y estructura de un programa en Java
Programa (o
Algoritmo): Serie de operaciones detalladas y no ambiguas, a
ejecutar paso a paso, y que conducen a la resolución de un problema.
Hay diversas formas de
realizar un algoritmo. Simplemente hay que definirlo de forma no
ambigua.
Dato:
Información que procesa un algoritmo (y por tanto un futuro
programa).
Tipo de dato:
Tipo de información que se maneja. Es un concepto muy importante y
que hay que ir teniendo muy claro al desarrollar programas.
Cuando se trabaja con
un dato, hay que saber si dicho dato es un número entero, un número
real, un carácter, una frase (una lista de caracteres), un valor
lógico, etc... ya que el ordenador usa distintas formas para guardar
distintos tipos de datos.
Variable: Es un
elemento que contiene un dato y su valor puede variar a lo largo del
programa. Internamente en el ordenador es una zona de memoria
reservada donde se guarda un dato de determinado tipo y cuyo valor
cambia a lo largo de la ejecución.
Atributos:
- Nombre o identificador: Lo que la designa
- Tipo de dato: El tipo de información que puede manejar esa variable.
Se utilizarán para
recoger datos, para manejar datos internos variables y para devolver
datos.
Constantes:
Elemento de valor invariable y de un tipo determinado. También se
les denomina Literales. Al igual que una variable internamente en el
ordenado ocupa una región de memoria pero su contenido no varía,
esto permite un uso más eficiente en determinadas circunstancias.
Ejemplos:
- Entera: -3 , 5, 17
- Real: 6x108 (se verá como 6e8), 5.34
- Carácter : 'A'
- Cadena de caracteres (String): “Hola”
Expresiones:
Combinaciones de variables, constantes símbolos de operación,
paréntesis y nombres de funciones especiales.
Ejemplo:
m(n+5) –cos(p)
Veamos la estructura de
un programa en Java con un nuevo ejemplo ligeramente más amplio
que el primero.
import java.util.Scanner;
public class Hola2 {
public static void main (String args[]) {
// Declaración de
variables
String nombre;
Scanner sc= new Scanner(System.in);
// Código
System.out.print("Dime tu nombre:
");
nombre=sc.nextLine();
System.out.println(nombre+",
Welcome to the Java World");
System.out.println("Nos vemos");
}
}
Antes de explicar las
distintas líneas veamos unos aspectos generales:
- Cada sentencia acaba en ; ya que es el indicador de fin de sentencia. Puedo escribir una sentencia en varias líneas como hicimos en el ejemplo de GUI ya que lo que marca el final es el ;
- Las llaves {} marcan inicio y fin de bloque. Cuando hay una serie de comandos o sentencias que queremos meter dentro de un bloque los meteremos entre estos símbolos.
- La identación o tabulación es esencial en el mundo de la programación. Sirve para entender que comandos están dentro de que bloques de forma clara.
Los elementos que nos
encontramos a lo largo de cualquier programa son:
- Palabras reservadas: Son palabras que pertenecen al lenguaje Java y por tanto no pueden ser usadas por nosotros para nombrar variables. La lista completa es:abstract default if private thisboolean do implements protected throwbreak double import public throwsbyte else instanceof return transientcase extends int short trycatch final interface static voidchar finally long strictfp volatileclass float native super whileconst for new switchcontinue goto package synchronized
- Identificadores: Son palabras que crea el programador para dar diferentes nombres a elementos como las variables, las clases, funciones, etc... Hay algunas limitaciones para poner nombres:
- Se usan sólo letras, números, y los símbolos _ y $
- No puede, por tanto, contener espacios.
- No puede empezar por número.
- Se distingue entre mayúsculas y minúsculas .
- No se pueden usar palabras reservadas (class, import, etc...)
- Comentarios: Son líneas de código que no afecta al funcionamiento del programa. No se compilan. Por tanto son usadas para aclarar ciertas partes del código que tienen un funcionamiento especial o para documentar de forma técnica el programa. Existen tres tiops de comentarios en java:
- Comentario de línea: Comienza donde se escriba // hasta el fin de la línea.
- Comentario multilínea: Comienza con /* y acaba con */ en la misma línea o en otra.
- Comentario de documentación: el SDK de Java incorpora un programa denominado javadoc que facilita la creación de documentación técnica y cuyo funcionamiento veremos en otra asignatura. Los comentarios detectados por javadoc comienzan por /** y acaban por */.
- Constantes o literales: Datos explícitos como 3, “hola”, '$' ó -78.23
De cara a la claridad de
programación, vamos además a usar algunas reglas en cuanto a la
creación de nombres de identificadores: Las clases siempre
empezarán por mayúsculas y las variables por minúsculas. Si una
clase o variable es una palabra compuesta, las siguientes palabras
se escribirán comenzándolas en mayúscula: Clase SistemaOperativo,
variable datoTransferido.
Teniendo en cuenta estos
puntos anteriores vamos a explicar de forma aproximada el
funcionamiento del programa anterior:
Importación
Lo primero que encontramos en un programa en Java
son las líneas de importación. En estas líneas se indican los
paquetes (packages) donde existen clases de Java que podemos
necesitar y ya están programados. Una clase podemos verla como un
contenedor. Por tanto todos los comandos de Java (salvo las
instrucciones más básicas) aparecerán dentro de clases que a su
vez se guardan en pquetes.
En este caso se importa la
clase Scanner que vamos a usar para pedir datos al usuario.
Esa clase se encuentra en el paquete util que a su vez está
en el paquete genérico java.
Ese es el significado de java.util.Scanner.
Puede haber varias líneas
de importación para usar varias clases, pero en el caso de usar
diversas clases que están en un paquete puede usarse el comodín *.
Es decir, si en un programa tenemos que importar clases de esta
manera:
import java.io.File;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.IOException;
podría ser más cómodo
escribirlo en una única línea así:
import java.io.*;
Ese * indica
“todas las clases del paquete io
que está en java”. Los
puristas dicen que es mejor escribir sólo las clases que se van a
usar por claridad, pero realmente no se pierde eficiencia y sí
tiempo escribiendo.
La clase principal.
public class Hola2 {
}
Tras la zona de importación en el archivo viene
la clase principal. Como ya se comentó una clase la veremos por el
momento como un contenedor de elementos y ya veremos definiciones más
precisas y correctas. Nos quedamos con la idea de que todo el código
que vamos a meter hay que hacerlo dentro de la clase.
Una clase comienza por la
palabra class y a continuación se le da el nombre deseado. Ya
comentamos también que por claridad y estandarización vamos a
nombrar las clases comenzando por letra mayúscula.
Todo lo que va dentro de la
clase se mete entre llaves.
En un archivo se pueden
meter varias clases pero por ahora meteremos sólo una que sirva para
contener nuestros programas. Además el archivo ha de tener el mismo
nombre que dicha clase (conservando mayúsculas y minúsculas) y
precediendo a la palabra class irá le modificador public
que indica que “cualquiera” puede acceder a la clase.
Entenderemos mejor esto último en el tema de orientación a objetos.
Programa principal
(función principal).
public static void main (String args[]) {
}
Un apartado denominado por
la palabra reservada main (principal) y precedido por las
palabras reservadas public, static y void es el bloque donde
meteremos las sentencias ejecutables que conformarán nuestro
programa al menos al principio.
A este apartado se le
denominará también función o método principal o función o método
main.
En general una función o
método es una zona del programa que contiene comandos ejecutables y
que puede ser invocada desde otras partes del programa o sistema.
Crearemos más adelante otros métodos distintos del principal.
El elemento especificado
entre paréntesis (String args[]) no lo tendremos en cuenta al menos
por el momento.
Cuando se construye un
programa Java hay que indicar las variables que se van a usar y el
tipo de dato que son. Realmente se puede hacer en cualquier parte de
la función pero por claridad conviene separar la zona de declaración
de variables (se puede poner al principio) del resto del código.
Vamos a ver dos grandes
bloques de variables, por un lado las básicas que simplemente hay
que declarar su nombre y el tipo de dato que contendrán:
String nombre; //Variable que guarda una
cadena de caracteres
int numero; // Variable que guarda un
valor entero
y los objetos o variables
referenciadas que, sin entrar en detalle, son “variables” para
las cuales hay que reservar memoria y por tanto se declaran e
inicializan en la misma línea.
Scanner sc = new Scanner(System.in);
aunque podría hacerse en
líneas distintas (una de declaración y otra de reserva de memoria):
Scanner sc;
sc = new Scanner(System.in);
En este caso se inicializa
la variable sc que es el objeto que representa al teclado
(System.in) y va a servir para pedirle datos al usuario.
La diferencia entre las
simples y las referenciadas es que las simples básicamente manejan
un valor único y las referenciadas son complejas en cuanto a que
pueden guardar varios valores e incluso contener código ejecutable
asociado a la variable (son los denominados objetos).
Finalmente describimos
brevemente cada línea de código:
System.out.print("Dime tu nombre: ");
Muestra una frase en
pantalla pero no pasa a la línea siguiente.
nombre=sc.nextLine();
Se queda esperando a que el
usuario introduzca una cadena de caracteres y una vez que el usuario
pulsa enter introduce el dato en la variable nombre.
System.out.println(nombre+", Welcome
to de Java World");
Muestra en pantalla el
contenido de la variable nombre seguido del texto , Welcome to de
Java World sin las comillas. La operación + con cadenas de
caracteres se denomina concatenación (coloca una cadena detrás de
otra). Además una vez que termina de escribir pasa a la línea
siguiente.
System.out.println("Nos vemos");
Muestra otra frase en
pantalla y pasa a la línea siguiente.
Nota: si leéis algún documento en la que se
explique una versión de Java anterior a la 1.5 la introducción de
datos se realizaba con otro objeto de la siguiente manera:
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
nombre=br.readLine();
Además había que hacer el denominado
control de excepciones que veremos más adelante pero que aumenta la
complejidad de la entrada de datos.
sábado, 19 de mayo de 2012
Programación en Java: Creando, compilando y ejecutando un programa en Java
Una vez que tenemos el equipo preparado vamos a realizar nuestro primer programa en Java. Este simplemente mostrará una frase en la consola. Abre un editor de texto cualquiera, por ejemplo el gedit y escribe el siguiente código.
public class Hola {
public static void main (String args[]){
System.out.println("Welcome to de
Java World");
}
}
Guarda el programa con el nombre
Hola.java
ya que es imprescindible que el nombre del archivo
coincida con el nombre de la clase (class indicará por ahora
el nombre del programa aunque ya se verá en un futuro tema la
utilidad de dicho concepto), si no nos dará un error al compilar.
Este es un requisito de Java. La clase pública (en la mayoría de
los casos la única clase en el archivo) tendrá el mismo nombre que
el archivo.
Abre ahora un terminal y vete al directorio donde
hayas grabado el código. Suponiendo que está en el directorio
programas usa el comando cd de la siguiente manera.
nombre@equipo:~$ cd programas
A partir de ahora pondré solo el $ para indicar
entrada de línea de comando.
Si ahora escribes el siguiente comando:
$ ls
o
$ ls -lh
verás los archivos que hay en la carpeta
programas. En el segundo caso
hay más información: permisos, propietario, tamaño, fecha,...
Tiene que aparecer, por
supuesto, Hola.java.
Nota: En el caso de Windows el comando
para cambiar de directorio también es cd y el de listar los
archivos del directorio es dir.
Bien, a continuación
vamos a compilar el código Java a un lenguaje (bytecodes) que
comprenda la máquina virtual. Para ello ejecutamos:
$ javac
Hola.java
Si hay algún
error saldrá ahora algún tipo de mensaje. Los errores más típicos
son el escribir una letra minúscula en mayúscula o viceversa,
olvidarse de un punto y coma o de una llave o escribir mal un
comando. Si no ha habido problema ejecutemos el comando ls
y se puede ver que ha aparecido un nuevo archivo denominado
Hola.class. Ese es el
programa que puede ejecutar la JVM. Para ello:
$ java Hola
Se puede observar
que no es necesario escribir el .class. Como resultado aparece la
frase que hemos puesto entre comillas en el comando
System.out.println() de
Java. Efectivamente mediante dicho comando sacaremos mensajes de
distinto tipo a la consola.
En general compilar
implica traducir el código fuente (Java, Pascal, C, …) al código
máquina (binario) que entiende la máquina en la que se ejecutará.
En el caso de Java esa máquina es virtual, es decir, es un emulador
de una máquina pero también tiene su propio juego de instrucciones
en binario. Se profundizará en esto en otro módulo.
Finalmente vamos a
realizar todo esto pero de una forma más cómoda. Vamos a usar un
editor especializado en programación que viene a ser un paso
intermedio entre la forma anterior de programar (es decir, escribir
código por un lado y compilar y ejecutar por otro) y un Entorno de
Desarrollo (IDE) completo que veremos más adelante. El editor que
usaremos se denomina Geany el cual permite compilar y ejecutar los
programas en distintos lenguajes.
- En el menú de Aplicaciones → Programación está el Geany.
- Abre el programa Hola.java en el menú File.
- En la parte superior están los iconos de compilar y ejecutar.
- En la parte inferior hay zona de mensajes de compilación.
Prueba a compilar, a
ejecutar e incluso a forzar algún error.
Veamos ahora un ejemplo
de lo que sería una aplicación gráfica en java. En un nuevo
archivo escribe el siguiente código:
import javax.swing.*;
public class HolaWin{
public static void main(String[] args){
JOptionPane.showMessageDialog(null,
"Welcome to the Java World",
"Usando Swing",
JOptionPane.INFORMATION_MESSAGE);
}
}
En futuros temas
entenderemos el significado de todo lo aquí expuesto.
Error 0x80020025 en Mac OS X Lion
Por si a alguno le ha sucedido que cuando va a grabar un CD/DVD le sale un error con código 0x80020025 que viene a significar que no reconoce el disco, lo que sucede es que por algún motivo (sospecho del Parallels pero no lo tengo confirmado) se bloquea la unidad de grabación. La solución es reiniciar el Finder (botón derecho en el icono) o reiniciar la sesión.
Personalmente me ocurrió que luego el directorio de grabación estaba bloqueado. Esto se soluciona a su vez tomando el archivo que representa a dicho directorio (extensión fpbf) y con el botón derecho, obtener información y se desmarca la casilla de Bloqueado.
Personalmente me ocurrió que luego el directorio de grabación estaba bloqueado. Esto se soluciona a su vez tomando el archivo que representa a dicho directorio (extensión fpbf) y con el botón derecho, obtener información y se desmarca la casilla de Bloqueado.
Suscribirse a:
Entradas (Atom)