Sunteți pe pagina 1din 114

Java 1.

4
Dr. Diego Lz. de Ipia Gz. de Artaza
http://paginaspersonales.deusto.es/dipi
na
dipina@eside.deusto.es

Introduccin a la
plataforma Java (I)

Evolucin de la programacin

Qu es programar?
Fases de un proyecto informtico

Anlisis.
Diseo.
Codificacin + compilacin.
Depuracin + pruebas.
Documentacin.

Introduccin a la
plataforma Java (II)

Evolucin de los lenguajes.

Programacin estructurada.

Instrucciones secuenciales.
Instrucciones condicionales.
Instrucciones repetitivas.

Un programa en ejecucin: proceso.

Lenguajes mquina.
Lenguajes ensamblador.
Lenguajes de alto nivel.

La relacin con la mquina.

Los orgenes del lenguaje Java.

1991 Sun Microsystems intenta crear un lenguaje


para programar dispositivos elctricos.

Introduccin a la
plataforma Java (III)

Primera versin se llam OAK.


No tuvo xito. Nueva orientacin: Internet.
En 1996 surge la primera versin.

Caractersticas principales del lenguaje


Java.

Multiplataforma.

Compilacin -> ByteCode -> JVM (Java Virtual


Machine).
Ventajas:

Multiplataforma.
Entorno controlado.

Introduccin a la
plataforma Java (IV)

Desventajas

Menor rendimiento.
Prdida de caractersticas especficas.

Orientacin a Objetos.
Applets.
Programacin distribuida RMI (Remote
Method Invocation)
Multiproceso / Multihilo (MultiThreading)
Programacin mvil J2ME (Micro Edition)
Programacin aplicaciones web JSP (Java
Server Pages)

Introduccin a la
plataforma Java (V)

La evolucin del lenguaje Java.

La orientacin actual es la de ofrecer


multitud de utilidades para facilitar el
desarrollo de aplicaciones.

Servidores de aplicaciones.
Transparencia en el acceso a datos.
Desarrollo basado en componentes
(beans).

Programacin Orientada a
Objetos en Java (I)

Qu es la Programacin Orientada a
Objetos?

Paradigma de programacin que permite


modelar de forma sencilla conceptos del
mundo real a nivel de programacin.

Por qu es til la POO?

Ofrece un conjunto de herramientas que


una vez interiorizadas permiten gran
flexibilidad en el diseo de una solucin.

Programacin Orientada a
Objetos en Java (II)

Palabras reservadas en Java.

abstract

default

goto

operator

synchronized

boolean

do

if

outer

this

break

double

implements

package

threadsafe

byte

else

import

private

throw

byvalue

extends

inner

protected

throws

case

false

instanceof

public

transient

cast

final

int

rest

true

catch

finally

interface

return

try

char

float

long

short

var

class

for

native

static

void

const

future

new

super

volatille

continue

generic

null

switch

while

Programacin Orientada a
Objetos en Java (III)

Herramientas de la POO.

La clase como elemento mnimo.

Una clase es una representacin de un concepto del


mundo real.
Contiene dos componentes / miembros:

Datos = Atributos.
Acciones = Mtodos.

Se usa el operador punto . para acceder a los miembros.


Una clase se define con la palabra reservada class.

Clase Vs Objeto

Clase = Concepto = Definicin [= Receta].


Objeto = Instancia = Elemento real [= Pastel].

Programacin Orientada a
Objetos en Java (IV)

Paquetes.

Concepto que permite englobar en una misma


idea varias clases.
Semejanza con estructura de directorios. Puede
haber una jerarqua. En compilacin, se generan
directorios fsicos.
Se usa el operador punto . para poder acceder
a las clases de un paquete o a los subpaquetes.
Visibilidad de paquete.

Pblica: Se permite usar esa clase desde otro


paquete.
No pblica: Slo se puede usar esa clase desde ese
paquete.

Programacin Orientada a
Objetos
en
Java
(V)
Estructura bsica de un fichero fuente Java.

Definicin de paquete (opcional): package


Importacin de clase (opcional): import

Se pueden importar todas las clases usando *

Definicin de clases.

Slo una con visibilidad pblica de paquete. El fichero debe llamarse


igual que esta clase.

package paquete;
import otroPaquete.OtraClase;
public class ClaseConVisibilidadPublica
{
}
class ClaseConVisibilidadNoPublica
{
}

Programacin Orientada a
Objetos en Java (VI)

Reglas de estilo bsicas.

Los nombres de paquete en minsculas.


paquete
Los nombres de clase en mayscula la primera letra y en
mayscula la primera letra de cada cambio de concepto.
NombreDeClase
Los nombres de miembros en minsculas y en
mayscula la primera letra de cada cambio de concepto.
nombreDeMiembroDeClase
Los nombres de constantes en maysculas todas las
letras y cada cambio de concepto con un guin bajo _.
NOMBRE_DE_CONSTANTE

Programacin Orientada a
Objetos en Java (VII)

Comentarios. Hay 3 tipos.

De Bloque: Comienzan por /* y terminan por */.


No se permiten anidaciones.
De Lnea: Definidos por //.
De Documentacin: Permiten insertar texto en las
pginas web generadas con la herramienta javadoc
del JDK. Comienzan por /** y terminan por */. Se
suelen poner en ciertos puntos:

Antes de una clase.


Antes de un atributo.
Antes de un mtodo.

@param id

@return

@throws Exception

Programacin Orientada a
Objetos en Java (VIII)

Encapsulacin.

Control de acceso a los miembros.


2 tipos de encapsulacin:

Pblica: Un miembro accesible desde cualquier


punto. Se usa la palabra reservada public antes
de definir el miembro.
Privada: Un miembro accesible nicamente desde
la propia clase. Se usa la palabra reservada
private antes de definir el miembro.

Los datos pblicos pueden cambiar en cualquier


momento. Mediante encapsulacin privada,
slo pueden cambiar desde mtodos = control.

Programacin Orientada a
Objetos en Java (IX)

Tipos de datos en Java.

Primitivos.

Enteros.

byte: 8 bits positivos y negativos (-128 < 0 < 127)

char: 16 bits positivos (0 < 65535)

short: 16 bits positivos y negativos (-32768 < 0 <


32767)

int: 32 bits positivos y negativos

