• No se han encontrado resultados

Introducción a la Programación Orientada a Objetos

N/A
N/A
Protected

Academic year: 2021

Share "Introducción a la Programación Orientada a Objetos"

Copied!
5
0
0

Texto completo

(1)

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

INTRODUCCIÓN A LA

PROGRAMACIÓN ORIENTADA

A OBJETOS

GUI

Ecapsulamiento, clases asociadas

Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur, Bahía Blanca 2015 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CLASES ASOCIADAS Y

ENCAPSULAMIENTO

• En el diseño de una aplicación, la solución se modula de modo tal que cada clase pueda implementarse sin depender de las demás.

• En el desarrollo de una aplicación en la cual la entrada y salida se realiza a través de una GUI, la clase que implementa la interface gráfica de usuario usa a las clases que modelan el problema, sin conocer detalles de la representación.

• Análogamente, las clases que modelan el problema se diseñan e implementan sin saber si la entrada y salida va a hacerse por consola o mediante una GUI. Introducción a la Programación Orientada a Objetos

IPOO - 2015 2 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

• Implemente una GUI que permita traducir una palabra

de Español a Inglés.

• El usuario ingresa la palabra en la caja de texto y al

oprimir intro la aplicación busca la traducción.

• Si existe la traducción se muestra en un panel de

diálogo.

• En caso contrario se muestra un mensaje, también en

un panel de diálogo.

Introducción a la Programación Orientada a Objetos

IPOO - 2015 3 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

• La clase GUIEspIng es cliente de la clase Diccionario. • La implementación de estos servicios queda encapsulada en

la clase proveedora y es transparente para la clase cliente.

4

Par Diccionario GUIEspIng

pal1, pal2: String T [] Par panelPalabras: JPanel cartelEntrada: JLabel cajaPalabra: JTextField diccionario: Diccionario <<Constructor>> Par(p1, p2: String) <<Consultas>> obtenerPal1(): String obtenerPal2(): String <<Constructor>> Diccionario() <<Comandos>> insertar(p:Par) <<Consultas>>

traducirEngSpa(pan: String): String traducirEspIng(pal: String): String

<<Constructor>> GUIEspIng(tit: String, dic: Diccionario) 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

