El lenguaje de programación Java

Anuncio
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
Descargar