Introducción a JAVA Angel Kuri Enero, 2006 2/2/2006 Características Básicas de Java JAVA es un lenguaje de programación: a) Independiente de la plataforma - Corre en una máquina virtual - El código de dicha MV es bytecode b) Es orientado a objetos c) Tiene características que lo hacen apropiado para operar en WEB. 2/2/2006 Una Aplicación Java Usando su editor, teclee: class HelloWorld { public static void main (String args[]) { System.out.println("Hola a todo el Mundo!"); } } Guarde este código como “HelloWorld.Java” 2/2/2006 Compilando la Aplicación Compile el código anterior: javac HelloWorld.java Si todo va bien, el compilador ha creado un programa objeto en bytecode, llamado HelloWorld.class 2/2/2006 Ejecutando la Aplicación Para correr su programa, invoque la máquina virtual Java: java HelloWorld Deberá observar la sentencia: Hola a todo el mundo! 2/2/2006 Creando un Applet Ahora crearemos un applet. Teclee el siguiente código: import java.awt.Graphics; public class HWApplet extends java.applet.Applet { public void paint(Graphics g) { g.drawString("Hola a todo el Mundo!",5,25); } } 2/2/2006 Creando un Applet Ahora cree el siguiente archivo: <HTML> <HEAD> <TITLE>Hola a Todo el Mundo!</TITLE> </HEAD><BODY> <P>Mi Applet de JAVA dice: <APPLET CODE="HWApplet.class" WIDTH=150 HEIGHT=25><APPLET> </BODY> </HTML> 2/2/2006 Visualizando un Applet Ahora use su visor. a) Invóquelo b) Indique que desea visualizar el archivo que acaba de crear: HWApplet.html 2/2/2006 Applet 1 Deberá observar una pantalla similar a la siguiente: 2/2/2006 Consideraciones de Seguridad Como hemos visto, los applets se cargan vía visores como Netscape o Explorer. Java mantiene ciertas restricciones para evitar la posibilidad de que un applet dado pueda dañar a nuestro sistema. 2/2/2006 Restricciones de un Applet Un applet: a) No puede leer o escribir de/en un disco local. b) No pueden ejecutar un programa en el sistema local. c) No pueden conectarse a ninguna máquina de la red que no sea el servidor local del cual se cargaron originalmente. 2/2/2006 Restricciones de Java El compilador e intérprete de Java verifican la funcionalidad de los programas para tratar de evitar situaciones anómalas. Por ejemplo, tratan de evitar que el programador sobrecargue las áreas de memoria (buffers) o apile un número excesivo de cuadros. 2/2/2006 Programación Orientada a Objetos (POO) La POO está modelada sobre la idea de que un objeto está formado por objetos más pequeños. Por otra parte, permite la definición de ciertos conjuntos de objetos que comparten características comunes: las clases. 2/2/2006 Objetos y Clases Una clase es una plantilla para objetos múltiples con características similares. Las clases comprenden todas las características de una serie particular de objetos. Por ejemplo, podemos definir la clase Arbol que describe las características de todos los árboles (tienen hojas, raíces, crean clorofila, crecen, exhiben capilaridad,etc.) 2/2/2006 Objetos y Clases Las clase Arbol sirve como un modelo de la esencia del objeto. Para poder manipular un árbol, sin embargo, es indispensable instanciarlo, es decir, necesitamos tener una instancia concreta del mismo. Este objeto puede tener propiedades distintivas en cada una de sus instancias (bajo, frondoso, de hojas perennes, etc.) 2/2/2006 Objetos y Clases Una instancia de una clase es otra forma de llamar a un objeto. La clase es la representación general de un objeto; Una instancia es su representación concreta. 2/2/2006 Objetos y Clases Cuando se escribe un programa en Java, se diseña y construye un conjunto de clases. Cuando se ejecuta dicho programa las instancias de las clases (los objetos) se crean y descartan en la medida en que esto sea necesario. La tarea del programador es crear el conjunto de clases adecuado. 2/2/2006 Programas en Java Pero, al escribir programas en Java, es posible (y muy deseable) aprovechar un conjunto de clases (en una biblioteca) que forman parte del entorno de Java. Estas clases implementan una buena parte del comportamiento básico necesario. 2/2/2006 Comportamiento y Atributos Cada clase en Java está compuesta por dos elementos: a) Atributos b) Comportamiento Los Atributos son las características que definen a un objeto. 2/2/2006 Atributos Si creamos una clase llamada Motorcycle algunos de sus atributos son los siguientes: - Color: rojo, verde, azul, etc. - Estilo: deportiva, estándar, carga - Marca: Honda, BMW, Kawasaki Los atributos también pueden incluir información sobre su estado: apagada, velocidad actual, etc. 2/2/2006 Atributos Los atributos se definen con variables. De hecho, pueden ser considerados como las variables globales del objeto. Como cada variable puede tener distintos valores en un cierto objeto, a cada variable se le llama variable de instancia. 2/2/2006 Variables de Instancia Las variables de instancia definen los atributos de un objeto. La clase define el tipo de atributo y cada objeto guarda su propio valor para ese atributo. Las VI pueden fijarse cuando se crea un objeto (y permanecen fijas en tanto el objeto sea vigente) o se pueden habilitar para cambiar a lo largo del programa. 2/2/2006 Variables de Clase Hay atributos que se aplican a la clase y a todas sus instancia (VC). A diferencia de las VI cuyos valores se guardan en el objeto, los valores de las VC se almacenan en la clase misma. 2/2/2006 Comportamiento El comportamiento de la clase determina qué objetos de la clase requieren cambiar su estado o cuándo ese objeto es llamado para realizar algo (por otra clase u objeto). El comportamiento es la única forma en la que un objeto puede hacerse algo a si mismo o tener que hacer algo a otro objeto. 2/2/2006 Comportamiento Algunos comportamientos de Motorcycle son: - Arrancar el motor - Detener el motor - Acelerar - Cambiar velocidades - Frenar 2/2/2006 Métodos Para definir el comportamiento de un objeto se crean métodos. Estos tienen una funcionalidad análoga a la de un procedimiento en otros lenguajes. Los métodos son funciones definidas dentro de las clases que operan en los objetos de esas clases. 2/2/2006 Métodos Los objetos también se comunican entre si con métodos. Una clase u objeto puede llamar a métodos de otra clase u objeto para avisar sobre cambios en el entorno o para solicitar a un objeto que cambie su estado. 2/2/2006 Cómo Crear una Clase class Motorcycle { String make; String color; boolean engineState; void startEngine() { if (engineState == true) System.out.println("La máquina ya está encendida"); else { engineState = true; System.out.println("La máquina se ha encendido"); } } 2/2/2006 Cómo crear una clase void showAtts() { System.out.println("Esta moto es una "+make+" "+color); if (engineState == true) System.out.println("La máquina está encendida"); else { System.out.println("La máquina está apagada"); } } } Para ejecutar adecuadamente Java requiere de un método main() 2/2/2006 public static void main (String args[]) { Motorcycle m = new Motorcycle(); m.make = "Yamaha RZ350"; m.color = "roja"; System.out.println("Llamando a showAtts..."); m.showAtts(); System.out.println("- - - -"); System.out.println("Encendiendo máquina..."); m.startEngine(); System.out.println("- - - -"); System.out.println("Llamando a showAtts..."); m.showAtts(); System.out.println("- - - -"); System.out.println("Encendiendo máquina..."); m.startEngine(); } 2/2/2006 Herencia La herencia es una de las características primordiales de la POO. Debido a la herencia, todas las clases están posicionadas en una jerarquía específica. 2/2/2006 Jerarquía de Clases La clase A es una superclase de B. La clase B es una subclase de A. La clase B es una superclase de C, D y E. Las clases C, D y E son subclases de B. 2/2/2006 Herencia Las subclases heredan todos los métodos y variables de las superclases. Si una superclase X define un comportamiento que es conveniente en otra clase Y, al establecer a Y como subclase de X es innecesario redefinir ese comportamiento. Una clase, de manera automática, hereda, su comportamiento de su superclase. 2/2/2006 Herencia En la clase superior de la jerarquía de JAVA está la clase Object; todas las clases heredan de esta superclase. Una subclasificación implica crear una nueva subclase que heredará de alguna otra clase en la jerarquía. Cambiar el comportamiento de una superclase modifica el comportamiento de clases inferiores de manera automática. 2/2/2006 Jerarquía de Clases Ejemplo de una jerarquía de clases: 2/2/2006 Cómo funciona la herencia En las variables de instancia, una instancia de clase genera una “ranura” para cada variable definida en la clase y para cada variable de sus superclases. Así, todas las clases se combinan para crear una plantilla para el objeto. Luego cada objeto llena los espacios de la plantilla. 2/2/2006 Cómo funciona la herencia Los métodos operan de forma similar. Los objetos nuevos tienen acceso a todos los nombres de los métodos de su clase y sus superclases. Pero las definiciones de métodos se eligen de manera dinámica cuando se invoca a un método. 2/2/2006 Sobreposición Cuando una subclase define un método que posee la misma identificación (nombre; número y tipo de los argumentos) que un método en una superclase la definición del primer (de abajo a arriba) método en la clase es la que opera. Es posible ocultar un método superior definiendo uno inferior con el mismo identificador. A esto se le llama sobreponer un método. 2/2/2006 Herencia Sencilla y Múltiple Cada clase en JAVA puede tener solamente una superclase, aunque puede tener tantas subclases como se desee. En otros lenguajes OO (como C++) las clases pueden tener más de una superclase y heredan con variables y métodos combinados de todas esas clases. A eso se le llama herencia múltiple. 2/2/2006 Interfaces La herencia sencilla de JAVA puede ser restrictiva. En particular, cuando tiene un comportamiento similar que necesita duplicarse mediante diferentes ramas de la jerarquía de clase. Esto se resuelve con las interfaces. Una interfaz es una colección de nombres de métodos sin definiciones reales que indican que una clase tiene un conjunto de comportamientos, además de los que la clase hereda de las superclases. 2/2/2006 Paquetes Los paquetes son una forma de agrupar clases e interfaces relacionadas. Permiten que grupos modulares de clases estén disponibles solo al necesitarse. Eliminan conflictos entre nombres de clase entre diferentes grupos de clase. 2/2/2006 Paquetes Las bibliotecas de clase de JDK están contenidas en un paquete llamado java. Las clases del paquete son las únicas que garantizan disponibilidad en cualquier instalación. El paquete java contiene otros paquetes para clases que definen el lenguaje de las clases de entrada/salida, algunos fundamentos de redes y las funciones de manejo de ventanas. 2/2/2006 Paquetes Por omisión, las clases JAVA tienen acceso solo a las clases que se encuentran en java.lang (el paquete de lenguaje básico). Para usar clases de otro paquete es necesario referirse a ellas de manera explícita. Por ejemplo, la clase Color que está contenida en el paquete awt (Abstract Windowing Toolkit) debe ser invocada con la notación java.awt.Color. 2/2/2006 Creación de una Subclase Usaremos, como ejemplo de una subclase, un applet. Todos los applets son subclases de la clase Applet; ésta es parte de java.applet. Al crear una subclase de Applet se heredan los comportamientos del kit de ventanas así como las clases de diseño que permiten al applet dibujarse en el lugar correcto de la página e interactuar con opciones del sistema, tales como presiones de teclas o clics del ratón. 2/2/2006 Creación de una Subclase import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class HAApplet extends java.applet.Applet { Font f = new Font("TimesRoman", Font.BOLD, 36); public void paint(Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString("Hola nuevamente!",5,50); } } 2/2/2006 Creación de una Subclase En nuestro programa, la variable de instancia f ahora contiene un objeto de la clase Font, que forma parte del paquete java.awt. Al escribir applets hay varios métodos estándares que, por lo común, sobrepondremos en la clase del applet. Uno de estos métodos es paint(), el cual despliega el applet en pantalla. La definición predeterminada no hace nada: es un método vacío. Al sobreponer este método, le decimos al applet qué debe dibujar en pantalla. 2/2/2006 Creando una Subclase <HTML> <HEAD> <TITLE>Otro Applet</TITLE> </HEAD> <BODY> <P>Mi Segundo Applet de JAVA dice: <APPLET CODE="HAApplet.class" WIDTH=300 HEIGHT=50> </APPLET> </BODY> </HTML> 2/2/2006 Applet 2 2/2/2006 Repaso a Términos de POO Clase. Una plantilla para un objeto. Objeto. Instancia correcta de alguna clase. (Super/Sub)clase. Una clase más arriba/abajo en la jerarquía de clases. Método de instancia. Comportamiento definido en un objeto de una clase (=método). Método de clase. Método definido para una clase. 2/2/2006 Repaso a Términos de POO Variable de instancia. Variable que es propia de un objeto. Variable de clase. Variable propia de una clase y todas sus instancias. Interfaz. Una serie de especificaciones abstractas de comportamiento que las clases pueden implantar. Paquete. Una colección de clases e interfaces. 2/2/2006