Está en la página 1de 58

Universidad Nacional Facultad de Ingeniería

de Trujillo Programa de Estudios: Ingeniería de Sistemas

Ciclo de vida y clases internas CLASE 11

Experiencia Curricular: Programación Orientada a Objetos I


Docente: Ms. Zoraida Yanet Vidal Melgarejo.

Los constructores -2-

• En Java, una forma de asegurar que los objetos siempre contengan valores
válidos es escribir un constructor. Un constructor es un método especial de
una clase que es llamado automáticamente siempre que se crea un objeto de
la misma.

• Su función es iniciar nuevos objetos de su clase. Cuando se crea un objeto,


Java hace lo siguiente:
✓ Asigna memoria para el objeto por medio del operador new.
✓ Inicia los atributos de ese objeto, ya sea con los valores especificados en
su propia declaración, o en su defecto, con los valores predeterminados
por el sistema.
✓ Llama al constructor de la clase que puede ser uno entre varios.

2
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 1 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Los constructores -3-

• Dado que los constructores son métodos, admiten parámetros.

• Cuando en una clase no se especifica ningún constructor, el


compilador añade un constructor público por omisión sin
parámetros.

• Un constructor por omisión de una clase C es un constructor sin


parámetros que será invocado cada vez que se construya un objeto
sin especificar ningún argumento, en cuyo caso el objeto será
iniciado con los valores especificados cuando se declararon los
atributos en su clase, o en su defecto, con los valores
predeterminados por el sistema.

Los constructores -4-

• Un constructor se distingue fácilmente porque tiene el mismo


nombre que la clase a la que pertenece.

• Un constructor no se hereda, no puede retornar un valor


(incluyendo void) y no puede ser declarado final, static, abstract,
synchronized o native.

• El constructor, salvo en casos excepcionales, debe declararse


siempre público para que pueda ser invocado desde cualquier
parte de una aplicación donde se cree un objeto de su clase,
aunque la clase, que se supone pública, pertenezca a otro paquete.

4
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 2 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Variables, métodos y clases final -5-

• Una variable final es una constante y no puede ser modificada.


✓ Debe, por lo tanto, ser inicializada.
✓ Es a menudo declarada public static para uso externo.

• Un método final no puede ser sobrescrito a través de la herencia.

• Una clase final no puede ser heredada.

public final class Color {


public final static Color black = new Color(0,0,0);

}

Destrucción de objetos -6-

• De la misma forma que existe un método que se ejecuta automáticamente cada vez que se construye
un objeto, también existe un método que se invoca automáticamente cada vez que se destruye. Este
método recibe el nombre genérico de destructor y en el caso concreto de Java se corresponde con el
método finalize.

• Cuando un objeto es destruido se llama al método finalize y después, el recolector de basura se


encarga de eliminar el objeto, lo que conlleva a liberar los recursos que dicho objeto tenía
adjudicados, como por ejemplo, la memoria que ocupa.

6
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 3 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Destrucción de objetos -7-

• Un destructor es un método especial de una clase que se ejecuta antes de


que un objeto de esa clase sea eliminado físicamente de la memoria.

• Cuando en una clase no se especifica un destructor, el compilador


proporciona uno a través de la clase Object cuya sintaxis es la siguiente:

protected void finalize() throws Throwable {


/* sin código */
}

Destrucción de objetos -8-

• Para definir un destructor en una clase se tiene que reescribir el


método finalize

protected void finalize() throws Throwable {


System.out.println(“Objeto destruido”);
}

• En una clase sólo es posible definir un destructor.

• Un destructor es invocado automáticamente cuando no quedan


referencias al objeto y justo antes de que el objeto sea recolectado
como basura por el recolector de basura de Java.

8
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 4 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Recolección de basura -9-

• El recolector de basura se ejecuta en un subproceso paralelamente a


su aplicación limpiando la basura (objetos desreferenciados) en
forma silenciosa y en segundo plano y nunca se detiene por más de
una pequeña cantidad de tiempo.

public class Test {



Runtime runtime = Runtime.getRuntime();
runtime.gc();
runtime.runFinalization();

}

Recolección de basura - 10 -

• Cuando todas las referencias a un objeto se pierden, el objeto está


marcado para la recolección de basura.

• La recolección de basura libera la memoria que es utilizada por el


objeto.

• La recolección de basura es automática. No hay necesidad de que el


programador haga cualquier cosa, pero el programador puede
opcionalmente llamar a System.gc();.

10
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 5 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Clases internas CLASE 11

Experiencia Curricular: Programación Orientada a Objetos I


Docente: Ms. Zoraida Yanet Vidal Melgarejo.

11

Las clases anidadas - 12 -

• Una clase anidada es una clase que es un miembro de otra clase.

public class Externa {


// Miembros de la clase externa

private class Interna {
// Miembros de la clase interna

}
// Otros miembros de la clase externa
}

12
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 6 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Las clases anidadas - 13 -

• Una clase se debe definir dentro de otra sólo cuando tenga


sentido en el contexto de la clase que la incluye o cuando
depende de la función que desempeña la clase que la incluye.

• Una clase anidada es un miembro más de la clase que la


contiene, y como tal se le aplican las mismas reglas que para el
resto de los miembros: los miembros de la clase interna
tendrán acceso al resto de los miembros de la clase externa
independientemente de su modificador de acceso.

13

Las clases internas - 14 -

• Cuando un miembro de una clase es una clase anidada y no es static


recibe el nombre de clase interna por tratarse de un miembro del
objeto. Esto significa que cuando se crea un objeto de la clase externa
también se crea un objeto de la clase interna.

Objeto de la
clase externa Objeto de la
clase interna

14
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 7 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Las clases internas - 15 -

• Si una clase interna está asociada con un objeto, lógicamente no puede tener
miembros static.

• Un objeto de una clase interna puede existir sólo dentro de un objeto de su


clase externa. Asimismo, puesto que se trata de un miembro de su clase
externa, tiene acceso directo al resto de los miembros de esa clase.

Objeto de la
clase externa Objeto de la
clase interna

15

Las clases internas - 16 -

