Notas de clase. Threads

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Notas de clase. Threads"

Transcripción

1 Licenciatura en Ciencias de la Computación, Facultad de Ciencias, UNAM. Computación concurrente. Profesor: Carlos Zerón Martínez. Ayudante: Manuel Ignacio Castillo López. Notas de clase Threads Introducción Ya hemos visto que al desarrollar aplicaciones gráficas en Java, el comportamiento de la misma no está regido estrictamente por el método main; sino que usualmente la aplicación espera a que el usuario haga alguna petición. Pero cómo funciona esta espera? este comportamiento es propio de las interfaces gráficas? Lo anterior es posible gracias a los hilos de ejecución. Cualquier tipo de aplicación puede tener más de un hilo y todos influyen en el comportamiento de la misma. Las aplicaciones gráficas en particular, tienen más de un hilo para: atender al usuario (los eventos, en niveles más bajos; son interrupciones y un hilo o más responden a estas), para dibujar la pantalla (de lo contrario la aplicación pasaría la mayor parte de su tiempo irresponsiva, mientras refresca la memoria de vídeo); entre otras. En cualquier plataforma, todo proceso tiene por lo menos un hilo. En el caso particular de la programación en Java; al invocar un programa, se le asigna un hilo principal donde se ejecuta su método main: cada programa corre en su propio hilo. A partir de main, la aplicación puede crear más hilos: tantos como los necesite. Este comportamiento es muy similar en muchas otras plataformas de desarrollo de software. Es importante mencionar que estos nuevos hilos son concurrentes, ya que se ejecutan al mismo tiempo en la misma máquina. Además, el programa no terminará de ejecutarse sino hasta que todos sus hilos terminen de hacer también: no importa que el hilo del método main termine antes que todos los demás; mientras otros hilos continúen ejecutándose, la aplicación también lo hará. Ejercicio. Revise el ejemplo Interfaz no responsiva. Observe con detalle los métodos que gestionan los eventos de los botones y ejecute el programa. por qué la aplicación se congela hasta terminar de contar? Hilos en Java Si queremos crear un programa en Java que realice más de una tarea al mismo tiempo; podríamos tomar la estrategia clásica de ejecutar dos programas diferentes en un sistema multitarea; ya sea usando dos terminales distintas o solicitando que se envíe cada instancia del programa a segundo plano. Esta es la estrategia de crear varios procesos, pero tiene varios inconvenientes: la administración de los recursos compartidos es más engorrosa de lo que debería ser y los procesos tienen un contexto relativamente grande; formado por su propio heap, su propio stack, sus propias variables, etc, lo que hace que su construcción y administración sea también relativamente lenta.

2 La otra estrategia; y la más apropiada para muchos de los problemas, es usar hilos: un solo proceso que realiza varias tareas a la vez (como hemos expuesto anteriormente). Además; los hilos al ser parte de un proceso, no requieren de una inicialización tan elaborada y su ejecución y mantenimiento es más eficiente. Volviendo a Java; puesto que es un lenguaje orientado a objetos, no debería sorprendernos que los hilos los modele como objetos. Se representan con la clase java.lang.thread y como puede suponer; al ser parte de java.lang, están presente en todos los programas de Java (recordemos que todo proceso -programa- debe tener al menos un hilo). Thread nos permite acceder al hilo sobre el que se estemos ejecutando, crear hilos nuevos, mantener un grupo de ellos (conocidos como thread pools), terminar un hilo; entre otras. Thread es una clase concreta, y por lo mismo ya tiene definidos todos sus métodos y variables con los que trabaja Entonces; como es que podemos usar hilos para hacer lo que nosotros queramos, si ya están definidos? Afortunadamente y a diferencia de java.lang.integer o java.lang.string, Thread no es una clase final y podemos extenderla (heredar de ella). Además, los hilos en Java son definidos por la interfaz java.lang.runnable (Thread implementa esta interfaz) que también podemos usar para crear nuestras operaciones concurrentes. Runnable define un único método llamado run; no devuelve ni recibe nada y su firma es la siguiente: void run(); Las instrucciones de run es lo que Java ejecuta concurrentemente en nuestros hilos. Así; tenemos dos formas (principales) de crear hilos: Extendiendo a Thread y sobreescribiendo el método run en nuestra nueva clase. Implementando a Runnable y pasar nuestra clase a un Thread para que ejecute su método run (a continuación veremos esto con más detalle). Es importante mencionar que fuera de pequeños experimentos, es recomendado no instanciar hilos mediante el constructor de Thread, ya que Java nos proporciona alternativas mucho más eficientes; como veremos más adelante. Con lo anterior establecido, veamos algunas de las operaciones más utilizadas con hilos en Java. Constructor Thread define un constructor por omisión; que es suficiente para pequeños ejemplos y experimentos, pero no recomendado para programas más serios. El hilo construido con cualquiera de los constructores, estará listo para ejecutar su método run de forma concurrente. Podemos pasarle al constructor una cadena para que el hilo la use como su nombre. Este es arbitrario y nos debería ayudar a identificarlo de los demás hilos en ejecución en nuestra aplicación (es decir, deberíamos evitar nombrar a nuestros hilos patito1 A menos que el hilo represente a un pato de entre un grupo de patos). Otro constructor, toma como argumento una instancia de Runnable. Este hilo en lugar de ejecutar su propio método run, ejecutará el del Runnable dado. También podemos pasarle la cadena adicional para nombrar el hilo. Además, podemos indicar al constructor una referencia al grupo de hilos al que pertenecerá el mismo.