5 class GUIEspIng extends JFrame {

//Atributos gráficos

private JPanel panelPalabras; private JLabel cartelEntrada; private JTextField cajaPalabra; //Atributos de la aplicación private Diccionario diccionario;

• La clase que implementa la GUI encapsula un atributo de instancia que es instancia de la clase asociada Diccionario.

Introducción a la Programación Orientada a Objetos IPOO - 2015

public GUIEspIng (String tit, Diccionario dicc) {

//Establece la apariencia del frame super(tit);

setSize(400, 200);

setDefaultCloseOperation(EXIT_ON_CLOSE); diccionario = dicc;

//Crea los objetos gráficos e invoca al método interno

panelPalabras = new JPanel(); cartelEntrada = new JLabel();

cajaPalabra = new JTextField ("",15); armaGUI();

}

• La GUI recibe como parámetro un objeto de clase Diccionario y asigna la referencia al atributo de instancia, que puede ser accedido desde cualquier servicio.

(2)

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

7 private void armaGUI(){

armarPaneles();

//Establece los atributos de las etiquetas cartelEntrada.setText("Ingrese una palabra"); cartelEntrada.setSize(120,15); cartelEntrada.setPreferredSize(new java.awt.Dimension(120,15)); cartelEntrada.setBorder(new LineBorder(new Color(0,0,0), 1, false));

Introducción a la Programación Orientada a Objetos IPOO - 2015 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

8 /*Establece los atributos de la caja, crea y registra al oyente*/ cajaPalabra.setSize(120,15); cajaPalabra.setPreferredSize(new java.awt.Dimension(120,15)); cajaPalabra.setBorder(new LineBorder(new Color(100,100,100), 1, false)); OyentePalabra oyente = new OyentePalabra(); cajaPalabra.addActionListener(oyente);

Introducción a la Programación Orientada a Objetos IPOO - 2015 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

9

//Inserta los objetos gráficos en los paneles

panelPalabras.add(cartelEntrada,BorderLayout.NORTH); panelPalabras.add(cajaPalabra,BorderLayout.CENTER); getContentPane().setLayout(new BorderLayout()); getContentPane().add(panelPalabras,BorderLayout.NORTH);

Introducción a la Programación Orientada a Objetos IPOO - 2015 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

10 private void armarPaneles(){

//Establece los atributos de los paneles panelPalabras.setLayout(new BorderLayout()); panelPalabras.setSize(400,90); panelPalabras.setPreferredSize (new java.awt.Dimension(400,90)); }

Introducción a la Programación Orientada a Objetos IPOO - 2015 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR ESPAÑOL A

INGLÉS

private class OyentePalabra implements ActionListener{ public void actionPerformed(ActionEvent event){ String palabra = cajaPalabra.getText(); JOptionPane dialogo = new JOptionPane();

String traducida = diccionario.traducirEspIng(palabra); if (traducida == null)

dialogo.showMessageDialog(null,

"La palabra no figura en el diccionario","", dialogo.INFORMATION_MESSAGE );

else{

cajaPalabra.setText(""); dialogo.showMessageDialog(null,

"La traduccion de "+palabra+ " es "+ traducida,"", dialogo.INFORMATION_MESSAGE ); } } 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

• Implemente una clase GUI_Traductor que permita

mostrar la traducción de una palabra ingresada en inglés a español o una palabra ingresada en español a inglés.

• La clase GUI_Traductor está asociada a Diccionario. • La clase Diccionario encapsula a una colección de pares

de palabras, la primera palabra del par está en inglés y la segunda es su traducción al español.

• Claramente un objeto de clase Diccionario puede

utilizarse para traducir de inglés a español o de español a inglés.

Introducción a la Programación Orientada a Objetos

(3)

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

• La clase GUI_Traductor es cliente de la clase Diccionario. • La implementación de estos servicios queda encapsulada en la

clase proveedora y es transparente para la clase cliente. 13

Par Diccionario GUI_Traductor

pal1, pal2: String T [] Par panelPalabras, panelControl:JPanel botonES,botonEI:JButton cartelEntrada :JLabel cajaPalabra: JTextField diccionario : Diccionario palabra:String <<Constructor>> Par(p1, p2: String) <<Consultas>> obtenerPal1(): String obtenerPal2(): String <<Constructor>> Diccionario() <<Comandos>> insertar(p:Par) <<Consultas>>

traducirEngSpa(pan: String): String traducirEspIng(pal: String): String

<<Constructor>> GUIEspIng(tit: String, dic: Diccionario) 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

• El usuario completa la caja de texto y al oprimir Intro se

habilitan los dos botones.

• Cada botón está asociado a un oyente que envía un mensaje

al diccionario para buscar la palabra.

• Si existe la traducción se muestra en un panel de diálogo. • En caso contrario se muestra un mensaje, también en un

panel de diálogo.

Introducción a la Programación Orientada a Objetos

IPOO - 2015 14 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

15 //Atributos gráficos

private JPanel panelPalabras, panelControl; private JButton botonES, botonEI;

private JLabel cartelEntrada; private JTextField cajaPalabra; //Atributos de la aplicación

private Diccionario diccionario; private String palabra;

public GUITraductor (Diccionario dicc) { diccionario = dicc; } 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

16 //Deshabilita los botones

estadoBotones(false);

/*Crea los oyentes y los registra a los objetos fuente de evento*/

OyentePalabra oyente = new OyentePalabra(); cajaPalabra.addActionListener(oyente);

OyenteBotonES oyenteES = new OyenteBotonES(); botonES.addActionListener(oyenteES);

OyenteBotonEI oyenteEI = new OyenteBotonEI(); botonEI.addActionListener(oyenteEI); 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

17 private void estadoBotones(boolean estado){ //Habilita o deshabilita botones

botonEI.setEnabled(estado); botonES.setEnabled(estado); }

private class OyentePalabra implements ActionListener {

public void actionPerformed(ActionEvent event){ palabra = (cajaPalabra.getText()); estadoBotones(true); } } 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

18

private class OyenteBotonES implements ActionListener { public void actionPerformed(ActionEvent e){ JOptionPane dialogo = new JOptionPane(); String tra = diccionario.traducirEngSpa(palabra); if (tra == null)

dialogo.showMessageDialog(null,

"La palabra no figura en el diccionario","", dialogo.INFORMATION_MESSAGE );

else{

cajaPalabra.setText(""); estadoBotones(false);

dialogo.showMessageDialog(null,

"La traduccion de " + palabra + " es " + tra, "", dialogo.INFORMATION_MESSAGE );

} } }

(4)

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

19

private class OyenteBotonEI implements ActionListener { public void actionPerformed(ActionEvent e){ JOptionPane dialogo = new JOptionPane(); String tra = diccionario.traducirIngEsp(palabra); if (tra == null)

dialogo.showMessageDialog(null,

"La palabra no figura en el diccionario","", dialogo.INFORMATION_MESSAGE );

else{

cajaPalabra.setText(""); estadoBotones(false);

dialogo.showMessageDialog(null,

"La traduccion de " + palabra + " es " + tra, "", dialogo.INFORMATION_MESSAGE ); } } } 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

• El objeto ligado a la variable palabra se inicializa en el oyente de la caja y se usa para buscar la traducción. • La implementación de cada clase oyente requiere

acceder a un diccionario.

• El diccionario es una estructura de datos que mantiene pares de palabras, la primera palabra del par está en inglés y la segunda en español.

• La estructura está encapsulada en una clase Diccionario que brinda dos servicios de búsqueda, buscar en la primera palabra de cada par o en la segunda.

Introducción a la Programación Orientada a Objetos

IPOO - 2015 20 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

• Cuando el usuario realiza una acción sobre botonES se envía el mensaje traducirEngSpa(palabra) al diccionario.

• Análogamente cuando el usuario realiza una acción en botonEI se envía el mensaje

traducirEngSpa(palabra) al diccionario. • Otra característica que aparece en esta GUI es que los

botones se habilitan y deshabilitan.

Introducción a la Programación Orientada a Objetos

IPOO - 2015 21 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

CASO DE ESTUDIO:

TRADUCTOR

• La clase GUITraductor usa a la clase Diccionario como una caja negra, conoce únicamente la interface y el contrato.

• Los datos pueden estar modelados por un arreglo o un objeto de clase Vector, las búsquedas pueden implicar un recorrido secuencial o la estructura puede estar ordenada y se aplica entonces búsqueda binaria. • Todas esas cuestiones quedan escondidas para la

interfaz.

• De manera análoga, es posible cambiar el diseño y la implementación de la GUI, sin afectar a la clase Diccionario.

Introducción a la Programación Orientada a Objetos

IPOO - 2015 22 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

OBJETOS Y EVENTOS

• Algunas componentes de una GUI son reactivas, pueden percibir las acciones del usuario y reaccionar en respuesta a ellas.

• Cuando un usuario realiza una acción sobre una componente reactiva se genera un evento.

• Un evento es una señal de que algo ha ocurrido. • En esta materia consideraremos únicamente eventos

generados por acciones del usuario al interactuar con la GUI.

Introducción a la Programación Orientada a Objetos

IPOO - 2015 23 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1

OBJETOS Y EVENTOS

• Los objetos fuente del evento, están asociados a una componente de la interfaz, tienen una representación gráfica y son capaces de percibir y reaccionar ante un evento externo provocado por una acción del usuario y disparar eventos de software.

• Los objetos evento son disparados implícitamente por un objeto fuente del evento.

• Los objetos oyentes (listeners) se ejecutan para manejar un evento. La clase a la que pertenece un objeto oyente brinda métodos para manejar eventos, es decir, especifica el curso de acción a seguir en respuesta a diferentes tipos de eventos. Introducción a la Programación Orientada a Objetos

(5)

Componente reactiva

Evento El objeto fuente de evento

percibe el evento e externo

y

dispara uno o más

eventos internos.

El objeto oyente registrado al objeto fuente de evento, recibe un mensaje con el

objeto evento como parámetro. El usuario realiza una acción

que provoca un evento externo sobre una componente reactiva ligada a un objeto fuente de

evento.

Cada evento interno está asociado a un objeto evento

creado implícitamente.

Componente reactiva

Evento El objeto fuente de evento botonEI crea un objeto evento

de clase ActionEvent

El objeto oyente oyenteEI registrado al objeto fuente de evento botonEI, recibe un mensaje actionPerformed con el objeto evento e como

parámetro. El usuario hace clik sobre la

componente reactiva asociado al objeto fuente de

Referencias

Documento similar

que hasta que llegue el tiempo en que su regia planta ; | pise el hispano suelo... que hasta que el

Para ello, trabajaremos con una colección de cartas redactadas desde allí, impresa en Évora en 1598 y otros documentos jesuitas: el Sumario de las cosas de Japón (1583),

Five-step methodology DEA-based * allows us the decompose the differences in the research output of universities in terms of Intra-field inefficiency (inefficiencies of the

– Seeks to assess the contribution of the different types of capital assets: tangible ICT, tangible non-ICT, intangibles (public and private) and public capital (infrastructures). ·

d) que haya «identidad de órgano» (con identidad de Sala y Sección); e) que haya alteridad, es decir, que las sentencias aportadas sean de persona distinta a la recurrente, e) que

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de

En este trabajo estudiamos la obra poética en español del escritor y profesor argelino Salah Négaoui, a través de la recuperación textual y análisis de Poemas la voz, texto pu-

En la parte central de la línea, entre los planes de gobierno o dirección política, en el extremo izquierdo, y los planes reguladores del uso del suelo (urbanísticos y