long: 64 bits positivos y negativos


Decimales.

float: 32 bits

double: 64 bits
Lgicos.

boolean: true o false

No primitivos: Clases.

Programacin Orientada a
Objetos en Java (X)

Variables.

tipo + identificativo + [=VALOR_INICIAL] + ;

El concepto de mbito.

Existen 2 tipos:

Define la visibilidad, accesibilidad, duracin de una


variable.
Se representa mediante { y }.
De clase: Las variables de clase (estticas) y de instancia.
De mtodo: Las variables locales a un mtodo.

Diferencia entre variables de tipo primitivo y objetos.

Programacin Orientada a
Objetos en Java (XI)

Miembros estticos.

Definidos con la palabra reservada static


Un miembro esttico (o de clase) es nico para todos los objetos
que se creen. Se puede decir que siempre est creado. Se
puede acceder a l sin necesidad de un objeto.
Un miembro no esttico (o de instancia) pertenece a cada objeto
individual. Se puede decir que se crea junto con el objeto.
Desde un mtodo esttico no se puede acceder a miembros no
estticos.

Creacin de objetos.

Cuando se declara una variable de tipo no primitivo, realmente


representa una referencia a un posible objeto. Para poder crear
el objeto al que referenciar se usa el operador new.

Programacin Orientada a
Objetos en Java (XII)

Contantes.

Enteras.
12345 (int, por defecto)
12345L (long)
0123 (octal)
0xF0A (hexadecimal)

Decimales.
123.45 (double, por defecto)
123.45f (float)

Carcter.
a

Cadena.
cadena

Programacin Orientada a
Objetos en Java (XIII)

Existen constantes con nombre


declarndolas igual que las variables
con la palabra reservada final.

final int CONSTANTE = 5;

Conversin de tipos.

No perder informacin / precisin.


Implcita.

Explcita. Operador cast (tipo)

Programacin Orientada a
Objetos en Java (XIV)

Edicin, Compilacin y Ejecucin en Java.

Software: http://www.java.sun.com

JDK: Java Development Kit. Compilador + JVM.


JRE: Java Runtime Enviroment. JVM.

Edicin en cualquier editor.


El directorio bin del JDK contiene los comandos.
Compilacin. Comando javac.

-d: Indica el directorio donde generar los .class.


-classpath: Indica las rutas a los .class a usar.
javac d RUTA classpath RUTA fichero.java
El fichero .java puede ser *.java.

Programacin Orientada a
Objetos en Java (XV)

Ejecucin. Comando java.


-cp: Indica las rutas de los .class a usar.
java cp RUTA fichero

No se indica la extensin dado que se


interpretara como
paquete.subpaquete...clase
Documentacin. Comando javadoc.
-d: Indica el directorio donde generar la
documentacin.
javadoc d RUTA fichero.java

El fichero.java puede ser *.java.

Programacin Orientada a
Objetos en Java (XVI)
public class PrimerPrograma
{
public static void main(String[] args)
{
System.out.println(El primer programa en Java.);
}
}

Editar, compilar y ejecutar este programa.


Realizar varios cambios en el programa.

Modificar la cadena a presentar.


Aadir el paquete cursojava.primero. Qu implicaciones
tiene?
Documentar el cdigo fuente. Generar documentacin.

Programacin Orientada a
Objetos en Java (XVII)
package cursojava.tipos;
public class TiposPrimitivos
{
public static void main(String[] args)
{
byte b = 127;
char c = 65; // Representa el carcter A
short s = 32767;
// Conversiones implcitas
int i = b;
long l = s;
float f = i;
double d = f;
}
}

Realizar varios cambios en el programa.

Asignar valores fuera de rango a cada tipo.


Intentar realizar conversiones inadecuadas. Cmo se forzaran?

Programacin Orientada a
Objetos en Java (XVIII)

Expresiones.

2 elementos.

2 tipos de operadores.

Operadores.
Operandos.
Binarios: 2 operandos.
Unarios: 1 operando.

Asignacin =

variable = valor;
variable1 = variable2 = variable3 = valor;

Programacin Orientada a
Objetos en Java (XIX)

Aritmticas.

Suma +: Binario. Enteros y decimales.


Ms +: Unario. Enteros y decimales.
Resta -: Binario. Enteros y decimales.
Menos -: Unario. Enteros y decimales.
Multiplicacin *: Binario. Enteros y
decimales.
Divisin /: Binario. Enteros y decimales.
Resto %: Binario. Enteros.
Operador
Operacin
Nivel de Precedencia

+, - (unitarios)
*, /, %

+, -

+25
-6.725
5 * 5 es 25
25 / 6 es 4
25 % 6 es 1
2 + 3 es 5
2 3 es -1

1
2

Programacin Orientada a
Objetos en Java (XX)

Incremento ++ y Decremento --

Pre: Se incrementa/decrementa y
despus se evala la expresin.
++variable;
--variable;
Post: Se evala la expresin y luego se
incrementa/decrementa.
variable++;
variable--;

Programacin Orientada a
Objetos en Java (XXI)
package cursojava.incdec;
public class IncrementoDecremento
{
public static void main(String[] args)
{
int variable = 5; System.out.println(variable);
System.out.println(++variable);
System.out.println(variable++);
System.out.println(variable--);
System.out.println(--variable);
System.out.println(variable);
}
}

Indicar la salida por pantalla de cada instruccin.

Programacin Orientada a
Objetos en Java (XXII)

Operadores aritmticos en conjuncin con


el operador de asignacin

variable
variable
variable
variable
variable

+=
-=
/=
*=
%=

expresion;
expresion;
expresion;
expresion;
expresion;

//
//
//
//
//

variable
variable
variable
variable
variable

=
=
=
=
=

variable
variable
variable
variable
variable

/
*
%

expresion
expresion
expresion
expresion
expresion

Programacin Orientada a
Objetos en Java (XXIII)
Operadores relacionales. Operadores
que consiguen uno de los dos valores
lgicos: true o false.

Operador

Significado

Ejemplo

==

Igual a

a == b

!=

No igual a

a != b

>

Mayor que

a > b

<

Menor que

a < b

>=

Mayor o igual que

a >= b

<=

Menor o igual que

a <= b

Programacin Orientada a
Objetos
en
Java
(XXIV)
Operadores lgicos:

