java en 3 horas - visusalvis.usal.es/rodrigo/documentos/aso/java3h.pdf · define atributos...
TRANSCRIPT
Java en 3 horas
Ampliación de Sistemas Operativos
Rodrigo Santamaría
Generalidades
● Desarrollado por Sun en 1995● Hereda mucha de la sintaxis de C (1972)● Fuertemente tipado y orientado a objetos● Aplicaciones compiladas a bytecode● Gestión interna de la reserva de memoria● Desde 2007, el Java de Sun es software libre
● Salvo las bibliotecas de clases para ejecutar programas java
Bytecode
● Un programa Java no se compila a código de la máquina, si no a bytecode● Código intermedio entre el código máquina y el
lenguaje de alto nivel que permite que un programa Java corra en distintas plataformas sin recompilar
● Tan sólo es necesario tener instalada la Máquina Virtual de Java (JVM), que se encarga de ejecutar las instrucciones del bytecode
JRE y JDK
● Java Runtime Environment (JRE)● Contiene la JVM en su versión más simple● Suele incluir las bibliotecas de clases estándar (API
de Java, o J2SE, hoy Java Standard Edition o JSE)– Vamos por la versión 1.6
● Java Development Kit (JDK)● JRE para desarrollar programas java● API de Java (código fuente libre)● Compilador de Java (javac), generador de
documentación (javadoc), visor de applets, depurador, etc.
Hola Mundo
clase
método
Tipos básicos como en C
javac Hola.javajava Hola
Sintaxis básica
● Control de flujo● Tipos básicos● Arrays● Operadores aritméticos● Formato de cadenas: variables entre texto
● String cad=“hola,”+nombre+”, buenos días”;
● Palabras clave particulares: package, class, public, private, extends, implements, this...
Idéntico a C
Entornos de Desarrollo Integrado (IDE)
● Integran bibliotecas, compilador, intérprete, depurador, editor y muchos otros complementos en un solo entorno:● Netbeans● Eclipse● IntelliJ IDEA● Anjuta
Organización
● Paquete: contenedor de clases (carpeta)● Clase: contenedor de métodos y atributos
(fichero)
● paquete2 dentro de paquete1: paquete1.paquete2
introduccion
Herencia.java
package introduccion
class Herencia { ... }
package introduccion;
/** * Tabla de multiplicar * (Variables y atributos) */class Mult{int m; //Atributo de la clase Mult
public static void main(String[] args) { if (args.length!=1) { System.err.println("USO: java Mult <n>"); return; } int n=Integer.parseInt(args[0]);//Variable del método main for (int i=1;i<=10;i++) System.out.println(n+"x"+i+"="+n*i); }
...
}
Variables y atributos
n
m
Clases y objetos
● Clase: diseño abstracto de un concepto● Define atributos (variables de la clase)● Define métodos (operaciones de la clase)
● Objeto: cada instancia concreta de la clase● Permite dar valor a los atributos● Permite ejecutar los métodos
Clases y Objetosclase
objeto
Privacidad
● public: accesible desde fuera y dentro de la clase
● private: accesible sólo desde la clase
● protected (por defecto) accesible desde dentro de la clase o de clases hijas
● Atendiendo a la modularidad, es recomendable que los atributos de una clase sean privados o protegidos.
● Atendiendo a la claridad de código y eficiencia de recursos, los atributos públicos pueden ser útiles.
Herencia
Constructor por defecto~ super()
Vehículo
MotoCoche
Polimorfismopublic class Coche extends Vehiculo implements Cloneable{public Coche(int numPuertas, int velocidad, String color) { this.velocidad=velocidad; this.numPuertas=numPuertas; this.color=color; this.numRuedas=4; }public Coche(String color) { this.velocidad=0; this.numPuertas=3; this.color=color; this.numRuedas=4; }public Coche() { this.velocidad=0; this.numPuertas=3; this.color="negro"; this.numRuedas=4; }}
Varios métodos con el mismo nombre,siempre que los parámetros sean distintos
Métodos estáticospublic class Coche extends Vehiculo{public Coche(int numPuertas, int velocidad, String color) { this.velocidad=velocidad; this.numPuertas=numPuertas; this.color=color; this.numRuedas=4; }
...
public static String getAutorDeLaClase() { return "Rodrigo Santamaría"; }
}
En un método estático no podemos hacer uso de atributos o métodos no estáticos
public class Main {public static void main(String [] args) { System.out.println("Autor de la clase Coche: " +Coche.getAutorDeLaClase()); ... }
Gestión de la memoria● Reserva de memoria explícita (new)● Liberación automática (garbage collector)
● Detecta objetos no utilizados/accesibles y los borra● Puede reducir el rendimiento● Solicitud explícita con System.gc();
● Asignación de objetos por referencia● Asignación por valor: coche1=coche2.clone();● Sólo si Coche implementa Cloneable
– Y redefine el método clone() public Object clone()
{ Coche obj=new Coche(); obj.numPuertas=this.numPuertas; obj.velocidad=this.velocidad; obj.color=this.color; return obj; }
Control de ErroresEl método indica qué excepciones pueden ocurrirle
Y cuando ocurren, las lanza
Al usar métodos que pueden lanzar excepciones, deben estar en una sección try/catch, de forma que si se producen, las detectemos y gestionemos correctamente
Serialización
Concluyendo...● Organización en:
● paquetes, clases y objetos● atributos y métodos
● Programación● Orientada a objetos: modularidad, herencia● Gestión sencilla de memoria, errores, I/O
● Multiplataforma (bytecode + máquina virtual)● Sofware “libre”
● API oficial● Multitud de paquetes desarrollados
Documentación● Tutorial: http://java.sun.com/docs/books/tutorial/index.html
● Documentación: http://java.sun.com/javase/6/docs/api
● Paquetes en la red para todo tipo de propósitos
Ejercicio● Definir una clase Fruta y las clases hijas
Naranja y Manzana.● Deben tener los atributos genéricos
– peso, en kilos (atributo real)– hechaZumo, falso por defecto (atributo lógico)– La manzana debe tener también el atributo entero
numPepitas● Deben tener los métodos siguientes
– Constructor por defecto y constructor que permita al usuario iniciar todos los atributos
– Un método hacerZumo() que modifique el estado de la fruta si hechaZumo es falso.
Ejercicio
● Definir una clase Principal que:● Instancie dos frutas, una manzana y una naranja● Nos diga el peso de la manzana● Haga zumo de naranja
● Tratamiento de errores● El método hacerZumo debe lanzar una excepción si
se intenta hacer zumo de una fruta ya exprimida● La clase Principal debe capturar la excepción y
avisar al usuario
Ejercicio
● Serialización● La clase Fruta debe implementar un método
congelar(String lugar) que guarde la fruta en la ruta especificada por lugar
● Para ello deberá implementar la interfaz Serializable
● Utilizar el método para guardar el zumo de naranja en el fichero “helado” dentro de la carpeta “nevera”
Duke, la mascota de Java