Topicos AP Unidad 1

TÓPICOS AVANZADOS DE PROGRAMACIÓN ANTONIO CASTAÑEDA OSORNIO OBJETIVO GENERAL  Desarrollar soluciones de software ut

Views 89 Downloads 0 File size 369KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

TÓPICOS AVANZADOS DE PROGRAMACIÓN ANTONIO CASTAÑEDA OSORNIO

OBJETIVO GENERAL

 Desarrollar

soluciones de software utilizando programación concurrente, programación de eventos, que soporte interfaz gráfica e incluya dispositivos móviles.

APORTACIÓN AL PERFIL DEL EGRESADO  Esta materia aporta al perfil la competencia para desarrollar soluciones

de software utilizando programación concurrente, programación de eventos, que soporte interfaz gráfica y comunicación con dispositivos móviles.  Se inicia estudiando la programación concurrente desde la conceptualización del hilo, su creación, control y destrucción, así como la sincronización de varios hilos. Finalmente la materia se complementa con la introducción a la programación móvil, a través de la revisión de las distintas tecnologías, selección de una de ellas y desarrollo de una aplicación básica.

COMPETENCIAS PREVIAS

 Diseñar e implementar objetos de programación que permitan

resolver situaciones reales y de ingeniería.

PLAN DE LA MATERIA  5 unidades  Examen por unidad (Prácticos)  Trabajos (Plataforma y correo)  Proyecto final de materia.  Porcentaje por unidad.  Prácticas  NOTA: Para poder acceder a la calificación del examen se debe entregar todas

las actividades.

CONTENIDO DEL CURSO

 Unidad 1: Eventos  Unidad 2: Interfaz Gráfica de Usuario  Unidad 3: Componentes y librerías  Unidad 4: Programación concurrente  Unidad 5: Programación de dispositivos móviles

RECOMENDACIÓN  Se sugiere que el alumno cumpla con las actividades propuestas para

alcanzar una calificación aprobatoria en cada una de las unidades temáticas.  Es indispensable para aprobar una unidad la aprobación del examen propuesto.  Las actividades propuestas en la plataforma deberán ser entregadas en tiempo y forma de lo contrario serán penalizadas con un porcentaje dependiendo del tiempo.  En caso de no aprobar alguna unidad, la opción de segunda oportunidad es al final.

CONTENIDO DE LOS TRABAJOS  Portada  Índice  Contenido  Conclusiones (Escritas por el alumno)  Bibliografía (Fuentes confiables)  Ortografía correcta.

 Cada elemento incluye un porcentaje dentro del trabajo a presentar.

CONTENIDO DE LOS PROGRAMAS  Portada  Introducción  Descripción del programa  Pantallas del programa  Explicación del funcionamiento del programa.  Glosario de elementos incluidos en el código. (Solo elementos

nuevos)

PROYECTO FINAL

 Elegir un caso de estudio en al ambiente en el que se desarrolla el estudiante.  Realizar una investigación sobre los diferentes procesos que se realizan y que

impliquen el empleo de una aplicación o programa con interfaz de usuario.  Recopilar la información necesaria para el desarrollo del proyecto.  Elaborar un documento donde se incluya el contenido del proyecto.  Elaborar la aplicación resultante del proceso de desarrollo del proyecto.

FUENTES DE INFORMACIÓN  Sharp, John, Visual C# 2008, 1 Edición, Anaya Multimedia, España, 2008  Herbert Schildt, Java Manual De Referencia 7a. Ed., 7ª Edición, Mcgraw Hill,

México, 2008  Luis Joyanes Aguilar, Programación En C/C++Java Y Uml, 1, Mcgraw Hill, México, 2010  John Dean, Introducción A La Programación Con Java, 1, Mcgraw Hill, México,

2009  Deitel Y Deitel, Java Cómo Programar, 7ª Edición, Prentice Hall, México, 2008  Deitel Y Deitel, C / C++ Y Java Cómo Programar, 4ta Edición, Prentice Hall, México, 2004  Andrea, Edgar D, Java 2: Curso De Iniciación, 1era Edición, Inforbook's Ediciones, España, 2006  http://www.programacion.com/java/tutorial/ags_j2me/  http://leo.ugr.es/J2ME/TOOLS/index.html

