Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Java 08
Java 08
es/tp/
Introduccin a la
programacin con JAVA
Departamento de Computacin
Elena Hernndez Pereira
scar Fontenla Romero
Antonio Faria
Tecnologa de la Programacin
Febrero 2008
Facultad de Informtica
Universidad de A Corua
Sumario
Herencia
Polimorfismo
Programacin orientada a
objetos (POO)
Encapsulacin:
Herencia:
Ejemplo herencia:
Clase Trabajador
NIF
Nombre
Apellidos
Edad
Oficio
Introduccin a la programacin con JAVA
Curso
Polimorfismo:
Mtodo tocar
Clases y objetos
Clases y objetos
Ejemplo
Trabajador trabajador1 = new Trabajador();
trabajador1.nombre = Pepe;
Trabajador trabajador2 = new Trabajador();
trabajador2.nombre = Mara;
Trabajador1
Trabajador2
10
Bibliografa (I)
12
Bibliografa (II)
13
Introduccin (I)
Caractersticas:
Simple
Portable
Multiplataforma
14
Introduccin (II)
Caractersticas (continuacin):
Robusto
Ausencia de punteros
Seguro
15
Introduccin (III)
Caractersticas (continuacin):
Orientado a Internet
Multihilo (multi-thread)
Dinmico
Lenguaje interpretado
JVM
16
Introduccin (IV)
Inconvenientes:
17
Versiones:
18
Modelo de ejecucin
APLICACIONES JAVA
APLICACIONES
NO JAVA
API
JAVA VIRTUAL MACHINE (JVM)
SISTEMA
SISTEMA OPERATIVO
OPERATIVO
HARDWARE
HARDWARE
19
Compilador: javac
Ejecucin: java
20
Entorno de
compilacin de Java
Cdigo
Cdigo fuente
fuente
Java
Java (.java)
(.java)
Bytecode
de Java
Compilador
Compilador
de
de Java
Java
(javac)
(javac)
Compilador
Bytecodes
locales
Bytecodes
locales
Bytecodes
oo enviados
enviados aa
ByteCode
ByteCode de
de
Java
Java (.class)
(.class)
travs
travs de
de la
la red
red
Cdigo mquina
nativo
Cargador
Cargador de
de
Clases
Clases
Intrprete
Intrprete
de
de Java
Java
Libreras
Libreras de
de
clases
de
Java
clases de Java
Compilador
Compilador
(Just-In-Time
(Just-In-Time Mquina
Compiler)
Compiler)
virtual
de Java
(JVM)
Sistema
Sistema de
de ejecucin
ejecucin
Sistema
Sistema operativo
operativo
Hardware
Hardware
21
22
Definicin:
class NombreClase
{
// Atributos
// Mtodos
}
Atributos variables
23
Mtodos
}
Introduccin a la programacin con JAVA
24
double x(){
return _x;
}
double y(){
return _y;
}
void x(double d){
_x = d;
}
void y(double d){
_y = d;
}
-_x : double
-_y : double
+x() : double
+y() : double
+x (x:double)
+y (y:double)
// mtodo x()
// mtodo y()
// mtodo x(double)
// mtodo y(double)
}
Introduccin a la programacin con JAVA
25
26
Operador new
Punto
-_x : double
-_y : double
+x() : double
+y() : double
+x (x:double)
+y (y:double)
27
nombreObjeto.caracterstica;
Ejemplos:
miPunto._x
miPunto._y
28
class Punto {
double _x;
double _y;
double x(){
return _x;
}
double y(){
return _y;
}
void x(double d){
_x = d;
}
void y(double d){
_y = d;
}
class Punto
{
...
}
Prueba.java
}
Introduccin a la programacin con JAVA
29
Tipos de variables:
De objeto (Punto p)
numero1
numero2
12
18
30
Son referencias
Punto1
Punto2
_x
_x
4.0
0.0
0.0
_y
_y
0.0
0.0
7.0
!
Introduccin a la programacin con JAVA
Punto1
Punto2
Punto1
Punto2
_x
4.0
_x
0.0
_x
4.0
_x
4.0
_y
0.0
_y
7.0
_y
0.0
_y
0.0
Modificadores de clase:
33
34
/**
* Programa HolaMundo
* que presenta el mensaje Hola Mundo
*/
public class HolaMundo
{
public static void main (String [] args)
{
System.out.println (" Hola Mundo!! ");
}
}
35
36
}}
...
...
public
public class
class Prueba
Prueba
{{
}}
public
public static
static void
void main
main (String
(String []
[] args)
args)
{{
Circulo
Circulo cc == new
new Circulo();
Circulo();
}}
Prueba.java
Prueba.java
Introduccin a la programacin con JAVA
37
Paquetes (packages):
package nombrePaquete;
Ejemplo: java.awt.event
38
Paquetes (continuacin):
Importacin de paquetes:
Sentencia import:
import nombrePaquete;
39
Ejemplos:
import es.udc.fic.tp.ordenar.QuickSort;
import es.udc.fic.tp.ordenar.*;
CLASSPATH /es/udc/fic/tp/ordenar
40
41
Especificador
Clase
Subclase
Paquete
private
protected
public
package
Mundo
42
Circulo
Punto
-_centro : Punto
-_radio : double
+main()
-_x : double
-_y : double
+m ostrar()
1
+setCentro( x : double, y : double )
graficos
(paquete)
import
import graficos.*;
graficos.*;
public
public class
class EditorGrafico
EditorGrafico
{{
public
public static
static void
void main
main
(String
[]
args)
(String [] args)
{{
Circulo
Circulo cc == new
new Circulo();
Circulo();
c.setCentro(3
c.setCentro(3 ,, 4);
4);
c.mostrar();
c.mostrar();
c.radio(2.5);
c.radio(2.5);
c.mostrar();
c.mostrar();
}}
}}
Prueba.java
Prueba.java
+m ostrar()
+setX( x : double )
+setY( y : double )
package
package graficos;
graficos;
class
class Punto
Punto
{{
private
private double
double _x;
_x;
private
double
private double _y;
_y;
package
package graficos;
graficos;
public
public class
class Circulo
Circulo {{
private
private Punto
Punto _centro;
_centro;
private
double
private double _radio;
_radio;
public
public Circulo()
Circulo() //constructor
//constructor
{{
_centro
_centro == new
new Punto();
Punto();
}}
public
public void
void setCentro(double
setCentro(double a,
a, double
double b)
b)
{{
_centro.x(a);
_centro.x(a);
_centro.y(b);
_centro.y(b);
}}
void
void setX(double
setX(double d)
d)
{{
_x
_x == d;
d;
}}
void
void setY(double
setY(double d)
d)
public
public void
void setRadio(double
setRadio(double d)
d)
{{
{{
_y
_y == d;
d;
_radio
_radio == d;
d;
}}
}}
void
void mostrar()
mostrar()
{{
public
public void
void mostrar()
mostrar()
System.out.println("Valores
System.out.println("Valores
{{
de
de xx ee y:
y: "" ++ _x
_x ++ "" "" ++ _y);
_y);
System.out.println("Circulo:
System.out.println("Circulo:
}}
"" ++ _radio
_radio ++ "" ");
");
}}
_centro.mostrar();
_centro.mostrar();
}}
}}
Punto.java
Punto.java
43
Circulo
Punto
-_centro : Punto
-_radio : double
+main()
-_x : double
-_y : double
+m ostrar()
1
+setCentro( x : double, y : double )
graficos
(paquete)
import
import graficos.*;
graficos.*;
public
public class
class EditorGrafico
EditorGrafico
{{
public
public static
static void
void main
main
(String
[]
args)
(String [] args)
{{
Circulo
Circulo cc == new
new Circulo();
Circulo();
c.setCentro(3
c.setCentro(3 ,, 4);
4);
c.mostrar();
c.mostrar();
c.radio(2.5);
c.radio(2.5);
c.mostrar();
c.mostrar();
}}
}}
Prueba.java
Prueba.java
+m ostrar()
+setX( x : double )
+setY( y : double )
package
package graficos;
graficos;
class
class Punto
Punto
{{
private
private double
double _x;
_x;
private
double
private double _y;
_y;
package
package graficos;
graficos;
public
public class
class Circulo
Circulo {{
private
private Punto
Punto _centro;
_centro;
private
double
private double _radio;
_radio;
public
public Circulo()
Circulo() //constructor
//constructor
{{
_centro
_centro == new
new Punto();
Punto();
}}
public
public void
void setCentro(double
setCentro(double a,
a, double
double b)
b)
{{
_centro.x(a);
_centro.x(a);
_centro.y(b);
_centro.y(b);
}}
void
void setX(double
setX(double d)
d)
{{
_x
_x == d;
d;
}}
void
void setY(double
setY(double d)
d)
public
public void
void setRadio(double
setRadio(double d)
d)
{{
{{
_y
_y == d;
d;
_radio
_radio == d;
d;
}}
}}
void
void mostrar()
mostrar()
{{
public
public void
void mostrar()
mostrar()
System.out.println("Valores
System.out.println("Valores
{{
de
de xx ee y:
y: "" ++ _x
_x ++ "" "" ++ _y);
_y);
System.out.println("Circulo:
System.out.println("Circulo:
}}
"" ++ _radio
_radio ++ "" ");
");
}}
_centro.mostrar();
_centro.mostrar();
}}
}}
Punto.java
Punto.java
44
Clases abstractas:
Es una clase de la que no se pueden crear objetos
Utilidad: permitir que otras clases deriven de ella
proporcionando un modelo y mtodos generales de utilidad
Se declaran empleado la palabra abstract:
45
Herencia:
46
Herencia (continuacin):
Mamifero
Circulo
Perro
Vehiculo
Gato
47
Principal
+dibuja()
+repinta()
+main()
Elemento
SubElementoB
SubElementoA
+dibuja()
+dibuja()
+repinta()
}
class SubElementoB extends Elemento{
public void dibuja(){
System.out.println("dibujando SubElementoB...");
}
public void repinta(){
System.out.println("repintando SubElementoB...");
}
}
}
$javac d. Principal.java
$java Principal
dibujando SubElementoA...
dibujando SubElementoB...
repintando Elemento...
repintando SubElementoB...
48
Persona
+nombre: String
+Persona(n: String)
+obtenNombre():
String
get
+obtenTrabajo(): String
Principal
Estudiante
+main()
-titulacion: String
+Estudiante(tit: String, n: String)
+getTitulacion(): String
+toString(): String
+obtenTrabajo(): String
$ javac d. Principal.java
$ java Principal
Pepe, Estudiante de Enx. Informtica
Pepe
49
Interfaz (Interface).
Puede ser vista como una clase abstracta en la que ningn mtodo puede tener
implementacin.
Ej: interface Cloneable { ... }
1 clase puede:
extender 1 superclase
Implementar n interfaces.
SuperClase
extends
Int1
Int2
implements
Clase
Introduccin a la programacin con JAVA
50
interface ConNombre {
public String obtenerNombre();
}
class UnaClaseConNombre implements
ConNombre {
public String obtenerNombre() {
return Un nombre;
}
}
interface ConNombre {
public String obtenerNombre();
}
interface Usuario extends ConNombre {
public boolean autorizar (Usuario u);
public int obtenerUID();
}
class UsuarioImpl implements Usuario {
public String obtenerNombre() {return Un nombre; }
public boolean autorizar(Usuario u) {return false;}
public int obtenerUID() {return -1;}
Ha de implementar obtenerNombre()
public void metodo1() {.}
public int metodo2() {.}
}
Ha de implementar obtenerNombre(),
autorizar() y obtenerUID(), porque al ser
Usuario un interface, no puede haber
implementacin all.
51
class Profesor {
private String nombre;
public Profesor (String n) {
this.nombre = n;
}
public String getNombre() {
return nombre;
}
interface Investigador{
public String getCampoInvestigacion() ;
}
interface
//getNombre() se hereda
}
52
Tamao
Mnimo
Mximo
Tipo envoltura
boolean
Boolean
char
16 bits
Unicode 0
Unicode +216 -1
Character
byte
8 bits
-128
+127
Byte
short
16 bits
-215
+215 -1
Short
int
32 bits
-231
+231 -1
Integer
long
64 bits
-263
+263 -1
Long
float
32 bits
-3.4 x 1038
+3.4 x 1038
Float
double
64 bits
-3.4 x 10308
+3.4 x 10308
Double
void
Void
53
54
Literales
Caracteres especiales:
\n : salto de lnea
\t : tabulador
Etc.
55
Variables
Modificador final:
Ejemplos:
final double PI = 3.1416;
final int MAXIMO = 100;
56
Identificadores (I)
Normas:
Ejemplos:
57
Identificadores (II)
Convenios: !!
(Math.PI)
58
Operadores (I)
Se parece a C ??
Aritmticos: +, -, *, /, %
Autoincrementales: ++, --
Concatenacin de cadenas: +
59
Operadores (II)
Ejemplos:
d = e++;
d = ++e;
a += b;
// equivale a
x = x + y;
a *= b;
// equivale a
x = x * y;
c = 3;
a = c++;
// Resultado: a = 3 y c = 4
a = ++c;
// Resultado: a = 4 y c = 4
perro + gato
// Resultado perrogato
60
Comentarios
/* comentarios de una
o ms lneas */
61
Mtodos (I)
Definicin:
[modificadores] tipo nombre (parmetros)
{
// Cuerpo del mtodo
}
62
Mtodos (II)
El mtodo termina
Al ejecutar el return
63
Mtodos (III)
Tambin:
Ejemplo:
Cada
Cada parmetro
parmetro con
con su
su tipo.
tipo.
No
No es
es vlido:
vlido: int
int a,
a, bb
if (a<b)
minimo = a;
else
minimo = b;
Indica
Indica el
el valor
valor que
que
devuelve
devuelve el
el mtodo
mtodo
return minimo;
}
Introduccin a la programacin con JAVA
64
Mtodos (IV)
Ejemplo:
private void mostrar(int numero)
{
System.out.println("Valor: " + numero);
}
65
Mtodos (V)
66
Mtodos (VI)
Sobrecarga de mtodos:
67
Mtodo: clone()
68
Clonacion.java
Clonacion.java
public
public class
class Clonacion
Clonacion implements
implements Cloneable
Cloneable
{{
int
int dato;
dato;
E:\TP\ejemplos>javac
Referencia.java
Clonacion
(int
public
class
Referencia
Clonacion
(int valor)
valor) {{
public class Referencia
E:\TP\ejemplos>java
-classpath
e:\tp\ejemplos
Referencia
dato
{{
dato == valor;
valor;
a: 10
}}
int
int dato;
dato;
b:
10
public
Referencia
public static
static void
void main(String[]
main(String[] args)
args)
Referencia (int
(int valor)
valor) {{
a: 11
throws
CloneNotSupportedException
dato
=
valor;
throws CloneNotSupportedException
dato = valor;
b: 11
{{
}}
Clonacion
public
Clonacion aa == new
new Clonacion(10);
Clonacion(10);
public static
static void
void main(String[]
main(String[] args)
args)
//
Clona
el
objeto
{{
// Clona el objeto
();
Clonacion
Referencia
a.clone
Clonacion bb == (Clonacion)
(Clonacion) a.clone();
a.clone();
Referencia aa == new
new Referencia(10);
Referencia(10);
System.out.println("a:
//Referencia
System.out.println("a: "" ++ a.dato);
a.dato);
//Referencia al
al objeto
objeto
System.out.println("b:
"
+
b.dato);
Referencia
b
=
a;
System.out.println("b: " + b.dato);
Referencia b = a;
a.dato++;
System.out.println("a:
"
+
a.dato);
a.dato++;
System.out.println("a: " + a.dato);
System.out.println("a:
System.out.println("b:
"
+
b.dato);
System.out.println("a: "" ++ a.dato);
a.dato);
System.out.println("b: " + b.dato);
System.out.println("b:
"
+
b.dato);
a.dato++;
System.out.println("b: " + b.dato);
a.dato++;
}
System.out.println("a:
"
+
a.dato);
}
System.out.println("a: " + a.dato);
}
System.out.println("b:
"
+
b.dato);
System.out.println("b: " + b.dato); }
}}
E:\TP\ejemplos>javac Clonacion.java
}}
E:\TP\ejemplos>java -classpath e:\tp\ejemplos Clonacion
Ejemplos:
Referencia.java
Referencia.java
Introduccin a la programacin con JAVA
a:
b:
a:
b:
10
10
11
10
69
Object.clone()
70
//Imprime: 3 3 2
Introduccin a la programacin con JAVA
71
1. Copia superficial.
2. Copia en profundidad.
72
73
74
75
Condicin simple: if
if (expresin)
{
sentencia1;
...
sentencia N;
}
76
77
Ejemplos:
if (calificacion >= 5)
System.out.println("Aprobado");
else
System.out.println("Suspenso");
if (saldo >= importe)
{
saldo = saldo importe;
System.out.println("Saldo suficiente");
}
else
System.out.println("Error: saldo insuficiente");
78
if (expresin1){
Grupo sentencias1;
} else if (expresin2) {
Grupo sentencias2;
} else if (expresin3) {
Grupo sentencias3;
} else {
Grupo sentencias4;
}
79
80
81
Ejemplo:
switch (dia) {
case 1: System.out.println("Lunes"); break;
case 2: System.out.println("Martes"); break;
case 3: System.out.println("Mircoles"); break;
case 4: System.out.println("Jueves"); break;
case 5: System.out.println("Viernes"); break;
case 6: System.out.println("Sbado"); break;
case 7: System.out.println("Domingo"); break;
}
82
83
Bucle while:
while (expresin) {
Grupo de sentencias;
}
Bucle do while:
do {
Grupo de sentencias;
} while (expresin)
84
Ejemplos:
contador = 1;
while (contador <= 10)
{
suma = suma + contador;
contador++;
}
contador = 1;
do
{
suma = suma + contador;
contador++;
} while (contador <= 10)
85
Bucle for:
for (inicializacin; expresin; incremento)
{
Grupo de sentencias;
}
86
Ejemplos:
for (contador=1;contador<=10;contador++)
suma = suma + contador;
for (i = 10, j = 0; i > j; j++, i--)
System.out.println("Una iteracin del bucle + j);
87
Sentencia break:
Sentencia continue:
88
Ejemplos:
for (suma=0, numero=1; numero<5; numero++)
{
if (numero<=1)
break; //sale del bucle
suma = suma + numero;
}
suma
0
89
Ejemplos:
90
abc.length()
Ejemplo: if ( frase1.equals(frase2) )
91
Ejemplo:
String frase = "Mi cadena";
String subfrase1 = frase.substring(1,5);
String subfrase2 = frase.substring(4, frase.length());
String subfrase2 = frase.substring(4);
equivale
System.out.println(subfrase1); // Muestra: i ca
System.out.println(subfrase2); // Muestra: adena
Introduccin a la programacin con JAVA
92
Arrays (I)
Ejemplos:
double numeros[];
double[] numeros;
Alumno[] clase;
Empleado empresa[];
93
Arrays (II)
Creacin de un array:
numeros[15]
clase[indice]
94
Arrays (III)
Ejemplo:
int longitud = numeros.length;
// NO ES UN MTODO
95
Arrays (IV)
Arrays de objetos:
Ejemplo:
Persona grupo[];
grupo = new Persona[100]; /* array listo para
asignarle personas */
No se crean los 100 elementos del grupo!
for (i=0;i<grupo.length;i++) grupo[i] = new Persona();
System.out.println(grupo[45].toString());
96
Arrays (V)
Arrays multidimensionales:
tipo[][] nombre = new tipo[tam1][tam2];
tipo[][][] nombre = new tipo[tam1][tam2][tam3];
....
Ejemplos:
int[][] tabla = new int[5][5];
Persona[][] grupo = new Persona[10][10];
97
Arrays (VI)
98
Arrays (VII)
99
Excepciones (I)
RuntimeException
RuntimeException
Exception
Exception
IOException
IOException
ClassNotFoundException
ClassNotFoundException
ArithmeticException
ArithmeticException
FileNotFoundException
FileNotFoundException
IndexOutOfBoundsException
IndexOutOfBoundsException
ProtocolException
ProtocolException
100
Excepciones (II)
La clase Error:
La clase Exception:
Excepciones implcitas:
Excepciones explcitas:
101
Excepciones (III)
102
Excepciones (IV)
103
Excepciones (V)
104
Excepciones (VI)
Ejemplo:
public class EjemploCatch {
String mensajes[] = {"Luis", "Carlos", "David" };
public static void main(String[] args)
{
int cont;
try {
for (cont = 0; cont <= 3; cont++)
System.out.println(mensajes[cont]);
}
catch (ArrayIndexOutOfBoundsException excep) {
System.out.println("El array se ha desbordado");
}
}
}
105
Excepciones (VII)
Ejemplo:
void metodoEjem() throws IOException, ArithmeticException
{
// Cdigo que puede lanzar las excepciones
// No es necesario hacer try catch aqu (aunque es posible relanzar)
}
106
Excepciones (VIII)
Ejemplo:
class MiExcepcion extends Exception{
public MiExcepcion() {}
public MiExcepcion(String message) {super(message);} //para e.getMessage()
}
Throwable
Throwable
Error
Error
RuntimeException
RuntimeException
IOException
IOException
Exception
Exception
...
MiExcepcion
MiExcepcion
107
System.in
: Objeto de InputStream
System.out
: Objeto de PrintStream
System.err
: Objeto de PrintStream
Mtodos de System.in
108
109
InputStreamReader
InputStreamReader
110
111
112
Algunos mtodos:
Math.sqrt(num)
Math.exp(num)
Math.min(a,b)
Math.pow(a,b)
Math.random()
Math.log(num)
Math.abs(num)
Math.cos(num)
Math.sin(num)
Math.tan(num)
Math.toDegrees(num)
Math.toRadians(num)
113