Operador
!

||

&&

Significado

Tabla de verdad

No lgica, negacin

O lgica

Y lgica

O exclusiva

Ejemplo
!a

true
false
a
true
true

b
true
false

false
true
a || b
true
true

false

true

true

false

false

false

a && b

true

true

true

true

false

false

false

true

false

false

false

false

a
true
true

b
true
false

a ^ b
false
true

false

true

true

false

false

false

!(x < y)

x < n || y > 9

x < n && y > 9

x < n ^ y > 9

Programacin Orientada a
Objetos en Java (XXV)

Operan sobre operandos booleanos y


generan resultados booleanos.
Se evalan de izquierda a derecha.
El mximo exponente son las
operaciones OR y AND.

OR: Si el operando de la izquierda es true,


no se evala el de la derecha.
AND: Si el operando de la izquierda es
false, no se evala el de la derecha.

Para obligar a evaluar ambos: | y &

Programacin Orientada a
Objetos en Java (XXVI)

Instrucciones condicionales.

Simple:
if (CONDICION)
{
INSTRUCCIONES
}

Doble:
if (CONDICION)
{
INSTRUCCIONES
}
else
{
INSTRUCCIONES
}

Programacin Orientada a
Objetos en Java (XXVII)

Mltiple:
switch(VARIABLE)
{
case VALOR1:
break;
case VALOR2:
break;
...
case VALORn:
break;
default:
break;
}

Programacin Orientada a
Objetos en Java (XVIII)

Instrucciones repetitivas:

Hay de dos tipos:

De 0 a N: for y while

for (INICIALIZACION; CONDICION; PASO)


{
INSTRUCCIONES
}
while(CONDICION)
{
INSTRUCCIONES
}

De 1 a N: do ... while

do
{
INSTRUCCIONES
}
while(CONDICION);

Programacin Orientada a
Objetos en Java (XXIX)

Mtodos.

La signatura de un mtodo es lo que lo define.


tipo_retorno + identificativo + ( + [parmetro(s)] + )

Los parmetros son definiciones de variables con mbito


local (de mtodo) pero que reciben un valor inicial cuando
se haga la llamada el mtodo.
tipo + identificativo

Java soporta sobrecarga: definicin de dos mtodos en la


misma clase con el mismo identificativo pero con nmero o
tipo de parmetros diferentes.
Si no se quiere devolver nada se usa el tipo void.
Tipos primitivos Vs tipos no primitivos (clases) en mtodos.

Programacin Orientada a
Objetos en Java (XXX)
Constructores

Mtodos especiales que se ejecutan en el momento


de creacin de un objeto (new).
No devuelven valor (ni void).
Se llaman igual que la clase.
Puede haber sobrecarga.
Por defecto siempre hay un constructor que no recibe
parmetros.
Preguntas:

Qu pasa si ponemos un nico constructor con parmetros?


Qu pasa si ponemos un constructor con encapsulacin
privada?

Programacin Orientada a
Objetos en Java (XXXI)

El tipo de datos String

Es un tipo de datos abstracto (clase) que est definido en el


paquete java.lang.
Es el nico tipo abstracto de Java que tiene su propia constante
literal conocida dentro de la sintaxis del lenguaje (la gramtica).
Por ello, una asignacin como
String s = cadena;
Implica directamente la creacin (new) de un objeto. Es similar a:
String s = new String(cadena);
Tiene multitud de funcionalidades tiles para control de
subcadenas.
Para poder concatenar cadena se usa el operador + que
permite incluso convertir tipos de datos no String a cadenas.

Programacin Orientada a
Objetos en Java (XXXII)

Ejemplo: Desarrollar un programa para aclarar el concepto de


variable esttica (de clase) y no esttica (de instancia).
package cursojava.estatic;
public class DeClaseDeInstancia
{
public static void main(String[] args)
{
Ayuda a1 = new Ayuda();
Ayuda a2 = new Ayuda();
Ayuda a3 = new Ayuda();
System.out.println(a1.deClase);
System.out.println(a1.deInstancia);
}
}
class Ayuda
{
public static int deClase;
public int deInstancia;
public Ayuda()
{
deClase++;
deInstancia++;
}
}

Programacin Orientada a
Objetos en Java (XXXIII)

Ejemplo: Desarrollar un programa para aclarar el paso de parmetros por valor y por
referencia.

package cursojava.valref;
public class ValorYReferencia
{
public static void metodo(int valor)
{
valor++;
}
public static void metodo(Ayuda valor)
{
valor.valor++;
}
public static void main(String[] args)
{
int valor = 5;
metodo(valor);
System.out.println(valor);
Ayuda objeto = new Ayuda();
objeto.valor = 5;
metodo(objeto);
System.out.println(objeto.valor);
}
}
class Ayuda
{
public int valor = 0;
}

Programacin Orientada a
Objetos en Java (XXXIV)

Arrays en Java

Un array es un conjunto de datos del mismo tipo situados


de forma consecutiva.
Las variables array en Java son referencias. Por tanto, los
arrays son objetos y hay que crearlos.

tipo + [] + id + = + new + tipo + [ + cantidad + ] + ;

El new ha creado el objeto del array. 2 casos:

Tipos primitivos: Los datos del array se habrn creado tambin


(ya que los tipos primitivos se crean directamente).
Tipos no primitivos (clases): Los datos son referencias a null y
por tanto deben crearse a parte.

Programacin Orientada a
Objetos en Java (XXXV)

En la declaracin se pueden poner los corchetes


[]:
Despus del tipo: Indica que TODOS los identificativos
que se definan sern arrays.
tipo + [] + id ...
Despus del identificativo: Indica que ese identificativo
ser el nico que es array.
tipo + id + [] + ...

En Java no se permite indicar en la declaracin del


array el nmero de elementos del mismo.
tipo + [] + id + = + new + tipo + [ + cantidad + ] + ;

Los arrays en Java tienen ndices entre 0 y cantidad


1.
Qu pasa si me salgo de rango?

Programacin Orientada a
Objetos en Java (XXXVI)

La inicializacin de los elementos de un array puede ser:

Elemento a elemento:
tipo[] id = new tipo[2];
id[0] = valor;
id[1] = valor;
Inicializacin en declaracin: Se usan llaves.
tipo[] id = {valor, valor};