EVENTOS UNIDAD 1

ACTIVIDADES DE LA UNIDAD.  Elaborar un cuadro sinóptico de los tipos de eventos. (15%)  Elaborar un resumen sobre generación y propagación de eventos.

(10%)  Elaborar un cuadro conceptual sobre principales clases de eventos en awt.event (15%)  Elaborar un resumen sobre las interfaces de auditores que más se utilizan y el uso de cada una de ellas. (15%)  Elaborar ejercicios con applets. (15%)  Evaluación de la unidad (30%)

EVENTOS

 Un evento es la notificación que hace un elemento gráfico cuando

el usuario interactúa con él. Por lo tanto, si se realiza alguna acción sobre algún elemento de la interfaz, se dice que se ha generado un evento en dicho elemento.

EVENTOS  Los eventos son el medio como interactúa una clase con otras o con

el propio usuario, se encargan de avisar que algo ha ocurrido y de manejarlo de una forma o de otra. Cada vez que escribimos con nuestro teclado, que hacemos click en un botón o un link, que cambiamos el tamaño de un objeto, estamos generando eventos.  El modo de manejar los eventos en P.O.O. se conoce como emisor/receptor, también llamado despachador/escuchador o simplemente dispatcher/listener.

EVENTOS  La clase padre de los eventos es java.awt.event.  Cada lenguaje de programación tiene su propio modelo de eventos,

en Java se definen clases auxiliares llamadas escuchadores (listeners) que reciben eventos específicos.  Los escuchadores se registran en las fuentes de eventos (teclado, ratón, etc). Estas envían objetos del tipo EventObjet la los escuchadores registrados al producirse un evento. Cada escuchador utiliza la información recibida a través del objeto para realizar las acciones adecuadas.

EVENTOS  Dentro de "java.awt.event", los eventos están categorizados dentro de una

jerarquía de clases.  La

clase java.util.EventObject es la clase base de todos los eventos en Java.  La subclase java.awt.AWTEvent es la clase base de todos los eventos que se utilizan en la construcción de GUIs.  Cada tipo de evento "xxEvent" tiene asociada una interfaz "xxListener" que es la que nos permite definir escuchadores de eventos.  Para simplificar la implementación de algunos escuchadores de eventos, el paquete "java.awt.event" incluye clases base xxAdapter que implementan las interfaces xxListener.

TIPOS DE EVENTOS  Eventos de bajo nivel.  Eventos semánticos.  Eventos ventana  Eventos de teclado  Eventos de ratón  Eventos de barras  Eventos de lista

EVENTOS DE BAJO NIVEL  Representan entradas o interacciones de bajo nivel con elementos

del interfaz gráfico (Cambio de tamaño, cambio del foco, operación con el ratón o con el teclado).

EVENTOS SEMÁNTICOS  Eventos de alto nivel que encapsulan la semántica del modelo de componentes del

interfaz de usuario (Hacer una acción, un cambio de estado en un elemento, etc.).  No están relacionados con una clase específica de componente sino que pueden aplicarse a todos los componentes que implementen un modelo semántico similar.

EVENTOS DE VENTANA

 Son los que se generan en respuesta a los cambios de una ventana,

un frame o un dialogo.     WINDOW_DESTROY      WINDOW_EXPOSE      WINDOW_ICONIFY      WINDOW_DEICONIFY      WINDOW_MOVED

EVENTOS DEL TECLADO

 Son generados en respuesta a cuando el usuario pulsa y suelta una

tecla mientras un Componente tiene el foco de entrada.      KEY_PRESS      KEY_RELEASE      KEY_ACTION      KEY_ACTION_RELEASE

EVENTOS DEL RATÓN  Son los eventos generados por acciones sobre el ratón dentro de los

límites de un Componente.     MOUSE_DOWN      MOUSE_UP      MOUSE_MOVE      MOUSE_ENTER      MOUSE_EXIT      MOUSE_DRAG

