TÉCNICAS DE PROGRAMACIÓN Lenguaje Java Introducción a Java Daniel Finol
Qué es Java? Java: El lenguaje de programación Java. La Máquina Virtual de Java. La plataforma Java. 2
Qué es Java? El lenguaje de programación Java. Orientado a Objetos. Portable: "Escribir una vez, ejecutar en donde sea" Está muy ligado a Internet pero es un lenguaje de programación general. Introducido en 1995 por Sun Microsystems. Derivado de C y C++. Más simple que C++. 3
Qué es Java? La Máquina Virtual de Java. El compilador produce bytecode, no código ejecutable. La MV ejecuta el bytecode. La máquina virtual es un programa. Java es semi-interpretado. La 4
Qué es Java? La plataforma Java. Es la biblioteca de funciones y objetos que están disponibles para los programas en Java. Es decir es una Application Programming Interface (API). Proveen acceso a la plataforma subyacente (sistema operativo). También conocida como: Java Runtime Environment (JRE, Ambiente de Ejecución de Java). Probablemente tenemos uno en nuestro computador: por lo menos en el navegador. 5
Hola Mundo versión java //Hola.java public class Hola { public static void main(string[] args) { System.out.println("Hola Mundo"); // fin de la clase Hola 6
Hola Mundo Java necesita una clase en todo programa y nada se puede definir fuera de una clase. Por eso necesitamos, alrededor de la función main la definición de la clase Hola: public class Hola {... El nombre del archivo es Hola.java. El nombre de la clase es Hola: no es coincidencia: Clase: estructura que contiene funciones además de datos (variables). En un archivo no puede haber más de una clase pública. (Puede haber más clases no públicas). El nombre del archivo debe coincidir con el de la clase pública, de haberla. 7
Hola Mundo Para que una clase sea un programa debe incluir la subrutina (método) main. La subrutina main debe tener la siguiente forma: public static void main(string[] args) { sentencias Cuando Java ejecuta un programa, el intérprete llama a la subrutina main(), y se ejecutan las sentencias que esta contenga. 8
public static void main(string[] args) { sentencias public: Puede ser llamada desde cualquier parte (no sólo desde la misma clase). static: No se necesita un objeto para llamarla, funciona por sí misma. void: Es el tipo de (no) retorno, igual que en C. String[] args: lista de argumentos: arreglo de objetos de tipo (clase) String. El primero (args[0]) es el primer argumento del programa; no el nombre. 9
Hola Mundo System.out.println("Hola Mundo"); System: una clase (de la "librería estándar"). out: elemento (miembro) de la clase System. Está conectado a la salida estándar. println: método del objeto out. 10
Hola Mundo: Compilación y ejecución javac Hola.java ( Hola.class) java Hola Hola Mundo Java Virtual Machine Si hay más de una clase en un archivo, el comando javac genera un archivo.class por cada clase. Los archivos contienen bytecode, que es el lenguaje de máquina de la JVM (portabilidad/internet). 11
Clase programa. public class NombrePrograma { declaración-opcional-de-var/sub public static void main(string[] args) { sentencias declaración-opcional-de-var/sub 12
Miembros Una clase tiene dos tipos de miembros. Campos (datos, variables). Métodos (funciones, subrutinas). Datos: Primitivos. Objetos. Objeto: variable cuyo tipo es una clase. Instancia de una clase. Los miembros también pueden ser: Estáticos. No estáticos. 13
Tipos de dato primitivos Idénticos a C excepto: Tienen el mismo tamaño y formato en cualquier sistema (portabilidad). boolean: {true, false (ya no se usa int como reemplazo). byte: (8 bits). char: 16 bits Unicode. No hay unsigned (excepto char). No hay apuntadores. 14
Operadores Idénticos a C excepto: && y funcionan con booleanos y sólo evalúan el segundo operando si es necesario (igual que C). Existen & y (y ^) lógicos (que trabajan con boolean) y siempre evalúan ambos operandos. >>> (sin signo). Operadores relacionales, lógicos y de igualdad retornan boolean.?: el primer argumento debe ser boolean y los otros dos deben ser del mismo tipo (cualquiera). new, instanceof. No hay sizeof. 15
Operadores En una expresión los operandos se evalúan de izquierda a derecha: int a = 2; int v = ++a + ++a * ++a; v ==? El operador + sirve para concatenar cadenas. Ni el operador == ni el!= deben usarse con Objetos (excepto casos especiales). El operador punto (.) es uno de los más usados y sirve para tener acceso a un miembro de un objeto o a un miembro estático de una clase. 16
Ejemplo class Average { public static void main(string[] args) { int num1 = 10; int num2 = 23; System.out.println("Promedio: " + (num1+num2)/2.0); 17
Ejemplo Wrappers class Limits { public static void main(string[] args) { System.out.println("Byte: [" + Byte.MIN_VALUE + "," + Byte.MAX_VALUE + "]"); System.out.println("Short: [" + Short.MIN_VALUE + "," + Short.MAX_VALUE + "]"); System.out.println("Integer: [" + Integer.MIN_VALUE + "," + Integer.MAX_VALUE + "]"); System.out.println("Long: [" + Long.MIN_VALUE + "," + Long.MAX_VALUE + "]"); System.out.println("Float: [" + Float.MIN_VALUE + "," + Float.MAX_VALUE + "]"); System.out.println("Double: [" + Double.MIN_VALUE + "," + Double.MAX_VALUE + "]"); 18
Comentarios Tipos de comentarios Una sola línea // Comentario del tipo 1 Múltiples líneas /* Comentario del tipo 2 */ Documentación /** Comentario del tipo 3 */ El tercer tipo es utilizado en conjunción con la herramienta javadoc. 19
Control de flujo if/else, ciclos, switch, etc. idénticos a C, excepto: Donde deben ir expresiones lógicas sólo se acepta boolean, no int's (En if, condición de los ciclos). if(n) if(x = y) En la parte de incialización de for se puede declarar una variable (que sólo será visible en el ámbito del for): for(int i = 0; i < N; a[i++]++); No hay goto pero sí break y continue etiquetados. 20
Control de flujo: break etiquetado rowloop: for(int r = 0; r < rows.length; r++) { colloop: for(int c = 0; c < columns.length; c++){ break rowloop; // Use a label 21
Control de flujo: continue etiquetado public class Label { public static void main(string[] args) { outer: for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { System.out.println("i: " + i + ", j: " + j); if (i + j == 2) continue outer; if (i + j == 4) break outer; 22
Clases y objetos Una clase es similar a una estructura en C pero que además de contener datos (variables) contiene funciones (que pueden actuar sobre esos datos). Una clase es un tipo de dato compuesto. Cada clase define un nuevo tipo de dato. Un programa en Java consiste en definiciones de clases. Una instancia de una clase se llama objeto. Un objeto es simplemente una variable de tipo X donde X es alguna clase. 23
Clases y objetos No hay objetos estáticos (en la pila), siempre se crean dinámicamente (en la heap). Se crean con el operador new: MiObjeto mo = new MiObjeto(); new retorna un handle o referencia: un apuntador implícito. 24
Ejemplo Empleado public class Employee { private String last; private String first; private String title; private int age; public Employee(String l, String f, String t, int a) { last = l; first = f; title = t; age = a; public String tostring() { return "{" +last+ "," + first + "," + title+ "," + age + ""; public void setlast(string s) { last = s; //... 25
Ejemplo Empleado (cont.) public void setfirst(string s) { first = s; public void settitle(string s) { title = s; public void setage(int n) { age = n; public static void main(string[] args) { Employee e =new Employee("Jordan","Michael","Guard",37); System.out.println(e); e.setlast("malone"); e.setfirst("karl"); e.settitle("center"); e.setage(36); System.out.println(e); 26
Arreglos Similares a C excepto: Se chequean los límites del arreglo. Los arreglos son objetos. Tienen el campo length. Arreglos multidimensionales con cada dimensión reservada por separado. Ej.: un arreglo bidimensional puede tener cada fila de tamaño distinto. 27
Arreglos public class Array1 { public static void main(string[] args) { int[] a1 = {10,20,30,40,50; for (int i = 0; i < a1.length; ++i) System.out.print(a1[i] + " "); System.out.println(); 28
Arreglos 2 public class Array2 { public static void main(string[] args) { int[][] a2 = {{1,2, {3,4, {5,6; for (int j = 0; j < a2.length; ++j) { for (int k = 0; k < a2[j].length; ++k) System.out.print(a2[j][k] + " "); System.out.println(); 29
Arreglos 3 public class Array3 { public static void main(string[] args) { int[] a1 = {10,20,30,40,50; int[][] a2 = {{1,2, {3,4, {5,6; int[][][] a3 = new int[2][][]; a3[0] = a2; a3[1] = new int[2][]; a3[1][0] = a1; a3[1][1] = new int[1]; a3[1][1][0] = 99; for (int p = 0; p < a3.length; ++p) { for (int q = 0; q < a3[p].length; ++q) { for (int r = 0; r < a3[p][q].length; ++r) System.out.print(a3[p][q][r] + " "); System.out.println(); System.out.println(); System.out.println(); 30
Acceso public: Todos pueden tener acceso; incluso métodos de otras clases. private: Sólo pueden tener acceso los miembros de la misma clase. Por defecto: pueden tener acceso los miembros de otras clases sólo si éstas están en el mismo paquete. protected: Tienen acceso las sub clases y los miembros del mismo paquete. 31
Paquetes Cada clase puede formar parte de un paquete si se usa la línea: package nombredelpaquete; Se estructuran en forma de directorios. Para usar las clases de otro paquete debe incuirse la línea: import nombredelpaquete.nombredeclase; import nombredelpaquete.*; El paquete estándar que se incluye por defecto se llama: java.lang.*; En general los paquetes de la plataforma Java se llaman: java.nombredelpaquete 32
Constructores Es un método de cada clase que sólo se llama al contruirse un objeto nuevo con el operador new. Tiene el mismo nombre de la clase. Una clase puede tener más de uno que se distinguen uno del otro por los argumentos que aceptan. Siempre hay un constructor por defecto que no acepta parámetros y se usa si la clase no define su propio constructor. En el constructor deben realizarse todas las inicializaciones necesarias. 33
Diferencias globales respecto a C Aparte de ser Orientado a Objetos: Todo está en alguna clase: Campos y métodos. No hay funciones ni variables globales. No hay variables estáticas locales. No hay separación entre declaración/definición. No hay apuntadores (explícitos). No hay directivas de pre-procesador No hay #include pero sí import. 34
Java SDK y Tutorial Sitio: java.sun.com JDK: http://java.sun.com/j2se/1.5.0/install-windows.html Tutorial: http://java.sun.com/docs/books/tutorial/index.html 35