Aprendiendo .NET Tutorial PARTE 6

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

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. 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.



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

    System.Console.ReadLine();

    besos



  3. 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í



  4. Así funciona. Saludos

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



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



  6. 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



  7. 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.



  8. 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



  9. 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

agregar comentario


Se permiten las etiquetas HTML , y

. 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