EVENTOS DE BARRA  Son los eventos generados como respuesta a la manipulación de

barras de desplazamiento (scrollbars).      SCROLL_LINE_UP      SCROLL_LINE_DOWN      SCROLL_PAGE_UP      SCROLL_PAGE_DOWN      SCROLL_ABSOLUTE

EVENTOS DE LISTA

 Son los eventos generados al seleccionar elementos de una lista.      LIST_SELECT      LIST_DESELECT

EVENTOS VARIOS

 Son los eventos generados en función de diversas acciones.     ACTION_EVENT      LOAD_FILE      SAVE_FILE      GOT_FOCUS      LOST_FOCUS

LIBRERÍA EN JAVA PARA EVENTOS (AWT)  AWT es el acrónimo del X Window Toolkit para Java, donde X puede ser cualquier

cosa: Abstract, Alternative, Awkward, Another; aunque parece que Sun se decanta por Abstracto, seriedad por encima de todo.  Se trata de una biblioteca de clases Java para el desarrollo de Interfaces de

Usuario Gráficas. La versión del AWT que Sun proporciona con el JDK se desarrolló en sólo dos meses y es la parte más débil de todo lo que representa Java como lenguaje.  Javasoft, en vista de la precariedad de que hace gala el AWT, y para asegurarse que los elementos que desarrolla para generar interfaces gráficas sean fácilmente transportables entre plataformas, ha creado un conjunto de clases que proporcionen una sensación visual agradable y sean más fáciles de utilizar por el programador.  Esta colección de clases son las Java Foundation Classes (JFC), que están

constituidas por cinco grupos de clases, al menos en este momento: AWT, Java 2D, Accesibilidad, Arrastrar y Soltar y Swing.

LIBRERÍA EN JAVA PARA EVENTOS (AWT)  Java 2D es un conjunto de clases gráficas bajo licencia de IBM/Taligent, que

todavía está en construcción  Accesibilidad, proporciona clases para facilitar el uso de ordenadores y tecnología informática a disminuidos, como lupas de pantalla, y cosas así  Arrastrar y Soltar (Drag and Drop), son clases en las que se soporta Glasgow,

que es la nueva generación de los JavaBeans  Swing, es la parte más importante y la que más desarrollada se encuentra. Swing simplemente extiende el AWT añadiendo un conjunto de componentes, JComponents, y sus clases de soporte. Hay un conjunto de componentes de Swing que son análogos a los de AWT, y algunos de ellos participan de la arquitectura MVC (Modelo-Vista-Controlador), aunque Swing también proporciona otros widgets nuevos como árboles, pestañas, etc.

ESTRUCTURA DEL AWT  La estructura de la versión actual del AWT se puede resumir en lo

siguiente:  Los Contenedores contienen Componentes, que son los controles básicos  No se usan posiciones fijas de los Componentes, sino que están situados a

través de una disposición controlada (layouts)  Alto nivel de abstracción respecto al entorno de ventanas en que se ejecute la aplicación  La arquitectura de la aplicación es dependiente del entorno de ventanas, en vez de tener un tamaño fijo  Es bastante dependiente de la máquina en que se ejecuta la aplicación

GENERACIÓN Y PROPAGACIÓN DE EVENTOS  El paquete java.awt.event es el que contiene la mayor parte de las

clases e interfaces de eventos. El modelo de delegación de eventos es un concepto que trabaja de la siguiente manera:  Una fuente genera un evento y lo envía a uno a más oyentes o auditores, que han estado simplemente esperando hasta que reciben ese evento y una vez recibido lo procesan y lo devuelven.  Una fuente es un objeto que genera un evento. Esto ocurre cuando cambia de alguna manera el estado interno de ese objeto. Las fuentes pueden generar más de un tipo de eventos

AUDITORES DE EVENTOS.

 Un auditor es un objeto que es avisado cuando ocurre un evento.  Tiene dos requisitos principales.  Primero tiene que ser registrado o ir acompañado por una o más fuentes

para recibir notificaciones sobre los tipos específicos de eventos.  Segundo, tiene que implementar métodos para recibir y procesar notificaciones.

