Programacin en Java
Eduardo Serna-Prez
La orientacin a objetos puede percibirse desde dos puntos de vista, como una
metodologa de diseo de software o como un paradigma de programacin, donde se
definen a los programas en trminos de "clases de objetos", estos objetos son entidades
que combinan su estado (es decir, datos) y su comportamiento (esto es, procedimientos
o mtodos).
La programacin orientada a objetos (POO) expresa un programa como un conjunto de
stos elementos, que se comunican entre ellos para realizar tareas. Esto difiere de los
lenguajes procedurales tradicionales, en los que los datos y los procedimientos estn
separados y sin relacin. La POO est pensada para hacer programas ms fciles de
organizar, mantener y reutilizar, ya que anima al programador a pensar los programas en
trminos de tipos de datos, y en segundo lugar en las operaciones especficas para esos
tipos de datos.
1.1
Orgenes de Java
Con Simula I (1961 al 65) y Simula 67, Nygaard y Dahl introducan los conceptos bajo los
cuales ms tarde todos los lenguajes de programacin orientada a objetos serian
construidos: objetos, clases, herencia, cuantificador virtual y ejecucin de programas
multi-hilo.
El trmino Orientado a Objetos fue acuado por Alan Kay (Figura 3) en la dcada de los
1970s, as mismo, l es considerado tambin como uno de los creadores del modelo
orientado a objetos. Alan Kay desarrollo mejoras sustnciales al modelo de
programacin, generando un lenguaje llamado Smalltalk que era un sistema
completamente dinmico en el cual las clases pueden ser creadas y modificadas
dinmicamente.
Programacin en Java
Eduardo Serna-Prez
Programacin en Java
Eduardo Serna-Prez
La Herencia Es la capacidad de definir una nueva clase a partir de otra clase. De esta
forma, la reutilizacin del cdigo esta garantizada. Las clases estn clasificadas en
una jerarqua estricta, donde la clase padre es conocida como superclase y la clase
hijo como clase derivada. Esto significa que la clase derivada dispone de todos los
atributos y mtodos de su superclase.
Estos conceptos son los pilares de la POO que permiten facilitar la comunicacin,
incrementar la productividad y la consistencia, facilitar la modificacin de los programas y
reducir la complejidad en esfuerzos de resolucin de problemas.
Los Inicios del Lenguaje Java
Java es uno de los lenguajes de programacin orientado a objetos mas verstil e
interesante de finales del siglo XX (1994), detrs de l existe una inherente similitud con la
sintaxis de C++, debido quizs a una estrategia de mercado ya que resultaba como una
especie de colonizacin de C++ a Java.
1.1.2
Programacin en Java
Eduardo Serna-Prez
Orientacin a objetos
Esquema distribuido
Esquema de programacin paralelo (multithreads)
Esquema de seguridad en ejecucin y transacciones
Plataforma independiente (JVM)
1.2
1.2.1
Nombre-Clase
En Java se elimina el uso de apuntadores que pueden afectar la estabilidad del cdigo, en
tal caso existe nicamente un conjunto de datos nativos y un sin nmero de objetos, a
los que llamaremos datos referenciados o simplemente referencias (objetos). Adems
del modelo orientado a objetos Java soporta el modelo de programacin distribuida que
nos permite utilizar dos o mas computadoras (coleccin de computadoras heterogneas)
que se comunican a lo largo de una red para ejecutar una tarea en comn.
1.2.2
Programacin en Java
Eduardo Serna-Prez
Java es un lenguaje de programacin muy peculiar pues se cataloga como compiladorinterprete, pues es capaz de generar un tipo especifico de cdigo intermedio que es
fcilmente transportable a casi cualquier plataforma computacional esto se debe a que la
tecnologa de java se sustenta en 3 mecanismos principales que como veremos a
continuacin le permiten adquirir todos los beneficios de un sistema multiplataforma:
Java VM: La maquina virtual de java (JVM) provee una especificacin de plataforma la
cual le permite ejecutar cualquier programa compilado en java (bytecode). De esta
forma el compilador de java toma cualquier cdigo hecho en java y genera un archivo
precompilado llamado bytecode que es un conjunto de instrucciones que puede ser
interpretado por cualquier maquina virtual de java.
Programacin en Java
Eduardo Serna-Prez
Ejecucin
Compilacin
java
clase Loader
Ejemplo.java
javac
Ejemplo.class
Se lee el
programa
de disco,
red u otro
medio
verificador
Bytecode
Interprete
generador
de cdigo
JIT
Ejecucin
Hardware
1.2.3
Programacin en Java
Eduardo Serna-Prez
su
de
se
de
1.2.4
Los ambientes de desarrollo son aplicaciones que nos permiten escribir en un lenguaje de
programacin de manera sencilla, ya que se puede verificar gradualmente el producto que
estemos desarrollando. De esta forma el ambiente de desarrollo se encuentra totalmente
Programacin en Java
Eduardo Serna-Prez
NetBeans: una herramienta creada por una filial de Sun Microsystems, es una
buena herramienta de diseo aunque algo lenta si se cuenta con poca memoria
principal. Permite el diseo RAID (diseo rpido de interfase).
Eclipse: una herramienta de distribucin libre bastante flexible en uso de recursos
y fcil de emplear debido a su poca complejidad, permite la opcin de autocompletar texto.
Notepad++: es una herramienta amigable y fcil de emplear, cuenta con una
versin libre bastante austera y simple de integrar para los lenguajes ms
comunes adems de Java.
Convenciones de escritura
La sintaxis del lenguaje nos describe la manera en como deben ser estructurados los
programas escritos en el lenguaje de programacin para que sean considerados como
entidades validas, a continuacin describiremos algunas convenciones bsicas para la
escritura de programas Java.
Es importante recordar que los nombres de los identificadores en Java son sensibles a las
letras maysculas y minsculas. Para facilitar la lectura y mantenimiento de nuestros
programas aplicaremos las siguientes normas:
Programacin en Java
Eduardo Serna-Prez
1.3.2
Palabras reservadas
Las palabras claves tienen un significado especial para el compilador de Java, ya que
identifican el nombre de un tipo de dato o una construccin de programa. Es decir son el
conjunto de primitivas que forman al lenguaje de programacin, adems de la estructura
gramatical que forma el lenguaje de programacin.
A continuacin se muestra el conjunto de primitivas del lenguaje Java:
abstract
assert
bolean
break
byte
base
match
char
class
const
continue
default
do
double
else
enum
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
strictfp
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
No existe el operador sizeof que nos permita acceder a la memoria, pero se cuanta
con otro operador mas potente que nos permite manipular objetos propiamente.
Programacin en Java
Eduardo Serna-Prez
Comentarios
tambin
total = a + b
+ c + d;
Un bloque, algunas veces llamado estatuto compuesto, es un grupo de estatutos
encerrados entre llaves de apertura y cierre ({}). Un bloque es til cuando se requiere
agrupar estatutos.
{
// un bloque de estatutos
x = y +1;
y = x +1;
}
while ( i < long ) { // un bloque de estatutos puede estar
a = a + i; // contenido en otro bloque
If ( a == max ) { // y en otro bloque
b = b + a;
a = 0;
}
i = i + 1;
}
Elemento basico de programacin
En el lenguaje de programacin java solo es posible construir clases, por lo que la unidad
mnima de programacin es la clase. Dentro de la definicin de una clase nicamente
puede existir una sola funcin main, que sera la responsable del inicio y fin de la
ejecucin del programa, y a su alrededor se encontraran todas las dems clases que
formen parte del programa:
10
Programacin en Java
Eduardo Serna-Prez
class NombreClase {
public static void main( String [] args )
{
System.out.println(" Hola mundo !!! "); // mensaje de salida
}
}
1.3.3
El lenguaje de programacin Java cuenta con varios tipos de datos. Estos caen en dos
grandes categoras:
1. Datos Primitivos: Son aquellos tipos de datos que se encuentran inmersos en el
lenguaje y cuentan con un espacio fijo para su valor.
2. Datos Referenciados: En este grupo se encuentran los arreglos y los objetos de
cualquier tipo de clase que se tenga disponible en el API o que se construya por el
programador.
Los tipos primitivos son valores simples, no son objetos, de manera que se trata del tipo
de dato mas simple el cual puede ser claramente identificado y existe en un lugar
especfico de la memoria. Los tipos referenciados u objetos de una clase son tipos de
datos compuestos.
El lenguaje Java define ocho tipos primitivos, los cuales pueden ser considerados en
cuatro categoras:
o
o
o
o
Lgicos
boolean
Texto
char
Enteros
byte, short, int y long
Punto flotante
float y double
Lgicos
Los valores lgicos son representados usando los tipos bolanos, los cuales toman uno
de dos posibles valores literales: true (verdadero) false (falso). A continuacin se
muestra un cdigo de ejemplo que declara e inicializa una variable de tipo boolean.
boolean verdad = true;
No existe ajuste (cast) entre valores de tipo entero y bolanos, como ocurre en otros
lenguajes de programacin como C/C++. Solo pueden usarse cualquiera de las dos
literales definidas.
Texto
Los caracteres simples son representados usando el tipo char. Un char representa un
carcter de 16-bits en UNICODE. Los caracteres deben ser indicados como literales
encerrados en comilla simple ( ), por ejemplo:
11
Programacin en Java
Eduardo Serna-Prez
La letra a
\t
una tabulacin
\u????
Enteros
Existen cuatro tipos enteros en Java. Cada tipo es declarado usando una de sus palabras
claves, byte, short, int long. Se pueden crear literales de tipos enteros usando la forma
decimal, octal hexadecimal.
2
077
0xBAAC
Todas las literales enteras son de tipo int a no ser que se especifique lo contrario, es decir
se puede agregar al final de la literal numrica la letra L, que indica que el valor ser
entero largo.
A continuacin se presenta una tabla con el tamao y rango que representan los
nmeros:
Longitud
Tipo
Rango
8 bits
16 bits
32 bits
64 bits
byte
short
int
long
de -2 a 2 -1
15
15
de -2 a 2 -1
31
31
de -2 a 2 -1
63
63
de -2 a 2 -1
Punto flotante
Los tipos flotantes pueden declararse como float o double. A continuacin veremos
algunos ejemplos de numero flotantes. Las literales flotantes pueden incluir el punto
decimal o el termino exponente (E), adems de las letras F para float y D para double. Los
nmeros flotantes en Java ocupan 32 bits, mientras que los valores dobles ocupan 64
bits.
3.14
6.02E23
2.718F
123.4E+306D
12
Programacin en Java
Eduardo Serna-Prez
Las variables son los identificadores construidos para asignar valores que sern
manipulados a lo largo del programa. Las declaraciones de variables deben seguir la
siguiente sintaxis:
<tipo de dato> identificador [ = valor ] ;
Las asignaciones siempre deben de corresponder al tipo de datos que se est
manejando, existen errores comunes de asignacin, como son:
int y = 3.1415926;
double w = 175,000;
boolean sw = 1;
float z = 3.14156;
Los identificadores comienzan con letra, guin bajo signo de dlar, y el resto de los
caracteres pueden ser dgitos. Recuerde que los identificadores son casos sensitivos.
Debido a que pueden emplearse caracteres no ASCII, tenga presente lo siguiente:
El siguiente es un programa que muestra como declarar variables de distinto tipo de dato
primitivo y como es posible emplear el operador de suma para concatenarlo con una
salida de datos, tome en cuenta que al realizar una operacin dentro de una llamada a
print deber emplear los parntesis para hacer hincapi en la operacin aritmtica.
public class Main {
public static void main( String [] args ) {
// delcaracion de variables locales
String mensaje = "Hola";
double a = 13.2345;
int b = 12;
System.out.println(mensaje + " mundo !!! ");
System.out.print("el total de " + a + " + " + b);
System.out.print(" es " + (a+b));
}
}
Ajuste de datos primitivos
El ajuste primitivo o cast, significa asignar el valor de un tipo de variable a una de otro
tipo. Si dos tipos son compatibles, Java realiza el ajuste automticamente. Por ejemplo un
valor tipo int puede ser asignado sin ningn problema a una variable tipo long
(promocin).
13
Programacin en Java
Eduardo Serna-Prez
Java emplea la palabra clave final para indicarle al compilador de que las variables
declaradas bajo esta etiqueta debern comportarse como si fueran constantes. Esto
indica que su valor no puede ser modificado una vez que se haya declarado e inicializado.
Las constantes se declaran de la siguiente manera:
final double PI = 3.14159;
final char VALOR = S;
final String MENSAJE = Error;
Si se intenta cambiar el valor de las variables tipo final desde una aplicacin, se genera un
error de compilacin. Es importante recordar, como medida de diseo, que los nombres
de las constantes deben escribirse con letras maysculas para facilitar su ubicacin
dentro del cdigo.
Tambin los las funciones miembro (mtodos) pueden ser de tipo final, en cuyo caso no
podrn ser sobrecargados.
14
Programacin en Java
Eduardo Serna-Prez
Es aquel tipo de dato que almacena una direccin de memoria donde aloja la referencia a
un bloque de memoria asignado de manera dinmica. Aqu podemos encontrar varias
clases que ya se encuentran implementados dentro del API de Java, pero inicialmente
podramos proporcionar una clasificacin burda de la siguiente manera:
o
o
o
o
o
Arreglo
Cadena de caracteres
Wrappers
Definidas por usuario
<tipo> [ ] <identificador>
String
Character, Byte, Short, Integer, ...
class <Identificador> { }
Los arreglos son estructuras de datos que agrupan elementos del mismo tipo
(homogneo). Los arreglos nos permiten referirnos a grupos de objetos por un nombre
comn.
Los arreglos unidimensionales, son arreglos que cuentan nicamente con una fila y con
una serie de columnas que determinan la dimensin del arreglo. En Java es posible crear
arreglos de cualquier tipo, ya sea datos primitivos o definido por el usuario (objetos).
Declaracin de arreglos unidimensionales
La sintaxis es la siguiente:
<tipo> [ ] <nombre-arreglo>;
Cuando queremos que una variable sea un arreglo nicamente anteponemos los
corchetes, esto le indica al compilador que la variable de la derecha ser una referencia
de arreglo.
En el lenguaje Java un arreglo es un objeto an cuando el arreglo sea de tipos de datos
primitivos, adems como el resto de los objetos, la declaracin no crea el objeto por si
mismo. En su lugar la declaracin de un arreglo crea una referencia que puede ser
empleada para un arreglo. El espacio en memoria usado para los elementos del arreglo,
es dinmico, por lo que es necesario emplear el operador new para crear el espacio para
los elementos del arreglo.
Creacin de referencias para arreglos
Se deben crear arreglos como objetos, empleando el operador new, por ejemplo,
suponga la creacin de un arreglo de caracteres (primitivo).
char[] s;
s = new char[26];
for ( int i=0; i<26; i++ ) {
s[i] = (char) ('A' + i);
}
El operador new crea un arreglo con 26 caracteres que sern inicializados cada uno de
sus elementos a carcter vaci (\u0000). De esta forma el arreglo esta listo para ser
manipulado. Recuerde que el lmite de los arreglos va de 0 a N-1.
15
Programacin en Java
Eduardo Serna-Prez
Debe tomar en cuenta que todo objeto referenciado en java es por defecto un objeto de la
clase Object, la clase Object es la clase ms alta en la jerarqua de objetos referenciados
y ms adelante veremos que tiene varios mtodos y propiedades asociadas a l y que
son transferidas al resto de los objetos referenciados por medio de un esquema de
herencia.
Observe como el objeto char [] s, es inicializado mediante el operador new, que es el
responsable de asignar un bloque de memoria temporal a todos los objetos referenciados.
Ahora debemos percatarnos que siendo un tipo de dato referenciado, como tal, tendr
propiedades como por ejemplo el nmero de elementos inicializados en l (length) que
ser su longitud.
public class ArrayChar {
public static void main( String args [] ){
char[] s;
int dim = 26;
s = new char[ dim ];
for ( int i=0; i < 26; i++ ) {
s[i] = (char) ('A' + i);
}
System.out.print("El abecedario es ");
for ( int i=0; i < s.length; i++ )
System.out.print(s[i]);
System.exit(0);
}
}
Inicializacin de arreglos
Cuando se crea un arreglo, cada elemento es inicializado. Para el caso del arreglo de
caracteres vimos que cada carcter es inicializado por defecto a (\u0000) lo que indica
que an no ha sido ingresado ningn dato dentro de la casilla.
Adems es posible crear inicializaciones de manera corta como la siguiente:
char []
16
Programacin en Java
Eduardo Serna-Prez
El objeto que es creado en la primera llamada con new es un arreglo que contiene dos
elementos. Cada elemento es una referencia nula (null) a un elemento de tipo array of
int, y debe ser inicializada cada elemento de manera separada, de manera que cada
elemento apunta a su arreglo. Debido a esto es posible crear matrices no-rectangulares.
En algunos casos esta inicializacin podra parecer tediosa, pues es ms comn emplear
matrices rectangulares, a continuacin vemos como sera la declaracin e inicializacin de
una matriz de enteros:
int [ ][ ] matriz = new int [4][5];
Veamos ahora un ejemplo de una matriz de valores dobles a la que se le asignan valores
de manera aleatoria empleando una funcin esttica llamado random() perteneciente a la
clase Math, veremos ms adelante que al igual que System.out, Math no requiere
construir una instancia de la misma para ser usada:
public class MatrizRand {
public static void main( String args [] ) {
int f = 5, c = 2;
double m[][] = new double [f][c];
System.out.print("numero de filas " + f);
System.out.print("numero de columnas " + c);
for ( int i = 0; i < m.length; i++ )
{
for ( int j = 0; j < m[i].length; j++ )
m[i][j]= Math.random();
}
for ( int i=0; i < m.length; i++ )
{
for ( int j=0; j < m[i].length; j++ )
System.out.print(" ("+ i +"," + j + ") -> "
+ m[i][j]);
System.out.println();
}
System.exit(0);
}
}
Como ya se menciono los arreglos en java son objetos, por lo que el nmero de
elementos que pueden ser almacenados forma parte de sus atributos. Un acceso a un
lmite fuera de su longitud produce un error en tiempo de ejecucin (out of index). Se
recomienda ampliamente emplear el atributo length para iterar dentro de un arreglo.
17
Programacin en Java
Eduardo Serna-Prez
Re-dimensin de arreglos
Despus de que ha sido creado un arreglo, no puede ser redimensionado su tamao. Sin
embargo puede ser empleada la misma referencia a la variable para declarar una nueva
referencia del arreglos por completo.
int [] arreglo = new int [6];
arreglo = new int [10];
En este caso, el primer arreglo pierde la referencia a todos sus componentes, a no ser
que sean almacenados en algn lugar previo a la nueva redefinicin del nuevo bloque de
memoria dinmico.
o
Existen, adems de los arreglos, otro tipo de dato referenciado, la Clase String (o
simplemente String) los objetos de la clase String tienen la peculiaridad de almacenar la
referencia a una literal alfanumerica. Como objeto los Strings tienen una coleccin de
mtodos que les provn de una mayor funcionalidad con otros objetos.
La clase String es una de tantas clases incluidas en la librera de clases de Java (API). La
clase String provee la habilidad de almacenar secuencias de caracteres y nmeros, y
manipularlos de forma sencilla. Los objetos String pueden ser declarados de cinco
maneras:
String nombre = Juan Prez;
String nombre = new String();
String nombre = ; // equivalente
String s = Juan Prez;
String nombre = new String(s);
String nombre = new String(Juan Prez); // equivalente
char [] s = {a,e,i,o,u};
String nombre = new String(s);
char [] s = {a,e,i,o,u};
String nombre = new String(s, 1, 3); // eio
La clase String es la nica que permite construir objetos de ese tipo sin emplear el
operador new, que es el empleado para crear cualquier referencia (objeto) en Java.
Como hemos visto las referencias u objetos adquieren propiedades directas de una clase
superior llamada Object, para el caso de los datos referenciados como el String se tiene el
metodo length() que nos indica el numero de caracteres contenidos en un String. Pero es
importante recordar que dicha clase define muchas mas funciones que pueden resultar
muy til para el manejo de cadenas.
A continuacin se comentan algunas de ellas, pero es importante recordar que se cuentan
con muchas ms. A continuacin asuma que s1 y s2 son objetos de tipo String:
18
Programacin en Java
Eduardo Serna-Prez
19
Programacin en Java
Eduardo Serna-Prez
Las clases envoltorio (Wrappers) son clases que proveen un mecanismo para interactuar
con algn otro tipo de dato abstracto. Para el caso de los tipos de datos primitivos, las
clases envoltorio son un mecanismo ms refinado de programacin para representar
valores primitivos cuando un Objeto es requerido.
Java provee ocho tipos de clases envueltas para datos primitivos:
Tipo primitivo
byte
short
int
long
float
double
char
boolean
Clase envoltorio
Byte
Short
Integer
Long
Float
Double
Character
Boolean
Las clases Wrapper de primitivas numricas se derivan de la clase Number que deriva
de Object. Cada una de estas clases contiene un valor primitivo del tipo relacionado, por
ejemplo un objeto Integer contiene un valor int como atributo.
De manera que estas clases envoltorio (Wrappers) no son ms que clases que modelan
los tipos de datos primitivos tales como enteros flotantes, precisamente estos tipos
primitivos son los nicos elementos en Java que no son clases. Estos Wrappers nos
permiten introducir algunos conceptos interesantes de programacin, como por ejemplo el
autoboxing que consiste en convertir un tipo de dato primitivo a un tipo compuesto,
20
Programacin en Java
Eduardo Serna-Prez
aunque tambin es posible realizar el proceso inverso, el automatic unboxing que trata
de convertir un objeto compuesto a un valor primitivo. Este tipo de conversin es
generalmente transparente al usuario:
unboxing, los valores son desempacados automticamente del tipo Integer al tipo
nativo int para ser procesados y finalmente se asigna a un tipo nativo int.
int r = i + j;
Existe una diferencia significativa entre los tipos primitivos y sus Wrapper; ya que los tipos
primitivos pasan como argumento por valor a los mtodos, mientras que los objetos pasan
por referencia. Esto implica una ventaja en cuanto a eficiencia, pues es posible modificar
el valor de una referencia tipo Wrapper.
Por otro lado las referencias Wrapper ofrecen funcionalidad con varios mtodos estticos
de manera que es posible usarlos sin necesidad de crear un objeto. Por ejemplo la clase
Integer cuenta con un mtodo denominado parseInt que permite convertir una cadena de
caracteres alfanumrica a un valor de una base en particular:
String s = "0001101";
int x = Integer.parseInt(s,2); // x conserva el valor 13
Casi todos estos mtodos pueden utilizarse en forma esttica, de manera que, no siempre
sea necesario crear una instancia para manipularlos. Por ejemplo:
int i;
i = Float.valueOf(12.45).intValue();
Como se habr observado no existe una librera del tipo ctype de ANSI/C que nos permita
manipular caracteres de manera independiente, para ello se emplea la clase Character
que cuenta con varios mtodos que permite manipular caracteres simples.
Por ejemplo:
String s = "Madero 122";
char [] name = s.toCharArray();
for (int index = 0; index < name.length ; index++)
if ( Character.isDigit(name[index]) )
System.out.println("digito " + name[index]);
else if (Character.isLetter(name[index]))
System.out.println("letra " + name[index]);
Tambin es posible crear arreglos de objetos Wrapper, de manera que cada elemento del
arreglo corresponder a un objeto particular:
21
Programacin en Java
Eduardo Serna-Prez
22
Programacin en Java
Eduardo Serna-Prez
Smbolo
++, --, !, - +, type-cast
*, /, %
+, <, >, <=, >=
==, !=
&&
||
?:
=, +=, -=, *=, /=, %=
Los operadores aritmticos siguen las mismas reglas de precedencia que el resto de los
lenguajes que son: la multiplicacin y divisin, modulo, suma y resta. Para los operadores
relacionales y lgicos la interpretacin de evaluacin es de izquierda a derecha.
1.4
23
Programacin en Java
Eduardo Serna-Prez
Sentencias de Control
Las estructuras de decisin son estatutos condicionales que nos permiten la ejecucin
selectiva de porciones de programa (bloques de cdigo) de acuerdo al valor de una
expresin. Java soporta los estatutos if y switch, que nos permiten ramificaciones de
ejecucin en dos o mas ramas.
Sentencia if else
24
Programacin en Java
Eduardo Serna-Prez
25
Programacin en Java
Eduardo Serna-Prez
Ejemplo:
import static java.lang.System.out;
class Prueba {
public static void main(String [] args) {
int [] x = {2,3,5,6,4,1,0},
y = {5,4,2,1,3,6,7};
int r = 0;
for (int i = 0; i < x.length; i++)
r+= (x[i] * y[i]);
out.println("producto escalar es " + r);
return;
}
}
Sentencia while
26
Programacin en Java
Eduardo Serna-Prez
Sentencia for-each
Es una sentencia que acta con elementos que son catalogados como elementos
iteradores.
class Prueba {
public static void main(String [] args) {
int [] x = {2,3,5,6,4,1};
out.println("el vector es ");
for ( int i : x )
System.out.print( i + " ");
return;
}
}
1.4.2
Mtodos estticos
27
Programacin en Java
Eduardo Serna-Prez
28
Programacin en Java
Eduardo Serna-Prez
Observe que el modificador de acceso puede ser omitido si se trata de una funcin local a
la clase principal, de manera que el procedimiento recibe un par de valores y devuelve el
resultado.
import static java.lang.System.out;
class Prueba {
public static void main(String [] args) {
int [] x = {2,3,5,6, 9,1,0};
out.println("la sumatoria es " + suma(x));
}
static int suma( int [] tem ) {
int r = 0;
for (int i = 0; i < tem.length; i++)
r+= tem[i];
return r;
}
}
Inclusive podemos integrar el concepto de sobrecarga que ya se tiene claramente
entendido:
class Prueba {
public static void main(String [] args) {
int [] x = {2,3,5,6, 9,1,0};
int val = 10;
out.println("suma x[0] y val "+suma(x[0], val));
out.println("la suma del arreglo " + suma(x));
return;
}
static int suma(int a, int b){
return a+b;
}
static int suma( int [] tem ) {
int r = 0;
for (int i = 0; i < tem.length; i++)
r+= tem[i];
return r;
}
}
Las variables locales son creadas cuando se realiza la ejecucin de un mtodo y son
destruidas al finalizar el mtodo, a esto se debe el nombre de variables temporales. Las
variables locales deben ser inicializadas manualmente antes de ser usadas.
El compilador genera un error si puede determinar una condicin donde las variables son
usadas antes de ser inicializadas. En la siguiente unidad veremos mas a detalle esta
caracterstica de construccin de programas empleando el mecanismo de orientacin a
29
Programacin en Java
Eduardo Serna-Prez
objetos. Por el momento emplearemos solo funciones estticas a la clase para elaborar
programas sencillos.
Una forma alternativa y quizas mas correcta del programa anterior sera:
public class Main {
public static void main(String [] args) {
int [] x = {2,3,5,6, 9,1,0};
int val = 10;
out.println("suma x[0] y val " + A.suma(x[0], val));
out.println("suma del arreglo " + A.suma(x));
return;
}
}
class A {
static int suma(int a, int b){
return a+b;
}
static int suma( int [] tem ) {
int r = 0;
for (int i = 0; i < tem.length; i++)
r+= tem[i];
return r;
}
}
Como podra darse cuenta se esta construyendo una clase que contiene los metodos
estaticos y en su momento se le solicita a la clase que los ejecute.
Otras implmentaciones simples de los mtodos ya vistos son los siguientes:
class Vector {
public static void main(String [] args) {
int [] x = {2,3,5,6,4,1,0}, y = {5,4,2,1,3,6,7};
System.out.println("producto escalar" +
prodEscalar(x,y));
return;
}
static int prodEscalar( int [] a, int [] b ) {
int r = 0;
for (int i = 0; i < a.length; i++)
r+= (a[i] * b[i]);
return r;
}
}
30
Programacin en Java
Eduardo Serna-Prez
Ejemplo:
class Matriz {
public static void main(String [] args) {
int [][] x = {{2,3},{5,6},{4,1}};
double [][] r = null;
double e = 4.0;
r = matPorEscalar(x,e);
System.out.println("la matriz es ");
mostrar(r);
return;
}
static double [][] matPorEscalar( int [][] tem, double n ) {
double [][] res =
new double [tem.length][tem[0].length];
for (int i = 0; i < tem.length; i++)
for (int j = 0; j < tem[i].length; j++)
res[i][j] = tem[i][j] * n;
return res;
}
static void mostrar( double [][] tem) {
for (int i = 0; i < tem.length; i++) {
for (int j = 0; j < tem[i].length; j++)
System.out.print(tem[i][j] + " ");
System.out.println();
}
return;
}
}
Ejemplo:
class Prueba {
public static void main(String [] args) {
int [] x = {2,3,5,6,4,1};
out.println("la matriz es ");
mostrar(x);
return;
}
static void mostrar( int [] tem) {
for ( int i : tem )
out.print( i + " ");
return;
}
}
31
1.4.3
Programacin en Java
Eduardo Serna-Prez
A continuacin emplearemos el diseo de una funcin esttica muy simple con el objetivo
de ver la independencia de la funcin y mostrar de manera clara lo referente al paso de
parmetros que sigue siendo parte fundamental en la construccin de herramientas
modulares.
public class Sumatoria {
public static void main( String args[] )
{
int f = 5, c = 2;
double m[][] = new double [f][c];
System.out.print("numero de filas " + f);
System.out.print("numero de columnas " + c);
for ( int i = 0; i < m.length; i++ )
{
for ( int j = 0; j < m[i].length; j++ )
m[i][j]= Math.random();
}
for ( int i=0; i < m.length; i++ )
{
for ( int j=0; j < m[i].length; j++ )
System.out.print(" ("+ i +"," + j + ") -> "
+ m[i][j]);
System.out.println();
}
System.out.println(" sumatoria " + sumatoria(m));
System.exit(0);
}
public static double sumatoria(double [][] lista) {
double total = 0;
for( int i = 0; i < lista.length; i++ )
for ( int j = 0; j < lista[i].length; j++ )
total += lista[i][j];
return total;
}
}
Es importante observar como el paso de parmetros se puede realizar con cualquier tipo
de dato reconocido por la sintaxis de java, en ste caso tomamos una matriz y la
enviamos como parmetro a una funcin que se encargara de procesarla para una
sumatoria de sus elementos que la componen, al final regresa como valor el resultado de
dicha operacin.
Una versin un poco distinta, pero versando sobre la misma idea de manipulacin de
datos compuestos como las matrices es la siguiente, observe que en ste caso se
emplean un par de procedimientos. El primero se encarga de recolectar los datos para
llenar una matriz con nmeros aleatorios, posteriormente los datos son transferidos a una
matriz local a la funcin main la cual se encargara de transferir dicho dato a otro
procedimiento vaco(void).
32
Programacin en Java
Eduardo Serna-Prez
33
Programacin en Java
Eduardo Serna-Prez
El manejo de entrada y salida de datos en java no es uno de los ms eficientes entre los
lenguajes de programacin actuales, de hecho resulta bastante frustrante al inicio, pero
gradualmente se llega a entender el mecanismo empleado principalmente empleado en la
entrada de datos estndar.
34
1.5.1
Programacin en Java
Eduardo Serna-Prez
La salida de datos se realiza a travs de la funcin print y println del objeto System.out,
esto indica que la salida de datos ser directa. Los mtodos imprimen objetos Strings por
defecto por lo que no es necesario indicar la tipificacin en una plantilla. El mtodo print
imprimir strings (elementos concatenados) directamente en la salida y el cursos
permanecer en el punto siguiente a la impresin, por el otro lado println imprimir un
salto de lnea despus de su ejecucin.
System.out.println(Valor + 12 + + valor + 12.22);
1.5.2
35
Programacin en Java
Eduardo Serna-Prez
36
1.5.3
Programacin en Java
Eduardo Serna-Prez
Trabajar con la entrada de datos de consola, suele ser en ocasiones un fastidio ya que si
los datos no fueron introducidos correctamente se romper el flujo normal del programa;
en estos casos un cuadro de dialogo simple puede ayudarnos a capturar y enviar
informacin a una pantalla emergente.
La Creacin de cuadros de dilogo simples se realiza empleando objetos de tipo
JOptionPane (javax.swing.JOptionPane).
Salida de datos showMessageDialog
La entrada de datos puede realizarse de manera muy simple con este tipo de dialogo, el
tipo de dato que regresa es un String, el cual puede ser opcionalmente promovido (cast).
Una vez obtenido el valor puede emplearse algn mtodo de los Wrappers para
transformarlo a numero.
//pedir la introduccin de texto
String s = (String)JOptionPane.showInputDialog(null,
"Texto del mensaje:\n","Ttulo del marco",
JOptionPane.PLAIN_MESSAGE);
Salida de datos showConfirmDialog
37
Programacin en Java
Eduardo Serna-Prez
Clase Math
Las funciones matemticas siempre son necesarias para construir ciertas operaciones
que de otra forma resultaran muy complicadas, Java cuenta con una clase llamada Math
que tiene asociada un nmero determinado de funciones, como hemos visto en el ejemplo
anterior la funcin random es capaz de generar un valor aleatorio de tipo double que es
asignado a una variable de ese tipo.
A continuacin se mencionan algunas de las funciones estaticas de Math ms comunes,
aunque es importante recordar que se cuentan con muchas ms:
o
o
o
o
o
38
Programacin en Java
Eduardo Serna-Prez
Glosario de trminos
Java Applets: Pequeos programas automatizados que pueden ser incrustados en paginas
Web.
Objetos: son cajas negras que mantienen ocultas propiedades estructurales llamadas atributos,
y propiedades de comportamiento llamadas operaciones o mtodos.
Package los paquetes son colecciones de clases distribuidas (organizadas) en directorios y por lo
general se encuentran relacionadas entre si. El nombre de los paquetes se escriben en
minsculas.
package proyecto.objetos
Clases los nombres de las clases deben ser sustantivos (desde un punto de vista meramente
didctico se le define como el tipo de palabra que significa persona, animal o cosa concreta o
abstracta), en algunos casos mezclados, con la primera letra de cada palabra en mayscula.
class EjemploUno
Mtodo los nombres de los mtodos deben ser verbos, con palabras mezcladas, con la primera
letra en minscula. En caso de emplear mas palabras se le recomienda hacer la primera letra
mayscula.
calculaPromedio()
Variables todas las variables pueden ser mezclas de palabras procurando emplear la letra
minscula para la primera y empleando las letras maysculas para separar al resto de las
palabras.
apellidoPaterno
Procure limitar el empleo de variables simples (a, b, , x) para el manejo de bucles de control.
39
Programacin en Java
Eduardo Serna-Prez
Constantes se recomienda el uso de las constantes con letras maysculas, separando las
palabras con guin inferior.
TOPE_MAXIMO
Bibliografa
Nell Dale, Chip Weems, Mark Headington, Programming and Problem Solving whith Java, Jones &
Bartlett, 2005, ISBN: 0-7637-3069-6.
Luis Joyanes Aguilar y Matilde, Java 2 Manual de programacin, Osborne-Mc Graw Hill.
http://download.oracle.com/javase/6/docs/api/java/lang/Number.html
http://download.oracle.com/javase/6/docs/api/java/lang/Character.html
http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
40