Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander)
Julio, 2002, slide 1
Elementos Bsicos de Java. OOP (herencia, polimorfismo), interfases, eventos. J os Manuel Gutirrez Universidad de Cantabria manuel.gutierrez@unican.es Internet Java http://grupos.unican.es/macc/asignaturas/javaDB Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 2 Historia de Java = Caf (posterior a Oak) Aparicin de WWW. El lado del cliente Internet es un sistema Cliente-Servidor Transmito el programa al cliente El cliente ejecuta el programa (debe ser capaz de ejecutarlo). Interaccin con el usuario es local Muchos clientes diferentes Diferentes clientes / diferentes servidores: NO SIRVE CDIGO MQUINA Java se traduce en un cdigo independiente de la mquina bytecode. Bytecode=> Cdigo mquina para mquina imaginaria, virtual Java (JVM) Cada ordenador traduce el Bytecode. Seguridad: Ejecuto en programa en el cliente (borrar ficheros, etc) El cliente dispone de un gestor de seguridad (security manager) que limita las acciones que puede ejecutar el programa suministrado por el servidor. Acceso al sistema de ficheros transmitir informacin a otros ordenadores de la red Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 3 Por qu utilizar Java? Caractersticas principales ? Java es un potente lenguaje de programacin orientado a objetos. ? Todo el entorno de desarrollo (SDK) para crear ficheros .class con cdigo pseudocompilado para intrpretes Java. ? Los programas son compilados en ficheros pseudo-ejecutables que se pueden ser interpretados: (aplicaciones) mquina virtual, o (applets) plug-in de un navegador Web. ? Tiene reglas estrictas sobre cmo declarar y utilizar variables. (control estricto de tipos) Independencia de plataforma (UNIX, Windows, Mac,...). Orientado a objetos (Obligado a implementar). Seguridad y confianza: lenguaje, compilador, interprete Simplicidad: gestin automtica de basura. Estndar. Computacin distribuida. Clases" potentes para desarrollo. (GUI,NET,BD) Generacin rpida de cdigo. Documentacin y Mantenimiento. Rendimiento????. JAVA no es slo un Lenguaje de Programacin, JAVA es adems un conjunto de herramientas avanzadas: JAVA es una Tecnologa Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 4 Elementos de Desarrollo para Java Java 1.0 212 Clases, 8 paquetes Java 1.1 504 Clases, 23 paquetes Mejopras en el rendimiento de la VM Java 1.2 1520 Clases, 59 paquetes Plataforma Java 2.0 Java 1.4.1 (Beta), Julio 2002 Para trabajar con Java 1.0 o Java 1.1 Java Development Kit para la versin (JDK) Para trabajar con Java 1.2 (Renombrado como Java 2) Software Development Kit(SDK) o ms concreto: Java 2 SDK, Standard Edition Ver. 1.2, ... El lenguaje de programacin Java: Lenguaje de programacin. Un lenguaje con una sintaxis similar a C, orientado a Objetos Evitando las caractersticas complejas que han caracterizado a otros lenguajes como C++ La mquina virtual Java (JVM): Hardware/Software (habitual). Es la parte imprescindible para poder ejecutar programas Java Sun: Solaris, Linux y Windows, Tambin para Mac, UnixPalm OS A pesar de ser un intrprete, la VM tiene un buen rendimiento. JIT Compiler (J ust-I n-Timecompilers). Propio de la Mquina Virtual Bytecodes convertidos instantneamente en cdigo nativo de la plataforma correspondiente Mejora en la velocidad de ejecucin Hotspot => Buena implantacin de JIT Java Runtime Environment (JRE) Contiene todo lo necesario para ejecutar programas Java pero no para desarrollarlos Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 5 Tecnologas Actuales Java Java TM technologies: J2SE TM , J2EE TM , J2ME TM , JAX XML. SDK (Standard Development Kit) JRE (Java RunTime Enviroment) Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 6 Elementos del Lenguaje Java public class Reverse { public static void main (String[] args){ int i = args.length; while (i != 0 ) { for (int j=args[i-1].length()-1; j >= 0; j--) System.out.print (args[i-1].charAt(j)); System.out.print(" "); i--; } System.out.println(); } } Programa que copia la entrada en la salida e invierte el orden de las letras Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 7 Programacin Orientada a Objetos (OOP) ? En la programacin orientada a objetos, el desarrollo de una aplicacin se organiza en torno a los datos, en torno a los cuales se organizan los procesos. Para ello, estos lenguajes tienen la posibilidad de: Definir objetos compuestos de un conjunto de variables (o propiedades) y funciones (o mtodos) asociadas. Definir una estructura jerrquica, donde se heredan variables y mtodos de padres a hijos. Control de sucesos a travs de la estructura gerjrquica definida. ? Reusabilidad del cdigo. ? Fcil modificacin ? Facilidad de desarrollo. ? Fcil comprensin. de clases estructural Object Component Color Button Label Container Panel ScrollPane Window Applet Dialog Frame addMouseListener() Graphics addActionListener() Canvas Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 8 Las Clases: Atributos y Mtodos ? Una clase es la descripcin esttica de un conjunto de datos y de funciones que operan sobre ellos "Animal": Clase = Atributos + Mtodos (Constructores) ? Un objeto es la instanciacin dinmica de una clase en la memoria, con valores concretos para los atributos de la clase "Liebre", "Tortuga". Pueden instanciarse tantos objetos se deseen con una misma clase. class Animal { int miVelocidad; String miNombre; public Animal (int vel, String nom) { miNombre= nom; miVelocidad= vel; }; public void saluda () { System.out.println("Hola, soy "+miNombre); } public void corre (int metros) {;} } Atributos Constructores Mtodos Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 9 Instanciando la clase Animal ? Los objetos se crean utilizando el comando new reserva espacio en memoria a partir de la definicin de la clase, llama al mtodo constructor de la clase. class OOP { public static void main (String arg []){ Animal laLiebre; Animal laTortuga; laLiebre= new Animal (5,"L"); laTortuga= new Animal (1,"T"); laTortuga.saluda(); laLiebre.saluda(); } } El sistema recupera automticamente la memoria ocupada por objetos que no se utilizan garbage collection class Animal { int miVelocidad; String miNombre; public Animal (int velocidad, String nombre) { miNombre= nombre; miVelocidad= velocidad; }; public void saluda () { System.out.print ("Hola, soy "+miNombre); } } laLiebre laTortuga L T Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 10 Constructores de un Objeto Los valores por defecto de las propiedades se asignan al crear el mismo, pero antes de llamar al constructor. a1.miVelocidad 10 a1.miNombre perro Si no se inicializan los atributos, toman el valor 0 por defecto. class TrivialApplication { static public void main (String arg[]) { a2 = new Animal ("perro"); }; } En este ejemplo, uno de los atributos toma el valor por defecto y el otro es modificado por el constructor. class Animal { int miVelocidad=1; String miNombre="sin nombre"; public Animal (int vel, String nom) { miNombre= nom; miVelocidad= vel; }; public Animal (String nom) { miNombre= nom; }; } a2.miVelocidad 1 a2.miNombre perro a1 = new Animal(10,"perro"); Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 11 Atributos y Mtodos Estticos Los atributos etiquetados static en una clase son compartidos por todos los objetos instanciados de la misma. Si un mtodo slo modifica valores estticos, puede declararse esttico. ? Definir mtodos estticos tiene algunas ventajas claras: Pueden llamarse sin referencia al objeto, basta poner delante el nombre de la clase (o nada, entendindose que es un mtodo de la clase actual) Por ejemplo, el mtodo main es esttico y puede llamarse sin referencias. class OOP { public static void main (String arg []) { Animal laLiebre; Animal laTortuga; laLiebre= new Animal (5,"L"); laLiebre.saluda(); Animal.cuantosAnimales(); laTortuga= new Animal (1,"T"); laTortuga.saluda(); Animal.cuantosAnimales(); }} class Animal { static int animales=0; int miVelocidad; String miNombre; public Animal (int v, String n) { animales++; miNombre= n; miVelocidad= v; }; public Animal () { animales++; }; public static void cuantosAnimales (){ System.out.println("Hay "+animales+" animales"); } } Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 12 Subclases y Herencia ? Cuando se desea extender los atributos y mtodos de una clase dada, se pueden heredar en una clase hija utilizando el comando extends class Acuatico extends Animal { boolean marino; public Acuatico (int vel, String nom, boolean mar){ super(vel, nom); marino=mar; // los animales Acuaticos llevan prefijo "A_" miNombre="A_"+miNombre; } public void saluda() { super.saluda(); System.out.println("y soy acutico."); }} Nuevos atributos Nuevos constructores Sobrecarga de mtodos class OOP3_subclases { public static void main (String arg []) { Animal laLiebre, laTortuga1; Acuatico laTortuga2; laLiebre= new Animal (5,"L"); laLiebre.saluda(); laTortuga2= new Acuatico (1,"T1",true); laTortuga2.saluda(); laTortuga1= new Animal (1,"T2"); laTortuga1.saluda(); }} Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 13 La Encapsulacin de los Datos ? Pretende proteger ciertos datos (atributos y mtodos) de una clase. ? Una clase presta ciertos servicios y el resto de clases no tienen por qu conocer los detalles de cmo se realizan. Para ello, una clase consta de: Una parte pblica, accesible por otras clases, Una parte privada, accesible slo por los mtodos de la clase. class ventana { public int x1, y1; // esquina sup. izq. public int altura, anchura; } class escritorio { ... void desplaza (ventana v) { v.x1=0; v.y1=0; }; ... } Si dejamos que un mtodo de la clase escritorio modifique los atributos de un objeto de la clase ventana, corremos el riesgo de generar incoherencias con otros atributos del objeto. Por ejemplo, podra no actualizarse la informacin de la esquina inferior derecha de la misma. class ventana { public int x1, y1; public int altura, anchura; // esquina inf. der. private int x2; private int y2; } Como regla general, los atributos de una clase deben de ser protegidos. ? Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 14 Niveles de Encapsulacin (proteccin) private, slo tienen acceso los objetos de la clase dada. private protected, se permite el acceso tambin a los objetos de sus subclases, pero sin poder acceder a los valores de objetos de la clase madre. protected, se permite el acceso a las subclases y clases del mismo paquete. public, es accesible para todo el mundo. El valor de proteccin por defecto es friendly y permite acceder a las clases del mismo paquete. Clase 1 private private protected protected public SubClase 1 Clase 2 Clase 3 Paquete 1 Paquete 2 Las protecciones que se pueden establecer son (de ms fuerte a ms dbil) : Para ilustrar los distintos niveles de proteccin consideramos una clase prototipo, en un paquete dado, y vemos cmo afectan los niveles de proteccin a otra clase y a una subclase ambas en el mismo paquete, y tambin a una clase en otro paquete distinto. Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 15 class Perro extends Animal implements saludar { public void saluda(){ System.out.println("guau"); } } class Trucha extends Acuatico implements saludar { public void saluda(){ System.out.println("glub glub"); } } Herencia Mltiple. Interfaces. cmo corre un animal "Acutico"? Ser_Vivo Vegetal Animal Terrestre Acuatico nombre velocidad marino corre() Areo saluda() cmo saluda un "Vegetal"? public interface correr Ser_Vivo Vegetal Animal Terrestre Acuatico nombre velocidad marino Areo public interface saludar{ public void saluda(); } Una interfaz es una descripcin de comportamiento, una coleccin con nombre de mtodos, que puede tambin incluir constantes. (relacin con clases abstractas) mamfero mamfero Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 16 Ejemplo de Interface. interface saludar{ public void saluda(); } class Animal { int miVelocidad=0; String miNombre="sin nombre"; public Animal (String nom, int vel) { miNombre= nom; miVelocidad=vel; }; public Animal (String nom) { miNombre= nom; }; public Animal () {;}; } class Perro extends Animal implements saludar { public Perro(String nom){ super(nom); } public void saluda(){ System.out.println("guau guau..."); } } class Acuatico extends Animal { boolean marino; public Acuatico (String nom, boolean mar){ super(nom); marino=mar; // los animales Acuaticos llevan prefijo "A_" miNombre="A_"+miNombre; }} class Trucha extends Acuatico implements saludar { public Trucha(String nom){ super(nom,false); } public void saluda(){ System.out.println("glub glub..."); }} class OOP5_interfaces { public static void main (String arg []) { Animal gusano; Trucha t; Perro p; t= new Trucha("T"); t.saluda(); p= new Perro("P"); p.saluda(); gusano= new Animal ("G"); //gusano.saluda(); }} Elementos Bsicos de Java (Jos Manuel Gutirrez, Santander) Julio, 2002, slide 17 Polimorfismo El objeto laTortuga2 de la clase Animal se puede instanciar a cualquiera de las subclases de Animal definidas, (Acutico) facilitando mucho la programacin. ? El polimorfismo es uno de los conceptos ms importantes de la programacin orientada a objetos. Consiste en que un objeto de una clase se puede instanciar como objeto de cualquiera de sus subclases. Animal laLiebre; Acuatico laTortuga1; Animal laTortuga2; Animal animal; laLiebre= new Animal (5,"L"); laLiebre.saluda(); laTortuga1= new Acuatico(1,"T1",false); laTortuga2= new Acuatico(1,"T2",true); laTortuga1.saluda(); laTortuga2.saluda(); if (i sAcuat i co) animal=new Acuatico(); else animal=new Animal(); As, puedo definir un objeto animal de tipo Animal y en tiempo de ejecucin decidir si lo inicializo como Animal (para que salude como un animal) o como Marino