• Las clases internas fuerzan una relación entre dos clases.

• Son de cuatro tipos:


✓ Static
✓ Miembro
Objeto
✓ Local de la
Objeto de la
✓ Anónima clase
clase externa
interna

16
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 8 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de clase interna static - 17 -

• Definido en el nivel de la clase.


• Acceso sólo a los miembros estáticos de la clase externa.
public class Externa {
private static float varFloat = 3.50f;
private String varString;

static class InternaEstatica {


public void metodo1() {
varString = “Hola”;
}
public void metodo2() {
varFloat = 10.57f;
}
}

}

17

Definición de clase interna static - 18 -

package clasesInternas;

import java.util.*;

public class Persona {

static class Fecha {


private int dia;
private int mes;
private int año;

public boolean esBisiesto() {


return ((año % 4 == 0) && (año % 100 != 0) || (año % 400 == 0));
}

18
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 9 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de clase interna static - 19 -

public boolean esValida() {


int diasPorMes[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
boolean añoCorrecto, mesCorrecto, diaCorrecto;
añoCorrecto = año >= 1800;
mesCorrecto = mes >= 1 && mes <= 12;
if (mesCorrecto) {
switch (mes) {
case 2: if (añoBisiesto())
diaCorrecto = dia >= 1 && dia <= 29;
else
diaCorrecto = dia >= 1 && dia <= diasPorMes[mes];
break;
default: diaCorrecto = dia >= 1 && dia <= diasPorMes[mes];
}
} else
diaCorrecto = false;
return diaCorrecto && mesCorrecto && añoCorrecto;
}

19

Definición de clase interna static - 20 -

public Fecha(int... fecha) {


GregorianCalendar fechaActual = new GregorianCalendar();
int dd, mm, aa;
dd = fechaActual.get(Calendar.DAY_OF_MONTH);
mm = fechaActual.get(Calendar.MONTH) + 1;
aa = fechaActual.get(Calendar.YEAR);
dia = fecha.length > 0 ? fecha[0] : dd;
mes = fecha.length > 1 ? fecha[1] : mm;
año = fecha.length > 2 ? fecha[2] : aa;
}
@Override
public String toString() {
return dia + "/" + mes + "/" + año;
}
public String asignarFechaNacimiento(Fecha fecha) {
fechaNacimiento = fecha;
return "Fecha de nacimiento: " + getFechaNacimiento();
}
}

20
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 10 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de clase interna static - 21 -

private String nombre;


private static Fecha fechaNacimiento;

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getNombre() {


return nombre;
}

private static Fecha getFechaNacimiento() {


return fechaNacimiento;
}

public String crearObjetoInterno() {


Fecha fecha = new Fecha();
return fecha.asignarFechaNacimiento(fecha);
}

21

Definición de clase interna static - 22 -

@Override
public String toString() {
return "Nombre: " + getNombre();
}

public static void main(String[] args) {


Persona persona = new Persona();
persona.setNombre("Ana");
String cadena = "";
cadena += persona.toString() + "\n";
cadena += persona.crearObjetoInterno();
System.out.println("\nDatos de persona:\n" + cadena);
}
}

22
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 11 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de la clase interna miembro - 23 -

• Definido en el nivel de la clase.


• Son necesarias instancias de la clase externa
• La palabra clave this se utiliza para tener acceso a la instancia externa
public class Externa {
private float varFloat = 3.50f;
private String varString;
...
class InternaMiembro {
public void metodo1() {
varString = “Hola”;
}
public void metodo2() {
varFloat = 10.57f;
}
}
...
}

23

Definición de la clase interna miembro - 24 -

package clasesInternas;
import java.util.*;
public class Persona {
public class Fecha {
private int dia;
private int mes;
private int año;

public boolean esBisiesto() {


return ((año % 4 == 0) && (año % 100 != 0) || (año % 400 == 0));
}

public boolean esValida() {



}

24
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 12 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de la clase interna miembro - 25 -

public Fecha(int... fecha) {



}

@Override
public String toString() {
return dia + "/" + mes + "/" + año;
}

public void asignarDatos() {


nombre = "Alicia";
fechaNacimiento = new Fecha();
}
}

25

Definición de la clase interna miembro - 26 -

private String nombre;


private Fecha fechaNacimiento;

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getNombre() {


return nombre;
}

public Fecha getFechaNacimiento() {


return fechaNacimiento;
}

26
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 13 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de la clase interna miembro - 27 -

public void crearObjetoInterno() {


Fecha fecha = new Fecha();
fecha.asignarDatos();
}
@Override
public String toString() {
return "Nombre: " + getNombre() +
"\nFecha de nacimiento: " + getFechaNacimiento();
}
public static void main(String[] args) {
Persona persona = new Persona();
persona.crearObjetoInterno();
System.out.println("\nDatos de persona:\n" + persona.toString());
}
}

27

Definición de la clase interna local - 28 -

• Definido en el nivel de los métodos.


• Se declaran dentro de un bloque del código.
• Se tiene acceso sólo a las variables finales.
• Pueden ser declaradas como abstract o final, pero no ambas a la vez

public class Externa {


...
public void metodoExterno(final int var1){
final int var2=5; ...
class InternaLocal {
private int localVar = var1 + var2; ...
}
}
}

28
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 14 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de la clase interna local - 29 -

package clasesInternas;
import java.util.*;

public class Persona {


private String nombre;
private String fechaNacimiento;

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getNombre() {


return nombre;
}

29

Definición de la clase interna local - 30 -

public void setFechaNacimiento() {


class Fecha {
private int dia;
private int mes;
private int año;

public boolean esBisiesto() { … }


public boolean esValida() { … }
public Fecha(int... fecha) { … }
@Override
public String toString() { … }
}
fechaNacimiento = new Fecha().toString();
}

30
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 15 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de la clase interna local - 31 -

public String getFechaNacimiento() {


return fechaNacimiento;
}
@Override
public String toString() {
return "Nombre: " + getNombre() + "\nFecha de nacimiento: " + getFechaNacimiento();
}
public static void main(String[] args) {
Persona persona = new Persona();
persona.setNombre("Julio");
persona.setFechaNacimiento();
System.out.println("\nDatos de persona:\n" + persona.toString());
}
}

31

Definición de una clase interna anónima - 32 -

• Definido en el nivel de los métodos.


• Se declaran dentro de un bloque del código.
• No pueden tener un constructor.

public class Externa {


...
public void metodoExterno(final int x, final int y) {
//Definición de una clase interna anónima
objeto = new Anonima(x, y) {
@Override
public String toString() {
return x + "-" + y;
}
}; // fin de la clase anónima
. . .
}// fin del método
}// fin de la clase externa

32
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 16 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Definición de una clase interna anónima - 33 -

package clasesInternas;

public class Persona {


private String nombre;
private Fecha fechaNacimiento;

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getNombre() {


return nombre;
}

public Fecha getFechaNacimiento() {


return fechaNacimiento;
}

33

Definición de una clase interna anónima - 34 -

public void setFechaNacimiento(final int dia, final int mes, final int año) {
fechaNacimiento = new Fecha(dia, mes, año) {
@Override
public String toString() {
return mes + "/" + dia + "/" + año;
}
};
}
@Override
public String toString() {
return "Nombre: " + getNombre() +
"\nFecha de nacimiento: " + getFechaNacimiento();
}
public static void main(String[] args) {
Persona persona = new Persona();
persona.setNombre("Patricia");
persona.setFechaNacimiento(21, 1, 1990);
System.out.println("\nDatos de persona:\n" + persona.toString());
}
}

34
Experiencia Curricular: Programación Orientada a Objetos I Tema: Ciclo de Vida y Clases
Docente: Ms. Zoraida Yanet Vidal Melgarejo Internas. Página - 17 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Excepciones CLASE 12

Experiencia Curricular: Programación Orientada a Objetos I


Docente: Ms. Zoraida Yanet Vidal Melgarejo.

Excepciones -2-

• En el mundo de la programación hay algo que siempre ocurre: las


situaciones inesperadas o anómalas en los programas. Los
programadores de cualquier lenguaje se esfuerzan por escribir
programas libres de errores, sin embargo, es muy difícil que los
programas reales se vean libres de ellos.

• El lenguaje Java incorpora un soporte para manejar situaciones


anómalas, conocidas como “excepciones”.

• Una excepción es un evento que ocurre durante la ejecución de


un programa y detiene el flujo normal de la secuencia de
instrucciones de ese programa; en otras palabras, una excepción
es una condición anormal que surge en una secuencia de código
durante su ejecución.

2
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 1 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Excepciones -3-

• Una excepción puede ocurrir por muchas razones diferentes:


• Un usuario ha introducido datos no válidos.
• Un archivo que necesita ser abierto no se puede encontrar.
• Una conexión de red se ha perdido en el medio de las comunicaciones.
• La JVM se ha quedado sin memoria.

• Algunas de las excepciones son causadas por errores del usuario, otras por
error del programador, y otras por los recursos físicos que han fallado de
alguna manera.

• Una excepción es un objeto que describe una condición excepcional producida


en un fragmento de código. Esta excepción se detecta en tiempo de ejecución
y no durante la compilación del código.

• Las excepciones son manejadas por código fuera del flujo normal de control
del programa.

Excepciones -4-

• Una excepción, interrumpe el procesamiento normal porque no cuenta


con la información necesaria para resolver el problema, en el contexto en
el que sucedió. Todo lo que se puede hacer es abandonar dicho contexto y
pasar el problema a un contexto de más alto nivel.

• Con el sistema de manipulación de excepciones de Java, un programa


puede comunicar eventos inesperados a un contexto de ejecución más
capacitado para responder a tales eventos anormales.

• Utilizadas en forma adecuada, las excepciones incrementan en gran


medida la robustez de las aplicaciones.

4
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 2 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Un programa sin control de excepciones -5-

Un programa que controla excepciones -6-

Este bloque de código también desea acceder al elemento de índice 5 que no tiene ninguna referencia,
pero a diferencia del anterior, este suceso ha sido previsto y se muestra un mensaje al usuario
indicando que no hay elementos en el arreglo y la ejecución del programa termina de manera natural.

6
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 3 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Excepciones: Jerarquía base -7-

Excepciones: Jerarquía base -8-

• La clase Throwable representa todo lo que se puede “lanzar” en Java:


o Contiene una instantánea del estado de la pila en el momento en
el que se creó el objeto (“stack trace” o “call chain”).
o Almacena un mensaje (variable de instancia de tipo String) que
puede utilizarse para detallar el problema que se produjo.
o Puede tener una causa, también de tipo Throwable, que permite
representar el motivo que causó el error o la excepción.

8
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 4 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Excepciones: Jerarquía base -9-

• La clase Throwable tiene dos subclases: Error y Exception.

• Un Error indica que se produce un fallo no recuperable, del que no se


puede recuperar la ejecución normal del programa, por lo tanto en este
caso no hay nada que hacer. Los errores, normalmente, hacen que el
intérprete Java presente un mensaje en el dispositivo estándar de salida
y concluya la ejecución del programa.

Excepciones: Jerarquía base - 10 -

• Una Exception indicará una condición anormal que puede ser


subsanada para evitar la terminación de la ejecución del programa.

• Una excepción es un objeto derivado directa, o indirectamente, de la


clase Throwable definida en el paquete java.lang. Tanto el intérprete
Java como muchos métodos de las múltiples clases de Java pueden
lanzar excepciones y errores.

10
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 5 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Clasificación de Excepciones - 11 -

• En Java las Excepciones se clasifican en:

• No verificadas en compilación:
Situaciones inesperadas de programación difíciles de
prever.

• Verificadas en compilación:
Situaciones predecibles y que pueden ser controladas.

11

Clasificación de Excepciones - 12 -

• Verificadas en Compilación (Checked exception): son situaciones


que el compilador verifica y que pueden recuperarse.

Java requiere que los métodos que disparan excepciones, las


capturen y manejen la situación inesperada o, especifiquen todas
las excepciones checked que pueden producirse dentro de su
alcance.

Estas excepciones no pueden ser simplemente ignoradas en el


momento de la compilación.

Una excepción verificada (o comprobada) es una excepción que


suele ser un error del usuario o de un problema que no puede ser
previsto por el programador. Por ejemplo, si un archivo se va a
abrir, pero el archivo no se puede encontrar, se produce una
excepción.

12
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 6 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Clasificación de Excepciones - 13 -

Toda excepción que sea subclase de Exception (excepto


RuntimeException) es verificada en tiempo de compilación. Exception y sus
subclases indican situaciones que una aplicación debería tratar de forma
razonable.

13

Clasificación de Excepciones - 14 -

• No Verificadas en Compilación (Unchecked exception): representan


situaciones inesperadas de programación difíciles de prever. Son
excepciones disparadas automáticamente por el sistema de ejecución
de Java.
Por ejemplo, las excepciones aritméticas (división por cero),
excepciones de referencias nulas (acceso a un objeto mediante un
puntero nulo), excepciones de indexación (acceso a un elemento de un
arreglo con un índice muy chico o demasiado grande) y error de
casting. Una excepción de este tipo es una excepción que
probablemente podría haberse evitado por el programador. Java no
obliga que éstas excepciones sean especificadas, ni capturadas para su
manejo, es decir, que se ignoran en el momento de la compilación.
Toda excepción que herede de RuntimeException será una excepción
no verificada en compilación, ya que depende de la ejecución del
programa para que pueda lanzarse.

14
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 7 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Clasificación de Excepciones - 15 -

15

Manejo de Excepciones - 16 -

Cuando un método se encuentra con una anomalía que no puede


resolver, lo lógico es que lance (throw) una excepción, esperando que
quien lo llamó directa o indirectamente la capture (catch) y maneje la
anomalía. Incluso él mismo podría capturar y manipular dicha
excepción.

Si la excepción no se captura, el programa finalizará automáticamente.

En java se utilizan las cláusulas: try, catch y finally en la estructura


del manejo de excepciones.

16
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 8 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Excepciones - 17 -

1. Bloque try…catch
• Se utiliza para capturar las excepciones que se han podido
producir en el bloque de código delimitado por try y catch.
• En cuanto se produce la excepción, la ejecución del bloque try,
que la contiene, termina. La cláusula catch recibe como
argumento un objeto Throwable.
• try: Es el bloque de código donde se prevé que se genere una
excepción. El bloque try tiene que ir seguido, al menos, por una
cláusula catch o una cláusula finally.
• catch: Es el código que se ejecuta cuando se produce la
excepción. No hay código alguno entre un bloque try y un bloque
catch, ni entre bloques catch.

17

Manejo de Excepciones - 18 -

• Flujo de ejecución:
Sin excepciones : 1->2->4
Con una excepción en el bloque 2 : 1->2*->3->4
Con una excepción en el bloque 1 : 1*

18
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 9 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Excepciones - 19 -

2. Captura Selectiva de Excepciones

Es posible manejar con la clase Exception todas las excepciones


lanzadas desde cualquier punto, ya que todas las excepciones
derivan de Exception, aunque el tratamiento sería igual para cada
una de ellas, sin poder tener un tratamiento especial en cada caso.

Por otro lado, uno puede capturar Excepciones específicas


indicándolas en el bloque catch; además, pueden tener tantos
bloques catch como errores predecibles dentro del bloque try.

19

Manejo de Excepciones - 20 -

• Flujo de ejecución:
Sin excepciones : 1->2->5
Excepción de tipo aritmético en el bloque 2 : 1->2*->3->5
Acceso a un objeto nulo (null) en el bloque 2 : 1->2*->4->5
Excepción de otro tipo diferente en el bloque 2 : 1->2*

20
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 10 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Excepciones - 21 -

3. La cláusula finally
• En ocasiones, nos interesa ejecutar un fragmento de código
independiente de si se produce o no una excepción (por ejemplo,
cerrar un archivo que estemos manipulando o una conexión a
una fuente de datos).

• Si el cuerpo del bloque try llega a comenzar su ejecución, el


bloque finally siempre se ejecutará:
➢ Detrás del bloque try si no se producen excepciones.
➢ Después de un bloque catch si éste captura la excepción.
➢ Justo después de que se produzca la excepción si ninguna
cláusula catch captura la excepción y antes de que la
excepción se propague hacia arriba.

21

Manejo de Excepciones - 22 -

• Flujo de ejecución:
Sin excepciones : 1->2->4->5
Excepción de tipo aritmético en el bloque 2 : 1->2*->3->4->5
Excepción de otro tipo diferente en el bloque 2 : 1->2*->4

22
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 11 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Excepciones - 23 -

• La estructura básica de manejo de excepciones en Java es:

try {
// Sentencias que pueden generar la excepción
} catch(ExcepcionCapturada referencia) {
// Sentencias que responden a la excepción
} finally {
// Sentencias que se ejecutan siempre
}

23

Manejo de Excepciones - 24 -

• Pueden presentarse las siguientes variantes:

try {
//Sentencias
} catch(ExcepcionCapturada referencia) {
//Sentencias
} try {
//Sentencias
} finally {
//Sentencias
}

24
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 12 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Excepciones - 25 -

try {
//Sentencias
} catch(ExcepcionCapturada1 referencia) {
//Sentencias
} catch(ExcepcionCapturada2 referencia) {
//Sentencias
} catch(ExcepcionCapturada3 referencia) {
//Sentencias
} finally {
//Sentencias
}

25

Manejo de Excepciones - 26 -

try {
//Sentencias
} catch(ExcepcionCapturada1 referencia) {
//Sentencias
} catch(ExcepcionCapturada2 referencia) {
//Sentencias
} catch(ExcepcionCapturada3 referencia) {
//Sentencias
}

26
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 13 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Lanzamiento de excepciones: throw - 27 -

• Lanzar una excepción equivale a crear un objeto de la clase de la excepción


para manipularlo fuera del flujo normal de ejecución del programa. Para
lanzar una excepción se utiliza la palabra reservada throw y para crear un
objeto, new.

• La sentencia throw se utiliza para lanzar explícitamente una excepción. En


primer lugar se debe obtener un descriptor de un objeto Throwable, bien
mediante un parámetro en una cláusula catch o, se puede crear utilizando
el operador new.

• La forma general de la sentencia throw es:


throw new ObjetoThrowable();

Ejemplo:

27

Lanzamiento de excepciones: throw - 28 -

28
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 14 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Lanzamiento de excepciones: throw - 29 -

• El flujo de la ejecución se detiene inmediatamente después de la sentencia


throw, y nunca se llega a la sentencia siguiente. Se inspecciona el bloque
try que la engloba más cercano, para ver si tiene la cláusula catch cuyo tipo
coincide con el del objeto o instancia Throwable.

• Si se encuentra, el control se transfiere a esa sentencia. Si no, se


inspecciona el siguiente bloque try que la engloba, y así sucesivamente,
hasta que el gestor de excepciones más externo detiene el programa y saca
por pantalla el trazado de lo que hay en la pila hasta que se alcanzó la
sentencia throw.

29

Propagación de excepciones: throws - 30 -

• La palabra clave throws se utiliza para identificar la lista posible de


excepciones que un método puede lanzar.

• La sentencia throws obliga al quién invoque el método usar un bloque


try…catch o propagarlo con otro throws

30
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 15 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Excepciones personalizadas - 31 -

• En general, se creará un nuevo tipo de excepción cuando se requiera manejar un determinado tipo
de situación excepcional no contemplada por las excepciones proporcionadas por la biblioteca de
Java.
• Todos los tipos de excepción se corresponden con una clase derivada de Throwable, clase raíz de la
jerarquía de clases de excepciones en Java.
• El programador puede definir sus propias clases de excepciones, definiendo una clase que herede
de Throwable o generalmente de Exception.

31

Excepciones personalizadas - 32 -

class MiExcepcion extends Exception {

public MiException() { }

// si se quiere mostrar un cierto mensaje se debe definir este segundo constructor


public MiException(String msg) {
super(msg);
}
}

32
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 16 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Excepciones personalizadas - 33 -

33

Resumen - 34 -

• Separación clara entre el tratamiento de situaciones inesperadas y el resto del código.


• Código más legible y mantenimiento más fácil.
• Propagar la excepción hasta el método que contenga un tratamiento adecuado.
• Sacar partido a la herencia, facilitando su agrupación/captura por afinidad y su comprensión.
• En los catch, las excepciones más específicas se tratan antes que las más genéricas.

34
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 17 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Interfaz Gráfica de Usuario: CLASE 13


Manejo de eventos
Experiencia Curricular: Programación Orientada a Objetos I
Docente: Ms. Zoraida Yanet Vidal Melgarejo.

Interfaces gráficas de usuario (GUI). -2-

Las interfaces gráficas de usuarios a base de ventanas son elementos que se


utilizan en el desarrollo de aplicaciones.

Una de las ventajas de trabajar con ventanas es que todas se comportan de


la misma forma independientemente del sistema operativo con el que se
trabaje (Windows, Linux, etc.) y, en muchos casos, utilizan los mismos
componentes básicos para introducir órdenes (menús descendentes,
botones, etc.).

2
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 1 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Interfaces gráficas de usuario (GUI). -3-

Ícono de la Barra de Botones de control


aplicación título de ventana

Barra
de
menú

Marco de
Barra de la ventana
herramientas

Barra de Barras de
estado desplazamiento
Área de trabajo

Interfaces gráficas de usuario (GUI). -4-

• Barra de menú: visualiza el conjunto de los menús disponibles para esa


aplicación. Al activarse un menú se visualiza el conjunto de órdenes que la
forman.

• Ícono de la aplicación y menú de control: el menú de control


proporciona órdenes para restaurar tamaño, mover, dimensionar,
minimizar, maximizar y cerrar la ventana.

• Barra de título: contiene el nombre de la ventana y del documento.


También permite mover la ventana, maximizarla y restaurarla (en
combinación con el mouse).

4
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 2 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Interfaces gráficas de usuario (GUI). -5-

• Botones de control de la ventana: al pulsar los botones permiten


minimizar, maximizar/restaurar y/o cerrar la ventana.

• Barras de desplazamiento: cuando la información es mayor al tamaño de


la ventana, Windows añade las barras de desplazamiento horizontal y/o
vertical según se requiera.

• Marco de la ventana: permite modificar el tamaño de la ventana.

Interfaces gráficas de usuario (GUI). -6-

• Área de trabajo: es la parte de la ventana en la que el usuario coloca el


texto y/o gráficos.

• Barra de herramientas: contiene un conjunto de ícono que permiten un


acceso rápido a algunas opciones del menú.

• Barra de estado: permite mostrar mensajes sobre la ubicación o el estado


de alguno de los componentes.

6
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 3 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Biblioteca JFC -7-

Java proporciona una biblioteca de clases denominada JFC (Java


Foundation Classes – Clases Base de Java). Actualmente bajo esta
denominación se agrupan las siguientes APIs (interfaces para
programación de aplicaciones):

• Swing: conjunto de componentes escritos en Java para diseñar


interfaces gráficas de usuario que se ejecutan uniformemente en
cualquier plataforma nativa que soporta la máquina virtual de java.

Biblioteca JFC -8-

• AWT: Kit de herramientas de ventanas abstractas (Abstract Window


Toolkit). Grupo de componentes, para diseñar interfaces gráficas de
usuario, común a todas las plataformas, pero escritos
específicamente para cada plataforma en código nativo; esto es, no
están escritos en Java.

Muchos de los componentes AWT han sido sustituidos en gran


medida por el conjunto de componentes Swing, dado que muchos de
los componentes Swing heredan de sus correspondientes AWT.

8
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 4 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Biblioteca JFC -9-

Diagrama de jerarquía de la clase Java Swing

Biblioteca JFC - 10 -

• Accesibilidad: ofrece soporte para usuarios con limitaciones.

• Java 2D: permite incorporar en los programas, gráficos 2D de alta


calidad, texto e imágenes.

• Soporte para arrastrar y colocar (drag and drop): permite la


transferencia de datos entre aplicaciones mediante la simple
operación de arrastrarlos hasta el lugar de destino.

10
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 5 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Formularios - 11 -

Un formulario es una ventana sobre la que se dibujan otros objetos


llamados componentes o controles, como etiquetas, cajas de texto, etc.,
con el fin de aceptar, procesar o visualizar datos.

Una aplicación con una interfaz gráfica trabaja estableciendo entre los
objetos que componen la misma una comunicación mediante mensajes,
los cuales son producidos por eventos. Cuando un mensaje llega a un
objeto, éste tiene que procesarlo.

11

Formularios - 12 -

Un evento es un mecanismo mediante el cual el objeto puede notificar


de la ocurrencia de un suceso. El evento puede ser producido por el
usuario, por el sistema o indirectamente por el código.

En un entorno de ventanas, cada ventana y cada control pueden


responder a un conjunto de eventos predefinidos. Cuando ocurre uno
de estos eventos, el sistema envía un mensaje que será interceptado
por el objeto que deba responder al mismo. La respuesta consistirá en
la ejecución del método que se haya escrito para responder a dicho
evento.

12
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 6 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Formularios - 13 -

Comienzo Método 1

Método 2
Recuperar Entregar
siguiente información del
evento evento
Método 3

Método 4
No
¿Salir?

Si

Fin

Secuencia de respuesta a la generación de un evento

13

Manejo de Eventos - 14 -

• El programador debe realizar dos tareas clave para procesar un evento de interfaz gráfica de
usuario en un programa: debe registrar un componente de escucha del evento para el componente
de la GUI que se espera genere ese evento, y debe implementar un método manejador del evento (o
un conjunto de métodos manejadores del evento).

• Cada interfaz de componente de escucha de eventos especifica uno o más métodos manejadores de
eventos que deben declararse en la clase que implemente a la interfaz de componente de escucha de
eventos. El uso de componentes de escucha de eventos en el manejo de eventos se conoce como el
modelo de delegación de eventos: el procesamiento de un evento se delega a un objeto específico (el
componente de escucha) en el programa.

14
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 7 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos - 15 -

• Cuando ocurre un evento, el componente de la GUI con el que el usuario interactuó notifica a sus
componentes de escucha registrados, llamando al método manejador de eventos apropiado de cada
componente de escucha. Por ejemplo, cuando el usuario oprime la tecla Enter (evento ocurrido) en
un objeto JTextField (Componente), se hace una llamada al manejador de eventos actionPerformed
(método) del componente ActionListener (componente de escucha registrado).

15

Manejo de Eventos - 16 -

Secuencia de manejo de eventos

evento
Componente Componente de
ocurrido Escucha

Método
(respuesta al evento)

16
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 8 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s - 17 -

• Cada vez que el usuario escribe un carácter, oprime un botón del mouse, hace un movimiento con el
cursor del mouse, presiona una combinación de teclas, ocurre un evento.
• El objeto que recibe el evento (un botón, un área de texto, un panel, una lista, entre otros), es
notificado en tiempo de ejecución de que recibió el evento.
• Todo lo que se debe hacer es implementar la interfaz apropiada y registrarla como un escucha en el
componente GUI apropiado.

17

Manejo de Eventos: tipos de Listener’s - 18 -

• Los eventos están agrupados de acuerdo a su naturaleza en los siguientes grupos:


✓ ActionListener: acciones sobre componentes.
✓ WindowListener: cierre o manipulación una ventana (Frame/Dialog).
✓ MouseListener: presión de un botón del mouse mientras el cursor está sobre el componente.
✓ MouseMotionListener: movimiento del cursor sobre un componente.
✓ ComponentListener: visibilidad del componentes.
✓ FocusListener: obtención del foco del teclado.
✓ ListSelectionListener: selección de ítems dentro de una lista.

18
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 9 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s - 19 -

• Cuando un usuario hace clic sobre un botón o presiona la tecla Enter mientras digitaba en una caja
de texto o elige una opción de un menú, se genera un evento, que tiene los siguientes elementos:
✓ La fuente del evento (event source): Es el componente que origina el evento.
✓ El escuchador: (event listener) es el encargado de atrapar o escuchar el evento.
✓ El manejador del evento (event handler), es el método que permite implementar la interfaz,
es decir el escuchador. Este método:
➢ Recibe un objeto evento el cuál tiene información sobre el evento que sucedió,
➢ Descifra el evento, con dicho objeto, y
➢ Procesa lo solicitado por el usuario.

19

Manejo de Eventos: tipos de Listener’s - 20 -

El manejar un evento requiere que:

1. En la declaración de la clase que maneja el evento (event handler), se debe indicar que
implementa la interfaz correspondiente al evento (ABCListener, donde ABC es el tipo de
evento a observar o escuchar).
La clase puede implementar mas de un ABCListener. Si la clase no implementa la interfaz puede
ser que extienda a una clase que sí la implementa.

public class miClase implements ActionListener{...}

20
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 10 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s - 21 -

2. En los componentes que son la fuente del evento se registra una instancia del manejador del
evento, como un observador o escucha del tipo de evento que maneja (ABCListener). Es decir, se le
dice al componente que va a escuchar los eventos del tipo del manejador.

componente.addActionListener(instancia_de_miClaseListener);

21

Manejo de Eventos: tipos de Listener’s - 22 -

3. En la clase que maneja el evento (event handler) se deben implementar los métodos de la
interface ABCListener que descifren el evento (ABCEvent) y lo procesen.

public void actionPerformed(ActionEvent e) {


//Código que reaccione a la acción
}

22
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 11 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Interfaz Gráfica de Usuario: CLASE 14


Manejo de eventos – 2
Experiencia Curricular: Programación Orientada a Objetos I
Docente: Ms. Zoraida Yanet Vidal Melgarejo.

Manejo de Eventos: tipos de Listener’s -2-

ACTIONLISTENER
• Cuando un usuario hace clic sobre un botón o presiona la tecla Enter mientras digita en una caja
de texto o elige una opción de un menú, se genera un evento ActionEvent y un mensaje
actionPerformed se envía a todos observadores o escuchas (los componentes), que implementan
la interfaz ActionListener, registrados en el componente.

• La interface ActionListener presenta el método:


void actionPerformed(ActionEvent eve)
que tiene como parámetro el evento generado, que es un instancia de la clase ActionEvent, la que
se genera en tiempo de ejecución cuando el usuario inicia el evento.

2
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 1 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s -3-

• La clase ActionEvent presenta además 2 métodos útiles:


String getActionCommand()
int getModifiers()
que permiten saber qué teclas se estaban presionando cuando se produjo el evento (Shift, Ctrl, Alt,
etc.)

Manejo de Eventos: tipos de Listener’s -4-

COMPONENTLISTENER
• Es un objeto que genera uno o más eventos justo después de que el componente haya sido
ocultado, hecho visible, movido o redimensionado.

• Uno o más eventos se disparan o activan después que un componente es escondido, se hace
visible, es movido ó se cambia su tamaño.

4
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 2 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s -5-

• La interface ComponentListener y su correspondiente clase adaptadora ComponentAdapter,


presentan los siguientes métodos:
▪ void componentHidden(ComponentEvent evento)
Se invoca cuando el componente se ha hecho invisible.
▪ void componentMoved(ComponentEvent evento)
Se invoca cuando cambia la posición del componente.
▪ void componentResized(ComponentEvent evento
Se invoca cuando cambia el tamaño del componente.
▪ void componentShown(ComponentEvent evento)
Se invoca cuando el componente se ha hecho visible.

Manejo de Eventos: tipos de Listener’s -6-

ITEMLISTENER
• Los eventos ItemEvent son disparados o activados por componentes que implementan la interfaz
ItemSelectable. Estos componentes mantienen un estado on/off para uno o más items u opciones.

• La interface ItemListener tiene un solo método


void itemStateChanged(ItemEvent eve)
que se ejecuta justo después de que un componente cambia de estado.

• La clase ItemEvent tiene los siguientes métodos:


Object getItem()
ItemSelectable getItemSelectable()
int getStateChange()

6
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 3 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s -7-

MOUSELISTENER
• Los eventos MouseEvent le informan cuando el usuario utiliza el mouse para interactuar con un
componente.
• Ocurren cuando el cursor entra o sale del área del componente en la ventana y cuando el usuario
oprime o libera el botón del mouse.
• La interface MouseListener y su correspondiente clase adaptadora MouseAdapter, contienen los
siguientes métodos:
void mouseClicked (MouseEvent eve)
void mousePressed (MouseEvent eve)
void mouseReleased (MouseEvent eve)
void mouseEntered (MouseEvent eve)
void mouseExited (MouseEvent eve)

Manejo de Eventos: tipos de Listener’s -8-

MOUSEMOTIONLISTENER
• Los eventos MouseMotion informan cuando el usuario mueve el cursor encima del componente.
• La interface MouseMotionListener y su correspondiente clase adaptadora MouseMotionAdapter,
contienen los siguientes métodos:
void mouseMoved(MouseEvent eve)
void mouseDragged(MouseEvent eve)
• La clase MouseInputAdapter implementa MouseListener y MouseMotionListener.

8
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 4 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s -9-

KEYLISTENER
• Los eventos del teclado nos dicen cuando un usuario presiona o libera una tecla. Existen 2 tipos
de Eventos:
• Digitar un carácter Unicode (keyTyped)
• Presionar/liberar una tecla (keyPressed)
• Para que se active uno de los eventos el componente debe tener el foco:
void keyTyped (KeyEvent eve)
void keyPressed (KeyEvent eve)
void keyReleased (KeyEvent eve)

Manejo de Eventos: tipos de Listener’s - 10 -

• La Clase KeyEvent define los siguientes métodos útiles:


int getKeyChar()
void setKeyChar()
int getKeyCode()
void setKeyCode(int)
• La Clase KeyEvent, define muchas constantes así:
KeyEventVK_A especifica la tecla A.
KeyEventVK_ESCAPE especifica la tecla ESCAPE.

10
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 5 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s - 11 -

FOCUSLISTENER
• Cuando un componente recibe el foco, es decir, es el elemento de la pantalla que está activo se
producen eventos de tipo FocusEvent.
• Para hacer que un objeto pueda escuchar este tipo de eventos deberá implementar la interface
FocusListener, y además deberá añadir el método:
public void addFocusListener (FocusListener fl)
• Los métodos de esta interfaz son:
• public void focusGained( FocusEvent e)
• public void focusLost( FocusEvent e)

11

Manejo de Eventos: tipos de Listener’s - 12 -

CONTAINERLISTENER
• Los eventos ContainerEvent son disparados o activados después que un componente es agregado o
removido del contenedor.
• Estos eventos son usados sólo para notificar que se presentó la adición o remoción del
componente, no es necesario el ContainerListener para que los componentes puedan ser agregados
o removidos.

12
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 6 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s - 13 -

• La interface ContainerListener y su correspondiente clase adaptadora ContainerAdapter, presenta


2 métodos:
• void componentAdded(ContainerEvent eve)
• void componentRemoved(ContainerEvent eve)

• La clase ContainerEvent, define 2 métodos útiles:


• Component getChild()
• Component getContainer()

13

Manejo de Eventos: tipos de Listener’s - 14 -

WINDOWLISTENER
• Los eventos de Ventanas son disparados o activados cuando una ventana es abierta, cerrada,
iconificada (iconified), desconificada (deiconified), activada o desactivada.

• Los usos más comunes, son por ejemplo, usar un WindowListener, cuando el usuario cierra una
ventana, para preguntar si desea salvar los cambios o si es la última ventana cerrada para salir del
programa. Por defecto cuando un usuario cierra una ventana esta se vuelve invisible.

14
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 7 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Manejo de Eventos: tipos de Listener’s - 15 -

• void windowActivated(WindowEvent e)
Se invoca cuando la ventana está configurada para ser una ventana activa.
• void windowClosed(WindowEvent e)
Se invoca cuando una ventana se ha cerrado cuando se pulsa en una forma de cierre que la misma
contiene.
• void windowClosing(WindowEvent e)
Se invoca cuando el usuario intenta cerrar la ventana desde un método de cierre propio de la ventana.
• void windowDeactivated(WindowEvent e)
Se invoca cuando una ventana ya no está activa.
• void windowDeiconified(WindowEvent e)
Se invoca cuando una ventana se cambia de un minimizado a un estado normal.
• void windowIconified(WindowEvent e)
Se invoca cuando una ventana se cambia de una normal a un estado minimizado.
• void windowOpened(WindowEvent e)
Se invoca la primera vez que una ventana se hace visible.

15

Clases Adaptadoras - 16 -

• Muchas de las interfaces de escucha de eventos proporcionan dos o más


métodos; MouseListener y MouseMotionListener son 2 ejemplos.
• No siempre es deseable declarar todos los métodos en una interface de
escucha de eventos. Por ejemplo, un programa podría necesitar manejador
MouseClicked de la interfaz MouseListener, o el manejador MouseDragged
de la interfaz MouseMotionListener. La interfaz WindowListener, que
contiene el método WindowClosing especifica 7 eventos manejadores de
eventos.
• Para muchas de las interfaces de escucha de eventos que contienen varios
métodos, el paquete java.awt.event y el paquete javax.swing.event
proporcionan clases adaptadoras de escucha de eventos.

16
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 8 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Clases Adaptadoras - 17 -

• Una clase adaptadora implementa una interfaz y proporciona una


implementación predeterminada (con un cuerpo vacío para los métodos) de
todos los métodos de la interfaz.
• El programador puede extender la clase adaptadora para heredar la
implementación predeterminada de cada método y, por ende, sobreescribir
el (los) método (s) necesario (s) para el manejo de eventos.
• La implementación predeterminada de cada método en la clase adaptadora
tiene un cuerpo vacío.
• Los adaptadores (adaptar classes) tienen como objetivo evitar la tediosa
tarea de tener que implementar todos los métodos de las interfaces
Listener.

17

Clases Adaptadoras - 18 -

• Por ello existe una clase adaptadora por cada interface listener que tiene
más de un método: MouseAdapter, WindowAdapter, KeyAdapter,
MouseMotionAdapter, FocusAdapter, ContainerAdapter y
ComponentAdapter, etc.
• Las clases adaptadoras implementan los métodos de la interface
correspondiente como vacíos

18
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 9 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Clases Adaptadoras - 19 -

• A continuación se muestran las Clases Adaptadoras de eventos y las


interfaces que implementan en el paquete java.awt.event:

CLASE ADAPTADORA DE EVENTOS IMPLEMENTA A LA INTERFAZ

ComponentAdapter ComponentListener
ContainerAdapter ContainerListener
FocusAdapter FocusListener
KeyAdapter KeyListener
MouseAdapter MouseListener
MouseMotionAdapter MouseMotionListener
WindowAdapter WindowListener

19

Contenedores - 20 -

• Los contenedores son componentes Swing para ubicar otros


componentes. Una ventana es un contenedor.

• Para colocar adecuadamente los componentes, es posible utilizar una


jerarquía de contenedores. La raíz de esa jerarquía siempre será el
contenedor del nivel superior por el marco de la ventana. Pertenecen a
este nivel los contenedores definidos por JFrame, JDialog y JApplet.

20
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 10 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Contenedores - 21 -

marco
panel
etiqueta

botón

• Se puede ver en la figura, se trata de una ventana con una etiqueta y


un botón; estos componentes pueden estar sobre el contenedor
definido por la propia ventana o en cualquier otro que el
programador puede crear y añadir a esta ventana.

21

Contenedores - 22 -

• Cada contenedor define un componente denominado panel. Así, un


contenedor de nivel superior en la jerarquía, define un panel
denominado panel raíz. Se trata de un panel de contenido que permite
ubicar, además de controles, otros paneles, formando así una jerarquía
de paneles.

• Para acceder al panel raíz de una ventana, ésta debe invocar a su


método getContentPane.

22
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 11 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Arquitectura Modelo-Vista-Controlador - 23 -

Swing basa sus componentes en la arquitectura modelo – vista –


controlador (MVC).
• El modelo se corresponde con el estado del componente. El estado de un
objeto lo definen todos sus datos miembro. Por ejemplo, en una lista el
modelo está definido por todos los miembros de la misma; en cambio,
en una caja de texto el modelo está definido por el documento de texto.
• La vista se refiere a cualquier perspectiva de ese modelo. Por ejemplo,
en una lista la vista es la representación gráfica de la misma.
• Y el controlador (manejador de eventos) es el responsable de la
actualización del modelo.

23

Arquitectura Modelo-Vista-Controlador - 24 -

eventos

controlador

vista modelo

• Tanto la vista como el controlador son combinados en un objeto


denominado delegado. El delegado representa gráficamente el
modelo (trabajo que hace la vista) y transfiere la entrada del usuario
hacia éste (trabajo que hace el controlador).

24
Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 12 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Programa de Estudios: Ingeniería de Sistemas

Arquitectura Modelo-Vista-Controlador - 25 -

• Un JComponent puede tener diferentes modelos y delegados. Para


acceder a los modelos se dispone de los métodos setModel y
getModel. Para acceder a los delegados se dispone de los métodos
setUI y getUI.
• Muchos componentes Swing no contenedores tienen modelos; por
ejemplo, un botón (JButton) tiene un modelo (ButtonModel) que
almacena el estado del botón (la tecla para acceso rápido, si está
pulsado, etc.).
• Otros componentes tienen múltiples modelos; por ejemplo, una lista
(JList) utiliza un ListModel para almacenar sus elementos y un
ListSelectionModel para seguir la pista del elemento actualmente
seleccionado.

25

Experiencia Curricular: Programación Orientada a Objetos I Tema: Interfaz Gráfica de Usuario 2.


Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 13 -

También podría gustarte