lenguaje de programacin Java Contenido Introduccin Caractersticas del lenguaje. Variables y Tipos de Datos. Estructuras de Control Ciclos iterativos. Introduccin a la POO. Introduccin Introduccin (I) Creado en 1991 por Sun Microsystems (James Gosling) para dispositivos electrnicos: calculadoras, microondas y la televisin interactiva. Escasa potencia de clculo Poca memoria Distintas CPUs Consecuencias: Lenguaje sencillo que genera cdigo reducido Lenguaje que independiente de la plataforma Introduccin (II) Lenguaje de progamacin para computadores/internet desde 1995. Sun describe Java como un lenguaje simple, orientado a Objetos, distribuido, interpretado, robusto, seguro, de arquitectura neutral, portable, de alto rendimiento, multihilos, y dinmico Ejecucin de Java como: Aplicacin independiente Applet (dentro del navegador al cargar la pgina Web) Servlet (ejecutado en servidor de internet, sin interfaz grfica). Introduccin (III) JDK (Java Development Kit): programas y librerias para desarrollar, compilar y ejecutar programas Java. Versiones: Java 1.0: 212 clases organizadas en 8 paquetes Java 1.1: 504 clases, 23 paquetes. Mejoras a la JVM. Java 1.2 (Java 2): 1520 clases, 59 paquetes. Plataforma muy madura . Apoyado por grandes empresas: IBM, Oracle, Inprise, Hewtlett-Packard, Netscape, Sun. Java 1.3 (Java Enterprise Edition). Java comienza a ser una plataforma de desarrollo profesional ??? Java MicroEdition Caractersticas de J ava Caractersticas de J ava I Lenguaje de fcil uso orientado a objetos Lenguaje compilado e interpretado Facilita un entorno interpretado: Velocidad de desarrollo (no de ejecucin) Portabilidad del cdigo Ejecucin multitareas Cambios dinmicos en tiempo de ejecucin Seguridad del cdigo. La mquina Virtual J ava - J VM (I) Es una mquina hipottica que emula por software una mquina real. Es definida por una especificacin. Conjunto de instrucciones de mquina (C.O.) + Operandos Pila Memoria ... El compilador genera bytecodes (instrucciones de cdigo maquina para la JVM) El interprete tarduce y ejecuta los bytecodes para cada mquina especfica. La mquina Virtual J ava (II) Cdigo fuente Compilador Java Byte-codes Win32 JVM Cdigo mquina Win32 Macintosh JVM UNIX JVM Cdigo mquina Macintosh Cdigo mquina UNIX Compilador e intrprete de J ava (I) El compilador analiza la sintaxis del cdigo fuente (con extensin .java). Si no hay errores, genera bytecodes > javac <Nombre>.java
El intrprete es la Mquina Virtual de Java que ejecuta los bytecodes (*.class) creados por el compilador. > java <Nombre> (sin extensin) > java <Nombre> arg1 arg2 Compilador e intrprete de J ava (II)
HelloWorld.java
javac HelloWorld.java
java HelloWorld
HelloWorld.class
compilar ejcutar bytecode Codigo fuente Garbage Collection La memoria reservada dinmicamente que No se vaya a usar ms debe ser liberada. En otros lenguajes, esta liberacin debe realizarla el propio programador. La JVM dispone de un proceso que rastrea las operaciones de memoria: el Garbage Collector. Verifica y libera la memoria que no se necesita Se ejecuta automticamente Puede variar segn la implementacin de la JVM. Seguridad del Cdigo La JVM verifica los bytecodes asegurando que: El cdigo se ajusta a las especificaciones de la JVM. No hay violaciones de acceso restringido. Los tipos de los parmetros son correctos para todo el cdigo. No existen conversiones ilegales de datos (ej. de enteros a apuntadores). Formato de los archivos fuente Declaracin de paquete (opcional) package <nombrePaquete> Instrucciones de importacin(opcional) import <nombrePaquetes> Declaracin de clase o interfaz [<mod>] class <NombreClase> {.....} Un programa Simple public class ProgramaSimple { public static void main(String[] args) { System.out.println("Este es + un programa simple"); System.exit(0); } } Elementos del Lenguaje Elementos del lenguaje Caracteristicas del lenguaje Declaraciones Tipos de Datos Operadores Estructuras de control Clases y Objetos Paquetes Caracteristicas del lenguaje Sensible a maysculas/misnsculas Comentarios Lenguaje de formato libre Identificadores Palabras reservadas Variables y constantes Convenciones de nomenclatura Tiene reglas sobre los tipos de datos Sensible a maysculas/minsculas Se distingue entre maysculas y minsculas. Los identificadores Papa, papa y PAPA son diferentes. Todas las palabras reservadas del lenguaje van en minsculas.
Comentarios // comentario Los caracteres desde // hasta el final de la lnea son ignorados. /* comentario */ Los caracteres entre /* y */ son ignorados /** comentario */ Los caracteres entre /** y */son ignorados y se incluyen en la generacin autmatica de la documentacin.
Lenguaje de formato libre La disposicin de los elementos dentro del cdigo es libre Instrucciones: lnea simple de cdigo terminada en ; Bloque de cdigo: Conjunto de sentencias agrupadas entre llaves. { X = x + 1; Y = y + 1; } Java permite espacios en blanco entre elementos del cdigo X1 = y * delta; X2 = (y-1) * delta; Palabras Reservadas Palabras con un significado especial para el compilador Ejemplos: Nombres de tipos bsicos: boolean, char, double, int, Indicadores de controls: do, if, else, for, while, Class, interface, extends, implements package, import this, super Modificadores de acceso: public, private, protected Constantes: true, false, null Etc Variables y Constantes Variable: Zona de memoria cuyos valores van a cambiar durante la ejecucuin. Declaracin: <tipo> <variable>; <tipo> <var1>, <var2>, ..., <varn>; <tipo> <var1> = <valor>; Variables y Constantes Ejemplos de declaracin de variables: int x,y,z; int x = 9; boolean terminar = false; Cliente c1 = new Cliente(); Constantes: Zona de memoria cuyos valores no cambian Declaracin: final <tipo> <variable> = <valor>; Ejemplo: final double PI = 3.14159; Asignaciones Se utiliza el operador de asignacin = <tipo> <variable> = <valor>; <tipo> <variable>; <otras instrucciones>... <variable> = <valor>; La parte izquierda siempre debe ser una variable La parte derecha puede ser un literal, una variable, una expresin, una funcin o una combinacin de todos. int x = 4; //Declaracion con asignacin x = 9; //Se asume que x est definida Tipos de Datos y Operadores Tipos de Datos Java define dos tipos de datos Tipos primitivos Tipos referencia Los tipos primitivos son ocho agrupados en cuatro categoras: Lgico: boolean Texto: char Entero:byte, short, int, long Real: float, double Los tipos referencia son apuntadores a objetos. Tipos de Datos Tipos primitivos: boolean true o false char unicode! (16 bits) byte entero de 8 bits con signo. short entero de 16 bits con signo. int entero de 32 bits con signo. long entero de 64 bits con signo. float,double IEEE 754 floating point Tipos de datos Referencia Un tipo referencia guarda un apuntador a la direccin donde se ubica el objeto (32 bits). Slo puede almacenar objetos de su propio tipo. Ejemplo: Cuadrado cuad1, cuad2; Circulo circ1; cuad1 = new Cuadrado(); circ1 = cuad1; // Error de compliacin cuad2 = cuad1; // Ok Todas las clases son de tipo referencia. El valor que toma por defecto una variable de tipo referencia es null. Cadenas de Caracteres La clase String permite manejar cadenas de caracteres. El literal string debe ir entre comillas dobles . Se puede crear una cadena de caracteres de dos formas: String nombre = new String(Pepe); String nombre = Pepe; Para concatenar dos cadenas se usa el operador +. No se guarda el carcter fin de cadena. Conversiones de tipos La conversin de tipos (casting) debe realizarse entre tipos de la misma naturaleza: numricos o referencia. Al convertir un tipo a un tamao ms pequeo se puede perder la informacin del los bits de mayor peso. No hay conversin automatica con el tipo boolean! La sintaxis es: (<tipo>) <expresion> Ejemplo: int i = (int) 1.345; Operadores (I) Unarios: +. - Aritmticos: +, -, *, /, % (resto de la divisin). De Asignacin: =, +=, -=, *=, %= <var> += <exp> <var> = <var> + <exp> Operadores incrementales: ++, -- Precediendo a la variable: ++<var>, --<var> siguiendo la variable: <var>++, <var>-- elacionales: ==. !=, <, >, <=, >=, Operadores (II) Operadores relacionales: == (igual). != (distinto), <, >, <=, >=, Operadores booleanos: && (AND), || (OR), ! (NOT), & (AND), | (OR). && y || realizan evaluacin perezosa & y | siempre evalan los dos operadores El operador instanceof: <objeto> instanceof <clase> determina si un objeto pertenece a una clase. Operadores (III) Operador condicional: ? <expBooleana> ? <valor1> : <valor2> permite bifurcaciones condicionales sencillas. Operadores a nivel de Bits: &, |, ^, ~, <<, >>, >>> op1 >> n, desplaza los bits de op1 (con signo) a la derecha n posiciones. op1 >>> n, desplaza los bits de op1 (sin signo) a la derecha n posiciones. op1 ^ op2, O exclusivo. ~op1 , NOT a nivel de bit (complemento). Precedencia de operadores Los operadores binarios se evalan de izaquierda a derecha, excepto los operadores de asignacin. 1. Sufijos: . [] () 2. Unarios: ++ -- ! ~ 3. Creacion y casting: new (tipo)exp 4. Multiplicativos: * / % 5. Aditivos: + - 6. Desplazamientos: << >> >>> 7. Relacionales: < > <= >= == != 8. Bits: & ^ | 9. Lgicos: && || 10. Condicional: ? : 11. Asignacin: = op= (*= /= %= += - etc.) Estructuras de control Estructuras de Control Las estructuras de control del flujo de ejecucin permiten tomar decisiones y realizar un bloque de instrucciones repetidas veces. Hay 2 tipos principales: Condicionales: if , switch Lazos: for, while, do while Otras instrucciones que permiten interrumpir el flujo normal de ejecucin son break y continue. La instruccin if Ejecuta un conjunto de instrucciones en funcin de la expresin de comparacin (booleana) if (<exprBooleana>) <instruccion1>; [else <instruccin2>]; if ( exprBooleana ) <bloque1>; [else <bloque2>]; Ejemplo: if (a>b) x = a; else x = b; El else es opcional if ( x[i] > max ) max = x[i]; La instruccin switch Comparacin de igualdad mltiple con la misma variable. switch(<variable>) { case literal1:[<cjtoInstrucc1>;] [break;] case literal2:[<cjtoInstrucc2>;] [break;]
case literaln:[<cjtoInstruccn>;] [break;] [default: <cjtoInstrucc>;] } Ejemplo switch switch(opcion) { case 1:AbrirArchivo(); break; case 2:ImprimirArchivo(); break; case 3:ImprimirDatos(); break; case 4:CerrarArchivo(); break; case 5: default: terminarPrograma(); } El lazo for Permite la ejecucin repetida de un grupo de instrucciones con mayor control for ( <inicializacin>; <expBooleana>; <actualizacin> ) { <grupo de instrucciones> ; } <inicializacin>, asignacin de valores iniciales de las variables que intervienen en la expresin <expBooleana>, condicin boolena <actualizacin>, asignacin de un nuevo valor de las variables de <inicializacin> El lazo While El grupo de instrucciones se ejecuta mientras se cumpla la expresin booleana. while ( expBooleana ) { <grupoInstrucciones> ; } Equivalencia for-while for ( <inicializacin>; <expBooleana>; <actualizacin> ) { <grupo de instrucciones> ; }
Realizan el las instrucciones en la secuencia de instrucciones s, n veces. El lazo Do-While El conjunto de instrucciones se ejecuta mientras se cumpla la expresin booleana do { <grupoInstrucciones> ; } while ( expBooleana )
El conjunto de instrucciones se ejecuta al menos 1 vez. Las instrucciones break y continue. La instruccin break causa la terminacin inmediata de un lazo o instruccin switch (sin ejecutar el resto de las instrucciones). Vlido para for, while, do while y switch La sentencia continue causa la terminacin inmediata de una iteracin de un ciclo. Vlido para for, while y do while Programacin Orientada a Objetos Paradigmas de programacin Paradigma estructurado o procedural: Los programas se dividen en procedimientos independientes con acceso total a los datos comunes. Algortimos + Estructuras de Datos = Programas Paradigma orientado a objetos: Los datos se consideran la parte ms importante del programa. Los objetos modelan las caractersticas de los problemas del mundo real, su comportamiento ante estas caracteristicas y su forma de interactuar con otros elementos Objetos + mensajes = Programas Ejemplo: Tomarse un caf en la panadera Procedural: El cliente entra el la panadera El cliente pasa detrs de la barra El cliente prepara la cafetera El cliente se sirve el caf El cliente se bebe el caf. OO: El cliente entra en la panadera El cliente pide un caf al cafetero El cafetero prepara el caf. El cafetero sirve el caf al cliente. El cliente se bebe el caf. Conceptos de la Orientacin a Objetos Clases: Patrones que indican como construir objetos Objetos: Instancias de las clases en tiempo de ejecucin. Miembros de la clase: Atributos: Caractersticas o propiedades de los objetos (o clases). Pueden ser variables de tipos simples o referencias a otros objetos Mtodos: Comportamientos de los objetos. Son funciones que operan sobre los atributos de los objetos. Caractersticas de la OO Cada objeto tiene caractersticas reconocibles. Ejemplo: un empleado tiene Nombre, CI, sueldo, Cada objeto es nico. Ejemplo: el empleado1 es Juan Prez, con CI 1.456.786 gana 890.000 Bs. Los objetos almacenan informacin (sus caractersticas) Los objetos realizan operaciones sobre sus atributos. Definicin de Clase Sintaxis Class <NombreClase> { // Declaracion de atributos <tipo> <var>; // Declaracin de mtodos <tipo> <nombreMetodo> ( <argumentos> ) { } } El nombre del archivo debe coincidir con el de la clase definida en l. Se recomienda definir una clase por cada archivo Java. Ejemplo de Clase public class Circulo { // Atributos double radio; String color; // Metodos void asigRadio( ){ } double area( ){} } Creacin de un objeto Se usa la palabra reservada new <refObjeto> = new <NombreClase>();
Ejemplo: Circulo miCirculo; miCirculo = new Circulo(); Acceso a los miembros de un Objeto A travs del operador punto (.) se puede acceder tanto a los atributos como a los mtodos. <refObjeto>.<atributo> <refObjeto>.<metodo>() Ejemplo: Circulo miCirculo = new Circulo(); miCirculo.radio = 10; miCirculo.color = azul; miCirculo.area(); Mtodos Son el equivalente a los procedimientos de los lenguajes no OO. Un mtodo es un bloque de cdigo definido dentro de una clase que proporciona un mecanismo para realizar una accin. Un mtodo tiene acceso a todos los atributos de su clase. Un mtodo puede invocar otros mtodos En Java no se puede definir un mtodo dentro de otro. La ejecucin de todos los programas se inicia en el mtodo main. Definicin de mtodos (I) Sintaxis para la definicin de un mtodo: <tipoRetorno> <nombreMetodo>(< parametros >...) { <instrucciones>...}
La declaracin de un mtodo tiene cuatro partes bsicas: El tipo del valor de retorno del mtodo (tipo). Si no devuelve ningun valor debe ser void. El nombre del mtodo (nombreMetodo) Una lista de parmetros (parametros). Casa parmetro tiene la forma <tipo> <argumento>. Se separan con comas. El cuerpo del mtodo (instrucciones). Definicin de mtodos (II) <instrucciones>, Conjunto de instrucciones que implementan la tarea que debe realizar el mtodo. Si devuelve un valor debe finalizar con la sentencia return return <valor>; <valor> Debe ser del mismo <tipoRet> con que se ha declarado el mtodo. El cdigo se ejecuta hasta alcanzar la instruccin return (si devuelve un valor) o hasta el final del mtodo. Se pueden declarar variables locales si son necesarias. Ejemplos de Mtodos double obtRadio( ){ return radio; } void asigRadio(int nuevoRadio){ radio = nuevoRadio; } public double Area( ) { return radio*radio*Math.PI; } public class Circulo { // Atributos double radio; String color; // Metodos void asigRadio( ){ } double area( ){} } Parametros Las variables en la lista de parmetros se separan con comas. Los parametros de la lista en la especificacin del mtodo, son llamados parmetros formales. Cuando un mtodo es llamado, estos parmetros formales son reemplazados por los parmetros actuales. Los parmetros actuales deben ser equivalentes en tipo, orden y nmero a los parametros formales. char calc (int num1, int num2, String mensaje) { int sum = num1 + num2; char result = mensaje.charAt (sum);
return result; } num = 3 ch = obj.calc (2, num, Hola Mundo"); Parmetros - Ejemplo Paso de parametros por valor Cuando es invocado un mtodo con un parmetro de tipo primitivo, tal como int, el valor del parmetro actual es pasado al mtodo. El valor actual de la variable fuera del mtodo no es afectado, independientemente de los cambios hechos al parmetro formal dentro del mtodo. Parametros por valor - Ejemplo class PruebaPasoPorValor { public static void main(String[] args) { int times = 3; System.out.println(Antes del llamado, la variable times es+times); nPrintln(Bienvenido a Java!,times); System.out.println(Despues del llamado, la variable times es + times); } static void nPrintln(String mensaje, int n) { while (n > 0) { System.out.println(n = +n); System.out.println(mensaje); n--; } } } Paso de parametros por referencia Se pueden pasar objetos a mtodos como parmetros actuales Cuando se pasa un objeto al mtodo la referencia del objeto es pasado al parmetro formal Cualquier cambio al objeto local que ocurra dentro del mtodo afectar al objeto original que fue pasado como argumento. Parametros por referencia -Ejemplo class PruebaPasoPorReferencia { public static void main(String[] args){ Circulo miCirculo; miCirculo = new Circulo(5.0, "blanco"); imprimeCirculo(miCirculo); colorCirculo(miCirculo, "negro"); imprimeCirculo(miCirculo); } public static void colorCirculo( Circulo c, String color) { c.color = color; } public static void imprimeCirculo(Circulo c) { System.out.println("El rea del circulo de radio " + c.getRadio( ) + " es " +c.Area()); System.out.println("El color del Circulo es " +c.color); } } Parametros por referencia Ejemplo (cont.) class Circulo { private double radio; String color;
public Circulo(double r, String c){ radio = r; color = c; } public double getRadio( ){ return radio; } public double Area( ){ return radio*radio*Math.PI; } } Alcance de las variables (I) En java se dispone de tres tipos de variables: Las variables miembro pertenecientes a una clase. Argumentos de un mtodo de la clase. Variables locales de un mtodo de la clase. Los argumentos trabajan como variables locales. class Ejemplo { int x; // variable miembro metodo (int y){ // argumento int z; // variable local x = y + z; } } Alcance de las variables (II) Las variables miembros son visibles desde cualquier parte de la clase. Los argumentos y variables locales solo son visibles dentro del mtodo al que pertenece, dejan de existir al finalizar el mtodo. Dentro de un mtodo, si coincide el identificador de un argumento o variable local con el de una variable miembro, slo se accede a la variable del mtodo. Ejemplo class A { int x; void metodo (int y){ int x=2; y = 3*x + y - x; println(y); } }
main { int arg = 4; A obj = new A(); obj.x = 1; obj.metodo(arg); println(arg); println(obj.x); }
La referencia this Se emplea para referirse al objeto actual dentro de un mtodo. Con this se hace accesible una variable miembro cuyo identificador coincide con una variable local. Constructores (I) Un constructor es un tipo especial de mtodo que permite construir un objeto de una clase. Ejemplo: class Circulo { public Circulo(){} public Circulo(double r){} public Circulo(double r, String c){}
} Se utilizan junto con la palabra reservada new Circulo c1 = new Circulo(27); Constructores (II) Los constructores se pueden sobrecargar y son opcionales Si no se define ningn constructor, Java proporciona uno por defecto. Si se define un constructor con argumentos se pierde el constructor por defecto Normalmente en el constructor se inicializan las variables miembro. Destructores En Java no hay destructores como en C++
El garbage collector es el encargado de liberar la memoria. Cuando se detecta objetos no referenciados Al final de un bloque que haya utilizado objetos. Caractersticas de la POO Ms conceptos de OO Encapsulamiento: Permite la proteccin de ciertas partes de un objeto del acceso desde otros objetos externos Herencia: Jerarqua de clases basada en la agrupacin de atributos o mtodos comunes Polimorfismo: Tratamiento generalizado a todas las clases pertenecientes a una jerarqua de herencia. Encapsulamiento El encapsulamiento consiste en la agrupacin de datos y su tratamiento en una misma estructura. Permite la proteccdin de la manipulacin externa de algunas partes de los objetos. Un objeto suele tener datos y mtodos privados, de acceso restringido. Fuerza al usuario a usar una interfaz para acceder a los datos. Hace que el cdigo sea ms fcil de mantener Modificadores para restringir el acceso (I) La definicin de los miembros de una clase se puede ampliar aadiendo modificadores al principio.: [modificador]<tipo> <identificador>; [modificador]<tipo> <nombre>(<args>) {...} Los modificadores permiten acceder a los datos o mtodos de manera restringida Modificadores para restringir el acceso (II) public. El miembro de la clase es accesible desde cualquier parte del cdigo. private. El miembro de la clase slo es accesible desde cdigo perteneciente a la propia clase. protected(o friendly). Slo las subclases de la clase y nadie ms pueden acceder a las variables y mtodos. Herencia (I) Jerarquia de clases basada en agrupar atributos y/o mtodos comunes Las clases descendientes se llaman subclases. Las clases ascendientes se llaman superclases. Las subclases heredan caractersticas y mtodos de las superclases (excepto los constructores) Herencia (II) Supongamos que tenemos la clase Jefe y la clase Secretaria definidas como: Jefe {<int><numEmpleado>, <String><nombre>, <int><numDepart>, <int><numSupervisados>} Secretaria {<int><numEmpleado>, <String><nombre>, <int><numDepart>, <Jefe><trabajaPara>} Las partes comunes se pueden agrupar en una misma clase, manteniendo las otras dos con las partes no comunes y heredando de esta nueva clase con la palabra reservada extends. Ejemplo herencia public class Articulo { // clase padre public float precio=0; ... public void setPrecio(float elPrecio) { precio = elPrecio; } ... public float getPrecio() { return precio; } }
//los mtodos y atributos de Articulo son heredados a Pelicula
public class Pelicula extends Articulo {// clase hijo
public void setDescripcion(String descrip) { descripcion = descrip; } ... public String getDescripcion() { return descripcion; } } Relacin de Contenido Una clase puede tener referencias a objetos de otras clases. Se diferencia de la herencia en que es necesario instanciarlos por separado. Responde afirmativamente a la pregunta: <contenedor> tiene un <contenido>? Mtodos virtuales Una subclase puede modificar los mtodos que ha heredado de las superclase, manteniendo los mismos nombres, tipos de retorno y listas de argumentos.
class Empleado { int calcularVacaciones() {...} } class Jefe extends Empleado { int numSupervisados, int calcularVacaciones() {...} } Polimorfismo Un mtodo con el mismo nombre, tipo de retorno y lista de parmetros puede ser aplicado a objetos de diferentes clases. Uso, trabajar con la clase ms general: Parmetros polimrficos Colecciones heterogneas
Empleado e1 = new Empleado(); Empleado e2 = new Jefe(); Empleado e1 = new Secretaria();