3 Los grupos de hilos son un objeto modelado por la clase java.lang.threadgroup y es importante no confundirlos con los thread pools; modelados por otra clase que veremos más adelante. ThreadGroup nos permite agrupar varios hilos y obtener información general sobre todos ellos. La idea es que los hilos agrupados realicen algún tipo de tarea en común. Esto es diferente a la filosofía de los thread pools, que preparan recursos para la inicialización y ejecución de hilos de forma más eficiente. Demonios El primer método; además de los constructores, que señalaremos de la clase Thread, es el setter void setdaemon(boolean). Con esta instrucción podemos especificarle a Java que el hilo en cuestión deberá ser tratado como un demonio (al pasarle un true. Por omisión es falso). Los demonios son hilos que por alguna razón queremos que continúen ejecutándose aún cuando la aplicación termina: termina el proceso de la JVM junto con nuestra aplicación, pero los demonios pueden seguirse ejecutando. Normalmente los demonios ofrecen algún tipo de servicio. Por ejemplo, si nuestra aplicación es un reloj temporizador de segundo plano, podemos usar un demonio que duerma tanto tiempo como el tiempo que se quiere esperar hasta ejecutar algún evento. Podemos tener demonios que esperan por algún mensaje de red para implementar mensajeros instantáneos, etc. Prioridades Además de setdaemon; Thread define otro setter que puede ser de gran utilidad en algunas aplicaciones, este es void setpriority(int). Los hilos en java son de usuario: la administración de su ejecución es realizada por la máquina virtual. La JVM usa prioridades para calendarizar los hilos; cuyo rango va de Thread.MIN_PRIORITY a Thread.MAX_PRIORITY. Entre más cercano sea el valor de la prioridad de un hilo a MAX_PRIORITY, mayor será la prioridad de ejecución que le otorgará la JVM. Cambio del estado de un hilo: Sleep, notify y wait Otra de las instrucciones importantes para usar es static void Thread.sleep(long). Como su nombre sugiere, pone a dormir un hilo. El parámetro que lleva, es la cantidad de tiempo en milisegundos que dormirá el hilo. Este lapso de tiempo suele ser bastante preciso, por lo que podemos asumir los tiempos de sueño para crear esperas entre hilos (no ocurrirá que los hilos duerman 5 minutos más). Mientras un hilo duerme no ejecuta ninguna instrucción; está detenido. Al despertarlo, reanuda su ejecución en la instrucción que siga a la instrucción que lo durmió (sleep). Podemos despertar al hilo mientras duerme sin importar que todavía le quede tiempo de sueño. Para ello usamos el método de la clase java.lang.object void notify(). Object define algunos métodos que nos permiten detener y reanudar el hilo sobre el que se ejecute el objeto en el que se haga la llamada. Con lo anterior dicho, es importante mencionar que el método void Object.wait() es similar a Thread.sleep(), pero no especifica cuándo debe despertar el hilo; y a menos que se llame a notify() posteriormente, el hilo nunca despertará.

4 Es importante considerar que cuando despertamos un hilo con notify; se dispara una excepción llamada InterruptedException. A lo largo del curso, nos encontraremos con problemas que involucran esperar a otros hilos. Cuando forzamos la terminación de una espera de un hilo también dispara una InterruptedException. Terminación de hilos Finalmente, tenemos void Thread.join(). Este método termina el hilo y libera los recursos que estuviera ocupando. Puesto que el hilo podría haber sido interrumpido al solicitar su destrucción, join puede arrojar una InterruptedException. Una estrategia para terminar hilos en Java con esto en consideración, es la siguiente: boolean retry = true; while(retry) { try { thread.join(); retry = false; } catch(interruptedexception e) { Logger.getLogger( Mi-app ).log(level.info, El hilo fue interrumpido, e); } } A pesar de consistir en un ciclo, esto debería tomar muy poco tiempo; un par de iteraciones. Si el programa intenta terminar un hilo y no puede hacerlo en menos de 10 iteraciones, lo más probable es que haya algún problema en el diseño de la concurrencia de la aplicación. Intentar terminar un hilo que ejecuta un ciclo while cuya condición de permanencia sigue siendo verdadera hasta este punto, resultará en un fallo: no podemos terminar hilos que no hayan terminado de ejecutar su método run. Por lo anterior, también hay que considerar que si el hilo a terminar está realizando alguna operación larga, como acceso a red o a disco; lo mejor es implementar alguna forma de saber cuando termine dicha operación y entonces solicitar su destrucción. Inicialización del hilo Por cierto, ha notado que run no aparece en la lista anterior? Esto es porque nunca deberemos llamar a run directamente. De hacerlo, se ejecutará el método en el mismo hilo que en el que se hizo la llamada en lugar de hacerlo concurrentemente. Para ejecutar las instrucciones de run apropiadamente usamos void Thread.start(). La palabra reservada synchronized Ya hemos mencionado que los hilos se ejecutan concurrentemente y que comparten las variables globales del programa. Los hilos pueden compartir otras cosas además de variables globales y en general se denominan recursos compartidos a aquellos recursos del sistema a los que la aplicación a la que tiene acceso por medio de más de un hilo (o proceso). Sin embargo, muchas veces vamos a querer organizar y restringir la manera en la que los hilos interactúan con los recursos compartidos. Piense en el siguiente ejemplo: un programa cuenta con dos hilos; uno realiza operaciones aritméticas y produce un resultado cada un cierto tiempo no constante, y almacena el resultado en una variable compartida numérica. El otro hilo le muestra al usuario los resultados que produce el primer hilo; como organizamos

