Está en la página 1de 23

/Desarrollo de

applets/aplicaciones
con uso de base de
datos, redes,
servlets y multimedia

Elementos multimedia en Java

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


2 Tabla de Contenido

1. Introducción al Recurso Educativo Virtual........................................................ 3


2. Mapa conceptual ............................................................................................. 4
3. Desarrollo de contenidos.................................................................................. 5
3.1. Elementos multimedia en Java..................................................................... 5
3.1.1. Imágenes.................................................................................................... 5
3.1.1.1. Declaración de una imagen..................................................................... 6
3.1.1.2. Cargar la imagen..................................................................................... 6
3.1.1.3. Desplegar la imagen............................................................................... 6
3.1.1.4. Escalando imágenes............................................................................... 8
3.1.1.5. Iconos ..................................................................................................... 9
3.1.2. Sonidos.................................................................................................... 11
3.1.2.1. Play de Applet....................................................................................... 11
3.1.2.2. Play de Applet con archivo.................................................................... 11
3.1.2.3. Play de Applet con URL......................................................................... 12
3.1.2.4. Play de AudioClip ................................................................................. 13
3.1.3. Animaciones en Java............................................................................... 15
3.1.3.1. Doble Buffer .......................................................................................... 15
3.1.3.2. Creación de contextos gráficos............................................................. 15
3.1.3.3. Animación utilizando hilos .................................................................... 17
4. Material anexo al tema .................................................................................. 20
5. Glosario ......................................................................................................... 21
6. Referencias bibliográficas ............................................................................. 22
Créditos.............................................................................................................. 23
Creative Commons ............................................................................................ 23

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3

1. Introducción

Cuando se habla de elementos multimedia


en Java, se refiere a que la aplicación usa más de
un medio de comunicación en la presentación de
la información, como texto, imagen, animación, y
sonido.

Usar estos elementos mejora notablemente


la atención, compresión y aprendizaje, ya que los
seres humanos se caracterizan por ser visuales y
auditivos.

Java incluye herramientas que permiten


desarrollar poderosas aplicaciones en las que se
pueden usar y manipular textos, imágenes, sonidos
y videos. En esta unidad del curso aprenderá
a implementar en sus aplicaciones imágenes,
sonidos y animaciones.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


4
2. Mapa conceptual

Fuente: SENA

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3. Desarrollo de contenidos 5
3.1. Elementos multimedia en Java en la página de Oracle encontrada en la dirección
https://docs.oracle.com/javase/7/docs/api/java/
Cuando se habla de elementos multimedia awt/Image.html
en Java, se refiere a que la aplicación usa más de
un medio de comunicación en la presentación de Los siguientes son algunos de los métodos de esta
la información, como texto, imagen, animación, y clase.
sonido.

Usar estos elementos mejora notablemente la Métodos y descripción


atención, compresión y aprendizaje, ya que los
seres humanos son visuales y auditivos. getGraphics()
Crea un contexto gráfico para dibujar una imagen detrás de la pantalla.
Java incluye herramientas que permiten desarrollar
poderosas aplicaciones en las que se pueden usar getHeight (ImageObserver observer)
y manipular texto, imágenes, sonidos y videos. En Devuelve la altura de la imagen
esta unidad del curso aprenderá a implementar en
sus aplicaciones imágenes, sonidos y animaciones. getProperty(String name, ImageObserver observer)
Obtiene una propiedad de la imagen por nombre.
Para probar el código fuente explicado a
continuación, y realizar las actividades de la getScaledInstance(int width, int height, int hints)
presente unidad, puede hacerlo directamente Crea una versión a escala de esta imagen.
usando el visor de Applets que trae el editor de
Java de su preferencia. Los presentes ejemplos getWidth(ImageObserver observer)
fueron probados en Eclipse el cual puede ser Devuelve el ancho de la imagen.
descargado en su última versión, de:
https://eclipse.org/ Tabla 1. Fuente: https://docs.oracle.com/javase/7/docs/api/java/awt/Image.html)

