TÓPICOS AVANZADOS DE PROGRAMACIÓN ANTONIO CASTAÑEDA OSORNIO OBJETIVO GENERAL Desarrollar soluciones de software ut
Views 89 Downloads 0 File size 369KB
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