Aprendiendo .NET Tutorial PARTE 6

Escrito por George POLIOVEI el Lunes 08 de Diciembre de 2008 a las 19:47hs

Sube Tu Queja
Bienvenidos a esta nueva entrega de Aprendiendo .NET

Nuestra primera aplicación C#

Primero que nada vamos a abrir nuestro Note Pad o el que hayan elegido y digitemos las siguientes líneas de código.-


Recuerden respetar minúsculas y mayúsculas ya que C# hace diferencias gramaticales, esto quiere decir que Class no es lo mismo que class o clasS.

Salvada la primera regla seguimos, como vimos en entregas anteriores para que se coloreen las palabras reservadas del lenguaje es necesario indicarle al Note padd que estamos trabajando con C#.

Mi primera Clase

Como mencionamos antes, a diferencia de C y C++, todo el código de nuestra aplicación deberá estar contenido si o si dentro de una Clase

Existen escasas excepciones de código que viven fuera de una clase, una de estas son las sentencias Using, los namespaces, y otros que veremos más adelante.

Método para construir una clase

Una clase se construye de acuerdo al siguiente detalle:

• La Palabra reservada class
• Un Nombre para identificar la clase
• Una llave de apertura
• El cuerpo de la clase (todo nuestro código)
• Una llave de cierre

Esto es todo lo que necesitamos para construir una clase correctamente

Bueno ahora que ya sabemos como construir una clase vamos a estudiar nuestra primera aplicación línea por línea

Línea 1: comienza por la palabra reservada class e inmediatamente después, el nombre que identificará a dicha clase en el ejemplo anterior es HelloGuruProgrammer.

Línea 2: llave de apertura de la clase, todo nuestro código deberás estar encerrado dentro de las llaves de apertura y cierre de la clase

Línea 3: Aquí aparece un actor muy importante para nuestra aplicación y es la declaración de un Método, pero éste método es especial ya que será el punto de entrada a la aplicación y por lo General lleva el nombre de Main, todas las aplicaciones deben tener un punto de entrada de lo contrario la aplicación no podrá ejecutarse.

¿PERO QUE ES UN METODO Y PORQUE EL METODO MAIN ES TAN ESPECIAL?

Buena pregunta, empecemos por saber que es un método

Un método es un conjunto de instrucciones que se ejecutan cuando es llamado o invocado y de acuerdo a su definición puede o no retornar un valor.

Por ahora no nos vamos a extender mucho sobre los métodos ya que más adelante le vamos a dar un buen espacio de estudio, pero es bueno saber ahora que es el método Main()

Todas las aplicaciones sin excepción deben de tener un método Main o Método Principal, estos métodos brindan el punto de entrada a la aplicación

Cuando hacemos doble clic en el icono de alguna aplicación, los Servicios de Windows exploran todo el contenido de la aplicación en busca del método Main(), si lo encuentran el programa comienza a ejecutarse desde dicho punto y si no lo encuentra entonces la aplicación no podrá ejecutarse

El Método Main() debe ser estático (static), esto significa que durante la ejecución de la aplicación una y solo una copia de dicho método se mantendrá en memoria, esto se debe a que la aplicación solo podrá tener un punto de entrada, si el método Main() no lo declaramos como estático, el resultado sería un caos

El método Main() debe ser público (public), cuando un método lo definimos como público estamos permitiendo que sea accesible de otros lugares, inclusive desde el exterior de la aplicación

Para nuestra pequeña aplicación no es necesario que el método Main() devuelva algún valor, por eso aparece la palabra reservada void , significa que cuando se ejecute el método y su ejecución haya finalizado no devolverá ningún valor, si por el contrario el método Maín() debiera retornar un valor por ejemplo de tipo entero para informar del resultado de su ejecución entonces la palabra reservada void deberá ser reemplazada por la palabra Int.

El Método Main() es en definitiva una porción del código de nuestra aplicación por lo cual debe de estar si o si contenido dentro de una clase, ningún método puede definirse o existir fuera de una clase, en nuestro caso el Método Main() está contenido dentro de la Calse HelloGuruProgrammer

Al igual que una clase, el método Main() como cualquier otro método debe tener sus correspondientes llaves de apertura y cierre, todo el código encerrado dentro de las llaves de apertura y cierre de un método es código o cuerpo de Método y a su vez un método, inclusive el propio Main() es código o cuerpo de una Clase