3.1.1. Imágenes

En Java las imágenes son objetos de la clase


Image que hace parte del paquete java.awt.*.
La documentación oficial de esta clase se encuentra

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


6 3.1.1.1. Declaración de una imagen 3.1.1.3. Desplegar la imagen

Los pasos requeridos para mostrar una imagen Una vez que se ha cargado la imagen se puede
son: crear, cargar y desplegar una imagen. desplegar utilizando el método drawImage() de la
Lo primero que se debe hacer es declarar una clase Graphics.
variable tipo Image. Por ejemplo:
La documentación oficial de esta clase la
Image miImagen; encuentran en la dirección
https://docs.oracle.com/javase/7/docs/api/java/
3.1.1.2. Cargar la imagen awt/Graphics.html

El segundo paso, es cargar la imagen a través del boolean drawImage (Image obj, int x, int y,
método getImage() del objeto que se creó en el ImageObserver imgOb)
paso anterior. Este método tiene los siguientes
parámetros: El método drawImage() recibe cuatro
parámetros: El primero es el objeto Image que
Image getImage(URL ubicación, String contiene la imagen a mostrar, el segundo y tercer
nombreImagen) parámetro son la posición en pixeles(x, y) dentro
de la ventana en la que se desplegará la imagen,
El primer parámetro es un objeto tipo siendo x=0 y y=0 la esquina superior izquierda de
URL, y debe contener la ubicación del archivo. la ventana. El último parámetro corresponde al
Si la imagen está ubicada en la misma carpeta observador de la imagen que permite monitorearla
donde está el applet podemos usar el método mientras se carga.
getDocumentBase() de la clase applet. El
segundo parámetro es el nombre del archivo. Por ejemplo:

Por Ejemplo, para asignar al objeto miImagen Para mostrar en pantalla la imagen cargada en
la imagen que se llama logo_sena.png que se miImagen en la posición 20,30 de la ventana se
encuentra junto con el applet se utilizaría la utilizaría la siguiente instrucción:
siguiente instrucción:
g.drawImage(miImagen, 20, 30, this);
miImagen = getImage(getDocumentBase(), “logo_
sena.png”);

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


Applet ejemplo: 7
Tomando en cuenta todo lo anterior, el siguiente applet muestra la imagen logo_sena.png en la esquina
superior izquierda de la ventana creada por el Applet:

import java.awt.*;
import java.applet.*;

public class DespliegaImagen extends Applet {


Image miImagen;
public void init() {
miImagen = getImage(getDocumentBase(), “logo_sena.png”);
}
public void paint(Graphics g){
g.drawImage(miImagen, 0, 0, this);
}
}

Cuando el applet se ejecuta, empieza por cargar


la imagen ejecutando el método init(). El método
paint() se llama cada vez que llegue una imagen,
en este caso se llama solo una vez.

La ejecución del applet muestra lo siguiente:

Figura 1. Ejecución applet 1

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


8 3.1.1.4. Escalando imágenes

Para escalar la imagen, se usa otra versión del método drawImage() de


Graphics que se usó en el ejemplo anterior.

drawImage (Image obj, int x, int y, int ancho, int alto, ImageObserver imgOb)

En esta los parámetros que se le pasan en la cuarta y quinta posición se


especifican la anchura y altura de la imagen.

Por ejemplo:

import java.awt.*;
import java.applet.*;

public class DespliegaImagen extends Applet {


Image miImagen;
public void init() {
miImagen = getImage(getDocumentBase(), “logo_sena.png”);
}
public void paint(Graphics g){
g.drawImage(miImagen, 0, 0, 100, 100, this);
}
}

Este mostraría en la ventana la imagen escalada a 100 pixeles de ancho y 100