INTERFACES DE AUDITOR QUE MÁS SE UTILIZAN   ActionListener  se invoca cuando ocurre un evento de acción.

  AdjustmentListener  se invoca cuando ocurre un evento de ajuste.

  ComponentListener  Se invocan cuando a un componente se le cambia de tamaño, se mueve, se muestra o se oculta.

 ContainerListener     Se invocan cuando se añade un componente a un contenedor y cuando se borra un componente de

un contenedor.

  FocusListener  Se invocan cuando se gana el foco o se pierde el foco

 ItemListener  Se invoca cuando cambia el estado de un elemento

INTERFACES DE AUDITOR QUE MÁS SE UTILIZAN   KeyListener  Se invocan cuando se presiona, libera una tecla y cuando se introduce un carácter.

  MouseListener  Se invocan cuando se presiona, cuando entra a un componente, cuando sale, cuando se

presiona y se libera el ratón.

 MouseMotionListener  Se invocan cuando se arrastra y se mueve el ratón.

  TextListener  Se invoca cuando ha ocurrido un cambio en un área de texto o en un campo de texto.

  WindowListener  Se invocan cuando se activa, se desactiva, se cierra una ventana, se esta cerrando una

ventana, se minimiza a un icono, cuando se abre a partir de un icono y cuando se abre una ventana.

FUENTES DE EVENTOS  Todas las fuentes de eventos del AWT soportan el multienvío a receptores. Esto

significa que se pueden añadir o quitar múltiples receptores de una sola fuente; en otras palabras, la notificación de que se ha producido un mismo evento se puede enviar a uno o más objetos receptores simultáneamente.  El API de Java no garantiza el orden en que se enviarán los eventos a los

receptores que están registrados en un objeto fuente, para ser informados de esos eventos. En caso de que el orden en que se distribuyen los eventos sea un factor importante en el programa, se deberían encadenar los receptores de un solo objeto receptor registrado sobre el objeto fuente; el hecho de que los datos del evento estén encapsulados en un solo objeto hace que la propagación del evento sea extremadamente simple.

FUENTES DE EVENTOS  Como en el caso de los receptores, se puede hacer una distinción entre los eventos de bajo nivel y

los eventos de tipo semántico. Las fuentes de eventos de bajo nivel serán las clases de elementos o componentes visuales del interfaz gráfico (botones, barras de desplazamiento, cajas de etc.), porque cada componente de la pantalla generará sus eventos específicos. El JDK  selección, java.awt.Component 1.2 registrar receptores sobre fuentes de eventos de los siguientes tipos:  permite addComponentListener 

addFocusListener



addKeyListener



addMouseListener



addMouseMotionListener

 java.awt.Container 

addContainerListen

 java.awt.Dialog  

addWindowListener java.awt.Frame

ADAPTADORES DE EVENTOS  El AWT proporciona un conjunto de clases abstractas adaptadores (Adapter) que

coinciden con las interfaces. Cada clase adaptador implementa un interfaz y redefine todos los métodos declarados por el interfaz con métodos vacíos, con lo cual se satisface ya el requerimiento de la redefinición de todos los métodos.  Se pueden definir clases Receptor extendiendo clases adaptadores, en vez de implementar el interfaz receptor correspondiente. Esto proporciona libertad al programador para redefinir solamente aquellos métodos del interfaz que intervienen en la aplicación que desarrolla.  De nuevo, hay que recordar que todos los métodos declarados en un interfaz

corresponden a los tipos de eventos individuales de la clase de eventos correspondiente, y que el objeto Fuente notifica al Receptor la ocurrencia de un evento de un tipo determinado invocando al método redefinido del interfaz.

ADAPTADORES DE EVENTOS

 Las clases Adaptadores que se definen en el JDK son las siguientes: 

java.awt.ComponentAdapter



java.awt.FocusAdapter



java.awt.KeyAdapter



java.awt.MouseAdapter



java.awt.MouseMotionAdapter



java.awt.WindowAdapter

