Академический Документы
Профессиональный Документы
Культура Документы
Ing. Edwin Octavio Ramos Velsquez Carrera Profesional de Ingeniera de Sistemas UNIVERSIDAD NACIONAL JOS MARA ARGUEDAS
1
En Java una interface es una clase abstracta pura, es decir una clase donde todos los mtodos son abstractos (no se implementa ninguno) Todos los mtodos que declara interface son siempre public una
Interface
2
CLASE ABSTRACTA
public class TAnimal { public String Nombre; public void Correr(); public void Caminar(); }
TAnimal +Nombre: String +Correr() +Caminar()
CLASE IMPLEMENTADA
public class TAnimal { public String Nombre; public void Correr() { System.out.print("Estoy corriendo"); } public void Caminar() { System.out.print("Estoy caminando"); } }
Clase Abstracta: Aquella clase que contiene por lo menos un mtodo abstracto Mtodo Abstracto: Aquel mtodo que no est implementado
Clase Abstracta
3
TAnimal A; TPerro P; TGato G; A = new TAnimal(); A = new TPerro(); A = new TGato(); TConstruccion C; TEdificio E; TEstadio P; C = new TEdificio(); C = new TEstadio(); C = new TConstruccion();
TPerro
TGato
<<Abstract>> TConstruccion
En esta imagen puede notarse que la clase TConstruccion es una clase ABSTRACTA, por tanto, es una clase NO INSTANCIABLE
TEdificio
TEstadio
Clase Abstracta
4
? ?
INTERFACES
5
Las variables declaradas en una interfaz son variables terminales (su valor no podr ser modificado) actan a la manera de valores CONSTANTES final
public interface IGorila { public int esElAlpha = 0; public void ComePlatano(); public void Gorilea(); public void CuelgaDelArbol(); }
public interface IVolador { public int AlturaDeVuelo = 0; public void SurcaElCielo(); public void FlameaAlas(); }
TGorila
public interface IGorila { public int esElAlpha=0; public void ComePlatano(); public void Gorilea(); public void CuelgaDelArbol(); }
public class TGorila implements IGorila { @Override public void ComePlatano(){ System.out.print("\n Estoy comiendo PLATANOS"); } @Override public void Gorilea(){ System.out.print("\n Estoy comiendo PLATANOS"); } @Override public void CuelgaDelArbol(){ System.out.print("\n Estoy comiendo PLATANOS"); } }
Toda clase que implementa una interfaz est obligada a implementar todos los mtodos declarados en la interfaz Solamente las clases abstractas que implementan una interfaz no estn obligadas a implementar todos los mtodos de la interfaz a implementar
7
public interface IGorila { public int esElAlpha = 0; public void ComePlatano(); public void Gorilea(); public void CuelgaDelArbol(); }
Las variables declaradas en una interfaz son variables terminales (su valor no podr ser modificado) en realidad actuarn como constantes final
public class TPez { private boolean escamas; private int nroDeAletas; public void ComeMoluscos(){ System.out.print("\n Estoy comiendo moluscos"); } public void Aletea(){ System.out.print("\n Estoy aleteando"); } public void NadaEnAgua(){ System.out.print("\n Estoy nadando en agua"); } }
TPez
IGorila +EsElAlfa:Boolean +ComePlatano() +Gorilea() +CuelgaDelArbol()
Una Clase hereda(extends) de una clase, pero implementa (implements) la interfaz declarada
public class TPezGorila extends TPez implements IGorila { @Override public void ComePlatano(){ System.out.print("Como Platano"); } @Override public void Gorilea(){ System.out.print("Gorileo"); } @Override public void CuelgaDelArbol(){ System.out.print("Cuelgo de arbol"); } }
9
Una Clase hereda(extends) de una clase, pero implementa (implements) una o ms interfaces declaradas
public class TPezGorilaVolador extends TPez implements IGorila,IVolador { @Override public void ComePlatano(){ System.out.print("Como Platano"); } @Override public void Gorilea(){ System.out.print("Gorileo"); } @Override public void CuelgaDelArbol(){ System.out.print("Cuelgo de arbol"); } @Override public void SurcaElCielo(){ System.out.print("Surco el cielo"); } @Override public void FlameaAlas(){ System.out.print("Flameo Alas"); } 10 }
Hay de dos tipos de programas: Programas de flujo secuenciales Programas de flujo dirigido por eventos
Flujo secuencial: La ejecucin de las rutinas del programa se ajustan a un orden secuencial ordenado y esperado
Tipos de Programas
12
SI X=A Y=B
IF A>B
NO X=B Y=A
R = X mod Y
Leer: B
Leer: B, H
MCD = Y
Leer: H
A = (B x H) / 2
A=B*H
Imprimir: A
X=Y Y=R
Print:
FIN
R = X mod Y MCD = Y
FIN
return (MCD) FIN
Tipos de Programas
13
14
Externos: Producidos por el usuario. Ejemplo, presin del teclado, movimiento del mouse. Internos: Producidos por el sistema o la aplicacin. Ejemplo, activacin de una rutina por un temporizador activado, etc.
Tipos de eventos
16
Para la activacin de este tipo de eventos, se requiere la participacin de los elementos de bajo nivel del Sistema Operativo (la API del Sistema Operativo). Por ejemplo los elementos de Interfaz Grfica (GUI), estn sincronizados desde la API del Sist. Operativo, con las Interfaces (teclado, mouse, cmara) fsicas de interaccin con el usuario. NOTA: En el caso del S.O. Windows, cuando se crea un elemento grfica de interaccin con el usuario (botn, textbox, scroll), se recurre a la API de Windows, para accesar a rutinas de creacin y registro de estos elementos. A partir de all, estos elementos funcionan de manera sincronizada con la API, la cual activa los mtodos (capturadores de eventos) definidos en ella, en funcin a los eventos que el usuario genere en su interaccin (presin del teclado, movimiento del mouse, click del botn del mouse, etc.)
API de Windows
Boton1=CrearBotn() Rutinas de creacin de controles CreaControlSincronizado() Rutinas sincronizadas ejecutadas en la API Verifica el teclado() Verifica el mouse() Verifica la Cmara() Verifica la impresora()
Form1=CrearFormulario() Scroll1=CrearScroll()
Textbox1=CrearTextBox()
Send OnClick(x,y)
Los Controles Visuales deben poseer mtodos de captura de eventos estndares para poder recibir a travs de ellos los mensajes detectados en la API de Windows
EnviarMensajeAControles()
Boton1 Form1 Scroll1 TextBox1 Etc.
El modelo de eventos, en java utiliza como intermediario el uso de interfaces. Las interfaces deben definir los mtodos que se utilizarn como receptores de eventos.
Estos eventos suelen ser multihilos. Varios mdulos pueden ejecutarse de manera paralela a velocidades diferentes. El usuario decide cuntos mdulos se ejecutan.
El modelo de eventos, en java utiliza como elemento intermediario el uso de las interfaces. Las interfaces deben definir los mtodos que se utilizarn como receptores de eventos.
ICliente
Metodo_oidor() { }
TServidor
El Servidor, cuando desea enviar un mensaje al Cliente, toma el mtodo oidor existente en el cliente, y lo activa (ejecuta), pasndole los parmetros que correspondan En el lado del Cliente, se interpreta que el metodo oidor fue activado por algn evento ocurrido en el servidor. En el lado del Cliente, este mtodo oidor debe ser personalizado
IOyente +metodo_oidor()
TClaseCliente +metodo_oidor()
public class TClaseCliente{ //** Propiedades y otros @Override public void metodo_oidor(){ JPa } //**** Otros metodos ***** }
public class TClaseServidor{ private IOyente cliente public void addOyente(IOyente cliente){ this.cliente = Cliente; } private void enviar_mensaje(){ cliente.metodo_oidor(); } }
24
MouseListener: Tiene mtodos de captura de eventos del mouse. ActionListener: Tiene mtodos de captura de eventos de los botones
ICliente MouseListener
public interface MouseListener { public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e); public void mouseClicked(MouseEvent e); }
TServidor
ICliente MouseListener
public interface MouseListener { public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); public void mouseEntered(MouseEvent e); public void mouseExited(MouseEvent e); public void mouseClicked(MouseEvent e); }
TServidor
ActionListener
Public interface ActionListener { public void actionPerformed(ActionEvent e); }
27
public class TMouseDemo ... implements MouseListener { ...//where initialization occurs: //Register for mouse events on blankArea and applet (panel). blankArea.addMouseListener(this); addMouseListener(this); public void mousePressed(MouseEvent e) { saySomething("Mouse button press", e); } public void mouseReleased(MouseEvent e) { saySomething("Mouse button release", e); } public void mouseEntered(MouseEvent e) { saySomething("Cursor enter", e); } public void mouseExited(MouseEvent e) { saySomething("Cursor exit", e); } public void mouseClicked(MouseEvent e) { saySomething("Mouse button click", e); } void saySomething(String eventDescription, MouseEvent e) { textArea.append(eventDescription + " detected on " + e.getComponent().getClass().getName() + ".\n"); textArea.setCaretPosition(maxInt); //scroll to bottom } }
Son clases que implementan los mtodos contenidos en interfaces de captura de eventos.
Justificacin: Cuando se desea escuchar algn tipo de evento se deben implementar todos los mtodos de la Interfase de escucha (listener interfase), para que nuestra clase no tenga que ser definida como abstracta. De esta forma, nuestra clase oyente solamente requerira ser heredera de una clase adaptador.
Adaptador: Definicin
30
Son clases que implementan un listener, pero no realizan ningn tipo de operacin. Por ejemplo, el adaptador de la clase escucha MouseListener es MouseAdapter y la implementacin de este adaptador es la siguiente: public abstract class MouseAdapter implements MouseListener { public void mouseClicked (MouseEvent e){} public void mousePressed (MouseEvent e){} public void mouseReleased (MouseEvent e){} public void mouseEntered (MouseEvent e){} public void mouseExited (MouseEvent e){} }
El MouseAdapter es utilizado para implementar una TClaseOidorMouse1 clase que escuche los eventos del Los dems Adapter pueden mouse
MouseAdapter
TClaseOidorMouse2
Adapter
de
la
misma
31
32
java.awt.event.MouseAdapter; java.awt.event.MouseEvent; javax.swing.JFrame; javax.swing.JPanel; class MainClass extends JPanel { public MainClass() { addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent me) { System.out.println(me); } } ); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new MainClass()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 200); frame.setVisible(true);
} }
JLabel label = new JLabel("Hello"); label.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { System.out.println("Clicked!"); } } );
33
JDialogSample
IOyente +metodo_oidor()
ICliente
Tarea 1: Implementar un componente Scroll, y hacer interactuar con los controles visuales
35
JDialogSample
public class JDialogSample extends javax.swing.Jdialog implements IOyente { @Override public void metodo_oidor(String mensaje) { JOptionPane.showMessageDialog(this, mensaje); } // .. private void CargaJPanel(){ JPanelScroll panel = new JPanelScroll(); panel.setSize(300, 200); panel.setCliente(this); JDialogSample this.add(panel); } public JDialogSample(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); CargaJPanel(); } public class JPanelScroll extends javax.swing.JPanel { } private IOyente cliente;
IOyente
JPanelScroll
Ejercicio de implementacin
public void setCliente(IOyente cliente) { this.cliente = cliente; } private void envia_mensaje(String mensaje){ cliente.metodo_oidor(mensaje); } // Otros metodos private void JBtnPrimeroActionPerformed(java.awt.event.ActionEvent evt) { envia_mensaje("Primero"); } private void JBtnUltimoActionPerformed(java.awt.event.ActionEvent evt) { envia_mensaje("Ultimo"); }
36
JDialogSampleMouse
+mouseClicked(MouseEvent arg0) +mouseExited(MouseEvent arg0) +mouseEntered(MouseEvent arg0) +mousePressed(MouseEvent arg0) +mouseReleased(MouseEvent arg0)
Servidor
public JDialogSampleMouse(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); this.addMouseListener(this); } @Override public void mouseClicked(MouseEvent e) { JOptionPane.showMessageDialog(this, "Evento mouseClicked"); } @Override public void mousePressed(MouseEvent e) { JOptionPane.showMessageDialog(this, "Evento mousePressed"); } @Override public void mouseReleased(MouseEvent e) { JOptionPane.showMessageDialog(this, "Evento mouseReleased"); } @Override public void mouseEntered(MouseEvent e) { // JOptionPane.showMessageDialog(this, "Evento mouseEntered"); } @Override public void mouseExited(MouseEvent e) { JOptionPane.showMessageDialog(this, "Evento mouseExited"); } }
Con este mtodo le informamos al servidor que la Clase JDialogSampleMouse es la Clase Cliente que implementa los mtodos oidores de la interfaz MouseListener
38
FIN
39