px de alto.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3.1.1.5. Iconos Dado que la clase ImageIcon no es abstracta, se 9
puede crear un objeto de la clase utilizando el new
Otra forma de desplegar imágenes en la ventana de la siguiente manera:
es utilizar la imagen como un icono. Para hacerlo
de esta manera se debe declarar una variable del miIcono = new ImageIcon (“logo_sena.png”);
tipo ImageIcon.
Finalmente para desplegar el icono en la ventana
ImageIcon miIcono; se utiliza el método paintIcon el cual requiere
cuatro argumentos: una referencia al objeto en el
que se va a mostrar la imagen, una referencia al
La documentación oficial de esta clase la puede objeto Graphics que desplegará la imagen y las
encontrar en la página web coordenadas (x, y) en la que se colocará la esquina
https://docs.oracle.com/javase/7/docs/api/javax/ superior izquierda de la imagen.
swing/ImageIcon.html Ejemplo:
miIcono.paintIcon(this, g, 0, 0);
El siguiente applet muestra en la ventana la imagen logo_sena.png:
Al ejecutar el applet
se vería lo siguiente:

import java.awt.*;
import java.applet.*;
import javax.swing.*;

public class Icono extends JApplet{


ImageIcon miIcono;

public void init() {


miIcono = new ImageIcon (“logo_sena.png”);
}
public void paint(Graphics g){
miIcono.paintIcon(this, g, 0, 0);
} Figura 2. Resultado ejecución
} applet ejemplo 2

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


10 Como se puede observar, el resultado de ejecutar Hasta este momento, ha aprendido como
este Applet es similar al que se utilizó anteriormente. insertar imágenes en Applets. En el siguiente
Cabe observar que paintIcon no permite escalar ejemplo verá como insertar una imagen en una
imágenes. aplicación con un JFrame. En este caso, se crea
un objeto tipo JLabel en el cual se inserta la imagen
tipo ImageIcon. A diferencia de los ejemplos con
applets la imagen debe estar ubicada en la raíz de
la carpeta de proyecto.

import javax.swing.*;
public class ImagenEnJframe extends JFrame{
JLabel label;
ImageIcon imagenIcono;

public ImagenEnJframe(){
//creamos el objeto ImageIcon que guardará la imagen
imagenIcono=new ImageIcon(“logo_sena.png”);
//la imagen debe estar en la carpeta raiz del proyecto
//agregamos el objeto ImageIcon al label.
label=new JLabel(imagenIcono);
this.add(label);
setVisible(true);
setSize(500,500);
}

public static void main(String[] args) {

new ImagenEnJframe();
}
}

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3.1.2. Sonidos 11
void play (URL ubicación, String
En los programas en Java se pueden manipular nombreArchivoSonido);
y reproducir clips de audio. Estos clips los puede
crear, o se pueden descargar por Internet. void play (URL urlSonido);
Java proporciona varios mecanismos para
reproducir sonido desde un Applet. 3.1.2.2. Play de Applet con archivo

Los dos métodos más simples son: el método La primera de ellas carga el clip de audio
play() de Applet y el método play() de la clase almacenado en el archivo nombreArchivoSonido
AudioClip (Deitel 2004). Toda la documentación que se encuentra en la ubicación y reproduce el
de esta clase la puede encontrar en el siguiente sonido.
enlace: https://docs.oracle.com/javase/7/docs/api/
java/applet/AudioClip.html El primer argumento es generalmente una llamada
a getDocumentBase de Applet.
3.1.2.1. Play de Applet
Ejemplo:
El método play() de Applet carga solo el sonido play ( getDocumentBase(),”bip.wav”);
una vez y lo reproduce. Después de eso se marca
para ser tomado por el recolector de basura. La siguiente aplicación carga y reproduce el sonido
del archivo “bip.wav” que se encuentra ubicado
El método tiene dos formas: junto a ella:

import java.applet.*;

public class ReproducirSonido extends Applet {


public void init() {
play(getDocumentBase(), “bip.wav”);
}
}

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


12 3.1.2.3. Play de Applet con URL.

