Está en la página 1de 14

Java - Lectura 1

Computacin 2 Profesor Hernn Silva V. Primavera, 2013

Computacin 2 Hernn Silva V. Primavera, 2013

Java 1. Fundamentals
1.1. Introduccin

Java es un lenguaje de propsito general, de orientacin a objeto. Muy popular por estos das y de amplio uso en Internet. Pertenece a Sun Microsystems y Oracle.

1.1.1.
Java 2 EE

Sabores de Java1

Java 2 SE

Java 2 ME

Enterprise Edition. Es la plataforma de desarrollo de aplicaciones para servidores utilizados en un entorno empresarial. IncluyeEnterprise JavaBeans (EJB), JavaServer Pages (JSP), Servlets, JDBC, JNDI y especificaciones para interactuar con sistemas de Administracin ya implantadas en empresas. Standard Edition. Es la plataforma de desarrollo de aplicaciones en clientes, fundamentalmente orientadas a ordenadores de sobremesa o pequeos grupos de servidores. Incluye el API bsico de Java con applets, red, RMI, Servlets, JDBC, Swing, AWT, JFC 2D, Java Media (Java 3D, Java Sound, JAI, JMF), JavaBeans (no Enterprise JavaBeans) y algunos ms. Micro Edition. Es la plataforma de desarrollo de aplicaciones en dispositivos de capacidades limitadas, por ejemplo, telfonos mviles, asistentes digitales personales (PDA), dispositivos WAP, sistemas de navegacin para coches, etc

http://www.fismat.umich.mx/computacion/notas/introduccion/introduccion.html
1

Java - Lectura 1

1.2.

Sintaxis Bsica

1.2.1.

Primer programa: Hola Mundo


// // Aplicacin HolaMundo de ejemplo // class HolaMundoApp { public static void main( String args[] ) { System.out.println( "Hola Mundo!" ); } }

Aqu podemos ya observar algunos elementos importantes: El programa corresponde a una nica clase, de nombre HolaMundoApp, la que contiene un nico mtodo, de nombre main. El texto del programa debe estar contenido en un archivo del mismo nombre de la clase, y con extensin java, es decir, en este caso el archivo se debe llamar HolaMundoApp.java. El mtodo main recibe como parmetro de entrada un arreglo de nombre args y no entrega resultados en la salida (lo que se indica por la palabra void) El arreglo args es de tipo String y de largo indeterminado (pues args[] no indica la cantidad de elementos del arreglo) El modificador static lo explicaremos ms adelante, en el contexto de los objetos. Un adelanto: Significa que si se crea otro objeto de la clase HolaMundoApp, el mtodo main no se duplicar para este nuevo objeto, sino que seguir siendo nico y asociado a la clase. La clase System posee un objeto out, que es de tipo o clase PrintStream, y representa la salida estndar del medioambiente donde se est ejecutando la aplicacin (tpicamente, la salida por pantalla). El objeto out tiene un mtodo de nombre println, que recibe como parmetro un string, y cuya funcin es desplegar dicho string en la salida estndar del sistema.

Java - Lectura 1

1.2.2.

Ciclos y clculos simples


// // Aplicacin ejemplo // class SampleApp { public static void main( String args[] ) { int suma = 0; for ( int i=1; i<=10; ++i ) { suma = suma + i; } System.out.println( "valor es: " + suma ); } }

1.2.3.

Lo mismo con un while


// // Aplicacin ejemplo // class SampleApp { public static void main( String args[] ) { int suma = 0; i = 1; while ( i<=10 ) { suma = suma + i; i = i+1; } System.out.println( "valor es: " + suma ); } }

Este programa tiene un pequeo error en la lnea i = 1; Cul es el error ?

Java - Lectura 1

1.2.4.

Leer desde teclado


// // Ejemplo de IO desde teclado // class IOBasico { public static void main( String args[] ) { // create Scanner to obtain input from command window Scanner input = new Scanner( System.in ); System.out.println( "hi" ); System.out.print( "Enter first integer:" ); // prompt int number1 = input.nextInt(); // read first number from user System.out.print( "Enter second integer:" ); // prompt int number2 = input.nextInt(); // read second number int sum = number1 + number2; // add numbers System.out.println("Sum is " + sum); // display sum } }

