FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS
Departament d’Arquitectura de Computadors
El lenguaje de programación Java
Java
(I)
o
Orientado a objetos
o
Ejecutado por una maquina virtual
– Independiente de la plataforma
o
Multithreaded
o
Orientado a la red
– Soporte para un gran numero de protocolos: HTTP, FTP, etc..
o
Facilidades para la programación
– Gestión automática de la memoria
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 3 v.2004.02
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.
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?
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 5 v.2004.02
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.
Orientación a objetos
(I)
o
Un objeto es básicamente:
– Los datos (variables) que representan una “entidad” en el mundo
real.
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 7 v.2004.02
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.
Un ejemplo de clase
(I)
Persona
int dni
String nombre
String direccion
int telefono
void mostrarPorPantalla()
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 9 v.2004.02
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()
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);
}
}
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 11 v.2004.02
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();
}
}
Visibilidad de los objetos
o
Una clase contiene todos las variables y funciones de un objeto... y
absolutamente nada más.
o
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
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.
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 13 v.2004.02
FSD: Entorno de desarrollo
o
SUN SDK 1.4
http://java.sun.com/j2se/1.4/download.html
o
RealJ
http://www.realj.com/
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
RealJ / Preferences/ JDK Location
C:\j2sdk1.4.0
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 ");
}
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 15 v.2004.02
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
Herencia
(I)
o
Supongamos que tenemos una
clase que nos define una
persona.
o
Queremos las clases Alumno y
Profesor.
o
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.
Persona
int dni
String nombre
String direccion
int telefono
void mostrarPorPantalla()
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 17 v.2004.02
Herencia
(II)
Persona
int dni
String nombre
String direccion
int telefono
int obtenerDni()
void modificarDni(int dni)
void mostrarPorPantalla()
Alumno
void nuevaNota(int nota)
void listadoNotas()
void mostrarPorPantalla()
int[] notas
Profesor
void mostrarPorPantalla()
Asignatura[] asigs
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);
}
}
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 19 v.2004.02
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();
}
}
Herencia
(III)
o
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
.
FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 21 v.2004.02