Está en la página 1de 90

0

Introduccin a la
programacin orientada a
objetos en Java
Katia Leal Algara
2012-2013
katia@gsyc.es
http://gsyc.escet.urjc.es/~katia/
Departamento de Sistemas Telemticos y Computacin
(GSyC)
GSyC 2013 - Introduccin a la POO en Java
1
! Lenguaje de programacin de propsito
general, pero orientado a objetos
! Creado por la empresa Sun MicroSystems
! Estaciones de trabajo UNIX, sistema operativo
Solaris, estndar RPC, sistema de cheros en
red NFS, servicio de informacin en red NIS
! Objetivo: tomando como referencia C++,
disear Java para ser pequeo, simple e
independiente de la plataforma de
ejecucin
Java = lenguaje de programacin +
intrprete + API
Introduccin a Java
Qu es Java?
GSyC 2013 - Introduccin a la POO en Java
2
! Programador: escribe aplicaciones en las que
podr usar paquetes predenidos en la API de Java
! Programa Java: se compila con el compilador de
Java generando cdigo bytecode
! Bytecode: es interpretado por la Java Virtual
Machine (JVM)
! JVM: utiliza libreras de enlace dinmico (DLLs)
necesarias para implementar la API de Java en
cada sistema operativo y hardware concreto
! API de Java: paquetes de software predenidos
con un gran nmero de funciones independientes
de plataforma
! Conectividad de redes, seguridad, acceso a bases
de datos, capacidades grcas, etc.
Introduccin a Java
Qu es Java?
GSyC 2013 - Introduccin a la POO en Java
3
! Realmente OO!
! Los objetos se manejan de forma pura y simple, no como
estructuras de datos disponibles para el programador
! No pueden denirse procedimientos ni funciones
! No existen las estructuras, unios o las deniciones de tipos
! Todo son clases u objetos, menos las operaciones bsicas
(while, for, ) y los tipos bsicos (int, oat, boolean, )
! Ofrece jerarqua de clases, herencia, encapsulacin y
polimorsmo
! Independiente de plataforma
! El cdigo fuente puede ser compilado en cualquier mquina
independientemente del fabricante o del sistema operativo
! Una vez compilada, una aplicacin escrita en Java puede
ejecutarse en cualquier mquina sin necesidad de recompilar
el cdigo fuente
! El cdigo binario generado se denomina bytecode
Introduccin a Java
Carctersticas del lenguaje Java
GSyC 2013 - Introduccin a la POO en Java
4
! Robusto y able
! No proporciona conversin automtica de tipos, el
programador lo debe de hacer de forma explcita en el
cdigo
! Para el programador los punteros no existen, aunque
internamente los tipos de Java se implementan como
punteros
! El acceso a los objetos de realiza declarndolos, utilizando
una referencia explcita
! Interpretado y portable
! Aunque el cdigo interpretado se ejecuta ms lentamente
que el compilado, tiene la ventaja de ser portable
! En aquellos casos en los que sea absolutamente necesario
el uso de cdigo nativo, existen compiladores just-in-time
(JIT) que traducen el bytecode a cdigo nativo
Introduccin a Java
Carctersticas del lenguaje Java
GSyC 2013 - Introduccin a la POO en Java
5
! No se puede reservar memoria de forma explcita,
salvo mediante la creacin de nuevos objetos
! Igual que no se reserva memoria, tampoco es
preciso liberarla, de eso se encarga el recolector
de basura (Garbage Collector)
! Este proceso se ejecuta de forma automtica y en
segundo plano, aunque el programador puede invocarlo
directamente en el cdigo
! El intrprete de Java lleva la cuenta del nmero de
referencias a cada objeto en la memoria
! Cuando el nmero de referencias de un objeto es cero, en
la siguiente recoleccin de basura, dicho objeto ser
destruido, liberndose la memoria que ocupa
Introduccin a Java
Gestin de memoria
GSyC 2013 - Introduccin a la POO en Java
6
! Un applet es un programa dinmico e interactivo
que se ejecuta dentro de una pgina web:
! Tanto la pgina como el applet se visualizan por medio de
un navegador web con soporte para Java
! El applet, al igual que la pgina web, se descarga de
internet y se ejecuta de forma local en el navegador web
! El primer applet que se escribi en Java fue
la mascota de Java, Duke, agitando la mano.
Introduccin a Java
Aplicaciones y Applets
GSyC 2013 - Introduccin a la POO en Java
7
! World Wind es un applet en cdigo abierto de la NASA que hace
un uso intensivo de OpenGL para proporcionar un mapa detallado
en 3D del mundo
! Desarrollado con JOGL (Java OpenGL): librera que permite
utilizar OpenGL dentro de Java
! Otra librera tambin muy popular para Java es LWJGL
(Lightweight Java Game Library)
Introduccin a Java
Aplicaciones y Applets
GSyC 2013 - Introduccin a la POO en Java
8
! Una aplicacin es un programa general
escrito en el lenguaje Java:
! No requiere de un navegador para ejecutarse, si
no de la JVM
! A diferencia de los applets, no tienen por qu
tener asociado un contexto grco y un interfaz
de usuario
Introduccin a Java
Aplicaciones y Applets
GSyC 2013 - Introduccin a la POO en Java
9
! JavaScript es un lenguaje para la creacin de
scripts:
! Es un lenguaje interpretado
! El cdigo escrito en JavaScript se encuentra dentro de
documentos HTML
! Es el navegador (un intrprete de JavaScript incluido en el
mismo) el que se encarga de ejecutarlo
Introduccin a Java
Java y JavaScript
GSyC 2013 - Introduccin a la POO en Java
10
! JavaScript tiene una sintaxis similar a C:
! Dbilmente tipado, en la declaracin de las
variables no es necesario especicar su tipo
! Realiza conversin automtica de tipos
Introduccin a Java
Java y JavaScript
GSyC 2013 - Introduccin a la POO en Java
11
! Javac: compilador de Java
! Java: intrprete de Java (JVM)
! Jdb: depurador de Java
! Javadoc: generador automtico de
documentacin
!
! Existen muchos entornos de desarrollo
integrados (IDEs), como Eclipse, que
integran distintas herramientas en un
mismo paquete: editor, compilador,
depurador, etc. Todo ello en un entorno
grco.
Entorno de desarrollo de Java
JDK: Java Development Kit
GSyC 2013 - Introduccin a la POO en Java
12
! Conceptos no especcamente ligados a la POO
! Sintaxis inspirada en C/C++: sin punteros
! Aplicacin Java: conjunto de clases e interfaces
que se agrupan en paquetes
! Las clases e interfaces se organizan en cheros
con extensin .java
! Debe existir una clase que contenga el programa
principal, asociado a un mtodo main que se
ejecuta cuando se inicia la aplicacin
! Por ltimo, una aplicacin debe importar todas
aquellas clases, interfaces y/o paquetes que
necesite para su implementacin
Sintaxis bsica de Java
Introduccin
GSyC 2013 - Introduccin a la POO en Java
13
! Toda aplicacin debe tener una clase principal con
un mtodo main que es el primero que se ejecuta
cuando se inicia el programa
! Denicin del mtodo :
public static void main(String []args)
! public: visible en todo el programa y desde el
exterior para poder ser ejecutado por la JVM
! static: se aplica a toda la clase y no a objetos o
instancias de la misma
! void: al ser el primer mtodo en ejecutarse no
puede devolver ningn valor, nadie lo recoger
! args: lista de argumentos pasados por la lnea de
comandos
Sintaxis bsica de Java
El mtodo main()
GSyC 2012 - Introduccin a la POO en Java
14
! Variables: se denen mediante un nombre, un tipo y un
mbito
! Variables miembro o atributos
! Representan datos especcos de cada clase y diferencian
unos objetos de otros
! Los atributos comunes a todos los objetos de una clase se
denominan Variables de clase y van precedidas del
modicador static
! Variables locales a un mbito
! Necesarias para almacenar valores intermedios
! Desaparecen una vez que el bloque o mtodo en el que
fueron denidas deja de existir
! Variables instancia
! Se corresponden con los objetos propiamente dichos
! Resultado de declarar una variable como perteneciente a una
clase y dando valor a sus atributos
! No existen variables globales
Sintaxis bsica de Java
Variables
GSyC 2013 - Introduccin a la POO en Java
14
GSyC 2012 - Introduccin a la POO en Java
15
int edad;
String nombre, apellido1, apellido2;
boolen esCierto = false;
Sintaxis bsica de Java
Declaracin de variables
GSyC 2013 - Introduccin a la POO en Java
15
GSyC 2012 - Introduccin a la POO en Java
16
!El tipo de una variables puede ser
!El nombre de una clase
!Uno de los tipos simples:
!Numricos, caracteres y booleanos
!No se tratan como objetos por eciencia y
sencillez de uso
!No obstante, estos tipos tambin pueden
ser usados como clases al estar denidos
en la API de Java (paquete java.lang)
Sintaxis bsica de Java
Tipo de una variable
GSyC 2013 - Introduccin a la POO en Java
16
GSyC 2012 - Introduccin a la POO en Java
17
! Enteros
!byte, 1 byte [-128..127]
!short, 2 bytes [-32.768..32.767]
!int, 4 bytes [2.147.483.648..2.147.483.647]
!long, 8 bytes
! Coma otante
!float, de 32 bits
!double, de 64 bits
! La conversin automtica de tipos slo se produce
cuando el compilador determina que el destino es lo
sucientemente grande. En caso contrario, se
necesita una conversin explcita o casting
Sintaxis bsica de Java
Tipos numricos
GSyC 2013 - Introduccin a la POO en Java
17
GSyC 2012 - Introduccin a la POO en Java
18
!char
!Identica caracteres individuales
!16 bits sin signo, representa
Unicode
!Aunque no se utilicen como enteros,
es posible operar con ellos como si lo
fueran, sumndolos, incrementando
su valor, etc.
Sintaxis bsica de Java
Tipo carcter
GSyC 2013 - Introduccin a la POO en Java
18
GSyC 2012 - Introduccin a la POO en Java
19
!boolean
!true o false
!Es el resultado que devuelven
todos los operadores lgicos
Sintaxis bsica de Java
Tipo booleano
GSyC 2013 - Introduccin a la POO en Java
19
GSyC 2012 - Introduccin a la POO en Java
20
! Grupo de variables con el mismo tipo a los que nos
referimos con el mismo nombre
! Podemos declarar y luego crear el array:
int [] edades;
edades = new int[10];
! O hacer ambas cosas a la vez:
String titulos[] = new String[10];
! Tambin podemos declarar e inicializar:
String titulos[] = {Hamlet, Macbeth,
El Quijote, Drcula};
int edades = {18, 45, 26, 3, 22, 44};
Dimensin del array?
Sintaxis bsica de Java
Array
GSyC 2013 - Introduccin a la POO en Java
20
GSyC 2012 - Introduccin a la POO en Java
21
int matriz[][] = new int[10][20];
!Cmo podemos acceder a los elementos
de un array?
matriz[i][j] = 0;
ttulos[i+1];
Sintaxis bsica de Java
Arrays multidimensionales
GSyC 2013 - Introduccin a la POO en Java
21
GSyC 2012 - Introduccin a la POO en Java
22
! Los bloques de sentencias compuestas se
delimitan con dos llaves { }
! Las variables slo son vlidas desde el punto
donde estn declaradas hasta el siguiente }
! Como se pueden anidar sentencias compuestas,
cada una puede tener su propio conjunto de
variables locales
! Un bloque interno ve las variables declaradas por
encima de l, pero no al contrario
public static void main(String args[])
{
int mi_variable = 1;
{
int mi_variable; // error?
}
}
Sintaxis bsica de Java
mbito de una variable
GSyC 2013 - Introduccin a la POO en Java
22
GSyC 2012 - Introduccin a la POO en Java
23
!De una sola lnea:
// Comentario de una sola lnea
!Multilnea:
/* Comentario
multilnea */
!Comentarios javadoc: en caso de que
queremos generar documentacin
automtica, utilizaremos
/** Comentario javadoc*/
Sintaxis bsica de Java
Comentarios
GSyC 2013 - Introduccin a la POO en Java
23
GSyC 2012 - Introduccin a la POO en Java
24
! Asignaciones con operadores aritmticos
! Operadores aritmticos
Sintaxis bsica de Java
Expresiones y Operadores
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
+ Operador suma
- Operador resta
* Operador multiplicacin
/ Operador divisin
% Operador mdulo
GSyC 2013 - Introduccin a la POO en Java
24
GSyC 2012 - Introduccin a la POO en Java
25
! Operadores de comparacin
! Operadores lgicos
Sintaxis bsica de Java
Expresiones y Operadores
== Igualdad
!= Distinto
> Mayor que
< Menor que
>= Mayor o igual
<= Menor o igual
&& AND
|| OR
^ XOR
! NOT
GSyC 2013 - Introduccin a la POO en Java
25
GSyC 2012 - Introduccin a la POO en Java
26
! Operadores de bit
Sintaxis bsica de Java
Expresiones y Operadores
& AND
| OR
^ XOR
<< Desplazamiento a la izqda
>> Desplazamiento a la dcha
>>> Dpl. dcha relleno de ceros
~ Complemento a 1
GSyC 2013 - Introduccin a la POO en Java
26
GSyC 2012 - Introduccin a la POO en Java
27
Sintaxis bsica de Java
Precedencia de operadores
operadores posfijos op++ op--
operadores unarios ++op --op +op -op ~ !
multiplicacin y divisin * / %
suma y resta + -
desplazamiento << >> >>>
operadores relacionales < > <= =>
equivalencia == !=
operador AND &
operador XOR ^
operador OR |
AND booleano &&
OR booleano ||
condicional ?:
operadores de asignacin = += -= *= /= %= &= ^= |= <<= >>= >>>=
GSyC 2013 - Introduccin a la POO en Java
27
GSyC 2012 - Introduccin a la POO en Java
28
! Se pueden concatenar dos cadenas de caracteres
mediante el operador !+"
! Como resultado se crea un nuevo String
! Si alguno de los operandos no es un String, se convierte,
siempre que se trate de un objeto perteneciente a una
clase que tenga implementado el mtodo toString().
! Tambin se puede utilizar el operador !+=!
String nombre = Katia;
nombre += Leal;
nombre = nombre + Leal;
Sintaxis bsica de Java
Operadores de Strings
GSyC 2013 - Introduccin a la POO en Java
28
GSyC 2012 - Introduccin a la POO en Java
29
if (condicin)
{
sentencia1;

sentencia_n;
}
else // Esta rama no es obligatoria
{
sentencia_x;

sentencia_y;
}
! Operador if-else !?"
variable = (expresin booleana) ? expreCierta : expreFalsa
int minimo = x<y ? x : y;
Sintaxis bsica de Java
Estructuras de control de flujo: if - else
GSyC 2013 - Introduccin a la POO en Java
29
GSyC 2012 - Introduccin a la POO en Java
30
switch( expresin ) {
case constante1:
sentencia1;
...
break;
...
case constanteN:
sentenciaN;
...
break;
default:
sentencia;
...
break
}
Sintaxis bsica de Java
Estructuras de control de flujo: switch
GSyC 2013 - Introduccin a la POO en Java
30
GSyC 2012 - Introduccin a la POO en Java
31
int[] enteros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int i = 0; i < 10; i ++)
{
System.out.println(enteros[i]);
}
Sintaxis bsica de Java
Estructuras de iteracin: for
GSyC 2013 - Introduccin a la POO en Java
31
GSyC 2012 - Introduccin a la POO en Java
32
boolean prueba = true;
while (prueba)
{
System.out.println("Esto lo vers muchas
veces");
}
while (prueba)
{
System.out.println("Esto lo vers una vez");
prueba = false;
}
Sintaxis bsica de Java
Estructuras de iteracin: while
GSyC 2013 - Introduccin a la POO en Java
32
GSyC 2012 - Introduccin a la POO en Java
33
int numero = 4557888;
int digitos = 0;
do
{
numero /=10;
digitos++;
}
while (numero > 0);
System.out.println(digitos);
Sintaxis bsica de Java
Estructuras de iteracin: do-while
GSyC 2013 - Introduccin a la POO en Java
33
GSyC 2012 - Introduccin a la POO en Java
34
! Cuando es necesario salir de un bucle sin esperar a que se
cumpla la condicin, como en caso de error, podemos utilizar
esta sentencia
! Provoca la salida del bloque ms interno que la contenga, al
bloque inmediatamente anterior
for (int i = 1; i < 5; i++)
{
for (int j = 1; j < 5; j++)
{
if (j == 3)
break; //salimos al bucle anterior
}
}
Sintaxis bsica de Java
Sentencia break
GSyC 2013 - Introduccin a la POO en Java
34
GSyC 2012 - Introduccin a la POO en Java
35
! Provoca que se dejen de ejecutar las sentencias de su
bloque, se regresa al punto en que se comprueba la
condicin
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j > i)
{
System.out.println( );
continue;
}
System.out.println( + (i * j));
}
}
Sintaxis bsica de Java
Sentencia continue
GSyC 2013 - Introduccin a la POO en Java
35
GSyC 2012 - Introduccin a la POO en Java
36
! Java utiliza mtodos en lugar de procedimientos y funciones
! Los mtodos tambin necesitan ser invocados y en
ocasiones tienen que devolver un valor, retornando al punto
en que fueron llamados
return value; // El mtodo devuelve algn dato
return; // Queremos salir sin devolver valor antes
// del fin del cdigo
Sintaxis bsica de Java
Sentencia return
GSyC 2013 - Introduccin a la POO en Java
36
GSyC 2012 - Introduccin a la POO en Java
37
! Convertir una variables de un tipo origen en otro
tipo destino
! Slo puede realizarse entre tipos bsicos o en una
jerarqua de herencia
int cuenta1 = 0;
float cuenta2 = (float) cuenta1;// cuenta2 = 0.0
Sintaxis bsica de Java
Casting
GSyC 2013 - Introduccin a la POO en Java
37
GSyC 2012 - Introduccin a la POO en Java
38
!Un POO est compuesto de varios objetos
que presentan una serie de propiedades,
atributos, y unas cuantas operaciones que
saben como realizar, mtodos
!Objeto = estado + comportamiento
!Una vez construido, un objeto se puede
integrar donde nos haga falta:
!Encapsulacin
!Reusabilidad
Programacin orientada a objetos en Java
Introduccin
GSyC 2013 - Introduccin a la POO en Java
38
GSyC 2012 - Introduccin a la POO en Java
39
! Encapsulacin
! Los objetos deben presentar un diseo fuerte de su
interfaz, ocultando los detalles de su implementacin
! Los objetos no deben cambiar el modo en el que se
solicite realizar una determinada tarea
! Cuando aprendemos a conducir un coche, luego somos
capaces de conducir cualquiera, por qu?
! La encapsulacin permite que el control de errores sea ms
fcil
! Los objetos conocer mejor que nadie los datos que guardan y
podrn saber si existen inconsistencias
! Un objeto de una clase jams podr modicar directamente
los atributos de otra, tendr que pedrselo al objeto que los
guarda invocando el/los mtodo/s correspondiente/s
Programacin orientada a objetos en Java
Introduccin
GSyC 2013 - Introduccin a la POO en Java
39
GSyC 2012 - Introduccin a la POO en Java
40
!Reusabilidad
! Tenemos que programar los objetos de tal
manera que solo realicen aquellas funciones
que les son inherentes
! De esta forma podremos reutilizar cdigo
fcilmente sin tener que inventar la rueda
continuamente
!Un rgano del cuerpo humano se puede
donar puesto que realizar la misma
funcin en otro cuerpo
Programacin orientada a objetos en Java
Introduccin
GSyC 2013 - Introduccin a la POO en Java
40
GSyC 2012 - Introduccin a la POO en Java
41
! Plantilla o molde a partir del cual se construyen los
objetos
! La clase dene una serie de propiedades comunes
a todos los objetos que pertenecen a ella,
atributos
! Tambin dene el conjunto de operaciones que se
pueden realizar sobre dichos objetos, mtodos
! Ejemplos de clases: un coche, una casa, un
rgano humano, un rbol
! El valor que tomen los atributos para las distintas
instancias de una clase, objetos, es lo que
permitir distinguirlas
Programacin orientada a objetos en Java
Clases
GSyC 2013 - Introduccin a la POO en Java
41
GSyC 2012 - Introduccin a la POO en Java
42
modicadores_de_clase class Nombre_Clase
! Modicadores
! abstract: concepto relacionado con la herencia
! public: todas aquellas clases que pueden ser referencias
fuera de su paquete
! nal: concepto relacionado con la herencia
class MiClase
{
// declaracin de atributos

// declaracin de mtodos

}
Programacin orientada a objetos en Java
Creacin de una clase
GSyC 2013 - Introduccin a la POO en Java
42
GSyC 2012 - Introduccin a la POO en Java
43
modicadores Nombre_Clase nombre_atributo;
! Los modicadores pueden ser static y nal
class MiClase
{
// declaracin de atributos
Fecha fecha_de_compra;
int ao_de_compra;
// declaracin de mtodos

}
Programacin orientada a objetos en Java
Creacin de una clase: atributos
GSyC 2013 - Introduccin a la POO en Java
43
GSyC 2012 - Introduccin a la POO en Java
44
modicadores tipo_resultado nombre_mtodo(tipo1 arg1, , tipoN argN)
{
// Implementacin del mtodo
}
class Coche
{
// atributos
int numero_de_puertas;
Color color;
Fecha fecha_matriculacin;
String matrcula;
int velocidad_actual;
// mtodos
void acelerar(int incremento) {}
void frenar(int decremento) {}
void pintar(String nuevo_color) {}
int get_numero_puertas() {}
}
Programacin orientada a objetos en Java
Creacin de una clase: mtodos
GSyC 2013 - Introduccin a la POO en Java
44
GSyC 2012 - Introduccin a la POO en Java
45
! Los objetos resultan de concretar el valor de los
atributos que se denen en una clase
! As, podremos tener dos objetos de la clase Coche
que para el atributo color uno sea rojo y el otro sea
gris
! Estado de un objeto: valor concreto de los
atributos en un instante de tiempo determinado
! El estado de un objeto afecta a su comportamiento
! Si un pedido est pagado no puede aceptar nuevos
artculos
! Si es un pedido vaco no le pueden borrar artculos
puesto que no los tiene
Programacin orientada a objetos en Java
Instancias u Objetos
GSyC 2013 - Introduccin a la POO en Java
45
GSyC 2012 - Introduccin a la POO en Java
46
!Como cualquier otra variable, un objeto de una clase se crea
en dos pasos:
!Declaracin:
Coche mi_coche;
!Inicializacin o creacin propiamente dicha:
mi_coche = new Coche();
!Finalmente, podemos hacer ambas cosas a la vez:
Coche mi_coche = new Coche();
!Para referirnos a los objetos o atributos de una clase
utilizamos el !.":
mi_coche.matrcula = 0212 CGH;
System.out.println(Mi coche tiene +
mi_coche.get_numero_puertas() + puertas.);
Programacin orientada a objetos en Java
Instancias u Objetos: Creacin
GSyC 2013 - Introduccin a la POO en Java
46
GSyC 2012 - Introduccin a la POO en Java
47
!El constructor es un mtodo especial que tienen todas las clases
!Cuando creamos una instancia de una clase y se invoca a new, lo
que hacemos es invocar a uno de los constructores de dicha clase
!El constructor debe tener exactamente el mismo nombre que la clase
!El mtodo constructor realiza tareas de inicializacin, como dar valor
a los atributos
!Java dene un constructor por defecto para todas las clases:
! Este constructor no recibe argumentos
! Los atributos se inicializan a los valores por defecto que corresponde a
su tipo (a cero los nmeros, a null los objetos, a false los booleanos y al
carcter nulo !\0" los caracteres)
!Suele resultar interesante tener varios constructores a medida
!En muchas ocasiones, la primera lnea de un constructor suele
invocar a otros constructores de la clase: this
!this: entre otras cosas, acta como sustituto del nombre del
constructor de una clase
Programacin orientada a objetos en Java
Constructor de una clase
GSyC 2013 - Introduccin a la POO en Java
47
GSyC 2012 - Introduccin a la POO en Java
48
class Cliente
{ // atributos
String nombre_cliente;
int numero_cuenta;
int compras_efectuadas = 1;
int bonus_acumulado;
// constructores
Cliente (String nombre)
{
this(nombre, Cuenta.obtener_nuevo_numero());
}
Cliente (String nombre, int num_cuenta)
{
nombre_cliente = nombre;
numero_cuenta = num_cuenta;
}
// mtodos
public void apuntar_compra()
{
compras_efectuadas = compras_efectuadas + 1;
}
public void bonificar(int bonus)
{
bonus_acumulado = bonus_acumulado + bonus;
}
public String get_nombre()
{
return nombre_cliente;
}
}
Programacin orientada a objetos en Java
Constructor de una clase
GSyC 2013 - Introduccin a la POO en Java
48
GSyC 2012 - Introduccin a la POO en Java
49
!En contraposicin a los constructores, el mtodo
finalize() se ejecuta cuando un mtodo es
eliminado de la memoria por el recolector de basura
!No lleva asociada ninguna accin por defecto
!Deber ser sobreescrito por aquellas clases que
necesiten un proceso de nalizacin especial
!Por ejemplo:
! La clase FileInputStream utiliza el mtodo
finalize() para cerrar el Stream
! La clase DatagramSocket sobreescribe el mtodo
finalize() para aadir un proceso adicional necesario
para cerrar el socket
Programacin orientada a objetos en Java
Destructor de una clase
GSyC 2013 - Introduccin a la POO en Java
49
GSyC 2012 - Introduccin a la POO en Java
50
!this se utiliza para referirse al objeto
actual
1.Cuando queremos llamar a un mtodo
pasndole como parmetro el objeto
actual
2.Para resolucin de variables dentro de un
mbito: diferenciar parmetros de los
atributos de la clase con el mismo
identicador
3.Para invocar, dentro de un constructor, a
otro constructor de la misma clase
Programacin orientada a objetos en Java
This
GSyC 2013 - Introduccin a la POO en Java
50
GSyC 2012 - Introduccin a la POO en Java
51
class Cliente
{
int codigo_cliente;
Cliente(int codigo_cliente)
{
this.codigo_cliente = codigo_cliente;
}
public void apuntarCompra(Pedido P){}

} // class
class Pedido
{
Cliente c;
int codigo_pedido;
public void asignarAlCliente()
{
c.apuntarCompra(this);
}
} // class
Programacin orientada a objetos en Java
This
GSyC 2013 - Introduccin a la POO en Java
51
GSyC 2012 - Introduccin a la POO en Java
52
! Las clases e interfaces en Java se
organizan en paquetes a modo de
librera
!Las estructuras de paquetes siguen
un esquema de rbol que garantiza la
unicidad en el nombre de los paquetes
!Cuando una clase no pertenece a un
paquete, se asocia al paquete por
defecto, el cul est asociado al
directorio que contiene ese cdigo
Programacin orientada a objetos en Java
Paquetes
GSyC 2013 - Introduccin a la POO en Java
52
GSyC 2012 - Introduccin a la POO en Java
53
! En Java no son necesarios los
cheros de cabecera
!Para indicar que una clase o interfaz
pertenece a un paquete, hay que poner
al comienzo del chero fuente:
package nombre_paquete;
!Si en un mismo chero se escriben
varias clases o interfaces, slo uno de
ellos puede ser declarado como pblico
Programacin orientada a objetos en Java
Paquetes: cmo escribir un paquete
GSyC 2013 - Introduccin a la POO en Java
53
GSyC 2012 - Introduccin a la POO en Java
54
! Para hacer referencia a un elemento de un
determinado paquete, tenemos dos opciones:
!Escribir el nombre completo del paquete y del
elemento en cuestin
java.awt.event.ActionEvent
!Importar el paquete para poder referenciar al
elemento sin tener que anteponer todo el
nombre del paquete que lo contiene
import java.awt.event.ActionEvent;
import java.awt.event.*;
Programacin orientada a objetos en Java
Paquetes: uso de un paquete
GSyC 2013 - Introduccin a la POO en Java
54
GSyC 2012 - Introduccin a la POO en Java
55
! Todos los cheros de un paquete deben localizarse
dentro de un subdirectorio que concuerde con el
nombre del paquete
! Los subdirectorios pueden colgar de cualquier
directorio contemplado en la variable de entorno
CLASSPATH
java.util : c:\jdk.x.y.z\lib ==> \java\util
(paquete) (CLASSPATH) (subdirectorio)
Programacin orientada a objetos en Java
Paquetes: cmo localiza el compilador los paquetes
GSyC 2013 - Introduccin a la POO en Java
55
GSyC 2012 - Introduccin a la POO en Java
56
! Palabras reservadas que se anteponen al
nombre de una clase, mtodo o atributo
! Su objetivo es el de imponer un
comportamiento o cualidades de las que
carecen por defecto
! A continuacin veremos modicadores de
mtodos y de atributos
Programacin orientada a objetos en Java
Modificadores
GSyC 2013 - Introduccin a la POO en Java
56
GSyC 2012 - Introduccin a la POO en Java
57
! La manera en la que desde fuera se
puede referenciar a los mtodos o
atributos de una clase, depende de los
modicadores que anteceden al propio
mtodo o atributo
! Modicadores de acceso:
! public
! private
! protected
Programacin orientada a objetos en Java
Modificadores de acceso
GSyC 2013 - Introduccin a la POO en Java
57
GSyC 2012 - Introduccin a la POO en Java
58
! Cuando declaramos un mtodo o
atributo como pblico, estamos
permitiendo que desde cualquier otra
clase puedan referenciarlo directamente
! Desde otra clase podemos
incrementar el nmero de compras de
un Cliente sin ms:
mi_cliente.compras_efectuadas++;
Programacin orientada a objetos en Java
Modificadores de acceso: public
GSyC 2013 - Introduccin a la POO en Java
58
GSyC 2012 - Introduccin a la POO en Java
59
! Cuando declaramos un mtodo o atributo
como privado, no podremos acceder al
atributo ni invocar al mtodo desde ninguna
otra clase
mi_cliente.compras_efectuadas++; // error?
Programacin orientada a objetos en Java
Modificadores de acceso: private
GSyC 2013 - Introduccin a la POO en Java
59
GSyC 2012 - Introduccin a la POO en Java
60
! Los atributos y mtodos as
declarados son accesibles directamente
slo desde la clase en que se
denieron, de las subclases de esta y
las clases que se encuentran dentro de
su mismo paquete
! ste es el modicador por defecto, el
que toma un atributo o mtodo cuando
no se especica ningn otro
Programacin orientada a objetos en Java
Modificadores de acceso: protected
GSyC 2013 - Introduccin a la POO en Java
60
GSyC 2012 - Introduccin a la POO en Java
61
! Un programa que pretende ser OO debe declarar
todos los atributos de todas las clases private
! Mtodos get y set
! Para que una interfz sea fuerte, los mtodos tipo
get y set sern declarados:
! public, si queremos invocarlos desde cualquier clase
! protected, si slo queremos que sean invocados por
las clases hijas
! private, cuando no nos interesa que puedan ser
invocados desde el exterior (mtodo que hace saltar una
alarma)
! Cuando quereamos incrementar las compras de un
Cliente, lo mejor es invocar al mtodo apropiado:
mi_cliente.apuntarCompra();
Programacin orientada a objetos en Java
Qu tipo de modificador es mejor?
GSyC 2013 - Introduccin a la POO en Java
61
GSyC 2012 - Introduccin a la POO en Java
62
!static: un atributo as declarado se asocia
con la clase, tomando el mismo valor para
todos los objetos de dicha clase
! Una variable de este tipo se denomina variable
de clase y funciona de forma similar a las
variables globales
!final: una variables con este modicador
es en realidad una constante y debe ser
inicializada antes de poder ser referenciada
private static final int BASE = 300;
public static final int SCHEDULE_NOW = BASE + 0;
System.out.println(Tag.SCHEDULE_NOW);
Programacin orientada a objetos en Java
Otros modificadores para atributos
GSyC 2013 - Introduccin a la POO en Java
62
GSyC 2012 - Introduccin a la POO en Java
63
!static: identica a un mtodo de clase
que slo puede actuar y acceder sobre
mtodos estticos
! Se pueden ejecutar sin tener que crear una
instancia de la clase
y = Math.pow(x, a);
!final: un mtodo de este tipo no puede
ser sobreescrito por las subclases de la clase
a la que pertenece
!Slo los mtodos static pueden ser final
!abstract: lo veremos en el apartado de
Herencia
Programacin orientada a objetos en Java
Otros modificadores para mtodos
GSyC 2013 - Introduccin a la POO en Java
63
GSyC 2012 - Introduccin a la POO en Java
64
! Como el mtodo main() supone un
articio dentro de la POO, pueden surgir
algunos problemas
! La forma ms recomendada de emplear el
main consiste en crear una clase que
represente a nuestra aplicacin y que slo
contenga el mtodo main
public class MiAplicacion
{
public static void main (String args[])
{
Cliente mi_cliente;

}
}
Programacin orientada a objetos en Java
Metodologa del main
GSyC 2013 - Introduccin a la POO en Java
64
GSyC 2012 - Introduccin a la POO en Java
65
! Aunque los objetos son referencias,
un mtodo no puede cambiar el valor de
sus parmetros
! Como siempre, hay que recurrir a los
mtodos de ese objeto para modicar su
estado
! Java no puede asociar a un objeto
otro diferente
Programacin orientada a objetos en Java
Paso de parmetros en Java
GSyC 2013 - Introduccin a la POO en Java
65
GSyC 2012 - Introduccin a la POO en Java
66
! Cuando se copia una variable, el origen y la
copia son referencias al mismo objeto
Empleado pepe = new Empleado(Pepe, 2000, new
Fecha(2013, 25, 1), TIC);
Empleado mi_empleado = pepe;
mi_empleado.cambiarDepartamento(Marketing);
! Si lo que queremos es crear un objeto
idntico a otro con la idea de que ms
adelante sea independiente de l, hay que
utilizar el mtodo java.lang.Object.clone()
Programacin orientada a objetos en Java
Acceso protegido y clonacin
GSyC 2013 - Introduccin a la POO en Java
66
GSyC 2012 - Introduccin a la POO en Java
67
! Para poder clonar un objeto, es necesario:
!Que la clase implemente el interfaz Cloneable
!Si la implementacin que ofrece Object del
mtodo clone no se adapta a nuestras
necesidades, habr que redenir dicho mtodo
! La copia se realiza bit a bit, por lo que si el
objeto molde tiene atributos que no sean tipos
simples, el mtodo clone no funcionar
correctamente puesto que origen y copia
seguirn teniendo variables comunes
Programacin orientada a objetos en Java
Acceso protegido y clonacin
GSyC 2013 - Introduccin a la POO en Java
67
GSyC 2012 - Introduccin a la POO en Java
68
! En el mundo real los objetos se relacionan unos
con otros de una manera jerrquica, compartiendo:
! caractersticas de estructura y
! comportamiento, pero
! aadiendo especialidad respecto a sus semejantes
! Cada clase dene unas propiedades y un
comportamiento. Las clases que pertenecen a la
primera los compartirn, pudiendo aadir sus
cualidades particulares
! A estas clases se las conoce como subclases,
clases hijas o clases derivadas
! A la clase de la que heredan se la denomina
superclase o clase padre
Programacin orientada a objetos en Java
Herencia
GSyC 2013 - Introduccin a la POO en Java
68
GSyC 2012 - Introduccin a la POO en Java
69
! En la POO existen dos tipos
fundamentales de herencia:
! Herencia de implementacin,
extends
! Herencia de interfaz,
implements
Programacin orientada a objetos en Java
Herencia
GSyC 2013 - Introduccin a la POO en Java
69
GSyC 2012 - Introduccin a la POO en Java
70
! Consiste en establecer una jerarqua de
clases de modo que la clase hija hereda los
atributos y mtodos de la clase padre
pudiendo aadir mtodos y atributos propios
! La subclase har las cosas como su padre:
podemos invocar a mtodos no denidos en
ella pero s en algunas de las clases que la
preceden en la jerarqua
! El compilador ascender niveles en la jerarqua
hasta encontrar el mtodo invocado
Programacin orientada a objetos en Java
Herencia de implementacin
GSyC 2013 - Introduccin a la POO en Java
70
GSyC 2012 - Introduccin a la POO en Java
71
! Si una subclase necesita hacer las cosas
de forma diferente a su clase padre, podr
redenir los mtodos necesarios
! Todos los Animales respiran, pero los
Mamferos lo hacen por medio de pulmones y
los Peces por medio de branquias. Podemos
redenir el mtodo respirar() en cada una de
ellas para contemplar esta particularidad
Programacin orientada a objetos en Java
Herencia de implementacin
GSyC 2013 - Introduccin a la POO en Java
71
GSyC 2012 - Introduccin a la POO en Java
72
! No debe utilizarse este tipo de herencia a menos
que todos los atributos y mtodos tengan sentido
! No es conveniente que existen jerarquas de
herencia de muchos niveles (ms de cuatro)
! Al igual que C++, no permite la herencia mltiple
class MiClaseHija extends MiClasePadre
{
// atributos propios de la clase hija
// mtodos propios de la clase hija
// mtodos redefinidos
}
Programacin orientada a objetos en Java
Herencia de implementacin
GSyC 2013 - Introduccin a la POO en Java
72
GSyC 2012 - Introduccin a la POO en Java
73
! Por defecto, todas las clases heredan de la
superclase Object, denida en el paquete
java.lang
! Es posible asignar un objeto subclase a
una variable perteneciente a la superclase
Empleado primer_empleado;
Directivo jefe = new Directivo();
primer_empleado = jefe;
Programacin orientada a objetos en Java
Herencia de implementacin
GSyC 2013 - Introduccin a la POO en Java
73
GSyC 2012 - Introduccin a la POO en Java
74
! Se utiliza en una clase hija para
referenciar mtodos y atributos de una
clase padre
super.atributo;
super.metodo();
! El uso ms generalizado se realiza
desde el constructor de la clase hija
Programacin orientada a objetos en Java
Herencia de implementacin: super
GSyC 2013 - Introduccin a la POO en Java
74
GSyC 2012 - Introduccin a la POO en Java
75
class Empleado
{
String nombre;
int sueldo;
Fecha fecha_contrato;
public Empleado(String nombre, int salario, Fecha alta)
{
this.nombre = nombre;
sueldo = salario;
fecha_contrato = alta;
}
public void despedir()
{
}
}
class Directivo extends Empleado
{
String nombre_secretaria;
public Directivo(String nombre, int salario, Fecha alta)
{
super(nombre, salario, alta);
nombre_secretaria = ;
}
}
Programacin orientada a objetos en Java
Herencia de implementacin: super
GSyC 2013 - Introduccin a la POO en Java
75
GSyC 2012 - Introduccin a la POO en Java
76
! Si por motivos de seguridad no nos interesa que
una clase pueda tener descendencia, la podemos
declarar con final
final class MiClaseSinHijos
{
// atributos
// mtodos
}
! Si queremos evitar que una clase hija redena un
mtodo implementado por la clase padre, tenemos
que aadir final a la declaracin del mtodo
! Por defecto, en una clase nal todos los mtodos
son nales
Programacin orientada a objetos en Java
Herencia de implementacin: final
GSyC 2013 - Introduccin a la POO en Java
76
GSyC 2012 - Introduccin a la POO en Java
77
! Los atributos presentes en una clase
padre, deben declararse private o
protected?
! Aun en una jerarqua de herencia, el
acceso a los atributos de la clase padre
se debe llevar a cabo a travs de
mtodos get y set
Programacin orientada a objetos en Java
Herencia de implementacin: private Vs protected
GSyC 2013 - Introduccin a la POO en Java
77
GSyC 2012 - Introduccin a la POO en Java
78
! La herencia de interfaz segn la POO
consiste en establecer una jerarqua en al que
las clases superiores e intermedias denen un
comportamiento que se concretar en la clase
situada en el nivel ms inferior
! Los mtodos se declaran en las clases
padres y se implementan en las hijas
! Las clases as denidas no estn
destinadas a tener instancias de s mismas
! Se trata ms bien de plantillas o patrones
para crear clases ms especcas
Programacin orientada a objetos en Java
Herencia de interfaz
GSyC 2013 - Introduccin a la POO en Java
78
GSyC 2012 - Introduccin a la POO en Java
79
! Una clase declarada como abstract posee al
menos un mtodo abstracto
! Un mtodo abstracto es un mtodo que no se
implementa en la clase que lo declara, obligando a
que sean las clases hijas quienes lo hagan
modicador_de_acceso abstract class MiClaseAbstracta
{
// atributos
// mtodos implementados
// mtodos abstractos
modicador_acceso abstract tipo_resultado metodo1();
} // class
Programacin orientada a objetos en Java
Herencia de interfaz: abstract
GSyC 2013 - Introduccin a la POO en Java
79
GSyC 2012 - Introduccin a la POO en Java
80
! Implementacin de la clase MensajeEscrito que
hereda de Mensaje
public class MensajeEscrito extends Mensaje
{
int longitud_mensaje;
String texto;
MensajeEscrito(String mensaje, String remite)
{
super(remite);
texto = mensaje;
}
public void reproducir()
{
System.out.println(texto);
}
} // class
Programacin orientada a objetos en Java
Herencia de interfaz: abstract
GSyC 2013 - Introduccin a la POO en Java
80
GSyC 2012 - Introduccin a la POO en Java
81
! La forma ms adecuada de implementar la
herencia de interfaz es por medio de interfaces
! Un interfaz es similar a una clase pero:
! No tiene atributos
! Contiene declaraciones de mtodos sin implementar
! Un interfaz dene un comportamiento
! Una clase puede heredar de mltiples
interfaces: un objeto se puede comportar de varias
maneras
! Una persona puede ser informtico y tambin
puede jugar al baloncesto
! Para la declaracin de un interfaz se utiliza la
palabra reservada interface
Programacin orientada a objetos en Java
Herencia de interfaz: interfaces
GSyC 2013 - Introduccin a la POO en Java
81
GSyC 2012 - Introduccin a la POO en Java
82
! La forma ms adecuada de implementar la herencia de
interfaz es por medio de interfaces
! Un interfaz es similar a una clase pero:
! No tiene atributos
! Contiene declaraciones de mtodos sin implementar
! Un interfaz dene un comportamiento
! Una clase puede heredar de mltiples interfaces: un
objeto se puede comportar de varias maneras
! Una persona puede ser informtico y tambin puede jugar
al baloncesto
! Para la declaracin de un interfaz se utiliza la palabra
reservada interface
! Una clase que hereda de un interfaz utiliza la palabra
reservada implements
Programacin orientada a objetos en Java
Herencia de interfaz: interfaces
GSyC 2013 - Introduccin a la POO en Java
82
GSyC 2012 - Introduccin a la POO en Java
83
public interface Mensaje
{
public void reproducir();
public String getRemitente();
}
public class MensajeEscrito implements Mensaje
{
String texto;
String remitente;
MensajeEscrito(String mensaje, String remite)
{
remitente = remite;
texto = mensaje;
}
public void reproducir()
{
}
public String getRemitente()
{
return remitente;
}
} // class
Programacin orientada a objetos en Java
Herencia de interfaz: interfaces
GSyC 2013 - Introduccin a la POO en Java
83
GSyC 2012 - Introduccin a la POO en Java
84
! Jerarqua de herencia por interfaz
! Cada interfaz que se aade a la cadena declara los
mtodos que aade
! Es responsabilidad de la clase que hereda del ltimo
interfaz la implementacin de todos los mtodos declarados
en la jerarqua
public interface Interfaz1
{
public void mtodo1(parmetros);
}
public interface Interfaz2 extends Interfaz1
{
public void mtodo2(parmentros);
}
Programacin orientada a objetos en Java
Herencia de interfaz: extends
GSyC 2013 - Introduccin a la POO en Java
84
GSyC 2012 - Introduccin a la POO en Java
85
! Aunque no existe una respuesta universal, las tendencias
en POO se inclinan hacia la herencia de interfaz
! Los interfaces favorecen la reusabilidad: con elllos el grado
de especializacin de un objeto se alcanza nicamente en l
mismo, no tomando carctersticas de otras clases
precedentes en la jerarqua
! Nuevo mensaje, MensajeAudiovisual
! Los interfaces son robustos frente a los cambios: cuando
en un programa tenemos algoritmos que cambian con relativa
frecuencia, tendremos bien aislados los puntos sensibles y
sabremos que no interaccionan con los dems
! Empleado implementa el mtodo subirSueldo() y tiene dos
clases hijas, Directivo y Programador. Si a los directivos se
les sube el sueldo con un criterio diferente al resto de
empleados, tendremos que reescribir el mtodo en la
subclase Directivo teniendo cuidado de las llamadas a super
Programacin orientada a objetos en Java
Herencia de implementacin Vs Herencia de interfaz
GSyC 2013 - Introduccin a la POO en Java
85
GSyC 2012 - Introduccin a la POO en Java
86
! Los interfaces permiten que un objeto presente
varios comportamientos de manera simultnea
! Cuando se usan interfaces, la llamada a los
mtodos en tiempo de ejecucin se realiza a travs
de una bsqueda dinmica
Mensaje m = new MensajeEscrito();
m.reproducir();
! Los interfaces obligan al programador a escribir
ms cdigo, pero a la larga compensa en trminos
de reusabilidad y de mantenimiento de las
aplicaciones
Programacin orientada a objetos en Java
Herencia de implementacin Vs Herencia de interfaz
GSyC 2013 - Introduccin a la POO en Java
86
GSyC 2012 - Introduccin a la POO en Java
87
! Convertir una variable de un tipo origen en otro destino
! El casting slo puede realizarse entre tipo bsicos o en una
jerarqua de herencia
int cuenta1 = 4;
float cuenta2 = (float) cuenta1; // cuenta2 = 4.0
! En una jerarqua de herencia solo se puede realizar de una clase
hija a la clase padre
Directivo jefe = new Directivo();
Empleado mi_empleado = (Empleado)jefe;
! Mentir en un casting generar una excepcin en tiempo de
ejecucin
! Para saber si un objeto est en la jerarqua de herencia de otro
se utiliza la palabra reservada instanceof
Empleado e1 = new Empleado();
if (e1 instanceof Directivo)
{
jefe = e1;
}
Programacin orientada a objetos en Java
Casting
GSyC 2013 - Introduccin a la POO en Java
87
GSyC 2012 - Introduccin a la POO en Java
88
! Concepto que permite que un mtodo tenga mltiples
implementaciones que se seleccionan en virtud del nmero y
tipo de los parmetros que recibe el mtodo, lo cual se
conoce como sobrecarga del mtodo
class Perro
{
public void oler(Comida c)
{
System.out.println(Me gusta la comida!);
}
public void oler(Gato g)
{
System.out.println(Odio a los gatos!);
}
} // class
Programacin orientada a objetos en Java
Sobrecarga
GSyC 2013 - Introduccin a la POO en Java
88
GSyC 2012 - Introduccin a la POO en Java
89
! Posibilidad de enviar un mensaje a un grupo de
objetos cuya naturaleza puede ser heterognea
! La clase Animal tiene el mtodo abstracto
mover() que se implementa de forma distinta en
cada una de las subclases Pez y Ave. Entonces, un
tercer objeto puede enviar el mensaje mover() a un
grupo de objetos Pez y Ave por medio de una
variable de referencia de clase Animal, haciendo
as un uso polimrco de dichos objetos respecto
del mensaje mover()
Programacin orientada a objetos en Java
Polimorfismo
GSyC 2013 - Introduccin a la POO en Java
89

También podría gustarte