Esta es una primera versin bsica de IO desde teclado. Primero analizaremos este programa y luego, en el siguiente ejemplo, veremos una versin ms elaborada. El programa crea un objeto de nombre input, del tipo Scanner. Esto se efecta con la palabra reservada new. Los Scanner son objetos que tienen mtodos que permiten leer informacin desde un medio de entrada, y analizar esta entrada para convertirla en datos de algn tipo definido, como son nmeros enteros, strings, etc. La creacin de este objeto input se efecta a travs de un constructor. Un constructor es un mtodo de una clase, cuya funcin es crear nuevas instancias u objetos de dicha clase. La clase System posee un objeto de nombre in, de tipo o clase InputStream, que representa la entrada estndar del medioambiente donde se est ejecutando la aplicacin (tpicamente, la entrada por teclado). En este ejemplo, el constructor de la clase Scanner recibe como parmetro de entrada al objeto System.in, indicando con esto que la informacin ser leida desde el teclado.
4

Java - Lectura 1

El objeto creado, input, tiene un mtodo de nombre nextInt, cuya funcin es leer desde el dispositivo de entrada, y entregar como resultado un nmero entero. En nuestro caso, la informacin ingresada debe precisamente corresponder a un nmero entero pues, de no ser as, el programa caer en una condicin de error.

1.2.5.

Leer desde teclado, versin elaborada


// // Ejemplo de IO desde teclado // class IOBasico { public static void main( String args[] ) { // create Scanner to obtain input from command window Scanner input = new Scanner(System.in); String skipLine; System.out.print("Enter texto: "); String texto = input.nextLine(); System.out.println ("texto : " + texto); System.out.print("Enter integer: "); int number1 = input.nextInt(); skipLine = input.nextLine(); System.out.println ("int : " + number1); System.out.print("Enter double: "); double number2 = input.nextDouble(); skipLine = input.nextLine(); System.out.println ("double : " + number2); System.out.print("Enter texto: "); String texto2 = input.nextLine(); System.out.println ("texto : " + texto2); System.out.print("Enter integer: "); int number3 = input.nextInt(); skipLine = input.nextLine(); System.out.println ("int : " + number3); } }

Java - Lectura 1

Esta es una segunda versin de IO desde teclado, que mezcla datos de tipo numrico con datos de tipo String. Se agrega la instruccin input.nextLine() despus de cada lectura de datos de tipo numrico. El objetivo es vaciar el buffer de cada lnea de entrada y que las lecturas de los datos numricos sean limpias (se sugiere probar qu sucede si no se agregan estas lneas). Similar al caso anterior, el objeto input que es de tipo Scanner, tiene mtodos para leer nmeros enteros (nexInt), nmeros decimales (nextDouble) y strings de datos (nextLine).

1.2.6.

Disgresin. Estndares en Java2. Nombres3.

Clases: Para todo nombre de clase, la primera letra debe de ser Mayscula, si son varias palabras se debe de intercalar entre maysculas y minsculas, este mecanismo de nombre es llamado camelCase (Ej: NombreDeClase, Animal, Factura). Interfaces: Aplica la misma definicin de clases, pero se debe colocar la terminacin able al final del nombre de la clases (Por ejemplo Runnable, Serializable). Mtodos: Para los metodos de clases, la primera letra debe ser minscula, si son varias palabras se debe de intercalar entre minsculas y maysculas, para el caso de los mtodos de clases aplica el mecanismo del camelCase (Por ejemplo getNombre, setEdad, buscarPorIdPersona). Variables: Para las variables, se aplica el caso de los mtodos, donde la primera letra es minscula, y las dems se deben de guiar por el mecanismo de camelCase, lo que es importante de destacar, es que los nombres de las variables, adems de cumplir lo anterior, deben ser cortos y descriptivos en si mismo. (Por ejemplo: nombre, edad, idPersona).

http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc136057.html http://www.elclubdelprogramador.com/2011/08/22/java-nomenclatura-estandar-delcodigo-java/
6

Java - Lectura 1