La copia entre arrays no se puede realizar mediante la


asignacin (por qu?).
Existe un mtodo java.lang.System.arrayCopy que
ofrece el mayor rendimiento.
El tamao de un array se puede conocer haciendo uso de
un atributo llamado length que todo array en Java posee.

Programacin Orientada a
Objetos en Java (XXXVII)

Los arrays multidimensionales se declaran


mediante el uso de [] consecutivos.
Realmente son referencias que contienen
referencias (arrays dentro de arrays).
tipo[][] id = new tipo[cantidad1][cantidad2];
tipo[][] id = {{valor, valor}, {valor, valor}};

Para acceder a conocer el nmero de elementos


de cada dimensin se usa el mismo atributo
length pero desde referencias distintas.
id.length // Indica la cantidad1
id[indice].length // Indica la cantidad2

Programacin Orientada a
Objetos en Java (XXXVIII)

Entrada/Salida estndar.

java.lang.System.out es de tipo java.io.PrintStream


que tiene los mtodos necesarios para mostrar
informacin por la salida estndar.
java.io.PrintStream.print()
java.io.PrintStream.println()

java.lang.System.in es de tipo java.io.InputStream


que tiene mtodos muy bsicos de lectura de informacin
desde la entrada estndar. Para leer informacin ms
elaborada (cadenas de caracteres) se suelen usar objetos
del tipo java.io.BufferedReader.
new BufferedReader(new InputStreamReader(System.in))

Programacin Orientada a
Objetos en Java (XXXIX)

Excepciones (bsico).

Las excepciones son una forma de control de


flujo.
Se usan para indicar situaciones concretas en
la ejecucin del programa (errores, avisos,
etc.)
Lanzamiento de excepciones:

Uso de la instruccin throw acompaando a un


objeto (que es el que se lanza).

Programacin Orientada a
Objetos en Java (XXXX)

Gestin de excepciones

Bloque de cdigo entre las instrucciones


try
{
}
catch(PARAMETRO)
{
}
Relanzamiento: El mtodo puede indicar que no ser l el
encargado de capturar la excepcin y transmite su gestin
sucesivamente a los mtodo que le llamaron. Se usa la palabra
reservada throws acompaando al tipo de datos de la
excepcin al final de la definicin del mtodo.

tipo_retorno + identificativo + ( + [parmetro(s)] + ) + throws tipo_excepcion

Programacin Orientada a
Objetos en Java ()

Existen dos tipos de excepciones.

Excepciones en tiempo de ejecucin


(Runtime): Como son excepciones que
pueden surgir en cualquier momento por
errores en tiempo de ejecucin, no es
obligatoria su captura ni su relanzamiento.
Las dems excepciones: Se determina
que el desarrollador querr tener control
(capturar o relanzar) este tipo de
situaciones, por lo que son obligatorias.

Programacin Orientada a
Objetos en Java ()

Mapeo de tipos primitivos en tipos abstractos.

Java ofrece dentro del paquete java.lang un


mapeo de lo tipos primitivos de datos en tipos
abstractos (clases).

byte
char
short
int
float
double

<->
<->
<->
<->
<->
<->

Byte
Character
Short
Integer
Float
Double

Esta caracterstica tiene multitud de utilidades.


Una de las ms peculiares es la posibilidad de
construir valores primitivos desde valores de tipo
cadena.

Programacin Orientada a
Objetos en Java ()

Ejercicio Propuesto: Desarrollar un


programa
(cursojava.param.Parametros) que
presente por pantalla todos los
parmetros que se le hayan pasado por
lnea de comandos.

Programacin Orientada a
Objetos en Java ()

Ejercicio Propuesto: Crear una clase


llamada EntradaDatos dentro del paquete
cursojava.util que permita leer de
teclado valores de tipos de datos primitivos:

int: leerEntero
double: leerReal
char: leerCaracter
String: leerCadena

Realizar el control correspondiente


mediante iteraciones sucesivas.

Programacin Orientada a
Objetos en Java ()

Ejercicio Propuesto: Desarrollar un


programa
(cursojava.euros.DesgloseCantidad)
que pida al usuario que introduzca un
valor entero en euros por teclado y
desglose dicha cantidad en:

Billetes: 500, 200, 100, 50, 20, 10


Monedas: 2, 1

Visualizar cada cantidad por pantalla.

Programacin Orientada a
Objetos en Java ()

Ejercicio Propuesto: Desarrollar un programa


(cursojava.aritmetica.MenuAritmetico) que
visualice repetidamente un men por pantalla donde
se puedan seleccionar distintas operaciones a realizar:

1.2.3.4.5.6.7.-

Suma
Resta
Multiplicacin
Divisin
Resto
Es primo?
Salir.

Realizar modularmente la programacin necesaria para


resolver los clculos.

Programacin Orientada a
Objetos en Java ()

Ejercicio Propuesto: Desarrollar un programa


(cursojava.rect.RectanguloRelleno) que
pida al usuario que introduzca la base y la
altura (enteras de no ms de 15) de un
rectngulo para dibujarlo usando asteriscos:
******
******
******

Modificarlo para que el usuario introduzca el carcter


a usar en el dibujado.
Modificarlo para que dibuje un rectngulo sin
rellenar. (cursojava.rect.RectanguloHueco)

Programacin Orientada a
Objetos en Java ()

Ejercicio Propuesto: Desarrollar un


programa
(cursojava.adivina.AdivinaNumero)
que calcule un nmero aleatorio entre 1 y
100 y pida sucesivamente al usuario que
intente adivinarlo indicndole si el
nmero aleatorio es mayor o menor al
nmero que haya introducido.

Modificarlo para que el usuario pueda decidir


si quiere o no jugar una vez acertado el
nmero.

Programacin Orientada a
Objetos en Java ()

El objeto this.

La referencia para poder usar EL objeto


desde el cdigo de una clase.
Siempre accesible en entornos no estticos.
No es obligatorio ms que en algunas
ocasiones:

Para poder llamar a un constructor desde otro


constructor. Debe ser la primera instruccin del
constructor.
En casos de ambigedad entre datos miembro y
variables locales de un mtodo.

Programacin Orientada a
Objetos en Java ()

Relaciones entre objetos.

Las clases no son conceptos independientes.


