FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors El lenguaje de programación Java Java (I) Orientado a objetos o Ejecutado por una maquina virtual o – Independiente de la plataforma Multithreaded o Orientado a la red o – Soporte para un gran numero de protocolos: HTTP, FTP, etc.. o Facilidades para la programación – Gestión automática de la memoria – Detección de errores en tiempo de compilación v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 2 1 Java (II) o Coherencia – Todo en Java es un objeto – Todos los objetos heredan de Object o Gran cantidad de librerías – Estandarizadas – Documentación o Permite la integración con sistemas ya existentes – Otros lenguajes: JNI – Interficies gráficas: AWT, SWING. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2004.02 3 Java 1 y 2 o JDK – Java Developer Kit o Diferencias entre Java1 y Java2 – Mejoras en las interficies gráficas (Swing) – Amplias mejoras en las librerías – Métodos deprecated o Porque versión van? – JDK 1.4.? v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 4 2 Programación orientada a objetos (POO) o La orientación a objetos se “inventó” para programar simuladores de sistemas fisicos complejos. o Luego se vio que iba muy bien para implementar interficies gráficas. o Al final, se ha demostrado que la POO es útil en cualquier sistema físico o no, que se pueda “modelar” en componentes más o menos independientes. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2004.02 5 Orientación a objetos (I) o Un objeto es básicamente: – Los datos (variables) que representan una “entidad” en el mundo real. – Las funciones que actúan sobre estos datos. v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 6 3 Orientación a objetos (II) o Separando los “objetos” tanto a nivel “lógico” como a nivel de ficheros se simplifica el mantenimiento del programa y se aumenta su reusabilidad. o Esto es algo que cuando llevamos tiempo programando hacemos instintivamente. Sin embargo, la POO nos fuerza a ello. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2004.02 7 Un ejemplo de clase (I) Persona int dni String nombre String direccion int telefono void mostrarPorPantalla() v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 8 4 Un ejemplo de clase (II) Nombre del tipo de objeto (clase) Datos (atributos) Funciones (métodos) Persona int dni String nombre String direccion int telefono void mostrarPorPantalla() v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 9 Un ejemplo de clase (III) public class Persona { int dni; String nombre; String direccion; int telefono; public int obtenerDni() { return dni; } public void modificarDni(int dni) { this.dni=dni; } public void mostrarPorPantalla() { System.out.println("DNI: "+dni); System.out.println("Nombre: "+nombre); System.out.println("Direccion: "+direccion); System.out.println("Telefono: "+telefono); } } v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 10 5 Un ejemplo de objeto (I) public class miObjeto { public static void main(String args[]){ Persona juan = new Persona(); // Acceso a atributos juan.dni = 12341234; juan.nombre = "Juan"; juan.direccion = "EPSC"; juan.telefono = 12345; // Acceso a métodos juan.obtenerDni(); juan.modificarDni(12345678); juan.mostrarPorPantalla(); } } FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2004.02 11 Visibilidad de los objetos o o Una clase contiene todos las variables y funciones de un objeto... y absolutamente nada más. La “visibilidad” de un atributo o metodo se especifica poniendo un modificador delante – public: cualquier objeto puede llamar esa función o ver/modificar esa variable. – private: sólo el propio objeto puede llamar a esa función (es una función interna) o modificar ese valor. – protected: sólo puede ese objeto y sus “hijos”. Es el que se utiliza normalmente. El concepto de hijo se vera al tratar la herencia. o o El constructor es la función que se llama automáticamente al crear una variable de ese tipo. Aquí es donde se inicializan las variables. El tratamiento de errores también lo veremos más adelante. v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 12 6 FSD: Entorno de desarrollo o SUN SDK 1.4 http://java.sun.com/j2se/1.4/download.html W98: autoexec.bat o en una ventana de MSDOS set JAVA_HOME=C:\j2sdk1.4.0 set CLASSPATH=.;c:\j2sdk1.4.0\lib set PATH=%PATH%;c:\j2sdk1.4.0\bin W2000: variables de entorno o en una ventana de MSDOS o RealJ http://www.realj.com/ RealJ / Preferences/ JDK Location C:\j2sdk1.4.0 v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 13 PrimerPrograma.java /** * Este es tu primer programa en Java. * Imprime un saludo por pantalla. */ import java.*; /* La clase principal se denomina PrimerPrograma */ public class PrimerPrograma { public static void main(String args[ ]){ //Parte ejecutiva del programa System.out.println("\n Hola aprendiz de programador en Java "); } } v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 14 7 Compilar / interpretar o Compilar (bytecode, *.class) – En modo línea de comandos: • javac PrimerPrograma.java – En RealJ • File / New Project • File / New Java Source File o Project / Add Files • Set as main • Build / Compile o Interpretar (ejecutar) – En modo línea de comandos: • java PrimerPrograma – En RealJ • Build / Run Application o Build / Run with Console v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 15 Herencia (I) o o o Supongamos que tenemos una clase que nos define una persona. Queremos las clases Alumno y Profesor. Ambos son personas y seria perfecto no tener que volver a escribir (y pensar) todas las variables y funciones que ya hay en la clase Persona. v.2004.02 Persona int dni String nombre String direccion int telefono void mostrarPorPantalla() FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 16 8 Herencia (II) Persona int dni String nombre String direccion int telefono int obtenerDni() void modificarDni(int dni) void mostrarPorPantalla() Alumno Profesor int[] notas Asignatura[] asigs void nuevaNota(int nota) void listadoNotas() void mostrarPorPantalla() void mostrarPorPantalla() v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 17 Ejemplo de herencia (I) public class Persona { protected int dni; protected String nombre; protected String direccion; protected int telefono; public int obtenerDni() { return dni; } public void modificarDni(int dni) { this.dni=dni; } public void mostrarPorPantalla() { System.out.println("DNI: "+dni); System.out.println("Nombre: "+nombre); System.out.println("Direccion: "+direccion); System.out.println("Telefono: "+telefono); } } v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 18 9 Ejemplo de herencia (II) public class Alumno extends Persona { protected int[] notas; public void nuevaNota (int nota) { // Añade una nueva nota } public void listadoNotas() { System.out.println("Notas:"); for(int i=0;i<notas.length;i++) { System.out.println(notas[i]); } } public void mostrarPorPantalla() { super.mostrarPorPantalla(); listadoNotas(); } } v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 19 Herencia (III) Java sólo tiene herencia simple. Esto es, una clase sólo puede heredar de una clase. o Además, si una clase no hacemos que herede de alguna otra clase, Java automáticamente hace que herede de la clase Object. o v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 20 10 Polimorfismo o o o o En cualquier lugar donde nos pida una variable de tipo Persona, podemos usar una de tipo Alumno o Profesor. La ventaja es que al llamar a una función se ejecutara la “versión correcta” dependiendo de la clase concreta. Si hacemos un vector de Personas podremos almacenar en él tanto Personas, como Alumnos y Profesores. Con el operador instanceof podemos comprobar el tipo de un objeto. if(o instanceof Alumno) { // es un alumno } v.2004.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 21 11