La segunda forma de play requiere el URL en el que se encuentra el sonido que será cargado
y reproducido.
En el siguiente ejemplo se puede ver la forma en la que se utiliza play al cual se le debe pasar un URL. En
este caso es necesario utilizar el manejo de excepciones para la excepción MalformedURLException.
Al ejecutar el applet se carga de la página de Internet el URL y se reproduce.

import java.applet.*;
import java.net.*;
public class ReproducirSonidoURL extends Applet {
public void init() {
URL url;
try {
url = new
URL(“http://direccion_de_ubicacion_del_sonido_en_la_web”);
} catch (MalformedURLException e) {
return;
}
play(url);

}
}

Hay que aclarar que, en el ejemplo anterior, debe colocar una ubicación válida del archivo en Internet.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


13
3.1.2.4. Play de AudioClip

Esta técnica es más flexible que la anterior. Un


applet puede utilizar un objeto AudioClip para
almacenar audio que se use varias veces a lo largo
de la ejecución del programa.
El método getAudioClip de Applet tiene dos
formas que utilizan los mismos argumentos del
método play discutido anteriormente.

Este método devuelve una referencia AudioClip.


Un objeto AudioClip tiene tres métodos:

• Play: reproduce el audio una sola vez.

• Loop: reproduce continuamente el audio en


segundo plano

• Stop: termina el audio que se está reproduciendo


en ese momento.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


14
La siguiente aplicación reproduce un sonido indefinidamente al hacer click en el botón

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ReproducirSonidoBotones extends Applet implements
ActionListener{
Button play,stop;
AudioClip audioClip;
public void init(){
play = new Button(“ Reproducir indefinidamente “);
add(play);
play.addActionListener(this);
stop = new Button(“ Stop “);
add(stop);
stop.addActionListener(this);
audioClip = getAudioClip(getDocumentBase(), “bip.wav”);
}
public void actionPerformed(ActionEvent ae){
Button source = (Button)ae.getSource();
if (source.getLabel() == “ Reproducir indefinidamente “){
audioClip.loop();
}
else if(source.getLabel() == “ Stop “){
audioClip.stop();
}
}
}

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


“reproducir indefinidamente”, y para el sonido al utilizarlo en la declaración del método paint(): 15
hacer clik en “Stop”.
public void paint( Graphics g )
3.1.3. Animaciones en Java
El objeto Graphics g es el contexto gráfico y se
Una animación básicamente es la utiliza para realizar todo el dibujo en el Applet.
presentación de imágenes, una después de otra,
con pequeños cambios entre ellas, tan rápido que
no es perceptible al ojo humano.

Cuando la animación no es buena, la imagen


parpadeará y destruirá la ilusión de movimiento.

3.1.3.1. Doble buffer

Al mostrar imágenes en Java, dependiendo


del tamaño suelen aparecer por partes o generando
un efecto visual de parpadeo. Java permite que los
programas carguen primero la imagen en memoria
RAM, para luego mostrarla de forma completa
evitando ese efecto de parpadeo.

Este proceso es conocido como doble-


buffering, y tiene dos ventajas sobre el proceso
normal mostrar la imagen directamente sobre
la pantalla: primero, el usuario ve aparecer de 3.1.3.2. Creación de contextos gráficos
golpe cada imagen en la pantalla, mientras una
se muestra la otra se va cargando en memoria. A través del siguiente ejemplo, se ilustra
Y segundo, esta técnica involucra un objeto cómo se crea un contexto gráfico. Lo primero que
Image, que se puede usar en varios métodos para se debe hacer, es instanciar un objeto tipo Image
simplificar el método paint() del Applet. con una imagen vacía de las dimensiones que va
a tener el contexto gráfico, y después se obtiene
Para utilizar el doble buffering se requiere de un
contexto gráfico (la zona donde se va a pintar) y

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


un objeto Graphics de esa imagen a través del método getGraphics() quien será el contexto gráfico, en
16 el se puede dibujar cualquier cosa.
En el ejemplo, se va a colorear el contexto gráfico de color amarillo para que usted pueda visualizarlo, y
en él se van a dibujar dos círculos, uno rojo y uno azul.

import java.awt.*;
import java.applet.*;
public class Animacion1 extends Applet {
Image ImagenDobleBuffer;//Imagen que servira para el doubleBuffer
Graphics contextoGrafico; //Contexto gráfico en el que dibujaremos
public void init() {
// Inicializa el doble buffer
ImagenDobleBuffer = createImage( 300,300 );
contextoGrafico = ImagenDobleBuffer.getGraphics();
// Construye un área gráfica de trabajo
//coloreamos el contexto amarillo para visualizarlo
contextoGrafico.setColor( Color.yellow );
//delimitamos el area del contexto como un cuadrado
contextoGrafico.fillRect( 0,0,300,300 );
resize( 500,450 );
}
public void paint( Graphics g ) {
// Presenta la imagen del buffer ubicada en la posicion 30,30
g.drawImage( ImagenDobleBuffer,30,30,this );
}

public void dibujarCirculoRojo() {


contextoGrafico.setColor( Color.red );
//Dibujo circulo Rojo en la posicion 20,20 de tamaño 30 ancho,30 alto
contextoGrafico.drawOval( 20,20,30,30 );

}
FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
public void dibujarCirculoAzul() { 17
contextoGrafico.setColor( Color.blue );
//Dibujo circulo Rojo en la posicion 50,60 de tamaño 40 ancho,40 alto
contextoGrafico.drawOval( 50,60,40,40 );
}
public void start() {
// Hace el dibujo off-line
dibujarCirculoRojo();
dibujarCirculoAzul();
// Muestra la imagen de golpe
repaint();
}

3.1.3.3. Animación utilizando hilos

La creación de animaciones es una aplicación


directa del uso de hilos (threads). Java es el
lenguaje ideal para programar animaciones
utilizando esta técnica. El siguiente Applet muestra
un círculo que se escala en su tamaño.

El método update() se ejecuta cada vez que se


llama el método repaint(). Este se modifica de
modo que primero se dibuje en la imagen invisible
en el contexto gráfico creado y luego ésta se
haga visible.

Figura 3. Ejecución ejemplo contexto gráfico.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


18

import java.awt.*;
import java.applet.*;
public class EscalarCirculoAnimado extends Applet implements
Runnable{
Image miImagen;
Graphics contextoGrafico;
Thread hiloAnimacion;
int ancho,alto,posicionx,posiciony;
public void init() {
//valores iniciales del circulo
ancho=0;
alto=0;
//ubicacion del circulo
posicionx=100;
posiciony=100;
//creamos el contexto grafico
miImagen=createImage(300, 300);
contextoGrafico=miImagen.getGraphics();
resize( 500,500 );
}
public void paint(Graphics g){
}
public void run() {
//Creamos un retardo de 20 ms por 50 veces
for ( int contador = 1; contador <= 50; contador ++ ) {
escalar();
try{
Thread.sleep(20);
} catch(InterruptedException ex){
break;

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


} 19
}
}
public void stop(){
if(hiloAnimacion!=null){
hiloAnimacion.stop();
hiloAnimacion=null;
}
}
public void start(){
if(hiloAnimacion ==null){
hiloAnimacion=new Thread(this);
hiloAnimacion.start();
}
}
public void escalar(){
//en cada interaccion escalamos la imagen en 2 pixeles
ancho+=2;
alto+=2;
//volvemos a pintar pantalla. Se ejecuta update(); en el cual
//solo se actualiza el contexto gráfico
repaint();
}
public void update(Graphics g){
contextoGrafico.setColor(getBackground());
contextoGrafico.fillRect(0,0, 500, 500);
//dibuja la pelota
contextoGrafico.setColor(Color.red);
contextoGrafico.fillOval(posicionx, posiciony, ancho, alto);
//transfiere la imagen al contexto gráfico del applet
g.drawImage(miImagen, 0, 0, null);
}
}

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


20 Esto permite evitar el parpadeo o flicker
(García J. 2000).

Todos los ejemplos los puede descargar en la


sección de material complementario de la unidad.
Encontrará un archivo comprimido .ZIP con las

4. Material anexo al tema

Para complementar los diferentes conceptos adquiridos en el presente


documento, se recomienda a los aprendices consultar:

la Documentación Oficial Clase Image Java


https://docs.oracle.com/javase/7/docs/api/java/awt/Image.html,

Documentación Oficial Clase Graphics Java


https://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html,

Documentación Oficial Clase AudioClip Java


https://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html,

Documentación Oficial Clase Imagelcon


https://docs.oracle.com/javase/7/docs/api/javax/swing/ImageIcon.html

Java 2D, Cómo tratar con Java figuras, imágenes y texto en dos dimensiones
en Java2D.pdf

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


21

5. Glosario

AudioClip: tipo de objeto en el que se puede Loop: método de Audioclip que permite reproducir
almacenar y reproducir sonido continuamente. el sonido continuamente.

Doble-buffering: es un proceso que se emplea PaintIcon: método que se utiliza para mostrar una
sobre todo en las animaciones que permite cargar imagen tipo ImageIcon.
las imágenes antes de mostrarlas en pantalla.
Play: método de Audioclip que permite reproducir
DrawImage: método de Graphics que permite el sonido solo una vez.
mostrar y escalar imágenes.
Sistema Multimedia: utiliza más de un medio de
GetImage: regresa un objeto de tipo Image y comunicación al mismo tiempo en la presentación
recibe como parámetro la ubicación del archivo de de la información, como texto, imagen, animación,
la imagen y el nombre de la imagen. y sonido.

Image: clase en JAVA perteneciente al paquete Stop: método de Audioclip que permite parar la
java.awt que permite manipular imágenes. reproducción del sonido.

ImageIcon: clase de Java que permite manipular


imágenes de una forma sencilla.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


22

6. Recursos Bibliográficos

Class Image (s,.f), Recuperado de https://docs.oracle.com/javase/7/docs/


api/java/awt/Image.html

Class Graphics (s,.f), Recuperado de https://docs.oracle.com/javase/7/docs/


api/java/awt/Graphics.html

Class AudioClip (s,.f), Recuperado de https://docs.oracle.com/javase/7/


docs/api/java/applet/AudioClip.html

Deitel H, Cómo programar en Java, quinta edición, Pearson Education, (año


2004), página 930

García J, Rodríguez J, Aprenda Java como si estuviera en primero, Sin


editorial, (año 2000) Página 114

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


23
Créditos Senior Equipo de Adecuación
Equipo de Adecuación Gráfica Claudia Rocio Varón Buitrago
Centro de Comercio y servicios
SENA Regional Tolima Asesor Pedagógico
Línea de Producción Ricardo Palacio

Director Regional Guionistas


Félix Ramón Triana Gaitán Genny Carolina Mora Rojas
Jesús Bernardo Novoa Ortiz
Subdirector de Centro
Álvaro Fredy Bermúdez Salazar Diseño y Diagramación
Diana Katherine Osorio Useche
Coordinadora de Formación Profesional Pedro Nel Cabrera Vanegas
Gloria Ines Urueña Montes Ismael Enrique Cocomá Aldana

Experto temático
Programadores
Manuel Fernando Celemín Coneo
Davison Gaitán Escobar
Héctor Horacio Morales García

Creatives commons
Atribución, no comercial, compartir igual.
Este material puede ser distribuido, copiado y exhibido por
terceros si se muestra en los créditos. No se puede
obtener ningún beneficio comercial y las obras derivadas
tienen que estar bajo los mismos términos de licencia que
el trabajo original.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje

También podría gustarte