COMPONENTES QUE PUEDEN GENERAR EVENTOS Button Checkbox Choice List

Genera eventos de acción (ActionEvent) cuando se presiona el botón. Genera eventos de elementos (ItemEvent) cuando se selecciona o deselecciona un checkbox. Genera eventos de elementos cuando se cambia de opción choice. Genera eventos de acción cuando se hace doble click sobre un elemento, genera eventos de elemento cuando se selecciona o deselecciona un elemento.

COMPONENTES QUE PUEDEN GENERAR EVENTOS Menu Item

Scrollbar Text components Window

Generá eventos de acción cuando se selecciona un elemento de menú; genera eventos de lemento cuando se selecciona o se deselecciona un elemento de un menú de opciones. Genera eventos de ajuste (AdjustmentEvent) cuando se manipula el scrollbar. Genera eventos de texto (TextEvent) cuando el usuario introduce un carácter. Genera eventos de ventana (WindowEvent) cuando una ventana se activa, se cierra, se desactiva, se minimiza, se maximiza, se abre o se sale de ella.

EVENTOS PRINCIPALES EN AWT.EVENT ActionEvent AdjustmentEvent ComponentEvent ContainerEvent FocusEvent InputEvent

Se genera cuando se presiona un botón, se hace doble clic en un elemento de una lista, o se selecciona un elemento de tipo menú. Se genera cuando se manipula un scrollbar. Se genera cuando un componente se oculta, se mueve, se cambia de tamaño o se hace visible. Se genera cuando se añade o se elimina un componente de un contenedor. Se genera cuando un componente gana o pierde el foco. Superclase abstracta de cualquier clase de evento de entrada de componente.

EVENTOS PRINCIPALES EN AWT.EVENT ItemEvent

KeyEvent MouseEvent

TextEvent

Se genera cuando se hace click en un checkbox o en un elemento de una lista; tambien ocurre  cuando se hace una selección en una opción choice o cuando se selecciona o deselecciona un elemento de un menú de opciones. Se genera cuando se recibe una entrada desde el teclado. Se genera cuando el ratón se arrastra, se mueve, se hace clic, se presiona, o se libera; también se genera cuando el ratón entra o sale de un componente. Se genera cuando se cambia el valor de un área

APPLETS  Los applets son aplicaciones que se pueden ejecutar sobre Internet,

para construir un applet se debe construir una clase derivada la clase existente Applet.   Los applets deben de incluir dos paquetes que son:   java.awt y java.applet

 Los applets son ejecutados por un navegador de internet o bien por

un visor de applets (appletviewer) y se deben de incluir en una página web