5 la ejecución de estos hilos para que el segundo evite mostrar resultados no actualizados? como los sincronizamos? A lo largo del curso, estudiaremos diversas estrategias y técnicas para resolver este tipo de problemas y otros más; pero por ahora vamos a conocer uno de los mecanismos más simples (desde el punto de vista del programador) que ofrece Java para sincronizar aplicaciones concurrentes. Para sincronizar varios hilos, es muy común usar candados. Estos candados se asocian a los recursos compartidos, de forma que si están abiertos; el primer hilo que quiera apropiarse del recurso, cierra el candado y obliga a esperar a todos los demás hilos que quieran usar el recurso. Hasta que el hilo que cerró el candado lo vuelva a abrir, alguno de los otros hilos podrá intentar apropiarselo para realizar sus tareas. Veremos a lo largo de este curso que este problema no es trivial: bajo la solución expuesta no hay orden en quien se apropia de los recursos y en sistemas multi-procesador; dos o más hilos pueden ser los primeros en cerrar simultáneamente el candado. En Java, todos los objetos cuentan con un candado (tentativamente cualquier objeto de Java puede ser un recurso compartido). La palabra reservada de Java synchronized, tiene dos sintaxis válidas (que nos ayudan a resolver bajo diferentes escenarios, el mismo problema): Podemos usarla en la firma de un método después de la declaración de acceso (public, private, protected...) y antes del tipo de datos del retorno (void, int, Object); por ejemplo: public synchronized int metodo() { } En este caso; cuando los hilos intenten ejecutar el método síncrono, van a competir por apropiarse del candado del objeto al que se le solicita ejecutar el método síncrono (Java resuelve los problemas mencionados anteriormente y garantiza exclusión mutua). Tome en cuenta que el candado es por objeto, por lo que si tenemos dos instancias de la misma clase con el método sincronizado, y un hilo solicita la ejecución del método en una de las instancias y otro hilo ejecuta el método en la otra instancia; el método será ejecutado por ambos hilos en ambas instancias, sin importar el estado de los candados entre ellos (porque son objetos diferentes). Cuando el hilo que haya ejecutado el método síncrono termine de hacerlo, abre el candado y le da oportunidad al resto de los hilos de ejecutar el método. Es importante tomar en cuenta que por hilo no nos referimos exclusivamente a una instancia de Thread; si no a cualquier objeto que ejecute sus instrucciones en algún hilo de ejecución que pertenezca al programa. Podemos usarla para definir un bloque de código sincronizado. Esta sintaxis requiere del recurso compartido (algún objeto) que queremos manipular de forma excluyente entre los hilos; por ejemplo: synchronized(unobjeto) { /* * este bloque de código es el sincronizado * y Java garantiza exclusión mutua en él */ }

6 Un último detalle que es importante tomar en cuenta sobre synchronized, es que al manejar candados por objeto; cuando un hilo ejecuta un bloque de código síncrono, se apropia del candado de dicho objeto y los demás hilos no sólo no podrán ejecutar simultáneamente ese bloque de código síncrono particular; sino también ninguno otro que defina el mismo objeto que se encuentre bloqueado. Ejercicio. Revise el ejemplo calendarizador en java y observe la forma en la que varios hilos realizan distintas operaciones por turnos de forma simultánea. Thread pools (Grupos de hilos) Los grupos de hilos son un tipo de objetos que tienen una colección de hilos listos para ejecutarse. Son la forma preferida de crear hilos. Podemos crear hilos y grupos de hilos mediante la clase java.util.concurrent.executors; usando los métodos: newsinglethreadexecutor() - Devuelve uno y solo un hilo nuevo para realizar tareas de segundo plano. newfixedthreadpool(int) - Crea un grupo de hilos con exactamente tantos hilos listos para ejecutarse como se le indique en su parámetro. newcachedthreadpool() - Crea un grupo de hilos dinámico; es un poco menos eficiente que el de tamaño fijo, pero es útil cuando no hay certeza del número de hilos que va a necesitar nuestra aplicación (por ejemplo si es un servidor remoto). Ahora bien, estos tres métodos (y muchos otros definidos en Executors) no devuelven objetos (o colecciones) de la clase Thread o Runnable; sino más bien devuelven una instancia de la clase java.util.concurrent.executorservice Esta clase es la que se encarga de ejecutar los hilos previamente preparados de forma eficiente; y lo hace a través del método execute(runnable). Define algunos otros métodos que nos permiten un mayor control e interacción con los resultados de los hilos en ejecución con los que contemos; pero este será suficiente la mayor parte de las veces. Otro método importante en ExecutorService es shutdown(). Este método interrumpe y termina la ejecución de cualquier tarea que se le haya solicitado. Callable y Future Antes de retomar el uso de hilos en las GUI, vamos a conocer un par de formas más de crear tareas concurrentes. La primera de ellas es a través de la interfaz java.util.concurrent.callable<v> Callable es muy similar a Runnable; excepto porque el método que define (llamado call y no run) regresa un valor de tipo V, a diferencia de run que no devuelve nada. Además, call puede disparar una excepción. java.util.concurrent.future es una interfaz que nos permite definir acciones mientras y al final de la ejecución de tareas concurrentes. También puede ayudarles a ser interrumpidas en caso de ser necesario. Retomando el problema de la interfaz gráfica irresponsiva Ahora conociendo los hilos en Java, podemos pensar en evitar obstruir el flujo del método que responde a los eventos en el botón Iniciar. Quizá una primera idea para solucionar el problema sea que el método instancie un hilo que contiene en su método run las instrucciones de incrementar el contador y actualizar el texto.