Constantes: Para la constantes, su nombre debe ser escrito completamente en Maysculas, y para la separacin de palabras se debe usar el underscore/guin bajo (_). (Por ejemplo MAX_SUMA, VALOR_MULTIPLO).

1.2.7.

Disgresin. Estndares en Java. Indentacin del cdigo.

Siempre se indenta 4 espacios el cdigo encerrado entre corchetes '{' y '}'. El primer corchete est en el mismo rengln que la instruccin. A partir del ltimo corchete '}' se termina la indentacin.

Ejemplos: void main( int argc, char *argv[] ) { // Cdigo indentado dentro de la funcin } if ( condicin ) { // una instruccin indentada } if ( condicin ) { // una instruccin indentada } else { // primera instruccin // segunda instruccin bien indentada // tercera instruccin } for ( int i=1; i<=20; ++i ) { // primera instruccin } do { // primera instruccin } while ( condicin ); switch ( value ) { case 'a': case 'b': // primera instruccin // segunda instruccin break; case 'c': // primera instruccin break; default: // primera instruccin break; } list::iterator it = L.begin(); for ( ; it != L.end(); ++it ) { int a = it->first; // alineacin long b = it->second; // y espaciado c = ( ((long)(a) - b) / 2 ) >> 5; delta = b - c }

while ( condicin ) { // primera instruccin // segunda instruccin bien indentada }

Java - Lectura 1

1.3.

Arreglos

Los arreglos en Java son estructuras lineales que contienen datos de un mismo tipo. El tipo de datos se refiere a datos elementales (por ejemplo, todos enteros, todos decimales, booleanos, etc), o tambin objetos (en este caso, todos deben ser de una misma clase). Un arreglo es identificado con un nombre, y los datos que contiene son accesados a travs de un ndice. En Java, la posiciones de un arreglo se cuentan a partir de la posicin cero. Eso significa que un arreglo de tamao n posiciones, presenta subndices desde cero (primera posicin del arreglo) hasta n-1 (ltima posicin).

1.3.1.

Primer programa de Arreglos


// // Aplicacin de Arreglos // class PrimerPgmArreglos { public static void main( String args[] ) { int [] arr = new int [10]; for ( int i=0; i<10; ++i ) { arr[i] = i; } System.out.println( "Primera posicion: " + arr[0] ); System.out.println( "Ultima posicion: " + arr[9] ); } }

Explicacin: En este ejemplo el programa crea un arreglo de nombre arr, de tipo entero, de 10 posiciones. Ntese aqu nuevamente el uso de la palabra new (los arreglos tambin son objetos). El programa luego inicia un ciclo para llenar el arreglo con valores (desde las posiciones 0 a 9).

Java - Lectura 1

Finalmente despliega los valores almacenados en la primera y ltima posicin del arreglo.

1.3.2.

Recorriendo Arreglos
// // Aplicacin de Arreglos // class ArrayApp { public static void main( String args[] ) { int n = 10; int [] arr = new int [n]; for ( int i=0; i<n; ++i ) { arr[i] = i; } for ( int i=0; i<n; ++i ) { System.out.println( "posicion: " + i + , valor: + arr[i] ); } } }

1.3.3.

Otra forma de recorrer Arreglos


// // Aplicacin de Arreglos // class ArrayApp { public static void main( String args[] ) { int n = 10; int [] arr = new int [n]; for ( int i=0; i<n; ++i ) { arr[i] = i; } for ( int val: arr ) { System.out.println( valor: + val ); } } }

Java - Lectura 1

1.3.4.

Cargar un arreglo con datos ingresados por teclado

El siguiente programa solicita una cantidad de datos a almacenar, y luego lee la cantidad de datos indicada, cargndolos en un arreglo. En este caso trabaja con un arreglo de nmeros enteros. Finalmente, para mostrar el resultado logrado, despliega los datos almacenados en el arreglo. // // Aplicacin de Arreglos // class ArrayApp { public static void main( String args[] ) { // create Scanner to obtain input from command window Scanner input = new Scanner( System.in ); // leer cantidad de datos a almacenar System.out.print("Ingrese cantidad de datos para almacenar: "); int arrSize = input.nextInt(); // leer datos y almacenar en arreglo int[] arr = new int[arrSize]; for ( int i = 0; i < arrSize; ++i ) { System.out.print("Ingrese numero: "); int num = input.nextInt(); arr[i] = num; } // desplegar el arreglo for (int num : arr) { System.out.println(num); } } }

Java - Lectura 1

10

1.4.

Funciones y Subrutinas (Mtodos4)

1.4.1.

Introduccin

Las funciones y subrutinas se utilizan como un mecanismo de factorizacin de cdigo. La idea es: Trozos de cdigo que se utilizan ms de una vez Mejorar la legibilidad del cdigo

Como Usted sabe, las Funciones/Subrutinas (en general se les llama rutinas tanto para referirse a funciones como subrutinas) son trozos de cdigo que encapsulan una tarea o funcionalidad. Lo ms importante, pueden ser llamadas desde otras partes de un programa, as que permiten reutilizar cdigo (para tareas que se necesita ejecutar ms de una vez) y facilitan la legibilidad y el orden en su programa. Adems, una rutina tambin puede utilizar o llamar a otra rutina (imagine lo poderoso que puede ser esto ...) // // Ejemplo de uso de Rutinas // class AppEjemplo { public static void main( String args[] ) { for ( int i=0; i<20; ++i ) { System.out.println( "Factorial de " + i + es + factorial(i) ); } } private static int factorial (int n) { int fact = 1; for (int i = 2; i <= n; ++i) { fact = fact * i; } return fact; } }

En Java (y en OOP) las rutinas se conocen como mtodos


11

Java - Lectura 1

Explicacin: La rutina (mtodo) se declara en la lnea: private static int factorial (int n) Esa declaracin corresponde a la firma del mtodo La parte int n corresponde a los parmetros o argumentos de entrada. En este caso, el mtodo recibe como entrada un valor entero, el que ser conocido dentro de la lgica del mtodo como n. La parte int indica que el mtodo retornar como parmetros o argumentos de salida un valor entero. Este retorno se materializa en la lnea return fact. El nombre o identificador del mtodo es factorial, y con ese nombre es invocado en el cuerpo del main (por cierto, main tambin es un mtodo). El cuerpo de un mtodo corresponde al conjunto de instrucciones que conforman al mtodo. Los modificadores static los veremos ms adelante. Respecto de los modificadores de visibilidad/accesabilidad public y private podemos observar lo siguiente: Como main est declarado public significa que es un mtodo de la clase AppEjemplo, que puede ser invocado, tanto internamente como desde fuera de dicha clase. Es decir, en el caso desde fuera, para dar inicio a la aplicacin, o desde fuera, siendo llamado por otra clase de la aplicacin, si es que la hubiese. Como el mtodo o funcin factorial est declarado private, significa que es un mtodo de la clase AppEjemplo, que slo puede ser invocado desde dentro de dicha clase. Es decir, es un mtodo que es visible slo internamente en la clase AppEjemplo, y slo puede ser invocado por mtodos de la misma clase (en este caso est siendo invocado por el mtodo main, que tambin pertenece a la clase AppEjemplo).

Java - Lectura 1

12

1.4.2.

Otro Ejemplo
! !! !! ! ! ! ! !! ! ! ! ! ! ! ! ! ! ! ! !! !!!

!"#$%&'(")%'! !!!"#$%!! !!!!!

En este caso, el factorial se utiliza 3 veces. Es una funcionalidad ideal para su factorizacin. Veamos cmo queda en Java: class AppEjemplo { public static void main( String args[] ) { Scanner input = new Scanner( System.in ); System.out.print("Ingrese n: "); // leer n int n = input.nextInt(); System.out.print("Ingrese k: "); // leer k int k = input.nextInt(); if ( n < k ) { System.out.println (Error : + n + es menor que + k); System.exit(0); // Termino del programa } int comb = factorial(n) / ( factorial(n-k) * factorial(k) ); System.out.println (n : + n); System.out.println (k : + k); System.out.println (Combinatoria es : + comb); } private static int factorial (int n) { int fact = 1; for (int i = 2; i <= n; ++i) { fact = fact * i; } return fact; }

Java - Lectura 1

13

También podría gustarte