¿Y LAS FUNCIONES DONDE QUEDARON?

Bueno las apariencias engañan, por que digo esto, por el simple motivo de que una función son un conjunto de instrucciones como el método Main() pero pueden vivir libremente fuera de una clase en lenguajes como C++.
Como en C# como no podemos escribir código fuera de una clase, entonces podemos afirmar que nunca tendremos una función

Bueno ahora que sabemos que es el método Main(), y a muy grandes rasgos los métodos en Gral. Vamos a seguir analizando nuestra primera aplicación

Línea 4 – Llave de apertura del Método Main(),.

Línea 5 – línea de código ejecutable, aquí entran en escena tres nuevos actores el namespace, una clase y un método de clase.-

Si son observadores entonces habrán notado que hemos declarado un Método dentro de otro, con esto entonces afirmamos que los Métodos pueden anidarse

Truco: Yo en particular me he acostumbrado a leer el código de atrás hacia delante y me ha resultado muy útil, así que siguiendo esta política comencemos por el final

El punto y coma: esto indica el final de una línea de ejecución o a partir de ahora en más una sentencia

Inmediatamente antes del punto y coma tenemos el llamado a un método de nombre WriteLine(“string”) éste es un método de tipo estático que recibe como parámetro de método una cadena de texto o string y cuya tarea es mostrar en pantalla el contenido de dicho string , también podemos deducir que este método no devuelve ningún valor, por lo tanto es de tipo void , importante cuando pasemos un string como parámetro de entrada a un método o, como valor de una variable siempre deberá escribirse el texto entre comillas dobles

(“Hello Guru Programer”)

También es importante destacar que inmediatamente luego de los nombres de métodos deben abrirse y cerrarse paréntesis y si el método requiere algún valor como parámetro de entrada, estos deben incluirse dentro de dichos paréntesis, los valores que reciban los métodos de aquí en mas serán lista de parámetros


Ejemplo:

Método1 ( ) ; - significa que el método no recibe ninguna lista de parámetros

Método2 ( string str ) ; - significa que el método recibe un solo parámetro y deberá ser de tipo cadena de texto o string

Siguiendo el caso, inmediatamente antes del nombre del Método noten la presencia de un Punto, esta es la forma que usa C# para indicar el nombre de la clase a la cual pertenece el método invocado

Por lo tanto podemos afirmar que el método WriteLine se encuentra contenido dentro de una clase de nombre Console

Y por último la presencia de un namespace, noten también que inmediatamente antes del nombre de la clase hay otro punto, bueno como a través del punto podemos indicar que método de clase usar, también lo utilizaremos para indicar a que namespace pertenece dicha clase, en el ejemplo anterior el namespace es System.

Ok, leamos nuestro código como forma de interpretar lo que queremos que haga utilizando la forma de atrás hacia delante

Escribe una Línea (WriteLine) en pantalla con el texto (“Hello Guru Programmer”) en la Consola (Console) de nuestro Sistema (System)

Si prestan atención es como si estuviéramos hablando con nuestra máquina diciéndole que hacer, pero, para que esta comunicación sea entendible es preciso darle nombres significativos a nuestras futuras clases y métodos en relación a las tareas que desempeñarán

Siguiendo con el análisis viene

Línea 6 – llave de cierre del método Main(), esto no merece mucha explicación

Línea 7 – llave de cierre de la Clase HelloGuruProgrammer, aquí termina nuestra clase

Cuando el código pase esta última línea entonces la aplicación terminará

¿COMO EJECUTAR NUESTRA PRIMERA APLICACIÓN?

Antes que nada, es necesario entender que todo nuestro código es lo que desde aquí en más llamaremos Código Fuente, éste código no es ejecutable ya que la CPU no lo entiende, así que para que lo sea, deberemos transformarlo a un lenguaje entendible para la PC, éste lenguaje es conocido cómo Código Máquina y la acción de conversión de un lenguaje a otro se llama “Compilación”, pero recuerden que los lenguajes de la Plataforma .NET después del proceso de compilación del código fuente se obtiene como resultante código MSIL que aunque su extensión sea un (EXE) sigue siendo No Entendible por la CPU, quién se ocupara de hacerlo entendible es el (JIT) que irá compilando el MSIL a medida que se requiera, por eso su nombre (Just in time)

GENERANDO NUESTRO PRIMER MSIL