7 Pero, cómo hacemos que interactúe con el botón detener? Quizá lo más fácil sea contar con una variable booleana global en el programa (recuerde que por omisión, todas las variables globales de un programa son públicas para todos sus hilos). Al generar un evento en iniciar, le asignamos un valor falso a la variable, e iteramos la cuenta mientras el valor de dicha variable no cambie. Así, al generar un evento en detener, lo único que tendríamos que hacer es justamente asignar el valor verdadero a la misma variable compartida. Ejercicio. Modifique el ejemplo Interfaz no responsiva de acuerdo a las ideas anteriores y ejecute el programa. el comportamiento de la aplicación es el esperado? qué pasa con los tiempos de respuesta? Veamos algunas herramientas que nos proporciona Swing, para poder hacer una última mejora a nuestro programa que nos permitirá aprovechar mejor los recursos del sistema. Hilos y Swing Toda aplicación que use Swing contará con al menos tres hilos: 1. Hilo principal, construido por la JVM cuando es invocado el programa para ejecutar el main de nuestra aplicación. Este usualmente solo construye la interfaz gráfica y muere; pero podríamos conservarlo para otras tareas, dependiendo del diseño de nuestra aplicación. 2. Hilo administrador de eventos. Este es el encargado de refrescar la memoria de vídeo y de administrar eventos; de forma que la entrada y salida de la aplicación (al menos en lo que compete a la GUI) sea responsiva. Este hilo es el que ejecuta por defecto todas las operaciones de los métodos receptores de eventos. 3. Hilos trabajadores de segundo plano, que se encargan de tareas de cómputo intensivo e IO. Por otro lado, la clase javax.swing.swingutilities contiene un par métodos estáticos de interés para lo que estamos haciendo: static void invokelater(runnable) y static void invokeandwait(runnable); que nos permite encolar los Runnables dados para ejecutar su método run dentro del hilo de eventos de swing. La diferencia entre invokelater e invokeandwait, es que invokeandwait espera a que el hilo de eventos termine de ejecutar todo lo que tenga pendiente (en la iteración en la que se encuentre), para al final ejecutar el método run del Runnable dado. Es muy recomendable usar invokelater en el hilo principal de nuestro programa para construir la interfaz gráfica. Ya para terminar, conoceremos a la clase javax.swing.swingworker<t, V>; que nos permite administrar los hilos de segundo plano en una aplicación gráfica. Como hemos visto en el ejemplo de la interfaz no responsiva original; ejecutar código que requiera una fracción considerable de tiempo en terminar en el hilo de eventos, es una mala estrategia porque da la apariencia de que la aplicación se ha congelado.

8 Un SwingWorker es básicamente un hilo de ejecución que realiza tareas que toman mucho tiempo en ejecutarse en segundo plano y devuelve los resultados al hilo de eventos para que puedan reflejarse en la interfaz gráfica (recordemos que este último hilo es el encargado de actualizar la memoria de vídeo). Sin embargo, su capacidad no se limita a devolver los resultados al final de la ejecución; puede devolver también resultados parciales que podemos usar para mostrarle al usuario los avances en pantalla. SwingWorker es una clase que ocupa un par de tipos de datos parametrizados: T y V. T es el tipo de datos que se le asociará a el resultado final de ejecutar las tareas del SwingWorker y V es el tipo de datos que se asocia a los resultados parciales. SwingWorker es una clase abstracta y para usarla necesitamos definir únicamente el método protected T doinbackground(); que debe contener el código de la tarea larga que queremos que realice el hilo de segundo plano. Además, define varios otros métodos que podemos usar para conocer la interacción del usuario con el sistema. Es recomendable que las tareas de cómputo intensivo en el método doinbackground() se realicen iterativamente en un ciclo que se repita mientras el usuario no desee interrumpir la tarea; para ello podemos apoyarnos del método iscancelled() como condición de permanencia. Al final del ciclo es útil pasarle los resultados parciales del procesamiento al método publish(v...), para exhibirlos al usuario. Es importante tomar en cuenta que la publicación es asíncrona. SwingWorker no sabe qué hacer por omisión con nuestros resultados parciales (ni con el general), por lo que nos permite redefinir el método protected void process(java.util.list<v>). La lista que recibe process como argumento, contendrá todos los resultados parciales que se hayan acomulado durante un tiempo mientras se ejecuta doinbackground (recordemos que estas publicaciones son asíncronas). Usando esta lista podemos modificar elementos en la interfaz para reflejar el progreso. Es importante considerar que cada vez que se invoca process, los resultados parciales que se hayan recibido la última vez que se invocó process ya no estarán disponibles en la lista. Finalmente; para actualizar la interfaz gráfica y reflejar los resultados generales de la ejecución del SwingWorker, podemos sobreescribir el método protected void done(). Será importante tomar en cuenta que done se ejecuta en el hilo de eventos de Swing, por lo que debe ser breve o podría crear retrasos en la interfaz. Ejercicio. Vuelva a modificar el ejemplo Interfaz no responsiva. Agregue una pequeña espera (retraso) en el ciclo que cuenta y actualiza la etiqueta y termine el hilo al final del método que atiende los eventos del botón detener. Analice y considere usar la la clase SwingUtilities o SwingWorker para optimizar modificar la forma en la que se instancia el hilo que realiza el conteo. Referencias 1. Hock Chuan, C., (2008), Java Programming Tutorial: Multithreading & concurrent programming en Nanyang Technological University. [En línea]. Singapur, disponible en:

9 2. Oracle Corporation, Java platform, standard edition 7. API specification en Oracle Help Center. [En línea]. EE UU, disponible en: [Accesado el día 16 de agosto del 2016].

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control Hilos BUAP Introducción Normalmente, los programas son ejecutados de forma secuencial Único flujo de control Un programa con un único flujo de control, ejecuta sólo una tarea (hilo) Dr. Ivan Olmos 2 Introducción

Más detalles

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A. SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:

Más detalles

Aplicaciones Concurrentes

Aplicaciones Concurrentes PROGRAMACIÓN CONCURRENTE TEMA 6 Aplicaciones Concurrentes ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Aplicaciones Concurrentes

Más detalles

Diseño arquitectónico 1ª edición (2002)

Diseño arquitectónico 1ª edición (2002) Unidades temáticas de Ingeniería del Software Diseño arquitectónico 1ª edición (2002) Facultad de Informática objetivo Los sistemas grandes se descomponen en subsistemas que suministran un conjunto relacionado

Más detalles

1 HILOS (THREADS) EN JAVA

1 HILOS (THREADS) EN JAVA 1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los

Más detalles

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A) aprenderaprogramar.com Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029 Autor: Mario R. Rancel

