TECNOLOGICO DE
ESTUDIOS SUPERIORES
DE VILLA GUERRERO
NOMBRE DE LA MATERIA
TOPICOS AVANZADOS EN
LA PROGRAMACION
NOMBRE DEL MAESTRO:
ING: TOMAS MARTIN
MANCO TORO
NOMBRE DE LOS
INTEGRANTES:
EDGAR RUBEN CASAS
RUIZ
"TEMARIO COMPLETO DE LA MATERIA"
"TEMARIO COMPLETO DE LA MATERIA"
ISC “401
3.5 CREACION Y USO DE PAQUETES/LIBRERIAS DEFINIDAS
POR EL USUARIO
4.2 COMPARACIÓN PROGRAMA FLUJO ÚNICO Y FLUJO
MÚLTIPLE
5.5 PROTOCOLO DE INTERFAZ ENTRE APLICACIONES
INTRODUCCION
El presente trabajo
demuestra lo aprendido a lo largo del tercer semestre de la materia TOPICOS AVANZADOS DE LA PROGRAMACION en el
siguiente documento se encontraran evidencias de las habilidades y
conocimientos obtenidos por el alumno al elaborar un programa en los diferentes
programas que el maestro le a indicado
haciendo así la mejoría del conocimiento de este ala introducción de la programación, mostrando evidencia de lo
aprendido el alumno a realizado
diferentes códigos mostrándolos en
capturas de pantallas de como se realiza cada código al igual de cual es su
resultado al ora de ejecutarlo, esto se realiza con el fin de hacer mas
practica y cómoda la estadía de cualquier usuario que tenga contacto con el
mismo documento presentado así , los siguientes códigos que se muestran a
continuación fueron creados con el
conocimiento del alumno en la plataforma
de visual studio. Visual studio es una
plataforma creada para aquellos usuarios
que se les facilita o les interesa la programación ya que cuenta con diferentes
herramientas para hacer mas fácil la estadía del usuario dentro de esta
plataforma y provocándole un mayor
interés por el aprendizaje ala materia
OBJETIVO
*se realizara un manual
de la materia de tópicos avanzados de programación para dar a conocer lo
aprendido a lo largo del cuarto semestre
CONCEPTOS
UNIDAD
UNO
"EVENTOS"
1.1 TIPOS DE EVENTOS
Un
evento es la notificación que hace un
elemento grafico cuando el usuario interactúa con el. 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 Los eventos ahora están organizados en jerarquías
de clases de eventos.
El
nuevo modelo hace uso de fuentes de eventos (Source) y receptores de
eventos (Listener). Una fuente
de eventos es un objeto que tiene la capacidad de detectar eventos y notificar
a los receptores de eventos que se han producido esos eventos. Aunque el
programador puede establecer el entorno en que se producen esas notificaciones,
siempre hay un escenario por defecto.
Un objeto receptor de
eventos es una clase (o una subclase de una clase) que implementa un interfaz
receptor específico. Hay definidos un determinado número de interfaces
receptores, donde cada interfaz declara los métodos adecuados al tratamiento de
los eventos de su clase. Luego, hay un emparejamiento natural entre clases de
eventos y definiciones de interfaces. Por ejemplo, hay una clase de eventos de
ratón que incluye muchos de los eventos asociados con las acciones del ratón, y
hay un interfaz que se utiliza para definir los receptores de esos eventos.
Un
objeto receptor puede estar registrado con un objeto fuente para ser notificado
de la ocurrencia de todos los eventos de la clase para los que el objeto
receptor está diseñado. Una vez que el objeto receptor está registrado para ser
notificado de esos eventos, el suceso de un evento en esta clase
automáticamente invocará al método sobrescrito del objeto receptor. El código
en el método sobrescrito debe estar diseñado por el programador para realizar
las acciones específicas que desee cuando suceda el evento.
1.1.1 TIPOS DE EVENTOS
ComponentEvent: Se producirá
este tipo de evento cuando el usuario mueva o redimensione un componente.
FocusEvent: Se producirá
este tipo de evento cuando se cambie el foco de un componente. El foco hace
referencia al componente en el que estamos trabajando.
MouseEvent: Se producirá cuando el usuario
efectúe un movimiento con el ratón o haga un clic. Tipos de Eventos
WindowEvent: se producirá
cuando se realice algún tipo de operación con la ventana como abrirla y
cerrarla.
ActionEvent: Se producirá
cuando se efectúe alguna acción sobre un componente, como por ejemplo: la
presionar un botón.
1.2 GENERACIÓN Y PROPAGACIÓN
DE EVENTOS
el paquete de java es la que
contiene la mayor parte de las interfaces
de eventos y las clases, el modelo de delegación de eventos es un
concepto que trabaja de la siguiente manera, una fuente crea un evento y lo
envía a uno o mas oyentes o auditores que han estado simple mente esperando
simple mente un evento y una vez recibido lo procesan o lo devuelven.
una fuente es un objeto que genera un evento esto ocurre cuando cambia de
manera interna un objeto las fuentes pueden generar mas de un tipo de eventos
una fuente tiene que ir siempre acompañada de auditores para que estos reciban
las notificaciones sobre el tipo especifico de los eventos cada tipo de evento
tiene su propio método de registro un auditor es un objeto que es avisado
cunado ocurre un evento tiene dos requisitos principales, primero tiene que ir
registrado o ir acompañado por una o mas fuentes para recibir notificaciones
sobre los tipos específicos de eventos segundo, tiene que implementar métodos
para recibir y procesar notificaciones.
los eventos se crean desde una fuente y se propagan hasta los receptores, por
ejemplo cuando se hace clip en un botón se genera un evento y se propaga
realizando alguna opción
1.3 MÉTODO DE CONTROL DE
EVENTOS
los eventos so controlados
mediante los métodos, un método puede
hacer o no hacer nada cuando se genera un evento. De esta forma se controla la
acción de un evento
1.4 CREACIÓN DE EVENTOS
SEGUNDA
UNIDAD
"INTERFAZ
GRÁFICA DE USUARIO"
2.1 CREACIÓN DE INTERFAZ
GRÁFICA PARA USUARIO
En el contexto del proceso de interacción
persona-ordenador, la interfaz gráfica de usuario (IGU), es el artefacto
tecnológico de un sistema interactivo que posibilita, a través del uso y la
representación del lenguaje visual, una interacción amigable con un sistema
informático.
La interfaz gráfica de usuario (en
inglés Graphical User Interface, GUI) es un tipo de interfaz de usuario que
utiliza un conjunto de imágenes y objetos gráficos (iconos, ventanas,
tipografía) para representar la información y acciones disponibles en la
interfaz. Habitualmente las acciones se realizan mediante manipulación directa
para facilitar la interacción del usuario con la computadora. Surge como
evolución de la línea de comandos de los primeros sistemas operativos y es
pieza fundamental en un entorno gráfico. Como ejemplo de interfaz GUI podemos
citar el escritorio o desktop del sistema operativo Windows y el entorno
X-Windows de Linux.
El desarrollo de los entornos gráficos,
que permitieron que las personas pudieran acceder a un PC sin tener que pasar
por el tortuoso proceso de tener que aprender a manejar un entorno bajo línea
de comandos. La interfaz gráfica de usuario es lo que tú y yo vemos cuando
ejecutamos un programa en algún sistema operativo e interfaz gráfica, es decir,
son las ventanas y los botones, los iconos, etc. En java, muchos applets y
aplicaciones pueden desarrollarse explotando esta propiedad, esto se hace
dentro del ambiente integrado de desarrollo de java cuando hemos abierto un
archivo .java para la elaboración de algún proyecto (en concreto, me refiero a
jbuilder). Ahí, facilmente, seleccionando la pestaña inferior design, creamos
la interfaz arrastrando los botones y demás componentes de las barras de
objetos que se encuentran en la parte superior del ambiente jbuilder
2.2 COMPUTACIÓN GRAFICA
Medio más natural de comunicación con
computador Aprovecha habilidades humanas altamente desarrolladas de
reconocimiento de patrones 2D y 3D que permiten percibir y procesar rápidamente
datos gráficos Visualización científica:
muy importante desde 1980 Permite sintetizar objetos concretos y también
abstractos (moléculas químicas, objetos matemáticos), utiliza imágenes
dinámicas para visualizar: evolución de fenómenos (se necesitan más de 15
cuadros / seg). Usuario puede controlar la animación: velocidad, zoom, cantidad
de detalle, relación entre objetos.
Conceptos y elementos básicos en
computación gráfica
Tubo de rayos catódicos, Tecnología
raster, frame buffer, tasa de refresco, Modelo de color RGB, Rendering (proceso
completo de visualización de escena 3D), Modelación de la superficie 3D de los
objetos (en base a mallas de polígonos), Transformaciones geométricas básicas y
transformaciones de proyección (también geométricas),Luces de la escena, Modelo de iluminación
UNIDAD TRES
"COMPONENTES Y
LIBRERIAS"
3.1 DEFINICIÓN CONCEPTUAL DE
COMPONENTES PAQUETES Y LIBRERÍAS
Componente: Es una clase abstracta que
representa todo lo que tiene una posición, un tamaño, puede ser pintado en
pantalla y puede recibir eventos.
LIBRERÍAS La utilización de objetos
dinámicos supone dejar pendiente en el montaje de la aplicación el enlace de
dichos objetos. Cuando la aplicación está en ejecución, y sólo entonces, se
produce el enlace (dinámico) con los objetos contenidos en la librería. La
creación de librerías dinámicas corre a cargo del enlazador o montador (en
nuestro caso el id) aunque también es posible indicar al compilador las
opciones necesarias para el montaje y de ese modo, será él quien se encargue de
pasárselas al montador. Cuando se crea un objeto dinámico es necesario que
dicho código objeto sea independiente de la posición, para conseguir este tipo
de código debe especificarse al compilador la opción -fPIC (Position
Independent Code). Dicho flag debe indicarse tanto en la compilación como en el
montaje de la librería. Para montar los objetos es necesario además indicar la
opción -shared para que el resultado sea un fichero objeto compartible.
3.2. USO DE COMPONENTES (VISUALES Y NO
VISUALES) PROPORCIONADOS POR EL LENGUAJE
Un componente desde el punto de vista
de programación esta compuesto por varias secciones y el conjunto de todas
ellas dan lugar a la creación de dicho componente. Por tanto, primero para no
perder el norte, vamos a empezar definiendo el convenio que es utilizado para
organizar dichas secciones por TinyOs. En general, un componente posee tres
grandes secciones que son: Configuración, Implementación, Module. Estas tres
secciones han de estar obligatoriamente presentes en cualquier componente
aunque puedan estar vacías. El estándar de T i n y O s determina, que las
secciones de Configuración implementación han de ir en un fichero que recibirá
el nombre del componente con la extensión .nc y la tercera sección de Module
deberá de ir en otro fichero aparte que recibirá el nombre del componente
concatenado con un M mayúscula (la M da el significado al fichero, es el
significado de Module) , este último fichero también poseerá extensión .nc.
Otra buena costumbre consiste en crear un fichero de heder o cabecera con
extensión .h que contenga todas las enumeraciones, registros o tipos de datos
creados por el usuario de los que hace uso la aplicación, y cuando se realiza
esto la forma de ligar dicho fichero con los otros dos es utilizando al
principio de los otros fichero la directiva includesheader; aunque como mención
especial decir que si nos fijamos mejor en este directiva se puede ver que no
se incorpora la extensión .h en la misma. Ahora que ya sabes cuales son las
secciones que va a contener cada fichero vamos a empezar a explicar cada una de
ellas. Implementación Esta sección se va a encargar de definir las conexiones
que hay entre los diferentes componentes que utiliza la aplicación, esto es
debido a que si recordamos un poco, se ha comentado que la programación de un
componente (que se llevará a cabo en la sección de module) se hace utilizando
interfaces y dichas interfaces para poder utilizarlas las ha de proporcionar un
componente, entonces básicamente es esta sección se definen cuales son los
componentes que proporcionan las interfaces a nuestra aplicación (por lo
general serán componentes primitivos).
3.3. USO DE LIBRERÍAS PROPORCIONADAS
POR EL LENGUAJE
Java es un lenguaje de programación
desarrollado para una multitud de plataformas y procesadores. Consideremos los
dos tipos de aplicaciones gráficas más comunes. Modelos de Frames y Applets, se
pueden construir usando cualquiera de las dos galerías de componentes visuales,
son: JAVA AWT: Es la librería visual más antigua de java usando esta librería,
se podrán construir los tres tipos de programas mas comunes como son FRAME, WINDOW
y APPLET. JAVA SWING: Es la librería de componentes visuales más nueva que
proporciona java, usando esta librería se podrán construir los tres tipos de
programas o aplicaciones que son JFRAME, WINDOW Y JAPPLET. Un Apple es un
programa en java que se mandan a una máquina o PC remota para que los ejecuten
o lo corra, cuando este applet de llegada a las máquinas remotas vía browser,
dicho browser es quien activa la máquina virtual de java que da la orden de
compilación y ejecución, es decir java programa. applet. Entonces es importante
que la máquina virtual de java, que se encuentra en la PC remota, tenga
capacidad de incluir todas las librerías de java, como la de match, la de AWT
Existen diferentes librerías en java, entre
las cuales se encuentra. Java. lang Colección de tipo básico siempre importados
a cualquier unidad de compilación. Aquí están las declaraciones de objetos,
clases, wrappers. Interfaces Clases. Closeable
Boolean Comparable Byte Runnable Character ClassLoader Compiler Double Float
InheritableThreadLocal Interger Long Math Number Object System Thread Void
String, etc...
3.4. CREACIÓN DE COMPONENTES (VISUALES
Y NO VISUALES) DEFINIDOS POR EL USUARIO
Se puede establecer muchas clasificaciones
para los componentes. Una de ellas es la de visuales o controles, frente a no
visuales. Un componente es visual cuando tiene una representación gráfica en
tiempo de diseño y ejecución (botones, barras de scroll, cuadros de edición,
etc.), y se dice no visual en caso contrario (temporizadores, cuadros de
diálogo-no visibles en la fase de diseño, etc). Por lo demás no existen más
diferencias entre ellos, excepto, claro está, las derivadas de la visualización
del componente.
Los componentes no visuales se pueden
colocar en los formularios de la misma manera que los controles, aunque en este
caso su posición es irrelevante.
Para empezar, los componentes visuales
podemos dividirlos a su vez en dos tipos: -Componentes interactivos: permiten
que el usuario final los manipule, ya sea introduciendo datos, seleccionado
elementos, etc. De forma que estos componentes pueden recibir el foco (con
SetFocus) así como los eventos propios del teclado y del ratón. Normalmente, el
propio sistema operativo es el encargado de dibujar el aspecto del componente,
haciendo el componente las llamadas correspondientes para que este aspecto
cambie.
Componente gráficos: el propio
componente es el encargado de dibujar en la pantalla lo que crea oportuno, bien
a través de las funciones básicas del API de Windows (con el objeto TCanvas) o
bien a través de otras librerías gráficas, como OpenGL, DirectX, etc. Estos
componentes, no suelen recibir eventos del usuario final, aunque si eventos del
propio programador, ya que su cometido no suele ir más allá de mostrar ciertos
gráficos o imágenes en la pantalla. Si tuviéramos que crear un componente
interactivo desde el principio, sería demasiado complejo, ya que tendríamos que
luchar encontrar el propio API del sistema operativo, gestionando sus mensajes,
las llamadas las funciones a bajo nivel, etc. Sin embargo, podemos aprovechar
la mayoría del trabajo hecho por Borland en la VCL, y crear componentes
interactivos a partir de otros ya existentes, aplicado la técnica de herencia
3.5 CREACION Y USO DE PAQUETES/LIBRERIAS DEFINIDAS
POR EL USUARIO
Creación
y Uso de Paquetes/Librerías Definidas por el Usuario Los paquetes son grupos de
clases relacionadas; ayudan a organizar su código y proporcionan otra capa
encapsulamiento.
En programación, los paquetes, con frecuencia son útiles para agrupar las
piezas relacionadas de un programa Un paquete sirve para dos propósitos:
primero, suministra un mecanismo por el cual piezas relacionadas de un programa
pueden ser organizadas como una unidad. Así, un paquete proporciona la manera
de nombrar una colección de clases. Segundo, un paquete participa en los
mecanismos de control de acceso en java. Las clases definidas dentro de un
paquete pueden hacerse privadas a ese paquete y no accesibles por código fuera
del paquete. De este modo, el paquete suministra un medio por el cual las
clases pueden ser encapsuladas. DEFINIR UN PAQUETE: Todas las clases en Java
pertenecen a algún paquete. Además, el paquete predeterminado no tiene nombre,
lo que lo hace transparente.
Para crear un paquete, coloque un comando package en la parte superior del
archivo fuente de java.
Las clases declaradas dentro de ese archivo pertenecerán al paquete
especificado. La siguiente es la forma general de la declaración package:
package pkg;
Aquí, pkg es el nombre del paquete. Por ejemplo, el siguiente enunciado crea un
paquete de nombre Project1.
package Project1; Puede crear una jerarquía de paquetes. Para hacerlo,
simplemente, separe cada nombre de paquete del inmediatamente anterior, por
medio de un punto. A continuación, la forma general de una declaración de
paquete multinivel:
package pack1.pack2.pack3....packN; la librería de clase java esta contenida en
paquetes: java.lang: contiene un gran número de clases de propósito general
java.io: contiene las clases de E/S
java.net: contiene aquellas clases que soportan redes
UNIDAD CUATRO
"PROGRAMACION CONCURRENTE MULTIHILOS"
4.1
CONCEPTO DE HILOS
Un
hilo es una unidad básica de utilización de CPU, la cual contiene un id de
hilo, su propio program counter, un conjunto de registros, y una pila; que se
representa a nivel del sistema operativo con una estructura llamada TCB (thread
control block). Los hilos comparten con otros hilos que pertenecen al mismo
proceso la sección de código, la sección de datos, entre otras cosas. Si un
proceso tiene múltiples hilos, puede realizar más de una tarea a la vez (esto
es real cuando se posee más de un CPU). Veamos un ejemplo para clarificar el
concepto: Un servidor web acepta solicitudes de los clientes que piden páginas
web. Si este servidor tiene varios clientes y funcionara con un solo hilo de
ejecución, solo podría dar servicio a un cliente por vez, y el tiempo que
podría esperar un cliente para ser atendido podría ser muy grande. Una posible
solución sería que el servidor funcione de tal manera que acepte una solicitud
por vez, y que cuando reciba otra solicitud, cree otro proceso para dar
servicio a la nueva solicitud. Pero crear un proceso lleva tiempo y utiliza
muchos recursos, entonces, si cada proceso realizará las mismas tareas ¿Por qué
no utilizar hilos? Generalmente es más eficiente usar un proceso que utilice
múltiples hilos (un hilo para escuchar las solicitudes, y cuando llega una
solicitud, el lugar de crear otro proceso, se crea otro hilo para procesar la
solicitud)
En programación, los paquetes, con frecuencia son útiles para agrupar las piezas relacionadas de un programa Un paquete sirve para dos propósitos: primero, suministra un mecanismo por el cual piezas relacionadas de un programa pueden ser organizadas como una unidad. Así, un paquete proporciona la manera de nombrar una colección de clases. Segundo, un paquete participa en los mecanismos de control de acceso en java. Las clases definidas dentro de un paquete pueden hacerse privadas a ese paquete y no accesibles por código fuera del paquete. De este modo, el paquete suministra un medio por el cual las clases pueden ser encapsuladas. DEFINIR UN PAQUETE: Todas las clases en Java pertenecen a algún paquete. Además, el paquete predeterminado no tiene nombre, lo que lo hace transparente.
Para crear un paquete, coloque un comando package en la parte superior del archivo fuente de java.
Las clases declaradas dentro de ese archivo pertenecerán al paquete especificado. La siguiente es la forma general de la declaración package:
package pkg;
Aquí, pkg es el nombre del paquete. Por ejemplo, el siguiente enunciado crea un paquete de nombre Project1.
package Project1; Puede crear una jerarquía de paquetes. Para hacerlo, simplemente, separe cada nombre de paquete del inmediatamente anterior, por medio de un punto. A continuación, la forma general de una declaración de paquete multinivel:
package pack1.pack2.pack3....packN; la librería de clase java esta contenida en paquetes: java.lang: contiene un gran número de clases de propósito general
java.io: contiene las clases de E/S
java.net: contiene aquellas clases que soportan redes
4.2 COMPARACIÓN PROGRAMA FLUJO ÚNICO Y FLUJO
MÚLTIPLE
Programas de flujo único
Un programa de flujo único o
mono-hilvanado (single-thread) utiliza un único flujo de control (thread) para
controlar su ejecución. Muchos programas no necesitan la potencia o utilidad de
múltiples flujos de control. Sin necesidad de especificar explícitamente que se
quiere un único flujo de control, muchos de los applets y aplicaciones son de
flujo único.
Por ejemplo, en la archiconocida
aplicación estándar de saludo:
public class hola mundo{
static
public void main( String args[] ) {
System.out.println(
“Hola Mundo!” );
}
}
Aquí, cuando se llama a main(), la
aplicación imprime el mensaje y termina. Esto ocurre dentro de un único hilo de
ejecución (thread).
Debido a que la mayor parte de los
entornos operativos no solían ofrecer un soporte razonable para múltiples hilos
de control, los lenguajes de programación tradicionales, tales como C++, no
incorporaron mecanismos para describir de manera elegante situaciones de este
tipo. La sincronización entre las múltiples partes de un programa se llevaba a
cabo mediante un bucle de suceso único. Estos entornos son de tipo síncrono,
gestionados por sucesos. Entornos tales como el de Macintosh de Apple, Windows
de Microsoft y X11/Motif fueron diseñados en torno al modelo de bucle de
suceso.
Programas de flujo múltiple
En la aplicación de saludo, no se ve el
hilo de ejecución que corre el programa. Sin embargo, Java posibilita la creación
y control de hilos de ejecución explícitamente. La utilización de hilos
(threads) en Java, permite una enorme flexibilidad a los programadores a la
hora de plantearse el desarrollo de aplicaciones. La simplicidad para crear,
configurar y ejecutar hilos de ejecución, permite que se puedan implementar muy
poderosas y portables aplicaciones/applets que no se puede con otros lenguajes
de tercera generación. En un lenguaje orientado a Internet como es Java, esta
herramienta es vital.
Si se ha utilizado un navegador con
soporte Java, ya se habrá visto el uso de múltiples hilos en Java. Habrá
observado que dos applets se pueden ejecutar al mismo tiempo, o que puede
desplazar la página del navegador mientras el applet continúa ejecutándose.
Esto no significa que el applet utilice múltiples hilos, sino que el navegador
es multihilo, multihilvanado o multithreaded.
Los navegadores utilizan diferentes
hilos ejecutándose en paralelo para realizar varias tareas, “aparentemente”
concurrentemente. Por ejemplo, en muchas páginas web, se puede desplazar la
página e ir leyendo el texto antes de que todas las imágenes estén presentes en
la pantalla. En este caso, el navegador está trayéndose las imágenes en un hilo
de ejecución y soportando el desplazamiento de la página en otro hilo
diferente.
Las aplicaciones y multihilo utilizan muchos contextos de
ejecución para cumplir su trabajo. Hacen uso del hecho de que muchas tareas
contienen subtareas distintas e independientes. Se puede utilizar un hilo de
ejecución para cada subtarea.
Mientras que los programas de flujo
único pueden realizar su tarea ejecutando las subtareas secuencialmente, un
programa multihilo permite que cada thread comience y termine tan pronto como
sea posible. Este comportamiento presenta una mejor respuesta a la entrada en
tiempo real.
Vamos a modificar el programa de saludo
creando tres hilos de ejecución individuales, que imprimen cada uno de ellos su
propio mensaje de saludo, Multi Hola.java:
// Definimos unos sencillos hilos. Se detendrán un
rato
// antes de imprimir sus nombres y retardos
class Test Th extends Thread {
private String nombre;
private int retardo;
// Constructor para almacenar nuestro
nombre
// y el retardo
public Test Th( String s,int d ) {
nombre = s;
retardo = d;
}
// El metodo run() es similar
al main(), pero para
// threads. Cuando run() termina el thread muere
public void run() {
// Retasamos la ejecución el tiempo
especificado
try {
sleep( retardo );
} catch( Interrupted Exception e ) {
;
}
// Ahora imprimimos el
nombre
System.out.println( “Hola
Mundo! “+nombre+” “+retardo );
}
}
public
class Multi Hola {
public static void main( String args[] ) {
Test Th t1,t2,t3;
// Creamos los threads
t1 = new Test Th( “Thread 1″,(int)(Math.random()*2000) );
t2 = new Test Th( “Thread 2″,(int)(Math.random()*2000) );
t3 = new Test Th( “Thread 3″,(int)(Math.random()*2000) );
// Arrancamos los threads
t1.start();
t2.start();
t3.start();
}
}
4.3
CREACIÓN Y CONTROL DE HILOS
En Java los hilos están
encapsulados en la clase Thread. Para crear un hilo tenemos dos
posibilidades:
·
Heredar
de Thread redefiniendo el método run().
·
Crear una
clase que implemente la interfaz Runnable que nos obliga a definir el
método run().
En ambos casos debemos definir un
método run() que será el que contenga el código del hilo. Desde
dentro de este método podremos llamar a cualquier otro método de cualquier
objeto, pero este método run() será el método que se invoque cuando
iniciemos la ejecución de un hilo. El hilo terminará su ejecución cuando
termine de ejecutarse este método run().
Para crear nuestro hilo mediante
herencia haremos lo siguiente:
1
2
3
4
5
6
7
8
|
public class Ejemplo Hilo extends Thread
{
public void run()()
{
//
Código del hilo
}
}
|
Una vez definida la clase de
nuestro hilo deberemos instanciarlo y ejecutarlo de la siguiente forma:
1
2
3
|
Thread t = new EjemploHilo();
t.start();
|
Al llamar al
método start del hilo, comenzará ejecutarse su método run. Crear
un hilo heredando de Thread tiene el problema de que al no haber
herencia múltiple en Java, si heredamos de Thread no podremos heredar
de ninguna otra clase, y por lo tanto un hilo no podría heredar de ninguna otra
clase.
Este problema desaparece si
utilizamos la interfaz Runnable para crear el hilo, ya que una clase
puede implementar varios interfaces. Definiremos la clase que contenga el hilo
como se muestra a continuación:
1
2
3
4
5
6
7
8
|
public class EjemploHilo implements Runnable
{
public void run()
{
//
Código del hilo
}
}
|
Para instanciar y ejecutar un
hilo de este tipo deberemos hacer lo siguiente:
1
2
3
|
Thread t = new Thread(new EjemploHilo());
t.start();
|
Esto es así debido a que en este
caso EjemploHilo no deriva de una clase Thread, por lo que no se
puede considerar un hilo, lo único que estamos haciendo implementando la
interfaz es asegurar que vamos a tener definido el método run(). Con esto
lo que haremos será proporcionar esta clase al constructor de la
clase Thread, para que el objeto Thread que creemos llame al
método run() de la clase que hemos definido al iniciarse la ejecución
del hilo, ya que implementando la interfaz le aseguramos que esta función
existe.
4.4 SINCRONIZACIÓN DE HILOS
Ya que los hilos permiten y potencian el comportamiento
asíncrono de los programas, debe existir alguna manera de forzar el sincronismo
allí donde sea necesario. Por ejemplo, si desease que dos hilos se comunicasen
para compartir una estructura de datos compleja (como una lista enlazada),
necesitará alguna manera de garantizar que cada uno se aparte del camino del otro.
Java incorpora una versión rebuscada de un modelo clásico para la
sincronización, el monitor. La mayor parte de los sistemas multihilo
implementan los monitores a modo de objetos, pero Java proporciona una solución
más elegante: no existe la clase monitor, cada objeto lleva asociado su propio
monitor implícito, en el que puede entrar sin más que hacer una llamada a los
métodos synchronized del objeto. Una vez que el hilo está dentro del método
synchronized, ningún otro hilo puede efectuar una llamada a otro método synchronized
sobre el mismo objeto.
Cuando
en un programa tenemos varios hilos corriendo simultáneamente es posible que
varios hilos intenten acceder a la vez a un mismo sitio (un fichero, una
conexión, un array de datos) y es posible que la operación de uno de ellos
entorpezca la del otro. Para evitar estos problemas, hay que sincronizar los
hilos. Por ejemplo, si un hilo con vocación de Cervantes escribe en fichero
"El Quijote" y el otro con vocación de Shakespeare escribe "Hamlet",
al final quedarán todas las letras entremezcladas
UNIDAD CINCO
"PROGRAMACION DE DISPOSITIVOS MOVILES"
5.1
INTRODUCCION
En este
curso vamos a estudiar la edición de la plataforma Java que Sun Microsystems ha
diseñado específicamente para dispositivos móviles y embebidos: Java 2 Micro
Edition (J2ME). Aunque en esta introducción veamos una visión general de
J2ME y su entorno, en este curso nos centraremos en el estudio de las
herramientas y bibliotecas que ofrece J2ME para la programación de dispositivos
específicos como teléfonos móviles y asistentes personales digitales.
La expansión de ordenadores personales en nuestro entorno hacen que éstos sean ya una herramienta de trabajo muy necesaria y, por supuesto, de diversión. Hoy en día hay ordenadores en casi todas las casas, hecho originado fundamentalmente por la bajada de los precios de unos años a nuestros días. Pero cada vez, los ordenadores son más potentes y nos dan muchas más posibilidades, lo que hace que no sólo estén en el lugar de trabajo y en nuestro hogar, sino que nos los podamos encontrar en cualquier ámbito de nuestra vida: en el coche, en la lavadora, en la televisión. La tecnología está haciendo posible que se reduzcan también los tamaños de los ordenadores y que nos los podamos meter en el bolsillo y transportarlos sin dificultad alguna, como es el caso de los asistentes personales digitales (Personal Digital Assistant -PDA). Estos dispositivos son ordenadores con todo el significado de la palabra, pues disponen de capacidad de procesamiento y almacenaje de datos.
Las comunicaciones también han evolucionado velozmente. Ahora podemos bajarnos música de ordenadores situados en Nueva Zelanda en pocos segundos, o escribirnos en tiempo real con nuestro amigo de vacaciones en China desde nuestro ordenador. Pero ya no nos hace falta un cable para comunicarnos, ahora podemos hacerlo fácilmente mediante el aire, mediante radio, por ejemplo. Y esta tecnología está al alcance de todos: el teléfono móvil, que ya tiene prestaciones de un ordenador. Por tanto, vemos que la evolución se centra en hacer los aparatos más pequeños, dotándoles de habilidad de comunicación y potencia de cálculo. Independientemente del tipo de aparato, les requerimos que más o menos nos den las mismas prestaciones en cualquier momento. Pero eso es un problema para los desarrolladores, porque se les pide lo mismo, pero en sitios más pequeños cada vez. Hasta hace poco, la programación de estos dispositivos se hacía en código máquina o en ensamblador. La razón básica era que se disponía de entornos de ejecución muy restringidos, por lo que el uso de lenguajes de programación de alto nivel era impracticable. Esto implicaba el hecho de tener que desarrollar completamente a medida, es decir, específicamente para el dispositivo, con el consiguiente esfuerzo y lentitud en los desarrollos. El lenguaje de programación Java permitía escribir un programa una vez y poder ejecutarlo en multitud de ordenadores, con diferentes plataformas sin tener que compilarlo de nuevo. Esa es una gran ventaja y una característica muy deseable en el entorno de los pequeños dispositivos, por lo que se ha exportado esa filosofía a estos aparatos. Así, mediante J2ME se podrán escribir aplicaciones para una gran variedad de dispositivos diferentes.
La expansión de ordenadores personales en nuestro entorno hacen que éstos sean ya una herramienta de trabajo muy necesaria y, por supuesto, de diversión. Hoy en día hay ordenadores en casi todas las casas, hecho originado fundamentalmente por la bajada de los precios de unos años a nuestros días. Pero cada vez, los ordenadores son más potentes y nos dan muchas más posibilidades, lo que hace que no sólo estén en el lugar de trabajo y en nuestro hogar, sino que nos los podamos encontrar en cualquier ámbito de nuestra vida: en el coche, en la lavadora, en la televisión. La tecnología está haciendo posible que se reduzcan también los tamaños de los ordenadores y que nos los podamos meter en el bolsillo y transportarlos sin dificultad alguna, como es el caso de los asistentes personales digitales (Personal Digital Assistant -PDA). Estos dispositivos son ordenadores con todo el significado de la palabra, pues disponen de capacidad de procesamiento y almacenaje de datos.
Las comunicaciones también han evolucionado velozmente. Ahora podemos bajarnos música de ordenadores situados en Nueva Zelanda en pocos segundos, o escribirnos en tiempo real con nuestro amigo de vacaciones en China desde nuestro ordenador. Pero ya no nos hace falta un cable para comunicarnos, ahora podemos hacerlo fácilmente mediante el aire, mediante radio, por ejemplo. Y esta tecnología está al alcance de todos: el teléfono móvil, que ya tiene prestaciones de un ordenador. Por tanto, vemos que la evolución se centra en hacer los aparatos más pequeños, dotándoles de habilidad de comunicación y potencia de cálculo. Independientemente del tipo de aparato, les requerimos que más o menos nos den las mismas prestaciones en cualquier momento. Pero eso es un problema para los desarrolladores, porque se les pide lo mismo, pero en sitios más pequeños cada vez. Hasta hace poco, la programación de estos dispositivos se hacía en código máquina o en ensamblador. La razón básica era que se disponía de entornos de ejecución muy restringidos, por lo que el uso de lenguajes de programación de alto nivel era impracticable. Esto implicaba el hecho de tener que desarrollar completamente a medida, es decir, específicamente para el dispositivo, con el consiguiente esfuerzo y lentitud en los desarrollos. El lenguaje de programación Java permitía escribir un programa una vez y poder ejecutarlo en multitud de ordenadores, con diferentes plataformas sin tener que compilarlo de nuevo. Esa es una gran ventaja y una característica muy deseable en el entorno de los pequeños dispositivos, por lo que se ha exportado esa filosofía a estos aparatos. Así, mediante J2ME se podrán escribir aplicaciones para una gran variedad de dispositivos diferentes.
5.2 DISPOSITIVO MÓVIL
también
conocido como computadora de bolsillo o computadora de mano (palmtop o handheld),
es un tipo de computadora de tamaño pequeño, con capacidades de
procesamiento, con conexión a Internet , con memoria,
diseñado específicamente para una función, pero que pueden llevar a cabo otras
funciones más generales.
Estrictamente
hablando, muchos de los llamados dispositivos móviles no tienen la capacidad de
moverse. Más bien son dispositivos que pueden ser fácilmente transportados por
sus usuarios.
5.3 CLASIFICACIÓN
Y APLICACIONES DE LOS DISPOSITIVOS MÓVILES
Aplicación móvil
Teléfonos inteligentes mostrando
iconos de aplicaciones móviles. Una aplicación móvil, applo o app (en inglés)
es una aplicación informática diseñada para ser ejecutada en teléfonos
inteligentes, tabletas y otros dispositivos móviles y que permite al usuario
efectuar una tarea concreta de cualquier tipo profesional, de ocio, educativa, de
acceso a servicios, facilitando las gestiones o actividades a desarrollar.
Por lo general se
encuentran disponibles a través de plataformas de distribución, operadas por
las compañías propietarias de los sistemas operativos móviles como Android,
iOS, OS, Windows Phone, entre otros. Existen aplicaciones móviles
gratuitas u otras de pago, donde en promedio el 20–30 % del costo de la
aplicación se destina al distribuidor y el resto es para el desarrollador. El
término app se volvió popular al ser aplicaciones residentes en los
dispositivos están escritas en algún lenguaje de programación compilado, y su
funcionamiento y recursos se encaminan a aportar una serie de ventajas tales
como. Un acceso más rápido y sencillo a la información necesaria sin necesidad
de los datos de autenticación en cada acceso. que los usuarios pueden acceder
desde Internet (o Intranet) mediante un navegador web genérico o específico,
dependiendo del lenguaje de programación . Un servicio de alojamiento
informático o web permite a organizaciones e individuos subir, alojar,
gestionar o almacenar contenido en servidores físicos o virtuales. Por ejemplo:
Dropbox sería una aplicación de software destinada a ser un servicio de
alojamiento de archivos multiplataforma en la nube, a la cual se puede acceder
a través un interfaz web o de una app.
En los últimos años
los servicios de informática distribuida han permitido que las organizaciones,
incluidas las educativas, puedan gestionar sus procesos, actividad y
aplicaciones informáticas a través de empresas que ofrecen comercialmente
“software como servicio. alojado en un centro de datos o en
servicios en la “nube”, y grandes redes de ordenadores pueden formar una
“malla” que representa una potencia considerable.
5.4 AMBIENTE DE LAS
APLICACIONES
Un ambiente de
desarrollo para aplicaciones web es una
estructura definida, reusable en el que sus componentes
facilitan la creación de aplicaciones web. En cierto sentido podemos afirmar
que nos proveen una capa de abstracción sobre la arquitectura original
ocultándola o adaptándola para no tener que utilizar el protocolo http de
manera nativa y así acelerar los tiempos de desarrollo y mantenimiento.
Los ambientes de
aplicaciones mas importantes son:
FrontPage.-
Es un programa de Microsoft para a crear y
mantener sitios web. Permite diseñar y crear
páginas directamente en el propio sitio de
Internet, así como en una computadora personal y luego
publicarlas por completo en un servidor. Con este software se pueden
elaborar páginas sin saber absolutamente nada del lenguaje HTML, se
escriben los textos, se les da formato,
y se le insertan imágenes mientras el
programa elabora el código HTML correspondiente que es el que
entienden los navegadores de internet.
Dreamweaver.- Es un
editor visual profesional para la creación y administración de sitios
y páginas Web. Con Dreamweaver resulta fácil crear y
editar páginas compatibles con cualquier explorador y
plataforma. Dreamweaver proporciona herramientas avanzadas de diseño
y formateo, y facilita el uso de funciones
de HTML dinámico, como capas y comportamientos
animados, sin necesidad de escribir una sola línea de
código. El establecimiento de destino de
exploradores comprueba el trabajo para averiguar
si hay problemas potenciales en las plataformas y los exploradores
más habituales. La tecnología Roundtrip HTML de Macromedia importa
documentos HTML sin necesidad de cambiar el formato del código y, además,
es posible configurar Dreamweaver para limpiar y cambiar el formato
HTML cuando lo desee. Dreamweaver se puede personalizar totalmente.
Puede crear sus propios objetos y comandos, modificar menús y métodos
abreviados de teclado, e incluso escribir código JavaScript para ampliar
las posibilidades que ofrece Dreamweaver con nuevos comportamientos e
inspectores de propiedades.
ASP.NET:
es un conjunto de tecnologías definidas por
Microsoft para la capa de presentación WEB que forma parte del .NET
Framework. En pocas palabras, una página ASP.NET es un
archivo de texto con extensión aspx que el
servidor sabe que debe procesar de una manera especial. El
texto de las páginas puede ser HTML junto con código scripting que
se compila dinámicamente y se ejecuta en el servidor.
La página aspx se compila (sólo la primera
vez) a código ejecutable .net cuando algún cliente
la solicita al servidor. Para incluir código embebido en la
página se utilizan los separadores <% y %>. En este sentido es
similar al funcionamiento de las páginas JSP de
java. Las páginas ASP.NET pueden tener controles
que se ejecutan del lado del servidor
(server controls) que son objetos que representan elementos de la
interfaz de usuario que se ejecutan en el servidor y generan
código HTML como resultado de su ejecución. Los
controles tienen propiedades, métodos y eventos a los que pueden
responder y mediante los que se puede modificar su estado y
comportamiento. Este comportamiento se puede declarar en
los atributos de su declaración HTML o de
manera programática. Los controles permiten contener otros
controles dentro de el os y es posible, al igual que cualquier objeto,
heredar y redefinir parte de su comportamiento. Un control de servidor se
identifica en una página HTML por su atributo runat=”server”. De esta
manera un webform es una página HTML que contiene en algún lado una
etiqueta del estilo.
5.5 PROTOCOLO DE INTERFAZ ENTRE APLICACIONES
En el
lenguaje de programación: C. Hardware: Smartphones. Android Aplicación
desarrollada: smsPopUp SDK. Entornos Móviles Dispositivos multifuncionales
capaces de alojar un amplio abanico de aplicaciones Puede pensarse en ellos
como una extensión del computador personal Características Sistema
Operativo
orientado a dispositivos móviles Permite el desarrollo de terceros a
través de su SDK (Software Development Kit)y mediante el lenguaje de
programación Java. Permite el almacenamiento de datos estructurados mediante
SQLite. Proporciona soporte para medios con formatos comunes de
audio, vídeo e imágenes. Facilita la integración del hardware en la
aplicación (Bluetooth, GPS, cámara de fotos, brújula, etc.). Integración
con Google Maps. Emulador incluido en el entorno de desarrollo. Sistemas
Operativos Móviles Plataforma de software sobre la que corren las aplicaciones
instaladas Es el responsable de Determinar funcionalidades
y características Determinar qué aplicaciones de tercer os se podrán usar en el
terminal
Las Características
principales de la interfaz. Versión unificada para distintos tipos de
dispositivos. Interfaz intuitiva y moderna. Reconocimiento de voz y facial.
Open Source. Puede ser modificado. Gran cuota de mercado. Confianza de los
fabricantes de dispositivos. Aspectos Negativos. Fragmentación del sistema de
archivos.
Actualización del firmware compleja.
Nº de aplicaciones menor (comparado con la appStore de iOS). Aplicaciones
Google Play Store. Tipos de aplicaciones. Aspectos dirigidos a los
desarrolladores. Especificación de requerimientos de Software Requisitos de
Arquitectura El sistema debe correr sobre terminales móviles con sistema
operativo Android 2.2 o superior. El sistema debe contener una base
de datos SQLite para el almacenamiento local de recursos. Requisitos de
usuario El usuario podrá realizar una búsqueda de recursos a través
del menú de opciones. El usuario podrá modificar sus preferencias aun
estando desconectado. Requisitos de sistema El sistema debe ser capaz de
generar pantallas con los resultados de las consultas del usuario. El sistema
deberá presentar menús de opciones para las distintas pantallas. La aplicación
será capaz de funcionar en segundo plano. La aplicación será capaz de
acceder a los datos almacenados en el terminal. Requisitos de la interfaz
Requisitos de tiempo de latencia Interfaz accesible e intuitiva.
Internacionalización de la interfaz (según la configuración del terminal, se
ofrecerá en español y en inglés). El sistema deberá mostrar una notificación
de mensaje de texto entrante en una media no mayor a 5 segundos.
Requisitos de usabilidad De tal forma que los usuarios estén lo más
familiarizados posible con la aplicación, y previendo un posible cambio de
terminal, el sistema presentará sus opciones de configuración, así como las
mismas notificaciones de servicio, de la manera más sencilla posible. Análisis
y Diseño de alto nivel Decisiones de diseño Arquitectura IDE 'ECLIPSE' SDK
Android (Android Development Tools) Lenguajes:
5.6 PROGRAMACIÓN DE TELEFONOS MOVILES Y PDA
Lenguaje de programación: Utiliza el
lenguaje OPL
(Open Programming Language) es un lenguaje de
programación El OPL ofrece al programador un entorno fácil, parecido al Basic,
que permite desarrollar rápidamente aplicaciones para Symbian claras y limpias,
con pocos comandos.
Se trata de un lenguaje interpretado, lo cual quiere decir
que los programas en código comprensible para los humanos, con son convertidos
directamente a ejecutables, sino que se transforman (mediante el programa
OPLTRANS) en un código intermedio, que ya se puede trasladar al telefono.
Lenguaje de programación: La plataforma Windows Phone soporta los lenguajes de
programación C# y Visual Basic .NET. Esto se debe a que ambos son entendidos
por el Framework .NET. Por la parte de diseño se utiliza el
lenguaje Silverlight también conocido como XAML. En el caso de las aplicaciones
de tipo video juegos, utilizan XNA para generar gráficas de tipo 2D y 3D e
igualmente pueden hacer uso de Silverlight al mismo tiempo.
PDA´S: Un PDA (Personal Digital Assistant o Ayudante personal digital) es un
dispositivo de pequeño tamaño que combina un ordenador, teléfono/fax, internet
y conexiones de red.
A los PDAs también se les llama palmtops, hand held computers
(ordenadores de mano) y pocket computers (ordenadores de bolsillo).
Un PDA típico puede funcionar como teléfono móvil, fax,
explorador de internet, organizador personal, GPS, etc.
La mayoría de PD A empezaron a usarse con una
especie de bolígrafo en lugar de teclado, por lo que incorporaban reconocimiento
de escritura a mano. Hoy en día los PDAs pueden tener teclado y/o reconocimiento
de escritura. Algunos PDA pueden incluso reaccionar a la voz, mediante
tecnologías de reconocimiento de voz.
Apple fué una de las primeras compañías en ofrecer PDA, pero
al poco tiempo otras muchas compañías empezaron a ofrecer productos similares.
ANDROID: Android es sin duda el líder del mercado móvil su programación esta en
java y está basado en Linux diseñado originalmente para dispositivos móviles
como los teléfonos inteligentes pero después tuvo modificación para ser usado
en tabletas como es el caso del Galaxy Tab de Samsung , actualmente se
encuentra en desarrollo para usarse en notebooks y Pc. Es Google, fue anunciado en el 2007 y liberado en el
2008, es usado por empresas como , LG, Samsung, Motorola entre otros.
Lenguaje de programación:: Utiliza el lenguaje C
C es el lenguaje de programación orientado a objetos que se
utiliza para el desarrollo de apps en iOS. Comenzó en 1983, el mismo año en que
se creó C++. Con los años, C++ ganó en popularidad. Pero en 1988,
Steve Jobs cambió el destino de Objetive-C cuando lo licenció para NeXT. Tenía
una cuota de mercado inferior al 1% hasta el año 2009, cuando el desarrollo
para iOS comenzó a despegar, gracias sobre todo al iPhone e iPad.
C++ se utiliza intensamente en sistemas de alto
rendimiento mientras que C se utiliza principalmente en la industria de
aplicaciones móviles.
IOS: Anteriormente
denominado iPhone creado por Apple originalmente para el iPhone, siendo después
usado en el iPod Touch e iPad. Es un derivado de Mac OS X, se lanzo en el año
2007, aumento el interés con el iPod Touch e iPad que son dispositivos con las
capacidades multimedia del iPhone pero sin la capacidad de hacer llamadas
telefónicas, en su principal revolución es una combinación casi perfecta entre
hardware y software, el manejo de la pantalla multitáctil que no podía ser
superada por la competencia
y características Determinar qué aplicaciones de tercer os se podrán usar en el terminal
Actualización del firmware compleja.
Nº de aplicaciones menor (comparado con la appStore de iOS). Aplicaciones Google Play Store. Tipos de aplicaciones. Aspectos dirigidos a los desarrolladores. Especificación de requerimientos de Software Requisitos de Arquitectura El sistema debe correr sobre terminales móviles con sistema operativo Android 2.2 o superior. El sistema debe contener una base de datos SQLite para el almacenamiento local de recursos. Requisitos de usuario El usuario podrá realizar una búsqueda de recursos a través del menú de opciones. El usuario podrá modificar sus preferencias aun estando desconectado. Requisitos de sistema El sistema debe ser capaz de generar pantallas con los resultados de las consultas del usuario. El sistema deberá presentar menús de opciones para las distintas pantallas. La aplicación será capaz de funcionar en segundo plano. La aplicación será capaz de acceder a los datos almacenados en el terminal. Requisitos de la interfaz Requisitos de tiempo de latencia Interfaz accesible e intuitiva. Internacionalización de la interfaz (según la configuración del terminal, se ofrecerá en español y en inglés). El sistema deberá mostrar una notificación de mensaje de texto entrante en una media no mayor a 5 segundos. Requisitos de usabilidad De tal forma que los usuarios estén lo más familiarizados posible con la aplicación, y previendo un posible cambio de terminal, el sistema presentará sus opciones de configuración, así como las mismas notificaciones de servicio, de la manera más sencilla posible. Análisis y Diseño de alto nivel Decisiones de diseño Arquitectura IDE 'ECLIPSE' SDK Android (Android Development Tools) Lenguajes:
No hay comentarios:
Publicar un comentario