Primero que nada vamos a guardar nuestro archivo de código fuente siguiendo las reglas que vimos anteriormente

En las entregas anteriores nos habíamos creado una estructura de trabajo, pues bien vamos a la carpeta CS y creemos una nueva con el nombre Class01


Una vez creada la carpeta hacemos clic en el disquette único del Note Padd y guardamos nuestro trabajo en dicha carpeta con el Nombre Class01.cs


Bien una vez guardado nuestro trabajo es hora de generar nuestro MSIL

Primero verificamos que el archivo se guardo correctamente


Perfecto

Como es norma general comenzar desde abajo, empezaremos utilizando la Consola de Windows cómo método de práctica antes de lanzarnos a las complejas estructuras gráficas, así que lo que deberemos hacer ahora es abrir una Consola utilizando una de las siguientes formas

1.- desde el menú

Inicio / Todos los programas / Accesorios / Símbolo de Sistema

O desde el menú

Inicio / Ejecutar

y en la ventana que aparece digitamos cmd y presionamos Enter

Con cualquiera de estas acciones se iniciará la Consola de Windows


Para aquellos que no la conozcan esta es una consola de Windows que es similar a la terminal de LINUX

Cuando uno trabaja en consola toda la versatilidad que ofrece el Mouse queda en el olvido, aquí el Mouse no funciona, cualquier acción que queramos realizar, deberemos hacerla a través del teclado utilizando unos programitas conocidos como Comandos, por ejemplo si queremos copiar un archivo usamos el comando copy si queremos ver el contenido de una carpeta utilizamos el comando dir, etc.

Utilizar la consola para hacer tareas que acostumbramos en Windows como copiar mover, mirar o lo que se nos ocurra, nos brinda una práctica realmente útil para nuestras profesiones, así que sería bueno que le den un buen nivel de importancia.

Siguiendo con lo nuestro.
Por lo general la Consola siempre se inicia en la carpeta del usuario activo de Windows en ese momento, y eso lo muestra la línea que aparece en la captura, toda esa línea desde la unidad hasta el símbolo de mayor que tiene un nombre
PROMP, es el encargado de decirnos donde estamos parados y los resultados de las acciones que realizamos a través de los comandos

Interpretando la información del Promp de la captura dice:
que la Unidad de disco sobre la cual estamos trabajando es C: y estamos actualmente posicionados en una carpeta llamada 222 que a su vez dicha carpeta se encuentra dentro de otra llamada Document and Setting, si siguen el camino desde Windows verán que es exactamente lo mismo solo que desde una vista a bajo nivel


Muy bien luego de esta breve introducción vamos a movernos de carpeta utilizando la consola claro, hasta la que creamos antes Class01, para ello utilizaremos el comando “cd” éste comando lo que hace es mover el Promp del sistema a la ubicación que deseemos, así como en Windows usamos el Mouse haciendo doble clic sobre las carpetas para movernos, aquí usaremos el comando cd

El comando cd recibe como parámetro la ubicación a la cual nos queremos trasladar, para nuestro caso seria


Luego de ingresar la orden simplemente la ejecutamos presionando la tecla Enter

Si no hubo errores de escritura entonces el Promp habrá cambiado su cuerpo informando de la nueva posición como se muestra en la captura.


Ahora bien nos quedan 2 comandos mas por examinar, supongamos que me atrajo tanto la consola que quiero seguir usándola.

Examinando el interior de una carpeta usando la Consola de Windows

La verdad que en Windows con solo ir haciendo doble clic sobre las carpetas ya estamos viendo su contenido, aquí al no haber Mouse la cosa cambia, deberemos recurrir al comando dir como forma de examinar los contenidos de las carpetas

Siguiendo el ejemplo anterior yo se de antemano que la carpeta Class01 contiene un archivo, que es nuestro código fuente y al que le dimos el nombre de Class01.cs la comprobación ya la hicimos desde Windows ahora vamos a hacerla desde la Consola

Simplemente digitamos el comando dir sin parámetros y presionamos Enter para ejecutar dicha orden.


Como pueden, ver la primera flecha indica el comando utilizado y luego de presionar la tecla Enter se desplegará toda la información contenida dentro de la carpeta Class01, la otra flecha indica que hay un solo archivo y la ultima flecha muestra el nombre del archivo, su extensión y el tamaño del mismo, también se puede apreciar otro tipo de información que no merece la pena explicarla dada su intuitividad.