Más detalles

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía Tema 3 SUBRUTINAS ÍNDICE Definición e instrucciones básicas Soporte para el tratamiento de subrutinas (ejecución de la subrutina y gestión del bloque de activación) Interrupciones vs llamadas a procedimiento

Más detalles

Tema: Clases y Objetos en C#. Parte II.

Tema: Clases y Objetos en C#. Parte II. Programación II. Guía No. 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C#. Parte II. Objetivos Implementar clases, objetos, propiedades, métodos y

Más detalles

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Métodos que devuelven valor Dado el siguiente triángulo rectángulo: Métodos que devuelven valor Dado el siguiente triángulo rectángulo: hipotenusa altura base Para dibujar este triángulo necesitamos los siguientes datos: base y altura La base y la altura, se utilizarán

Más detalles

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C) APRENDERAPROGRAMAR.COM INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C) Sección: Cursos Categoría: Lenguaje de programación Java nivel

Más detalles

Programación Orientada a Objetos (POO)

Programación Orientada a Objetos (POO) Programación Orientada a Objetos (POO) Introducción La programación orientada a objetos es una técnica de programación en la cual expresamos el código en términos relacionados a como vemos las cosas en

Más detalles

JAVA 7 Los fundamentos del lenguaje Java

JAVA 7 Los fundamentos del lenguaje Java Presentación 1. Historia 9 1.1 Por qué Java? 9 1.2 Objetivos del diseño de Java 10 1.3 Auge de Java 11 2. Características de Java 12 2.1 El lenguaje de programación Java 12 2.1.1 Sencillo 13 2.1.2 Orientado

Más detalles

Federico Peinado www.federicopeinado.es

Federico Peinado www.federicopeinado.es Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es

Más detalles

Manipulación de procesos

Manipulación de procesos Manipulación de procesos Las primeras computadoras solo podían manipular un programa a la vez. El programa tenía control absoluto sobre todo el sistema. Con el desarrollo vertiginoso del hardware ese panorama

Más detalles

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad

Más detalles

Usando el Sistema Operativo

Usando el Sistema Operativo Sistemas Operativos Pontificia Universidad Javeriana Enero de 2010 Los sistemas operativos Los sistemas operativos Perspectivas del Computador Concepto general El sistema operativo es parte del software

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo rcoppo@uns.edu.ar Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación

Más detalles

Hebras y Sincronización en Java

Hebras y Sincronización en Java Hebras y Sincronización en Java Jonathan Makuc http://jmakuc.ublog.cl Noviembre 2008 Tópicos: 1. Introducción a hebras en Java...2 2. Hebras a través del clase Thread...3 3. Hebras a través de la interfaz

Más detalles

Lenguaje de programación con JAVA

Lenguaje de programación con JAVA Pág. N. 1 Lenguaje de programación con JAVA Familia: Editorial: Autor: Tecnología de la información y computación Macro Eric Gustavo Coronel Castillo ISBN: 978-612-304-288-2 N. de páginas: 360 Edición:

Más detalles

Guía práctica de estudio 03: Algoritmos

Guía práctica de estudio 03: Algoritmos Guía práctica de estudio 03: Algoritmos Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 03: Algoritmos Objetivo:

Más detalles

Anexo. Control de errores

Anexo. Control de errores Anexo. Control de errores Tipos de errores Los errores en un programa o algoritmo se pueden clasificar de la siguiente manera Errores de compilación Los errores de compilación no permiten la ejecución

Más detalles

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()

Más detalles

Threads, SMP y Microkernels. Proceso

Threads, SMP y Microkernels. Proceso Threads, SMP y Microkernels Proceso Propiedad de los recursos a un proceso se le asigna un espacio de dirección virtual para guardar su imagen Calendarización/ejecución sigue una ruta de ejecución la cual

Más detalles

Aspectos Básicos de Networking

Aspectos Básicos de Networking Aspectos Básicos de Networking ASPECTOS BÁSICOS DE NETWORKING 1 Sesión No. 4 Nombre: Capa de transporte del modelo OSI Contextualización Existen diferencias en los servicios de protocolos? Los protocolos

Más detalles

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado Facultad de Ingeniería. Escuela de computación. 2 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 5 3 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo de sus prácticas

Más detalles

Diagramas de secuencia

Diagramas de secuencia Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación Diagramas de secuencia Interacciones básicas 1 Para qué sirven los diagramas de secuencia? 2 Para qué sirven los diagramas de

Más detalles

LISTA PARA VALIDACIÓN DE DATOS EN EXCEL

LISTA PARA VALIDACIÓN DE DATOS EN EXCEL LISTA PARA VALIDACIÓN DE DATOS EN EXCEL Cuando compartes tus libros de Excel con otras personas y ellos introducen información en las hojas que has preparado con tanto esfuerzo, es de suma importancia

Más detalles

Diagramas de secuencia

Diagramas de secuencia Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación Diagramas de secuencia Fragmentos Combinados: caminos alternativos Departamento de Ingeniería de Sistemas y Computación - Universidad

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Conversión entre Tipos

Conversión entre Tipos Conversión entre Tipos La conversión entre tipos permite comparar y copiar valores entre diferentes tipos. En esta lección describiremos como convertir un tipo dado en otro. Conversión en VB y Existen

Más detalles

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro Lectura de Datos Dentro de un applet es sencillo tomar algún dato del usuario para realizar

Más detalles

Estructuras en LabVIEW.

Estructuras en LabVIEW. Estructuras en LabVIEW. Sumario: 1. Ejecución según el flujo de datos. 2. Estructuras básicas disponibles en LabVIEW. a) Estructura Sequence. b) Estructura Case. c) Estructura For Loop. d) Estructura While

Más detalles

Java y JVM: programación concurrente

Java y JVM: programación concurrente Java y JVM: programación concurrente Adolfo López Díaz Escuela de Ciencias de la Computación e Informática. Universidad de Costa Rica Resumen: El lenguaje de programación Java proporciona, sin necesidad