La POO permite modelar en dominio del problema a nivel de
programacin de forma casi directa.
Hay dos tipos de relaciones.

Inclusin: Define la relacin ... tiene un .... Se materializa


mediante un atributo de una clase en otra. Un atributo de la
clase es un objeto de otra clase
Herencia: Define la relacin ... es un .... Se materializa
mediante la generalizacin de una clase sobre otra.

Programacin Orientada a
Objetos en Java ()

Herencia.

Herramienta que permite generalizar


conceptos.
Se crea una jerarqua. Los conceptos padre
definen caractersticas comunes que los
conceptos hijo heredan como propias.
Java no permite la herencia mltiple.
Se usa la palabra reservada extends para
relacionar las dos clases.
class ClaseDerivada extends ClaseBase

Programacin Orientada a
Objetos en Java ()

Con esta nueva forma de relacionar


conceptos surge un nuevo tipo de
encapsulacin: protegida.

Se usa la palabra reservada protected.


Define miembros que son accesibles desde la
propia clase y desde las clases derivadas.
Adems, es equivalente a la encapsulacin
pblica para clases del mismo paquete.

Programacin Orientada a
Objetos en Java ()

Encapsulacin.

Encapsulaci
n

Desde la
clase

Desde clase
derivada

Desde clase
del paquete

private

en blanco

protected

public

Desde clase
de otro
paquete

Programacin Orientada a
Objetos en Java ()

Gracias a la herencia se permite poder referenciar


a un objeto de tipo derivado como tipo base.
TipoBase objBase = new TipoDerivado();

Esta utilidad permite poder tratar de la misma


forma a todos los elementos derivados (estn en
el punto en el que estn dentro de la jerarqua).
TipoBase[] array = new TipoBase[cantidad];
array[indice0] = new TipoDerivado1();
array[indice1] = new TipoDerivado2();

Programacin Orientada a
Objetos en Java ()

Los objetos derivados se construyen en cascada, empezando


desde la clase ms base hacia abajo. As puede observarse
realmente que cuando se crea un objeto derivado, realmente se
crean los objetos base tambin.
Este comportamiento tiene sus implicaciones cuando se pierde el
constructor por defecto: Hay que llamar explcitamente al
constructor base.
Existe el objeto super que representa la referencia al objeto
base que tambin se cre. Este objeto se puede utilizar para:

Explicitar el uso de un miembro base.


Llamar a constructores base desde constructores derivados. Debe ser
la primera instruccin del constructor.

Toda clase en Java hereda siempre de la clase java.lang.Object.

Qu utilidad puede tener esto?

Programacin Orientada a
Objetos en Java ()

Polimorfismo.

Una caracterstica de la POO aplicable a los


mtodos.
Permite ejecutar un cdigo de mtodo
distinto segn el objeto que se haya
instanciado y al que se referencie.
Necesidades para que se d en Java:

Relacin de herencia.
Exactamente la misma signatura de mtodo en
ambas clases (padre e hija).

Programacin Orientada a
Objetos en Java ()

Clases abstractas.

Son clases declaradas con la palabra reservada