ESTRUCTURA DE UN APPLET Import java.awt.*; Import java.applet.*; Public class esqueleto extends Applet{ Public void init(){ //código de inicialización } Public void start(){ // código que comienza y reanuda la ejecución } Public void stop(){ //código que detiene la ejecución } Public void destroy( ){ //se ejecuta cuando termina el applet ultimo} Public void paint(Graphics g){ //código para dibujar el contenido de la ventana } }

MÉTODOS DE UN APPLET  init es el primer método y es cuando se deberían de inicializar las

variables.  start se llama inmediatamente después del init es llamado para reanudar un applet después de que este se haya detenido o parado. Este se llama cada vez que un documento HTML de un applet se visualiza en la pantalla.  paint se le llama cada vez que la salida del applet tiene que redibujarse y también se llama cuando el applet empieza a ejecutarse o mientras el applet tenga que dibujar una salida.  stop se llama cuando el navegador deja el documento HTML que contiene el applet, cuando se va a otra pagina  destroy se llama cuando determina que ya acabo el applet

EJEMPLO

 Elaborar un applet que muestre un texto de salida “Bienvenido al

curso”.  Generar un ejercicio donde se muestre su nombre, edad y grupo en

líneas diferentes.

 Elaborar un applet que calcule el área de un polígono de n lados

(mayor de 4) y muestre el resultado.

LLAMAR APPLET

   

GRÁFICOS  El AWT tiene una amplia variedad de métodos gráficos. Todos los gráficos

se dibujan en una ventana, que puede ser una ventana principal de un applet, una ventana hija de un applet, o una ventana de una aplicación independiente.  El origen (0,0) de cada ventana está en la esquina superior izquierda. Las coordenadas vienen en pixeles.  Todas las salidas sobre una ventana tienen lugar a través de un contexto gráfico.  Un contexto grafico está encapsulado en la clase Graphics y se obtiene de 2 maneras:  Se pasa a un applet cuando se llama a algunos de sus métodos, como paint( ) o

update( ).  Es devuelto por el método getGraphics( ) de Component

GRÁFICOS  Líneas de dibujo.  Las líneas se dibujan con el método drawLine(int x,int y,int x1,int y1) que

realiza una linea con el color en uso.   Dibujar rectángulos.  Los métodos drawRect( ) y fillRect dibujan un rectángulo sólo con el borde o relleno, respectivamente.  void drawRect(int x,int y,int anchox,int largoy)  void fillRect(int x,int y, int anchox,int largoy)  Para

dibujar un rectángulo redondeado, se usan los métodos drawRoundRect(int x,int y, int anchox,int largoy,int xdiam,int ydiam) o fillRoundRect(int x,int y, int anchox,int largoy,int xdiam,int ydiam).   El diámetro del arco a lo largo del eje x y eje y estan dados por xdiam,ydiam.

GRÁFICOS  Dibujar círculos y elipses.  Para dibujar una elipse se utiliza el método drawOval(int x,int y,int anchox, int largoy) y para una elipse rellena se utiliza el método fillOval(int x,int y,int anchox, int largoy)   Dibujar arcos.  Los arcos se pueden dibujar con drawArc(int x,int y, int anchox,int

altoy,int anguloinicial, int angulofinal) y fillArc(int x,int y, int anchox,int altoy,int anguloinicial, int angulofinal);

GRÁFICOS

 Dibujar polígonos.  También se pueden dibujar figuras con formas arbitrarias utilizando los métodos drawPolygon(int x[ ],int y[ ],int numpuntos) y fillPolygon(int x[ ],int y[ ],int numpuntos).  Los vértices del poligono estan especificados por las parejas de coordenadas que vienen en los arreglos x y y.

GRÁFICOS  Color.  La clase Color define varias constantes por ejemplo Color.black esto para

especificar un conjunto de colores comunes.  También puede crear sus propios colores utilizando uno de los constructores de colores. Las formas que mas se usan son las siguientes:  Color(int red,int green,int blue)  Color(int rgbValue)  Color(flota red,flota green,flota blue)

 Para establecer el color para los gráficos.  Por defecto, los objetos graficos se dibujan en el color actual del frente. Se puede

cambiar este color llamando al método setColor(Color nuevocolor) y se puede obtener el color en curso llamando a Color getColor( )

EJEMPLOS

 Elaborar un applet que dibuje un circulo, un rectángulo, un

cuadrado y un polígono.  Elaborar un applet que pida 2 decimales y calcule la suma y producto de ellos y muestre los resultados.  Elaborar un applet que muestre un tablero de ajedrez.  Generar la siguiente figura:

EJERCICIOS  Elaborar un applet que lea 5 enteros, determine y muestre el mayor

y el menor de la colección de datos.  Escribir un applet que dibuje 3 rectángulos de diferentes tamaños y en diferentes lugares.  Elaborar un applet que dibuje un circulo inscrito en un cuadrado.  Elaborar un applet que pida al usuario el nombre de una figura y después la muestre, pueden ser círculo, cuadrado, rectángulo o polígono de n lados.

EJERCICIO EXTRA

 Elaborar un applet que muestre la siguiente figura.  Para ello investiga la clase Graphics2D y GeneralPath.  Para crear la estrella puede usar lo siguiente:  int puntosX[]={55,67,109,73,83,55,27,37,1,43};  int puntosY[]={0,36,36,54,96,72,96,54,36,36};  estrella.moveTo(puntosX[0],puntosY[0]);

PROYECTO FINAL

 Definir el planteamiento del problema  Realizar investigación sobre el problema a resolver y recopilar

información