En resumen es lo mismo que Windows sólo que desde un ambiente NO GRAFICO

El último comando y el más importante para nosotros es el csc, este comando tiene la tarea de compilar nuestro código fuente a un MSIL, y la forma de utilizarlo es muy similar a los demás.

Primero se debe de escribir el nombre del comando y luego de un espacio se le debe especificar el archivo de código fuente a compilar respetando minúsculas y mayúsculas y también se debe indicar su extensión, luego para dar la orden de ejecución basta con presionar la tecla Enter

Manos a la obra y compilemos nuestra primera aplicación.


Perfecto, lo que aquí sucedió fue lo siguiente

La primera línea muestra el comando que queremos ejecutar y luego de presionar la tecla Enter el compilador entro en acción
La 2da, 3ra. y 4ta línea muestra información del compilador usado
La 5ta. Línea se puede apreciar un renglón vacío, esto quiere decir que el proceso se realizo correctamente y no hubieron errores de compilación, de haberlos habido se mostraría información ahí mismo

Y la última línea vuelve al Promp, quedando éste a la espera de alguna otra orden, “que buen chico”

Ahora bien, de acuerdo a todo lo aprendido, entonces si no hubo errores en la compilación es cierto afirmar que se generó un archivo de código MSIL pero ¿donde está?

Bueno controlando nuestra inquietud les digo que si, es verdad, el resultante de la compilación es un archivo MSIL y por lo general se genera dentro de la misma carpeta que contiene el código fuente, así que para verlo lo único que tenemos que hacer es usar el comando dir desde la consola o bien usando el explorador de Windows.

Vamos a usar las 2 formas

Desde la consola


Pero miren nada más quien ha aparecido, es nuestra primera aplicación, recién compilada y observen su tamaño, bueno esto confirma todo lo dicho antes, aquello de que el MSIL a parte de el código traducido contenía también un conjunto de servicios adicionales. En fin solo resta decir “Bienvenido a nuestras vidas class01.exe

Ahora veámoslo desde Windows


Bueno creo que por hoy ya son demasiadas emociones juntas, todo ha salido de maravilla

Ahora bien como no queremos que se mal acostumbren existe un pequeño detalle en nuestra aplicación.

Si la ejecutan desde Windows haciendo doble clic en el icono como cualquier aplicación de Windows verán un destello de una consola y probablemente no puedan ver el mensaje que debe mostrar nuestra aplicación que es “Hello Gurú Programmer”, esto no significa que la aplicación esté mal codificada, lo que sucede es que al hacerle doble clic lo primero que hacen los servicios de Windows es buscar el punto de entrada a la aplicación o sea “El método Main” una ves que lo encuentra comienza la ejecución, pero como no hay ninguna línea de código que le indique al programa que no debe finalizar una vez cumplido todo lo que tiene que hacer, simplemente finaliza la aplicación y retorna a Windows, en otras palabras la ejecución es tan rápida que no percibimos el mensaje.

Así que les queda a ustedes encontrar la forma de agregar una línea de código más al código fuente que tenga la tarea de no dejar que la aplicación finalice hasta que se presione la tecla Enter.

Pequeña ayudita

Dentro de la clase Console hay un método que detiene la ejecución del programa y no continua hasta que el usuario presione la tecla Enter.

Otra cosa importante, en toda aplicación la ejecución de las líneas de código se realiza en forma secuencial desde la 1 hasta la última así que es una buena idea colocar dicha línea de parada justo antes de que se cierre la llave del Método Main()

Y por último si un método no recibe parámetros entonces se debe de llamar al método por su nombre y colocarle inmediatamente después los paréntesis

Metodo();

Y obviamente si modifico el código fuente también deberemos modificar nuestro MSIL, de lo contrario los cambios no se verán reflejados, a este proceso de re-compilación se lo conoce como Actualización

