Download Introducción al lenguaje de programación Java

Document related concepts
no text concepts found
Transcript
• clase Graphics
– cargar una imagen desde fichero
– dibujar líneas en el panel de dibujo
– modo XOR
• Diseño de aplicaciones
– Modelo MVC (Modelo-Vista-Control)
El lenguaje de programación Java
1
Cargar una imagen en una aplicación
• Utilizamos un objeto Toolkit para leer ficheros GIF y JPEG
• Ejemplo:
Toolkit kit = Toolkit.getDefaultToolkit();
Image foto = kit.getImage(“fotos/dni.jpeg”);
• La variable foto contiene una referencia a un objeto que encapsula la
imagen JPEG.
• Para visualizarla en una zona gráfica (objeto de tipo Graphics) se utiliza
el método drawImage:
Graphics g = jPanelDibujo.getGraphics();
g.drawImage(foto, x, y, null);
//ImageObserver = null
//también puede dibujarse a escala
g.drawImage(foto, x, y, ancho, alto, null);
El lenguaje de programación Java
2
clase MediaTracker
• Se necesita para cargar completamente una imagen antes de procesar
cualquier otro código.
• El código necesario es:
Toolkit kit = Toolkit.getDefaultToolkit();
Image foto = kit.getImage(“fotos/dni.jpeg”);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(foto, 0); //0 = identificador
try{
tracker.waitForID(0);
//o bien tracker.waitForAll();
}catch (InterruptedException e){}
El lenguaje de programación Java
3
Primitivas de dibujo en Graphics
Ejemplos:
• void drawLine(x1, y1, x2, y2)
Dibuja una línea desde el punto (x1,y1) del área de dibujo
al punto (x2, y2)
• void drawRect (x, y, ancho, alto)
Dibuja un rectángulo situando la esquina superior
izquierda en el punto (x, y). Los lados miden x+alto y
x+ancho.
El lenguaje de programación Java
4
Borrar imágenes. Modo XOR
• En la clase Graphics:
– public void setXORMode(Color c1)
• Dibujar dos veces la misma imagen implica que se
restauren los pixels al color original.
• Ejemplo:
Graphics g = jPanel.getGraphisc();
g.setXORMode(Color.white);
1) Pintar dos veces la misma imagen en este panel supone
que el panel se ponga de color blanco (el color original). El
efecto es que se borra la imagen de la pantalla.
2) Se puede pintar una imagen encima de otra.
El lenguaje de programación Java
5
Dibujar en un panel
• Se necesita:
– Definir una clase que herede de JPanel.
– redefinir el método paintComponet, este método se llama
automáticamente siempre que sea necesario redibujarse.
class VisualizadorPanel extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
…//Código necesario para dibujar
}
}
El lenguaje de programación Java
6
Desarrollo de aplicaciones OO
1) Análisis del problema  MODELO de la aplicación
1.1 Encontrar los objetos relevantes del dominio Ej: Libro,Autor, ..
1.2 Describir los objetos encontrados y clasificar
a) atributos y operaciones; relaciones clientela Ej: autor-libro
b) herencia Ej: Revista - Publicación
1.3 Implementar las clases en un lenguaje
2) Diseño de la solución: surgen nuevos objetos no relacionados
con el dominio
2.1 Diseño de la interfaz de usuario (VISTA)
2.2 Establecer el CONTROL: interacción del usuario con la vista
2.3 Implementar las clases del diseño
El lenguaje de programación Java
7
Desarrollo de aplicaciones en Java
• Implementar las clases del MODELO.
• Definir el aspecto gráfico (VISTA)
• Definir los eventos que van a ocurrir sobre cada uno de los
elementos de las ventanas = eventos del sistema.
– eventos generados por un actor externo
• Implementar las acciones asociadas a la ocurrencia de un
evento sobre los botones de la vista (CONTROL).
¿Quién debe ser el responsable de gestionar
los eventos del sistema?
El lenguaje de programación Java
8
Ejemplo.
• Sea el modelo:
Agenda
añadir
eliminar
buscar
iterator
Contacto
* nombre:String
telefono:String
• La agenda es un catálogo de contactos:
public class Agenda{
private LinkedList contactos;
…
}
El lenguaje de programación Java
9
presiona botón
actionPerformed(ActionEvent)
Capa
de Interfaz
Capa
del Dominio
:JFrameAgenda
nuevoContacto(nombre, tfno)
:Controlador
:???
• Coordina la solicitud desde la UI
• Puede ser una clase que represente
al sistema software completo
10
Beneficios del Controlador: Reutilización de la lógica de la aplicación en
futuras aplicaciones porque no está ligada a la capa de interfaz.
actionPerformed(ActionEvent)
Capa
de Interfaz
Capa
del Dominio
actionPerformed(ActionEvent)
:JDialogAlta
:JFrameAgenda
nuevoContacto(nombre,tfno)
:Controlador
El lenguaje de programación Java
11
Modelo de delegación de eventos
1. Debemos definir los cambios del modelo que van a
implicar que reaccione la interfaz gráfica.
interface AgendaListener{
void alta (Contacto c);
void baja (Contacto c);
}
2. Las GUI que necesiten estar pendientes de estos cambios:
– Implementarán el interfaz que especifica los eventos que va a notificar el
modelo.
public class GUIAgenda extends JFrame
implements AgendaListener
– Se deben registrar en el controlador como oyentes del modelo.
controlador.addAgendaListener(this);
El lenguaje de programación Java
12
Modelo de delegación de eventos
3. El controlador notificará a sus oyentes cuando se produce un cambio
en el modelo:
public void nuevoContacto(String nombre, String tfno) {
Contacto c = new Contacto(nombre, tfno);
//Actualizar el modelo
agenda.añadir(c);
//Informar a los oyentes del modelo
//que se ha dado de alta un nuevo contacto
Iterator it = oyentesModelo.iterator();
while (it.hasNext())
( (AgendaListener) it.next()).alta(c);
}
4. La GUI se modificará en consecuencia
El lenguaje de programación Java
13
Principios de diseño
• Experto en Información: Los objetos hacen las cosas
relacionadas con la información que tienen.
• Creador: Asignar a la clase B la responsabilidad de crear
una instancia de clase A si se cumple uno o más de los
siguientes casos:
–
–
–
–
–
B agrega objetos de A
B contiene objetos de A
B registra instancias de objetos de A
B utiliza estrechamente objetos de A
B tiene los datos de inicialización para la creación de los objetos de A
• Bajo Acoplamiento: pocas interfaces.
• Alta Cohesión: responsabilidades altamente relacionadas.
El lenguaje de programación Java
14
Algunas heurísticas
• Una clase representa una única abstracción bien definida.
• Cuidado con clases que tienen nombres operacionales (“Mi clase hace
…”) son el resultado de convertir una rutina en una clase.
• Los atributos no son públicos.
• Métodos pequeños.
• Distribuir la funcionalidad horizontalmente.
• Cuidado con clases con muchos métodos set/get.
• Las clases del modelo deben ser independientes de las clases de la
vista.
• Incluir clases controladores para coordinar la actividad, no incluir
código del modelo en la vista.
El lenguaje de programación Java
15
Algunas heurísticas
• Factorizar comportamiento común lo más arriba que se pueda en la
jerarquía de herencia.
• Crear tantas clases abstractas como sea posible.
• La clase raíz de una jerarquía de clases debería ser abstracta.
• Distribuir la funcionalidad horizontalmente.
• Favorecer jerarquías profundas.
• Minimizar colaboraciones.
• Composición antes que herencia de implementación.
• Cuidado con el uso de estructuras CASE.
El lenguaje de programación Java
16
Algunas heurísitcas
• Utilizar excepciones sólo para condiciones excepcionales.
//NO HACER NUNCA ESTO
try{
int i=0;
while (true)
a[i++].f();
}catch (ArrayIndexOutOfBoundsException e){}
• Utilice excepciones comprobadas para condiciones
recuperables y excepciones runtime para errores de
programación.
El lenguaje de programación Java
17
Algunas heurísticas
• Favorezca el uso de excepciones predefinidas:
–
–
–
–
–
IllegalArgumentException
NullPointerException
IndexOutOfBoundsException
NoSuchElementException
UnsupportedOperationException
• Lance excepciones apropiadas al nivel de abstracción.
• Documentar todas las excepciones lanzadas por cada
método (etiqueta @throws del javadoc)
El lenguaje de programación Java
18