Download Introducción a Java

Document related concepts
no text concepts found
Transcript
+
Java en 2 horas
Rodrigo Santamaría
+ Generalidades
2
l
Desarrollado por Sun
en 1995
l
Hereda mucha de la sintaxis de C (1972)
l
Fuertemente tipado y orientado a objetos
l
Aplicaciones compiladas a bytecode
l
Gestión interna de la reserva de memoria
l
Desde 2007, el Java de Sun es software libre
l
Salvo las bibliotecas de clases para ejecutar programas java (OpenJDK)
l
IcedTea es una versión de la OpenJDK totalmente libre
+
3
Bytecode
l
Un programa Java no se compila a código de la máquina, si
no a bytecode
l
l
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
+
4
JRE y JDK
l
Java Runtime Environment (JRE)
l
l
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)
-
l
Vamos por la versión 1.6
Java Development Kit (JDK)
l
JRE para desarrollar programas java
l
API de Java (código fuente libre)
l
Compilador de Java (javac), generador de documentación
(javadoc), visor de applets, depurador, etc.
+
5
Hola Mundo
clase
método
class Hola
{
public static void main(String[] args)
{
System.out.println("Hola, mundo.");
}
}
javac Hola.java
java Hola
Tipos
básicos
como en C
+
6
Sintaxis básica
l
Control de flujo
l
Tipos básicos
l
Arrays
l
Operadores aritmético-lógicos
l
Formato de cadenas: variables entre texto
l
l
Idéntico a C
String cad=“hola,”+nombre+”, buenos días”;
Palabras clave particulares: package,
class, public,
private, extends, implements, this...
+
7
Entornos de Desarrollo Integrado (IDE)
l
l
Integran bibliotecas, compilador, intérprete, depurador,
editor y otros complementos en un solo entorno:
l
Netbeans
l
Eclipse
l
IntelliJ IDEA
l
Anjuta
En esta asignatura utilizaremos Eclipse
l
Es gratuito y con licencia de software libre (EPL)
l
Tiene una instalación limpia, disponible en el aula
l
Ampliaciones (plugins) para desarrollo web
+
8
Paquetes y Clases
Convención:
en minúscula
l
Paquete: contenedor de clases (carpeta)
l
Clase: contenedor de métodos y atributos (fichero) en mayúscula
package introduccion
class Hola
{
...
}
l
introduccion
Herencia.java
paquete2 dentro de paquete1: paquete1.paquete2
+
9
Clases y objetos
l
l
Clase: diseño abstracto de un concepto
l
Define atributos (variables de la clase)
l
Define métodos (operaciones de la clase)
Objeto: cada instancia concreta de la clase
l
Permite dar valor a los atributos
l
Permite ejecutar los métodos
+
10
Clases y Objetos
clase
public class Coche
{
float velocidad;
int numPuertas;
String color;
public Coche(int numPuertas, float velocidad, String color)
{
this.velocidad=velocidad;
this.numPuertas=numPuertas;
this.color=color;
}
public int getNumPuertas()
{
return numPuertas;
}
public void acelerar(int nuevaVelocidad)
{
if(nuevaVelocidad>velocidad) velocidad=nuevaVelocidad;
}
}
import Coche
objeto
public class Main
{
public static void main(String [] args)
{
Coche miFerrari=new Coche(3,0, ”rojo”);
System.out.println(” Mi coche tiene "
+miFerrari.getNumPuertas()+” puertas”);
miFerrari.acelerar(100);
}
}
+
11
Variables y atributos
Alcance
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);
}
...
}
m
n
+
12
Privacidad
l
public: accesible desde fuera y dentro de la clase
l
private: accesible sólo desde la clase
l
l
l
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.
+
13
Herencia
Constructor
por defecto
~ super()
Vehículo
Coche
Moto
+
14
Clases abstractas
l
No se pueden instanciar en objetos
l
Palabra clave abstract antes de class
+
15
Polimorfismo
public 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
+
16
Métodos estáticos
public 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());
...
}
+
17
Gestión de la memoria
l
Reserva de memoria explícita (new)
l
Liberación automática (garbage collector)
l
l
l
l
Detecta objetos no utilizados/accesibles y los borra
Puede reducir el rendimiento
Solicitud explícita con System.gc();
Asignación de objetos por referencia
l
Para asignación por valor: coche1=coche2.clone();
l
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;
}
+
18
Control de Errores
El 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
+
19
Serialización
+
20
Concluyendo...
l
Organización en:
l
l
l
paquetes, clases y objetos
atributos y métodos
Programación
l
l
Orientada a objetos: modularidad, herencia, polimorfismo
Gestión sencilla de memoria, errores, I/O
l
Multiplataforma (bytecode + máquina virtual)
l
Sofware “libre”
l
l
API oficial
Multitud de paquetes desarrollados
+
21
Documentación
l
Tutorial: http://java.sun.com/docs/books/tutorial/index.html
l
Documentación: http://java.sun.com/javase/8/docs/api
l
Paquetes en la red para todo tipo de propósitos
+
22
Ejercicio
l
Definir una clase Fruta y las clases hijas Naranja y Manzana.
l
l
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.
+
23
Ejercicio
l
l
Definir una clase Principal que:
l
Instancie dos frutas, una manzana y una naranja
l
Nos diga el peso de la manzana
l
Haga zumo de naranja
Tratamiento de errores
l
l
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
+
24
Ejercicio
cont.
l
Serialización
l
l
l
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”
25
26
Duke, la mascota
de Java