abstract.
public abstract class ClaseDeclaradaAbstracta
{ ...

No se pueden instanciar (no se puede hacer new


ClaseDeclaradaAbstracta).
Su nica finalidad es que otras clases hereden de
ellas.
Sirven para poder implementar conceptos que no
deban existir fsicamente.

Programacin Orientada a
Objetos en Java ()

Los mtodos puede declararse con la palabra


reservada abstract
public abstract void metodo();

Estos mtodos no pueden tener cuerpo (se pone


un ; al final directamente).
Una clase con al menos un mtodo abstracto,
debe declararse abstracta.
La caracterstica de la abstraccin se propaga
por la jerarqua. Los mtodos abstractos
debern ser implementados gracias al
polimorfismo en clases derivadas.

Programacin Orientada a
Objetos en Java ()

Interfaces.

El mximo exponente del polimorfismo. Son equivalentes a una clase


completamente abstracta: todos sus mtodos son abstractos (sin cuerpo).
Se declaran con la palabra reservada (interface).
public interface NombreInterfaz
{
// datos
// mtodos (slo signatura)
}

Puede tener datos.


Los mtodos se declaran de forma normal (sin abstract) y definen la
signatura a implementar en las clases que implementen la interfaz.
Las clases pueden implementar todas las interfaces que quieran. Se usa la
palabra reservada implements.
public class ClaseConInterfaz implements NombreInterfaz

Programacin Orientada a
Objetos en Java ()

La abstraccin permite definir interfaces


(signaturas de mtodos) que gracias al
polimorfismo, implementarn las clases
derivadas/implementadoras.
Gracias a que un objeto creado como derivado
puede referenciarse desde un tipo de datos base
(clase abstracta o interfaz), se puede ejecutar
cdigo distinto segn el objeto derivado sin tener
que conocerlo.
ClaseAbstracta[] objAbs = new ClaseAbstracta[cantidad];
objAbs[indice0] = new ClaseImplementadora1();
objAbs[indice1] = new ClaseImplementadora2();

Programacin Orientada a
Objetos en Java ()

Mtodos y clases final.

Si se indica en un mtodo, no se podr polimorfear


ese mtodo en clases derivadas.
class MiClase
{
public final void metodoNoPolimorfeable()
{ ...

Si se indica en una clase, no se podr heredar de dicha


clase.
final class ClaseNoHeredable
{ ...

Por ejemplo, los tipos de datos bsicos mapeados en


clases son de tipo final.

Programacin Orientada a
Objetos en Java ()

Mediante el operador instanceof


se pueden conocer los tipos
abstractos de un objeto que se cre
con el operador new.
boolean b = (objeto instanceof TipoClase);

Programacin Orientada a
Objetos en Java ()

Ejemplos de uso de herencia/polimorfismo:

Empresa Empleados.
Lectura / Escritura de datos. (XML, PrintWriter
(System.out o en Servlets), etc.)
Editor grfico.
Profesor Conexin Alumnos.
Interfaz humano computador (texto, ventana,
web, ...).
Desarrollo de componentes (java.util.*)

java.lang.Object

equals, finalize, toString, toString, clone, hashCode

Programacin Orientada a
Objetos en Java ()

Consecuencias del polimorfismo:

Ampliable: Permite poder aadir nuevos tipos


de datos completamente nuevos. Plug-ins.
Reusable: Permite definir elementos que usan
una interfaz y que pueden compilarse una sola
vez y durarn para siempre.
Flexible: Se puede cambiar el comportamiento
de forma muy sencilla (un simple new).
Independencia: Los mdulos se independizan.
Se podran incluso desarrollar en paralelo.

Programacin Orientada a
Objetos en Java ()

Excepciones (Avanzado)

Las excepciones poseen una estructura jerrquica. Para que un


objeto pueda ser lanzado (throw) necesita heredar de la clase
java.lang.Throwable.
De esta clase heredan los errores (java.lang.Error) y las
excepciones (java.lang.Exception). Los desarrolladores
deben capturar las excepciones.
A partir de Exception heredan muchas excepciones pero las
java.lang.RuntimeException no hay obligatoriamente que
capturarlas.
Las instrucciones catch se ven afectadas por la jerarqua y
deben ponerse en orden ascendente, desde las ms bajas en la
jerarqua a las ms altas.

Qu pasara si se pusiese un catch de java.lang.Throwable?

Programacin Orientada a
Objetos en Java ()

Bloque finally

Esta palabra reservada permite indicar un bloque de cdigo que se


ejecutar siempre tanto si se lanza una excepcin como si no.
Su uso est muy ligado a la liberacin correcta de recursos. Por
ejemplo, cerrar un fichero, indicar valores en caso de error etc.
public static void main(String[] args)
{
...
try
{
...
}
... // catches, pero es opcional
finally
{
}
}

Jar

Permite conseguir en un fichero englobar distintos


ficheros objeto.
Se encuentra en el directorio bin del JDK.
Tiene diversas opciones
c:
v:
f:
x:
jar

crear un fichero .jar.


Crear una salida con informacin ms detallada del proceso.
Indicar el nombre del fichero.
extraer ficheros.
cvf FICHERO.jar FICHEROS_O_RUTAS_CON_.class

En el classpath se pueden indicar o rutas (directorios)


o ficheros .jar.

Patrones de diseo

Diseos establecidos para poder dar


soluciones a problemas comunes.
Usan las herramientas de la
orientacin a objetos como base pero
pueden ser implementados en
cualquier lenguaje orientado a
objetos (java, C++, Smalltalk, C#, ...)

Patrones de diseo

Singleton

Planteamiento: Cmo puedo conseguir controlar el


nmero de instancias que se van a crear de una clase?
Solucin:

Control = Encapsulacin.
Creacin = Constructores.
Combinacin = Constructores privados.

Cmo conseguir que se pueda construir desde dentro


si no puedo construir? Acceso mediante un mtodo
esttico. Control mediante variables estticas (nicas).

Patrones de diseo
public class Singleton
{
private static Singleton instance = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (instance == null)
instance = new Singleton();
return instance;
}
}

Patrones de diseo

Observer

Planteamiento: Cmo puedo avisar de cierto


comportamiento de una clase a todos aquellos
que quieran conocerlo independientemente de
quin quiera conocerlo?
Solucin:

Independencia = abstraccin = interfaz.


Hay dos elementos:

Generador = Observable.
Escuchador = Observer.

Patrones de diseo

Patrones de diseo

El patrn Observer en la API de Java.

Acceso a Bases de Datos


en Java (I)

Uso de la API JDBC (Java Data Base


Control)

Se trata de una API que define


interfaces de acceso a datos
completamente independientes de la
implementacin real de dichos datos.
La API engloba a distintos conceptos
definidos en el paquete java.sql.

Acceso a Bases de Datos


en Java (II)

El acceso a la implementacin de datos lo realiza un


driver concreto.

Esta carga se realiza usando la API de reflection de Java.

Class.forName(NOMBRE_CON_PAQUETES_DE_LA_CLASE_DRIVER);

Los drivers no son ms que clases Java.

El acceso real se realiza a travs de conexiones a los


datos.

La clase DriverManager se encarga de crear la conexin a


partir del driver que se necesite.

DriverManager.getConnection(URL_DE_CONEXIN_SEGN_DRIVER);

El objeto que se crea implementa la interfaz Connection.

Acceso a Bases de Datos


en Java (III)

Consultas con JDBC

De la conexin a datos se pueden crear


sentencias (statement).
Las sentencias se crean con los mtodos:
Statement createStatement()
PreparedStatement
prepareStatement(String)

de Connection.

Acceso a Bases de Datos


en Java (IV)

La interfaz Statement permite controlar las sentencias.


En su uso ms sencillo permite:

Actualizacin:

DELETE, UPDATE, INSERT

int executeUpdate(String) // Devuelve el n de elementos actualizados

Consulta:

SELECT

ResultSet executeQuery(String) // Devuelve una vista

La interfaz PreparedStatement extiende a Statement por


lo que permite lo mismo. En su cadena de especificacin
se usa el carcter ? para identificar los valores variables.
Posee mtodos especficos para asignarlos
posteriormente (setXXX(int indice, XXX)) en orden 1 a
N.

Acceso a Bases de Datos


en Java (V)

El recorrido de un objeto que implemente la


interfaz ResultSet:
ResultSet rs = XXXXX;
while(rs.next())
{
}
Ahora se pueden ir extrayendo los datos
usando los mtodos getXXX() con dos
posibles parmetros:

Nombre de la columna.
ndice de la columna de 1 a N.

Acceso a Bases de Datos


en Java (VI)

Acceso a MetaDatos

Permite conocer la estructura de la base de datos


(no su contenido).
Se usan las interfaces:

DataBaseMetaData: Aporta toda la informacin


acerca del acceso a datos (nombres de tablas, columnas
de una tabla, primary keys, foreign keys, ...). Se extrae
de la interfaz Connection.
DataBaseMetaData getMetaData()

ResultSetMetaData: Aporta informacin sobre la


vista. Se extrae de la interfaz ResultSet.
ResultSetMetaData getMetaData()

Swing (I)

API que define un extenso conjunto de


clases para manejar componentes
visuales a nivel de ventana en el
paquete javax.swing y subpaquetes.
Se basa en una API llamada AWT
(Abstract Window Toolkit) definida en
java.awt.
Gracias a la herencia se puede
extender la funcionalidad bsica.

Swing (II)

Todo componente visual hereda de


java.awt.Component.
Define lo bsico:

Tamao.
Posicin.
Dibujado.
Visibilidad/Habilitacin.
Eventos:

Teclado
Ratn
Redimensionado
Jerarqua.

Swing (III)

Adems de haber una jerarqua de clases, AWT, y


por tanto Swing, define una jerarqua de
componentes mediante inclusin.

Swing (IV)

La clase Container, adems de ser un


Component, permite almacenar
Components.

Container tiene un Component.


De esta forma se puede hacer que algunos
componentes contengan a otros, que a su
vez pueden ser contenedores de otros etc...
Esta relacin se crea usando el mtodo add.

Swing (V)

Aunque se puede usar AWT, Swing es


todava ms independiente de plataforma.
Swing aade nuevas funcionalidades
avanzadas.
AWT y Swing poseen inmensidad de
funcionamiento interno, desde control de
hilos independientes hasta comunicacin
nativa con el Sistema Operativo.

Swing (VI)

Ventana:

En AWT: java.awt.Frame
En Swing: javax.swing.Jframe
Realmente la de Swing extiende a la de AWT.
Se suele extender de ellas para ampliar su
funcionalidad.
Crean un hilo de ejecucin paralelo al de la
aplicacin.
Es un Container por lo que puede contener a
otros componentes.

Swing (VII)

Mtodos principales:

void setVisible(boolean): Permite visualizar o


no un componente.
void dispose(): Cierra la ventana.
void setSize(int, int): Asigna un tamao a un
componente.

Width = ancho
Height = alto.

java.awt.Dimension getSize(): Permite


conocer el tamao de un componente.
void setEnabled(boolean): Permite
habilitar/Deshabilitar un componente.

Swing (VIII)

Panel:

En AWT: java.awt.Panel.
En Swing: javax.swing.JPanel.
En este caso no hay relacin herencia.
Es el contenedor ms sencillo.
Su utilidad suele ser la de poder manejar
los componentes que engloba desde un
nico punto.
Ayuda a organizar los componentes.

Swing (IX)

Label:

En AWT: java.awt.Label.
En Swing: javax.swing.JLabel.
En este caso no hay relacin de herencia.
Permite visualizar un texto simple.
Mtodos principales:

void setText(String): Asigna el texto.


String getText(): Recoge el texto.
void setHorizontalAlignment(int): Slo en Swing. Asigna el tipo de
alineacin horizontal del texto. Los valores estn definidos en
SwingConstants.
int getHorizontalAlignment(): Slo en Swing. Recoge el tipo de
alineacin horizontal del texto.
void setAlignment(int): Slo en AWT. Los valores estn definidos en
Label.
int getAlignment(): Slo en AWT.

Swing (X)

Cuadros de texto:

En AWT: java.awt.TextField.
En Swing: javax.swing.JTextField.
En este caso no hay relacin de herencia.
Permite introducir un texto de una lnea.
Mtodos principales:

void setText(String): Asigna el texto.


String getText(): Recoge el texto.
void setHorizontalAlignment(int): Slo en Swing. Asigna el tipo de
alineacin horizontal del texto. Los valores estn definidos en SwingConstants.
int getHorizontalAlignment(): Slo en Swing. Recoge el tipo de alineacin
horizontal del texto.
void setAlignment(int): Slo en AWT. Los valores estn definidos en Label.
int getAlignment(): Slo en AWT.

Swing (XI)

reas de texto:

En AWT: java.awt.TextArea.
En Swing: javax.swing.JTextArea.
En este caso no hay relacin de herencia.
Permite introducir un texto de una lnea.
Mtodos principales:

void setText(String): Asigna el texto.


String getText(): Recoge el texto.
void append(String): Aade texto al final.
void insert(String, int): Inserta texto en una
posicin.

Swing (XII)

Botones:

Los hay de muchos tipos.


El tipo bsico:

En AWT: java.awt.Button.
En Swing: javax.swing.JButton.

En este caso no hay relacin de herencia.


Mtodos principales:

void setLabel(String): Asigan el texto (Deprecated en


Swing).
void setText(String): Asigna el texto.
String getLabel(): Recoge el texto (Deprecated en Swing).
String getText(): Recoge el texto.

Swing (XIII)

Botones con estado:

En AWT: java.awt.CheckBox.
En Swing: javax.swing.JCheckBox.
En este caso no hay relacin de herencia.
Mtodos principales:

void setLabel(String): Asigan el texto (Deprecated


en Swing).
void setText(String): Asigna el texto.
String getLabel(): Recoge el texto (Deprecated en
Swing).
String getText(): Recoge el texto.
boolean getState(): Recoge el estado (slo en AWT).

Swing (XIV)

Contenedores de items:

Listas:

En AWT: java.awt.List
Mtodos:

void add(String): Aade un elemento.


void remove(String): Elimina un elemento.
void remove(int): Elimina un elemento segn su posicin.
int getItemCount(): Indica el n de elementos que contiene.
String getItem(int): Recoge un elemento segn su posicin.
String[] getItems(): Recoge todos los elementos.
int getSelectedIndex(): Recoge el ndice del elemento seleccionado.
void select(int): Indica cal debe ser el elemento seleccionado.
void setMultipleMode(boolean): Permite aplicar la seleccin mltiple.
boolean isMultipleMode(): Indica si permite seleccin mltiple.
String[] getSelectedItems(): Recoge los elementos seleccionados.

Swing (XV)

En Swing: javax.swing.JList
Para modificar su contenido se le asocia un concepto que implemente la
interfaz javax.swing.ListModel. Existe una implementacin por
defecto javax.swing.DefaultListModel.
Mtodos de DefaultListModel:

void add(int, Object): Aade un elemento en una posicin.


void addElement(Object): Aade un elemento al final.
Object get(int): Recoge un elemento de una posicin.
int getSize(): Indica el n de elementos.
void remove(): Elimina elemento. Recibe o un int o un Object.

Mtodos de JList:

void setModel(ListModel): Asigna un modelo.


int getSelectedIndex(): Indica el elemento seleccionado.
int[] getSelectedIndices(): Indica los elementos seleccionados.
int getSelectionMode(): Un valor definido en ListSelectionModel.

Swing (XVI)

Combo boxes:

Slo en Swing: javax.swing.JComboBox


Para modificar su contenido se le asocia un concepto que implemente la
interfaz javax.swing.ComboBoxModel. Existe una implementacin por
defecto javax.swing.DefaultComboBoxModel.
Mtodos de DefaultComboBoxModel:

void addElement(Object): Aade un elemento en una posicin.


Object getElementAt(int): Recoge un elemento de una posicin.
int getSize(): Indica el n de elementos.
void removeElement(Object): Elimina un elemento.

Mtodos de JComboBox:

void setModel(ComboBoxModel): Asigna un modelo.


int getSelectedIndex(): Indica el elemento seleccionado.
int[] getSelectedIndices(): Indica los elementos seleccionados.
int getSelectionMode(): Un valor definido en ListSelectionModel.

Swing (XVII)

Layouts: Se definen ciertos conceptos para


poder organizar los componentes dentro de
un Container.
Los Layouts definen la interfaz
LayoutManager y se relacionan con el
Container mediante el mtodo
void setLayout(LayoutManager)

El uso del Layout se especifica al aadir el


componente al Container mediante las
sobrecargas del mtodo add().

Swing (XVIII)

java.awt.BorderLayout

Permite ordenar componentes de un Container


usando los puntos cardinales:

NORTH, SOUTH, EAST, WEST y CENTER.


Estas constantes estn definidas en la propia clase
BorderLayout.

contenedor.add(componente, BorderLayout.NORTH)

java.awt.FlowLayout

Ordena los componentes de un Container de


izquierda a derecha secuencialmente segn el
orden de inclusin usando el mtodo add().

Swing (XIX)

java.awt.GridLayout

Permite ordenar los componentes de un


Container en forma de matriz bidimensional.
La propia clase tiene mtodos para poder
especificar las dimensiones de la matriz.
Los componentes se van asignando
a la matriz de izquierda a derecha y
de arriba abajo al utilizar el mtodo
add().

Swing (XX)

Gestin de Eventos:

Se utiliza el patrn observer pero con


implementaciones particulares segn el
componente y los eventos.
Se define una interfaz XXXListener que se
asocia con el generador mediante mtodos del
addXXXListener o removeXXXListener.
Para cada XXXListener con ms de un
mtodo, existe una implementacin vaca
XXXAdapter para facilitar ciertos casos de uso.

Swing (XXI)

Eventos comunes (Interfaces asociadas):

java.awt.Component

java.awt.Container

java.awt.event.ComponentListener: Eventos relacionados con lo general


en un componente.
java.awt.event.KeyListener: Eventos de teclado. Slo son activos
cuando el componente tiene el foco.
java.awt.event.MouseListener: Eventos de ratn. Slo referentes al
componente.
java.awt.event.MouseMotionListener: Evntos de ratn en movimiento y
drag-and-drop.
java.awt.event.ContainerListener: Eventos relacionados con la
jerarqua de componentes.

java.awt.Window

java.awt.event.WindowListener: Eventos relacionados con una ventana.

Swing (XXII)

java.awt.Button, java.awt.List, java.awt.TextField,


javax.swing.JAbstractButton, javax.swing.JComboBox,

java.awt.CheckBox, java.awt.List

java.awt.event.ItemListener: Evento que se lanza cuando hay


un cambio de seleccin.

java.awt.TextComponent

java.awt.event.ActionListener: Evento que se lanza cuando


se acta sobre el componente.

java.awt.event.TextListener: Evento relacionado con el


cambio del texto.

javax.swing.JList

javax.swing.event.ListSelectionListener: Evento
relacionado con el cambio de seleccin de un elemento.

Ant

Herramienta para definir tareas a realizar.


El software se puede conseguir en
www.ant.apache.org
Simplemente basta con descomprimir.
Hay que aadir algunas variables del sistema:

ANT_HOME: El directorio base donde est instalado


Ant.
No es mala idea aadir el directorio bin de la
instalacin de Ant a la variable PATH.

Ant

Elementos de un fichero BuildFile de


Ant:

Proyecto: Un conjunto de objetivos.


project

Atributos:

name: El nombre del proyecto. No es obligatorio.


default: El objetivo por defecto que se ejecutar. Es
obligatorio.
basedir: La ruta sobre la que trabajar. No es
obligatorio.

Ant

Objetivo: Es un conjunto de tareas. target

Atributos:

name: El nombre del objetivo. Es obligatorio.


depends: Permite indicar que un objetivo depende de la
ejecucin de otro(s). Los distintos objetivos se indican
separados por comas. No es obligatorio.
if: Permite condicionar la ejecucin de un objetivo a la
existencia de una propiedad. No es obligatorio.
<target name=objetivo if=propiedad/>
unless: Lo mismo que if pero al contrario, se ejecuta a
menos que exista una propiedad. No es obligatorio.
<target name=objetivo unless=propiedad/>
description: Una descripcin del objetivo. No es obligatorio.

Ant

Tareas: task
<name attrib2=value1 attrib2=value2 .../>

En los valores se puede hacer referencia a


propiedades definidas con anterioridad.
Existen tareas ya creadas, otras opcionales y
es muy sencillo crear nuevas tareas.
A cualquier tarea se le puede asignar un
atributo id para poder identificarla/usarla en
otros puntos.

Ant

Propiedades: Se definen mediante la tarea property o


fuera de Ant.

Se les asigna un nombre con el atributo name.


Para poder tener acceso a ellas se pueden usar indicando el
nombre entre ${ y }.
Ant permite acceso a las variables del sistema. Un listado de
las mismas se puede obtener en la documentacin de la API
de java en el mtodo java.lang.System.getProperties.
Adems Ant posee otras propiedades.
basedir
ant.file
ant.version
ant.project.name
ant.java.version

Ant
<project name="MyProject" default="dist" basedir=".">
<description>
simple example build file
</description>
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source">
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile" description="generate the distribution">
<mkdir dir="${dist}/lib"/>
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
</target>
<target name="clean" description="clean up" >
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>

Ant

Las tareas <property>, <typedef> y


<taskdef> son especiales y se permite
definirlas fuera de un objetivo.
Cuando se aade el atributo description
a un objetivo, es como si se declarase
pblico.

S-ar putea să vă placă și