Más detalles

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008 Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid de abril de 00 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los recursos

Más detalles

Introducción a los Sistemas Operativos

Introducción a los Sistemas Operativos Introducción a los Sistemas Operativos Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es 1 Índice General Conceptos sobre ordenadores Concepto

Más detalles

Guía práctica de estudio 05: Diagramas de flujo

Guía práctica de estudio 05: Diagramas de flujo Guía práctica de estudio 05: Diagramas de flujo Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 05: Diagramas de

Más detalles

LABORATORIO ARQUITECTURAS SOFTWARE DE VARIOS NIVELES EN JAVA (I)

LABORATORIO ARQUITECTURAS SOFTWARE DE VARIOS NIVELES EN JAVA (I) LABORATORIO ARQUITECTURAS SOFTWARE DE VARIOS NIVELES EN JAVA (I) SEPARACIÓN DEL NIVEL DE PRESENTACIÓN Y LÓGICA DE NEGOCIO MEDIANTE EL USO DE INTERFACES JAVA 1. OBJETIVO Los objetivos de este laboratorio

Más detalles

Figura 2. Figura 1. Figura 3. Figura 4

Figura 2. Figura 1. Figura 3. Figura 4 Examen 1. Se desea construir un sistema de gestión de ventas para comercios. El sistema constará de una base de datos en la que, entre otras cosas, se almacena la información del inventario de productos

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

20483 Programación en C#

20483 Programación en C# 20483B 20483 Programación en C# Fabricante: Microsoft Grupo: Desarrollo Subgrupo: Microsoft Visual Studio 2012 Formación: Presencial Horas: 25 Introducción Este curso enseña a los desarrolladores las habilidades

Más detalles

4. DIAGRAMAS DE INTERACCIÓN INTRODUCCIÓN DIAGRAMAS DE SECUENCIA Objetos Mensajes

4. DIAGRAMAS DE INTERACCIÓN INTRODUCCIÓN DIAGRAMAS DE SECUENCIA Objetos Mensajes 4. DIAGRAMAS DE INTERACCIÓN...37 4.1. INTRODUCCIÓN... 37 4.2. DIAGRAMAS DE SECUENCIA... 37 4.2.1. Objetos...37 4.2.2. Mensajes...38 4.2.3. Creación y destrucción de un objeto...39 4.3. DIAGRAMAS DE COLABORACIÓN...

Más detalles

COMUNICACIÓN ENTRE EL CLIENTE Y SERVIDOR SIN PHP Y CON PHP. INTÉRPRETE PHP Y GESTOR DE BASES DE DATOS (CU00804B)

COMUNICACIÓN ENTRE EL CLIENTE Y SERVIDOR SIN PHP Y CON PHP. INTÉRPRETE PHP Y GESTOR DE BASES DE DATOS (CU00804B) APRENDERAPROGRAMAR.COM COMUNICACIÓN ENTRE EL CLIENTE Y SERVIDOR SIN PHP Y CON PHP. INTÉRPRETE PHP Y GESTOR DE BASES DE DATOS (CU00804B) Sección: Cursos Categoría: Tutorial básico del programador web: PHP

Más detalles

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

de Gran Canaria Centro de Tecnología Médica  Programación Concurrente Universidad de Las Palmas de Gran Canaria Centro de Tecnología Médica http://www.ctm.ulpgc.es Tema 1: Introducción a la Escuela Técnica Superior de Ingenieros de Telecomunicación Conceptos Fundamentales

Más detalles

Introducción a Swing. Taller de Programación 2016

Introducción a Swing. Taller de Programación 2016 Introducción a Swing Taller de Programación 2016 tprog@fing.edu.uy Introducción En qué estamos exactamente? Cómo debemos codificar? Por donde empezar? Empecemos por entender el contexto y la arquitectura

Más detalles

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO Definición y objetivos de un S.O Definición y objetivos del sistema operativo Estructura, componentes y servicios de un S.O Llamadas al sistema

Más detalles

Parte I:Teoría. Tema 3:Introducción a los Sistemas operativos. Instalación

Parte I:Teoría. Tema 3:Introducción a los Sistemas operativos. Instalación Tema 3:Introducción a los Sistemas operativos. Instalación Parte I:Teoría Introducción a los SO Componentes Llamadas al sistema Estructura del Kernel Drivers Esta obra está bajo una licencia Reconocimiento-No

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

Memoria. Organización de memorias estáticas.

Memoria. Organización de memorias estáticas. Memoria 1 Memoria Organización de memorias estáticas. 2 Memoria En memoria físicas con bus de datos sea bidireccional. 3 Memoria Decodificación en dos niveles. 4 Necesidad de cantidades ilimitadas de memoria

Más detalles

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

Modulo 11. Clases y Objetos en Java

Modulo 11. Clases y Objetos en Java El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, Introduction to Programming 1, no pretende en ningún momento reemplazar los contenidos generados por este grupo.

Más detalles

LABORATORIO ARQUITECTURAS SOFTWARE DE VARIOS NIVELES EN JAVA (I)

LABORATORIO ARQUITECTURAS SOFTWARE DE VARIOS NIVELES EN JAVA (I) LABORATORIO ARQUITECTURAS SOFTWARE DE VARIOS NIVELES EN JAVA (I) SEPARACIÓN DEL NIVEL DE PRESENTACIÓN Y LÓGICA DE NEGOCIO MEDIANTE EL USO DE INTERFACES JAVA 1. OBJETIVO Los objetivos de este laboratorio

Más detalles

Concurrencia en Android LSUB, GYSC, URJC

Concurrencia en Android LSUB, GYSC, URJC Concurrencia en Android LSUB, GYSC, URJC Repaso de concurrencia en Java Crear un thread Instanciar un Thread, con el método run sobreescrito Intanciar un objeto que cumpla el interfaz Runnable y pasárselo

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

