Documente Academic
Documente Profesional
Documente Cultură
Java es uno de los lenguajes de programacin ms usados por los programadores, y tambin por los usuarios que
ejecutan aplicaciones hechas en Java continuamente. Fue desarrollado originalmente por Sun Microsystems aunque
posteriormente fue adquirida por la compaa Oracle.
El lenguaje Java tiene grandes similitudes con la sintaxis de C y C++ pero no es capaz de llegar a tan bajo nivel
que estos ltimos. Las aplicaciones Java se ejecutan en una mquina virtual de Java (JVM) por lo que no importa
la arquitectura de nuestro sistema o el sistema operativo utilizado, un mismo programa en Java funcionar en
cualquier plataforma gracias a esta mquina virtual.
El famoso sistema operativo Android de Google, est basado en Java, por este motivo es compatible con tantos
telfonos mviles con distinto hardware, porque tan slo hay que adaptar la mquina virtual Dalvik.
Introduccin
Nuestro primer programa
Clase, objeto y estructura de un programa
Tipos de datos y expresiones simples
Argumentos, constructores y operadores
Instrucciones de control I
Instrucciones de control II
Ejercicios prcticos
Solucin de los dos primeros ejercicios
Solucin a los dos ejercicios restantes
Estructuras de datos
Herencia y polimorfismo
Herencia
Herencia II
Polimorfismo
Modificadores de acceso y conversin de referencias
Ejercicio de herencia y polimorfismo
Solucin del ejercicio planteado en el volumen XX
Interfaces(GUIs)
Gestores de distribucin
Gestin de eventos
Gestin de eventos
Gestin de eventos: ActionEvent
Introduccin
Primeros ejemplos (entrada y salida binaria)
Ficheros de texto
Clase Scanner
Entrada y salida de ficheros
Ejemplo de programa con entrada/salida de ficheros y con interfaz grfica
Introduccin a la concurrencia
Regiones crticas
Regiones crticas. Ejemplo avanzado
Gestin de threads
Todo sobre monitores en java
Todo sobre semforos en java
Todo sobre locks en java
Interbloqueos en programacin concurrente
Estructuras para programacin concurrente I
Estructuras para programacin concurrente II
Todo sobre RMI en Java (Programacin distribuda)
Todo sobre Sockets TCP y UDP en Java
Programas
Introduccin a la programacin en
Java
Volumen I : Introduccin
Empezamos este curso de iniciacin a Java. A continuacin os comentar como se desarrollar el curso y
comenzaremos a instalar todo lo que nos hace falta.
El IDE (Entorno de desarrollo) que vamos a utilizar es NetBeans en su ltima versin, personalmente lo tengo
funcionando bajo Windows 7 Ultimate 64bits, pero es compatible con todos los sistemas operativos Windows, usar
NetBeans en idioma ingls. Podis cambiar el idioma fcilmente siguiendo este manual.
Netbeans tambin existe para GNU/Linux, y es exactamente igual que el Netbeans para Windows, no tendris
ningn problema si usis Linux.
En este mini curso de iniciacin aprenderemos lo bsico de Java (y luego cosas ms avanzadas), pondremos
ejemplos prcticos con capturas de pantalla de la ejecucin y el cdigo utilizado.
A programar se aprende programando, vosotros sois los que tendris que aprender (siguiendo nuestras pautas),
aunque siempre podremos ayudaros por si algo se os atraganta, al final de cada artculo os mandaremos deberes
para que podis practicar (y de paso os ponemos a prueba).
Lo primero que debemos hacer es bajarnos el JDK de Java y el propio NetBeans, aunque seguro que todos lo tenis
instalado sin daros ni cuenta.
Nos vamos a esta web: Descargar JDK y pinchamos sobre el icono de Java que veis en la imagen.
Luego nos bajamos la documentacin desde la misma web de antes donde pone: Java SE 6 Documentation
(Download .ZIP) y descomprims este fichero en la ruta del JDK: C:Archivos de programaJavajdk1.6.0_24
Abrimos Netbeans y deberamos ver esto:
Ahora os voy a ensear el JavaDOC que nos hemos bajado (y que debera aparecer en NetBeans) que nos ser muy
til para saber como declarar las variables o como usar los distintos mtodos.
Nos vamos a TOOLS/Java Platforms
El Javadoc sirve para ver la sintaxis de los distintos mtodos a usar, es una ayuda extra cuando no sabemos cmo
utilizar un parseInt (por ejemplo).
Hasta aqu hemos llegado con la introduccin.
Deberes: Intentad crear un programa que muestre por pantalla Hola Mundo.
Aqu vemos el proyecto vaco, si pulsamos clic derecho New podremos empezar a crear nuevos paquetes o clases.
Creamos un paquete, recomiendo para cada programita que hagamos, ponerlo en un paquete distinto para tenerlo
bien organizado.
Elegimos el nombre del paquete, puede ser de nombre paquete1 por ejemplo.
Una vez en el paquete, pinchamos clic derecho sobre l y creamos un nuevo Java Main, un programa principal
donde tendremos nuestro programa. Al principio no har falta usar clases extra porque los programas que haremos sern
muy sencillos.
Para configurar o cambiar los atajos predefinidos debes irte a: Tools/Options/Editor/ Code Templates
Una vez que hayis guardado los cambios (arriba en el smbolo de los disquetes) o pulsando CTRL+s nos vamos a la
izquierda y click derecho sobre nuestro programa y pulsamos a Run File.
Esto es lo ms sencillo que podis hacer con Java, el prximo volumen tendremos teora + prctica ya que sin saber
algo de teora no podemos hacer nada.
Habis conseguido hacer esto de forma fcil? Intentad ahora conseguir esta salida:
Lnea nmero 1
Lnea nmero2
Que halla un espacio entre medias, hay dos formas de resolverlo, una elegante y la otra un poco chapuceras.
Ahora intentad tambin en un slo println hacer un retorno de carro (un enter), muy fcil si anteriormente habis
resuelto el problema de una forma elegante. No os preocupis sino os sale, lo importante es intentarlo, en el prximo
artculo dir la solucin.
Ejercicio1:
System.out.println("Linea nmero 1 n");
System.out.println("Lnea nmero 2");
Ejercicio 2:
System.out.println("Lnea nmero 1"+"nhola");
Tambin podramos haber hecho sin necesidad de concatenar las cadenas (el smbolo + sirve para concatenar cadenas
con variables u otras cadenas).
La barra invertida y la n (n) es un caracter reservado y sirve para hacer una nueva lnea (ya veris que hay varios
ms).
Una vez solucionado y comentado el reto anterior, es hora de ponernos con este artculo, si algo no lo entendis,
buscad informacin para ampliar o contrastar, y si segus sin entenderlo bien, poned un comentario.
Estructura de un programa
Un programa java es un conjunto de clases, donde una de ellas es especial en dos aspectos:
Contiene una operacin llamada main.
Habitualmente no se crean objetos de esta clase.
El sistema operativo invoca el mtodo main al ejecutar el programa.
Constantes literales
Atributos
Representan un dato de un tipo determinado, declarado como parte un objeto y alojado en la memoria
Variables
Representan un dato de un tipo determinado, declarado dentro de un mtodo y alojado en la memoria:
private int hi = 2;
private double x;
Variables
int x1,x2;
double y=1.0e6;
Si no se pone valor inicial, el valor es indefinido, y Java te avisar de que puede que la variable no est inicializada,
un String se inicializa a (cadena vaca).
Nombres o identificadores
Deben seguir estas reglas
Ejemplo: NombreVariableParaUsar
Constantes
Los atributos y variables se pueden definir como constantes: su valor no se puede cambiar
programaremos sin saber qu es cada cosa, y al principio podremos sobrevivir pero cuando luego las cosas no
salenah est el problema.
Este va a ser de los ltimos artculos de teora pura y dura (necesitaremos uno ms para hablar de los bucles) y a
partir de aqu estaremos con ejemplos y con ejercicios diversos usando todo lo que hemos aprendido.
Argumentos
Representan un dato de un tipo determinado, declarado dentro de los parntesis en el encabezamiento de un mtodo,
y alojado en la memoria.
Contiene un valor.
Se representa por un nombre.
Este es el diagrama de clases que podra estar asociado a los requerimientos de el problema que se plantea:
Implementacin
public class Notas
{
//Atributos de la clase
private int nota1, nota2, nota3;
/** Pone los valores de las tres notas */
public void ponNotas (int n1, int n2, int n3)
{
nota1=n1;
nota2=n2;
nota3=n3;
}
/** Calcula la media real */
public double media()
{
return (nota1+nota2+nota3)/3.0;
}
/** Calcula la media entera */
public int mediaEntera()
{
return (nota1+nota2+nota3)/3;
}
}
Uso de un constructor
El ejemplo pone de manifiesto la necesidad de dar valor a los atributos
El constructor:
Es un mtodo especial, usado al crear el objeto (con new) para dar valor a los atributos
Sintaxis: mtodo de nombre igual a la clase y en el que no se pone lo que retorna:
Ventaja: al crear el objeto, el constructor nos obliga a poner las notas.
Operadores y expresiones
Las expresiones permiten transformar datos para obtener un resultado. Se construyen con operadores y operandos.
Operandos:
Constantes literales.
Datos simples (atributos, variables, o argumentos de tipos simples).
Funciones (mtodos que retornan un valor de un tipo simple).
Operadores ms usuales:
Indican la operacin a realizar en una expresin
Operadores aritmticos: operan con nmeros, y dan como resultado nmeros del mismo tipo.
Operadores lgicos: operan con valores lgicos y dan otro valor lgico.
Operador de concatenacin: retorna la concatenacin del operando izquierdo (String) con la conversin a String del
operando derecho (+).
Diseo de la clase:
r3=res3;
}
/** Calcula la resistencia equivalente a 3 resistencias en paralelo */
public double calculaResEquiv()
{ // Kohms
return 1/((1/r1)+(1/r2)+(1/r3));
}
}
Conversin de tipos
Compatibilidad de tipos: Java es un lenguaje con tipificacin estricta..
Los nmeros son compatibles hacia arriba (promocin automtica de tipos): es decir, el tipo destino tiene
mayor cabida que el origen
No son compatibles cosas de distinta naturaleza (p.e., nmeros con char o boolean)
Tambin hay conversin automtica al almacenar un literal en un byte o short (pero no en expresiones no
literales).
Ejemplo:
int i;
double d=3.4;
i= (int) d; // valor=3
byte b;
int j=1000;
b=(byte) j; // valor=-24
Hasta aqu finalizamos por hoy, el prximo artculo tratar sobre los distintos tipos de bucles en Java y luego nos
pondremos a hacer ejercicios que es donde ms se aprende.
Instrucciones de control.
Las instrucciones de un programa pueden ser:
Simples:
1. Expresiones: de asignacin, incremento o decremento
2. Llamadas a mtodos
3. Creacin de objetos
El funcionamiento es el siguiente:
Si coincide, se ejecutan las instrucciones puestas bajo ese valor, y todas las siguientes que se encuentren,
hasta encontrar un break.
Si no coincide, se compara con el segundo valor, y as sucesivamente.
Si no coincide con ningn valor, se ejecutan las instrucciones que haya en la parte default, si existe.
Despus de un break, la instruccin switch termina y seguimos por la siguiente instruccin.
Los valores deben ser constantes, no variables.
No puede haber ninguno coincidente.
Ejemplo: Calcular el primer entero positivo tal que la suma de l y los anteriores sea mayor
que 100.
Bucle con condicin de permanencia al final, como mnimo se ejecuta 1 vez, y como mximo N veces.
Bucle con variable de control. Se puede ejecutar 0 o N veces (normalmente este bucle no se usa para
ejecutar 0 veces).
Es equivalente a:
Debe usarse para lazos con variable de control y de una manera uniforme.
Es conveniente declarar la variable de control en el lazo (no usar variables globales).
Es conveniente que la expresin de incremento sea la propia variable de control.
Es conveniente que la expresin de permanencia sea simple.
Nunca cambiar el valor de la variable de control en las instrucciones (utilizarla como operando).
break:
1. Termina el bucle
continue:
return:
Bucle
Crear un programa principal que sea capaz de imprimir por pantalla los nmeros del 0 al 10 (bucles).
If
Crear una clase que se llame ExamenConducirTeorico, con un unico atributo que se llame numFallos.
Recordatorio: Para crear un objeto de prueba de una clase recordar que se debe utilizar el constructor, por lo tanto:
ExamenConducirTeorico obj= new ExamenConducirTeorico(parmetros del constructor);
y una vez creado el objeto para probar el mtodo:
obj.nombre del mtodo;
Else if
Crear un programa principal con dos atributos enteros, que sern dos edad de dos personas, se les asignara un valor
que vosotros escogeris.
Si las dos son mayores de 18, se mostrar por pantalla Pueden votar los dos.
En el caso de que solo uno tenga mayora de edad, se mostrara por pantalla un mensaje indicando quien
puede votar y quien no.
En caso de que los dos sean menor de edad mostraremos Ninguno de los dos puede votar.
Recordatorio: en las instrucciones condicionales (if), pueden evaluarse dos condiciones o ms en un mismo if, por
ejemplo:
if (condicion1 || condicion2)</em>
<em>{</em>
<em> hacer1</em>
<em>}else{</em>
<em>hacer2</em>
<em>}
|| es un o, es decir que, si se cumple la condicion1 o si se cumple la condicion2, hacemos el hacer1, si no
hacemos el hacer2:
if (condicion1 && condicion2)</em>
<em>{</em>
<em>hacer1</em>
<em>}else{</em>
<em>hacer2</em>
<em>}
&& es un y. Por lo tanto, si se cumple la condicion1 y se cumple tambin la condicin2, hacemos el hacer1, si
alguna de las dos no se cumple, haremos el hacer2
Switch
Crear un programa principal en el cual trataremos de identificar que operador aritmtico es. El programa tendr un
nico atributo que sera un carcter, al cual le asignaris vosotros el valor que queris (*, +, . /) o bien uno distinto
de los signos aritmticos (a, x, $, ).
Si es el *, deber mostrar por pantalla El operador es el *.
Si es el +, deber mostrar El operador es el +.
Si es el -, deber mostrar El operador es el .
Si es el /, deber mostrar El operador es el /.
Si no es ninguno de los anteriores, mostrar Carcter desconocido.
Estos son los ejercicios que os proponemos para que practiquis. Ya sabis que si tenis alguna duda,
la podis exponer y os la resolveremos.
Bucle
-Crear un programa principal que sea capaz de imprimir por pantalla los nmeros del 0 al 10 (bucles).
Solucin:
Alternativa:
Podis ver que de un while a un for cambia un poco la estructura, sobre todo porque la variable de control debes
inicializarla fuera de la estructura del bucle.
Vamos con el segundo problema.
IF
Crear una clase que se llame ExamenConducirTeorico, con un unico atributo que se llame numFallos.
1. Poseer un constructor al que se le pase como parametro el numero de fallos .
2. Mtodo que se llamara esApto, no se le pasa ningun parmetro. Si numFallos es menos o igual que 3, mostrara
3.
un mensaje por pantalla (por ejemplo: aprobado). Sino mostrara otro mensaje ( por ejemplo: suspenso).
Para probar la clase, en un programa principal, crearemos un objeto de la clase (asignndole el nmero de
fallos que queramos) y haciendo una llamada a la funcin esApto.
A continuacin, una vez tenemos la clase, vamos a hacer un pequeo MAIN para probarla
Como podis ver, el funcionamiento de un main creando objetos es sencillo, puedes acceder a los atributos y mtodo
de la clase del objeto (siempre que no sean privados) poniendo:
objCreado.metodo(atributos);
objCreado.atributosDeLaClase;
Hasta aqu ha llegado la solucin de los dos primeros ejercicios. Al principio lo podis ver un tanto complicado, pero
todo es cuestin de prctica. Hay que ir rodando poco a poco. Si tenis alguna duda sobre la implementacin o la
solucin, nos lo pods comentar
En la siguiente entrega, veremos la solucin de los dos siguientes problemas, la del problema del elseif y la del
switch.
ElseIf
Crear un programa principal con dos atributos enteros, que sern dos edades de dos personas, se les asignar un valor
que vosotros escogeris.
Si las dos son mayores de 18, se mostrar por pantalla Pueden votar los dos.
En el caso de que solo uno tenga mayora de edad, se mostrara por pantalla un mensaje indicando quin puede
Solucin:
Comentar que losmas complicado tal vez sea el uso del operador &&. Resulta de bastante utilidad ya que de no
haberle utilizado, el numero de if habra aumentado hasta el doble, ya que es una comparacin. Este operador junto
con ||, nos van a servir de mucho en un futuro prximo.
&& significa un AND (i lgico), ambas cosas deben cumplirse.
|| significa un OR (o lgico), se cumple una cosa u otra.
Vamos con la solucin del segundo problema.
Switch
Crear un programa principal en el cual trataremos de identificar que operador aritmtico es. El programa tendr un
nico atributo que sera un carcter, al cual le asignaris vosotros el valor que queris (*, +, . /) o bien uno distinto
de los signos aritmticos (a, x, $, ).
Solucin:
Solucin alternativa:
Como podis ver, la solucin alternativa resulta algo mas pesada a la vista, ya que tienes que hacer comparaciones
que con el switch, puedes suprimir, ya que el propio switch, internamente se encarga de hacerlo.
Hasta aqu, la resolucin de los ejercicios. Cualquier duda o comentario sobre la resolucin, as como posibles
soluciones alternativas que queris compartir, no las podis exponer.
En el siguiente volumen, os propondremos la primera parte de un ejercicio, se tratara de la implementacin de una
clase con funcionalidades, pero bueno, no quiero desvelar ms, el lunes lo veris.