Bueno finalizando la entrega vamos a recalcar que todo lo expresado aquí en detalle en cuanto a compilación y consola no lo vamos a seguir haciendo en el futuro ya que entendemos que lo expuesto hoy aquí es muy bien asimilable y no podemos darnos el lujo de ocupar mucho espacio en dichos temas. Una última cosita es darse presente en el Sitio, no sean tímidos, nuestra comunidad no funciona así, opinen, pregunten, si este trabajo les sirve entonces úsenlo y participen tanto en estas entregas como en todas las que se encuentran en el Sitio, por ejemplo los artículos que he estado mirando de PHP son de una calidad enorme y muy bien explicados, tanto los colegas del Sitio como las personas invitadas a brindar nuestros conocimientos, lo hacemos honorariamente y lo único que pedimos es que por lo menos se den presente con una crítica, no importa de qué tipo, las estadísticas de concurrencia al Sitio son muy buenas así que lo único que falta para ser un 10 es su signo de presente

Un abrazo para todos y espero que hagan las tareas

Aquí les dejo una muestra de la aplicación Modificada, eso si la línea que agregué no se las voy a mostrar














comentarios



  1. 298274818336917502974 From the official [URL=http://www.onlinemuslimitems.com/]Muslim Abaya[/URL] website of anticipated [URL=http://www.onlinemuslimitems.com/]Muslim Items[/URL] Star Wars The [URL=http://www.onlinemuslimitems.com/]Muslim hijab[/URL] Old Republic comes [URL=http://www.onlinemuslimitems.com/]Islamic abaya[/URL] this new video where the [URL=http://www.onlinemuslimitems.com/]Muslim scarf[/URL] game designers [URL=http://www.onlinemuslimitems.com/]Buy Muslim Abaya[/URL] tell us a little about [URL=http://www.onlinemuslimitems.com/]Cheap Muslim Abaya[/URL] the 2 different [URL=http://www.onlinemuslimitems.com/]Buy Muslim Items[/URL] classes find Sith characters [URL=http://www.onlinemuslimitems.com/]Cheap Muslim Items[/URL] in the game, The [URL=http://www.findnike.com]Islamic hijab[/URL] Inquisitor Sith [URL=http://www.onlinemuslimitems.com]Islamic scarf[/URL] and Sith Warrior. They explain a lot of [URL=http://www.onlinemuslimitems.com]Islamic Items[/URL] pictures as designed [URL=http://www.onlinemuslimitems.com]Muslim wear[/URL] these characters and [URL=http://www.onlinemuslimitems.com]Muslim clothing[/URL] their characteristics [URL=http://www.onlinemuslimitems.com]Muslim wear Pas Cher[/URL] one more devoted [URL=http://www.onlinemuslimitems.com]Muslim wear[/URL] to the use of force [URL=http://www.onlinemuslimitems.com]Muslim clothing[/URL] powers and one more [URL=http://www.onlinemuslimitems.com/]Muslim Items For Sale[/URL] dedicated to close combat.



  2. Muchas gracias George, pero no entiendo en que beneficia un sistema y otro a mi me es mas facil asignar a una constante 127 que 0x7f. pero bueno me imagino que tendrá sus razones, gracias por la explicación, cuando sale el proximo capitulo ?

    besitos



  3. Bueno en primer lugar un agradecimiento a todos muy cordial por apoyar el proyecto, que comenzó como unas simples notas, luego Roby lo convirtió en tutorial, y por lo que se ve ya está tomando el cuerpo de curso, en fin aquí van unas pequeñas recomendaciones

    Nacho: nunca olvides que en tu futura vida profesional te encontrarás frente a problemas que jamás habías visto, por lo tanto no es una buena forma salir de inmediato a pedir ayuda para resolver el problema, primero que nada tienes que agotar todos los medios investigativos y si eso no lo resuelve entonces si, recuerda que uno estudiando y practicando aprende pero Equivocándose aprende se aprende mucho más

    Laura: si bien, esto está dirigido a C#, no vamos a negarte ayuda si está dentro de nuestros conocimientos, y también quiero que sepas que corres con un poquito más de ventaja ya que estas aprendiendo 2 lenguajes simultáneamente, NO es nuestra intensión denigrar a C, ya que C# es familiar de éste, además C tiene más de 30 años de antigüedad y C++ más de 20 años, pero bueno así es la vida, las cosas evolucionan y los lenguajes de Programación no son la excepción. En cuanto a los sistemas que te están enseñando, no es motivo de preocupación y en C o C++ se aplica a las Constantes y se les conoce como NORMAS PARA LA NOTACION y se utiliza para regular la forma de escribir las constantes de acuerdo al sistema a usar.
    Ejemplo, suponte la siguiente expresión literal "127"
    En el sistema DECIMAL se representa como 127
    y en el sistema HEXADECIMAL 0x7F

    Te preguntarás como se hace la conversión pues es bien fácil
    En la notación HEXADECIMAL el (0x) solo indica que se trata de un número hexadecimal, luego como dice la norma se utiliza la base 16 para cálculo de las unidades y se le suman las letras donde la A vale 10, la B vale 11 y asi sucesivamente hasta la F que vale 15, vamos a convertir el Número 0x7F al sistema decimal siguiendo lo dicho antes

    (Base 16)
    0x - no tiene efecto, es prefijo solamente
    7 - usando base 16 queda --- 7 * 16 = 112
    F - vale 15

    Suma de valores --- 112 + 15 = 127 -- fácil no

    Ahora en sistema Decimal (base 10)

    1 lo llevo a 100 usando base 10 --- 1*10*10 = 100
    2 lo llevo a 20 " 2* 10 = 20
    7 queda igual 7

    Suma de valores 100 + 20 + 7 = 127

    Bueno no queremos confundir a los demás estudiantes así que espero que esta pequeñísima explicación te sirva, lo único es que prestes atención a los sistemas donde la expresión 127 en sistema Hexadecimal solo requirió 2 dígitos
    René: muchas gracias por participar y ayudar a los miembros, esperamos que sigas con nosotros hasta el final
    Adrian: primeramente gracias por las emotivas palabras y entiende que esto lo hacemos entre todos, no hay que hacer sobresalir a un solo integrante sino al grupo, segundo muchas felicidades por tu primera estrella, ya eres un ejemplo para todos nosotros
    Y por supuesto a Roby, nuestro administrador que trabaja duro para que esto funcione y llegue a vosotros
    Finalizando pienso que el lunes tendremos la próxima entrega
    Un abrazo cordial a todos
    George Poliovei



  4. hola a todos, les cuento que gracias a la colaboracion de mi amigo George, quien me brindo sus conocimientos en forma totalmente desinteresada, solo por el hecho de que los demas puedan aprender (cosa que hay que valorar en los tiempos que corren, en donde se tiende a pensar en uno mismo y no mirar a los costados como lo hace él), es que aprobe el primer examen para desarrollador cinco estrellas de Microsoft. Ahora mi interes en aprender y avanzar es aun mayor, anhelando el dia en que pueda hacer lo mismo que George hizo por mi, pero para los demas. Gracias mi amigo!!!!
    A los demas estudiantes como yo, les digo que cualquier duda que tengan y este al alcance de mis pocos conocimientos los voy a ayudar.



  5. Gracias ahora si, esto me esta gustando, y no se si es mucho pedir pero en el estudio me están matando con la definición de las variables numéricas dicen que se hacen en dos tipos, decimal y hexadecimal, podrian darme una mano, ademas yo no se porque seguimos dando C existiendo lenguajes como c#. besitos i gracias George y René, me faltaba un llave



  6. Muchas gracias George por tu valioso aporte!
    Saludos
    Roby / El Guru Programador



  7. Así funciona. Saludos

    class HelloGuruProgrammer
    {
    public static void Main()
    {
    System.Console.WriteLine("Hellow Guru Programmer");
    System.Console.ReadLine();
    }
    }



  8. Como le prometí a Roby, aca estoy tratando de evacuar las dudas, en cuanto a Nacho y Laura muchas gracias por su interés es el tema y la pregunta me genera una sana sonrisa je je ya que en 7 líneas de código ya tienen un error de compilación, la sonrisa se debe a que me pregunte, que van a hacer cuando tengas miles de líneas, je je, bueno si lo escribieron tal cual lo pones esta perfecto, y me juego la vida que habrán puesto dicha sentencia fuera del método Main() o sea luego de la llave de cierre del método.

    Muchos saludos y sigan así



  9. Hola, yo la encontre pero me da error de compilacion no se que estaré haciendo mal la linea es

    System.Console.ReadLine();

    besos



  10. A mi me anduvo de maravillas tambien, pero no puedo encontrar esa linea para que no se valla la consola, alguno la encontró !!!!, pasenla por favor.

agregar comentario


Se permiten las etiquetas HTML <b>, <i> y <p>. Si ingresa alguna dirección web o dirección de email serán convertidos en enlaces automáticamente.





publicidad

API DE FACEBOOK
GOOGLE CALENDAR API
GOOGLE MAPS API