CEDIS SISTEMA ADMINISTRATIVO PARA EL CONTROL DE BARES Y RESTAURANTES SOFT RESTAURANT (Versión 8.0.0) National Soft de México

CEDIS SISTEMA ADMINISTRATIVO PARA EL CONTROL DE BARES Y RESTAURANTES SOFT RESTAURANT (Versión 8.0.0) National Soft de México CEDIS SISTEMA ADMINISTRATIVO PARA EL CONTROL DE BARES Y RESTAURANTES SOFT RESTAURANT (Versión 8.0.0) National Soft de México El módulo CEDIS le permite administrar los pedidos realizados desde las sucursales

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B) APRENDERAPROGRAMARCOM FUNCIONES PHP: DECLARACIÓN Y LLAMADAS PARÁMETROS, RETURN EJERCICIOS EJEMPLOS RESUELTOS (CU00827B) Sección: Cursos Categoría: Tutorial básico del programador web: PHP desde cero Fecha

Más detalles

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc. Tutorial de C# Delegados y Eventos Por: Óscar López, M.Sc. olopez@uniandino.com.co DELEGADOS Delegados Son unos objetos que implícitamente extienden de System.Delegate y definen un tipo referencia soportado

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA Angel García Beltrán y José María Arranz Santamaría Sección de Publicaciones Escuela Técnica Superior de Ingenieros Industriales Universidad Politécnica de Madrid

Más detalles

Sistemas Operativos Practica 1: procesos y concurrencia.

Sistemas Operativos Practica 1: procesos y concurrencia. Sistemas Operativos Practica 1: procesos y concurrencia. Objetivos: Introducir al alumno a los conceptos de programa, concurrencia, paralelismo y proceso o tarea. Manejo del concepto de concurrencia haciendo

Más detalles

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos PROGRAMACIÓN DE SHELL SCRIPTS EN LINUX El shell es un intérprete de órdenes, pero el shell no es solamente eso; los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como tales,

Más detalles

Derechos de Acceso: COMPOSICION

Derechos de Acceso: COMPOSICION CLASES Una clase es un tipo definido por el usuario que describe los atributos y los métodos de los objetos que se crearan a partir de la misma. class nombre_clase cuerpo de la clase Derechos de Acceso:

Más detalles

(THREADS) Ing. Laura Sandoval Montaño, Ing. Manuel Enrique Castañeda Castañeda PAPIME 104911

(THREADS) Ing. Laura Sandoval Montaño, Ing. Manuel Enrique Castañeda Castañeda PAPIME 104911 (THREADS) HILOS JAVA La Máquina Virtual Java (JVM) es un sistema multihilo. La JVM gestiona todos los detalles, asignación de tiempos de ejecución, prioridades, etc., de forma similar a como gestiona un

Más detalles

Object 1. Threads en Java

Object 1. Threads en Java Object 1 Threads en Java Introducción En este artículo voy a explicar cómo se usan los threads en Java (también traducidos como "hilos de ejecución"). La intención no es solamente explicar cuáles son las

Más detalles

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. El mecanismo de threads Una aplicación Java o applet puede contener secciones

Más detalles

Servicios del Sistema Operativo (SO)

Servicios del Sistema Operativo (SO) Servicios del Sistema Operativo (SO) Un SO brinda un entorno para ejecutar programas. Este, ofrece servicios a los programas y a los usuarios de dichos programas. Por supuesto, los servicios específicos

Más detalles

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido

Más detalles

Sistemas Operativos. Dr. Luis Gerardo de la Fraga. Departamento de Computación Cinvestav

Sistemas Operativos. Dr. Luis Gerardo de la Fraga.    Departamento de Computación Cinvestav Sistemas Operativos Dr. Luis Gerardo de la Fraga E-mail: fraga@cs.cinvestav.mx http://cs.cinvestav.mx/~fraga Departamento de Computación Cinvestav 12 de junio de 2015 Dr. Luis Gerardo de la Fraga Cinvestav,

Más detalles

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador HERENCIA Y TIPOS. Las clases con propiedades y funciones comunes se agrupan en una superclase. Las clases que se derivan de una superclase son las subclases. Las clases se organizan como jerarquía de clases.

Más detalles

El patrón Composite (Compuesto) Propósito Componer los objetos a una estructura de jerarquía de relación partetodo.

El patrón Composite (Compuesto) Propósito Componer los objetos a una estructura de jerarquía de relación partetodo. Definición más precisa de los patrones Un patrón del diseño nomina, abstrae y identifica los aspectos claves de un diseño común para crear un diseño orientado a objetos reutilizable. Son descripciones

Más detalles

Guía práctica de estudio 03: Algoritmos

Guía práctica de estudio 03: Algoritmos Guía práctica de estudio 03: Algoritmos Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 03: Algoritmos Objetivo:

Más detalles

Universidad de Managua

Universidad de Managua Universidad de Managua Introducción a la Programación Tema 7 Introducción a la programación en lenguaje C# Objetivos - Describir la estructura básica de un programa en Lenguaje C# - Explicar las estructuras

Más detalles

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola) Objetivos de la sesión Entender el tipo de programas que se pueden realizar con aplicaciones de consola. Conocer el concepto de variable, la forma en que se declaran y su utilización. Conocer la forma

Más detalles

MANUAL AB TUTOR CONTROL

MANUAL AB TUTOR CONTROL MANUAL AB TUTOR CONTROL IES. CARPE DIEM Página 1 INTRODUCCIÓN Qué es AB Tutor Control? AB Tutor Control es un paquete de administración de escritorio. Proporciona al profesor una herramienta para controlar

Más detalles

Capítulo 7. Introducción a las Interfaces Gráficas de usuario. Continuar

Capítulo 7. Introducción a las Interfaces Gráficas de usuario. Continuar Capítulo 7 Introducción a las Interfaces Gráficas de usuario Continuar Introducción Se explicará qué es una interfaz gráfica, cómo han evolucionado y cómo es que debe desarrollarse un programa que incluya

Más detalles

Procesos e Hilos en C

Procesos e Hilos en C Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya CADENAS DE CARACTERES Hasta ahora se han manejado variables de tipo caracter cuyo valor es un sólo caracter. En algunos casos, sin embargo, es necesario usar variables cuyos valores sean un conjunto (cadena)

Más detalles

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos. Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:

Más detalles

FACULTAD DE INGENIERÍA

FACULTAD DE INGENIERÍA NOMBRE DEL PROFESOR: Ing. Héctor Manuel Quej Cosgaya NOMBRE DE LA PRÁCTICA: Estructuras de decisión PRÁCTICA NÚM. [ 5 ] LABORATORIO: MATERIA: UNIDAD: TIEMPO: Centro de Ingeniería Computacional Lenguaje

Más detalles

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual. Manual de Dev-C++ 4.9.9.2 Página 1 de 11 Introducción Dev-C++ es un IDE (entorno de desarrollo integrado) que facilita herramientas para la creación y depuración de programas en C y en C++. Además, la

Más detalles

Guía práctica de estudio 04: Clases y objetos

Guía práctica de estudio 04: Clases y objetos Guía práctica de estudio 04: Clases y objetos Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio 04: Clases y

Más detalles

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia Programación orientada a objetos Capítulo 8 Mejora de las estructuras mediante herencia Clases y objetos de DoME Modelo de objetos Modelo de clases Crítica de la v1 de DoME - Duplicación de código - Las

Más detalles

Tema 6 Organización y gestión de la memoria

Tema 6 Organización y gestión de la memoria Departamento de Tecnologías de la Información Tema 6 Organización y gestión de la memoria Ciencias de la Computación e Inteligencia Artificial Índice 6.1 Organización de la memoria en tiempo de ejecución

Más detalles

TADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013

TADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013 TADs en C Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013 1. Objetivos Definición de TADs en C Ocultación de la implementación del TAD Manejo básico de memoria dinámica 2. Usando

Más detalles

Guía Rapida Herramienta Programación de Riego

Guía Rapida Herramienta Programación de Riego Guía Rapida Herramienta Programación de Riego 3 Índice Índice Índice... 3 Programación de Riego... 5 Cómo leer este documento... 5... 6 Ingresando a Riego... 6 Partes de Riegos... 7 Alarmas... 8 Acciones...

Más detalles

Elementos Diagramas de Clases Clase:

Elementos Diagramas de Clases Clase: Diagramas de Clases Un diagrama de clases o estructura estática muestra el conjunto de clases y objeto importantes que forman parte de un sistema, junto con las relaciones existentes entre clases y objetos.

Más detalles

Reporting (objeto Query)

Reporting (objeto Query) Reporting (objeto Query) En muchas ocasiones necesitamos realizar consultas a la base de datos para analizar la información y poder tomar decisiones. Podemos necesitar agrupar la información por uno o

Más detalles

Parte 4: Estructuras de Control

Parte 4: Estructuras de Control Parte 4: Estructuras de Control Las estructuras de control le permiten controlar el flujo de ejecución del programa. Tenemos dos tipos de estructuras de control: Estructuras de decisión Estructuras de

Más detalles

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo

Más detalles

INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO IBEROTEC SEMESTRE ACADÉMICO: 2014-II SÍLABO

INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO IBEROTEC SEMESTRE ACADÉMICO: 2014-II SÍLABO INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO IBEROTEC SEMESTRE ACADÉMICO: 01-II 1. DATOS GENERALES SÍLABO UNIDAD DIDÁCTICA : LENGUAJES Y HERRAMIENTAS DE DESARROLLO DE SOFTWARE MÓDULO : DESARROLLO DE SOFTWARE

Más detalles

Visual Basic y.net: Procedimientos Sub y funciones Function. Parámetros. Organizar programas en módulos. (CU00338A)

Visual Basic y.net: Procedimientos Sub y funciones Function. Parámetros. Organizar programas en módulos. (CU00338A) aprenderaprogramar.com Visual Basic y.net: Procedimientos Sub y funciones Function. Parámetros. Organizar programas en módulos. (CU00338A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión:

Más detalles

Serialización de datos en C# en Binario, Soap y Xml

Serialización de datos en C# en Binario, Soap y Xml Serialización de datos en C# en Binario, Soap y Xml Quizás muchos desarrolladores hayan escuchado hablar del termino serializar la información y no saber de que se trata. Pues bien, resulta que la serialización

Más detalles

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1 Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos

Más detalles

PATRONES DE DISEÑO DE CREACIÓN. Abstract Factory Builder Factory Method Prototype

PATRONES DE DISEÑO DE CREACIÓN. Abstract Factory Builder Factory Method Prototype PATRONES DE DISEÑO DE CREACIÓN Abstract Factory Builder Factory Method Prototype Patrones de diseño de creación Abstraen el proceso de creación de instancias Encapsulan el conocimiento sobre las clases

Más detalles

INGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño

INGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño INGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño Univ. Cantabria Fac. de Ciencias Patricia López Introducción al Diseño Modelamos la estructura software del sistema (incluida la arquitectura) para

Más detalles

DISTRIBUCIÓN N BINOMIAL

DISTRIBUCIÓN N BINOMIAL DISTRIBUCIÓN N BINOMIAL COMBINACIONES En muchos problemas de probabilidad es necesario conocer el número de maneras en que r objetos pueden seleccionarse de un conjunto de n objetos. A esto se le denomina

Más detalles

1

1 Curso: BORLAN DELPHI 5 Curso de desarrollo de aplicaciones Windows utilizando el entorno de programación Borland Delphi 5. Se estudian las particularidades del lenguaje Delphi, así como su sintaxis; sus

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Java: Programación Multithread

Java: Programación Multithread Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto

Más detalles