Categoría: Programación

  • Spring Boot – CORE

    Spring Boot – CORE

    ¿Qué es Spring Boot?

    Es un framework de código abierto para desarrollo de aplicaciones para JVM, es decir que trabajamos principalmente con Java; sin embargo, también provee soporte para lenguajes como Groovy y Kotlin.

    Este framework nos permite implementar diversas arquitecturas y estilos de aplicación dependiendo de la necesidad del proyecto. Trabaja con versiones de JDK superiores al 8. A demás nos provee diferentes entornos de trabajo:

    • Despliegue en un servidor propio
    • Despliegue en servidor embebido
    • Despliegue en la nube

    Dentro de estos entornos nos provee una estructura modular, es decir que iremos conectando las diferentes piezas que requiera nuestra aplicación.

    Trabajando con Spring Boot

    Spring Boot nació como respuesta a las exigencias de los estándares de la comunidad de desarrollo, por este motivo intrínsecamente implementa estándares y buenas practicas, al  igual que nos propone la siguiente filosofía de diseño:

    1. Establecer altos estándares de calidad para el código.
    2. Preocúpese por el diseño de la API.
    3. Mantenga compatibilidad con versiones anteriores.

    Estas reglas las ofrece de manera automática, es decir que se implementan casi al instante, esto se logra a través de, como mencionamos antes, conectar diferentes módulos(inyección de dependencias). A demás implementa estas reglas en su propio desarrollo a partir de ser un framework que ofrece opciones en todos los niveles de aplicación y se acomoda a las diversas necesidades.

    Los módulos de Spring Boot están orientados de tal manera que podamos identificar tres capas principales:

    • Capa de presentación.
    • Capa de Negocio.
    • Capa de persistencia.

    Esta forma de trabajo modular es la que lo convierte en uno de los mas populares frameworks para Java, a demás de otros subsistemas de los cuales no hemos mencionado, como : logging, web services, seguridad, automatización de pruebas, entre otros.

    Spring Boot permite a los desarrolladores enfocarse mas en la lógica de negocio y menos en problemas de plomería.

    Conceptos claves

    Inyección de dependencias

    La inyección de dependencias es un patrón de diseño en donde se le suministran objetos a una clase en lugar de ser la propia clase quien los crea.

    Bean

    El Core de Spring Boot es un contenedor que se encarga de orquestar beans(objetos gestionados). Estos beans son objetos de tipo POJO, es decir que son clases simples con sus atributos privados a los cuales se pueden acceder por métodos get y set.

    Cumpliendo con el patrón de inyección de dependencias, proveemos estos beans a los módulos de Spring Boot indicándole su forma de instanciación y correlaciones entre ellos; el Core se encargara de implementarlo.

    Inversión del control

    Este principio de software es uno de los pilares de Spring Boot, consiste en darte el control de los objetos al propio framework, es decir que el framework será el encargado de instanciar nuestras clases y reproducir el comportamiento que deseamos a partir de la configuración que le seteamos.

    Las principales ventajas de este principio es que logra modularizar nuestra aplicación permitiendo tener nuestra lógica compacta y aislada, repercutiendo en la mantenibilidad y facilidad de implementación de pruebas.

    Para implementar este principio(IoC, Inversion of Control) se utiliza en Spring Boot la inyección de dependencias, anteriormente ya lo habíamos mencionado, para ver la diferencia vamos a plantear un ejemplo:

    Código tradicional

    public class Person {
        private Document document;
        
        public Person() {
            document = new Document();
        }
    }

    Inyección de dependencias

    public class Person {
        private Document document;
        
        public Person(Document document) {
            this.document = document;
        }
    }
    ApplicationContext

    El ApplicationContext es una interfaz que nos permite implementar IoC, es decir, la instanciación  y el control del ciclo de vida e interacción entre objetos. Se encarga de procesar nuestros beans.

    Spring provee diferentes implementaciones de esta interfaz:

    • ClassPathXmlApplicationContext
    • FileSystemXmlApplicationContext
    • WebApplicationContext

    El proceso de implementacion de, por ejemplo, ClassPathXmlApplicationContext es:

    1. Crear archivo de configuración XML(/src/main/resources/beans.xml) para los beans.
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <bean id="personService" class="com.jhontona.service.PersonServiceImpl" />
      </beans>
    2. Implementar el ApplicationContext, en este caso en las pruebas unitarias(/src/test/java/com/person/service/PersonServiceTest.java)
      package com.person.service;
      import static org.junit.jupiter.api.Assertions.assertNotNull;
      
      import org.junit.jupiter.api.BeforeEach;
      import org.junit.jupiter.api.Test;
      import org.springframework.context.support.ClassPathXmlApplicationContet;
      
      public class PersonServiceTest {
          private ClassPathXmlApplicationContext context;
          private PersonService service;
      
          @BeforeEach
          void setUp() {
              context = new ClassPathXmlApplicationContext("beans.xml");
              service = context.getBean("personService", PersonService.class);
          }
      
          @Test
          void testGetOnePerson() {
              assertNotNull(service);
          }
      }

    Este archivo de beans.xml podemos personalizarlo dependiendo de nuestras necesidades, por ejemplo, podemos colocarle uno o varios alias a nuestro bean:

    <bean id="personService" name="alias1,alias2" class="com.jhontona.service.PersonServiceImpl" />

    Al bean le podemos indicar acceder a un constructor especifico o un método setter, ejemplo:

    Constructor

    public PersonService(String name, Integer age, Boolean document) {
    <bean id="personService" class="com.jhontona.service.PersonServiceImpl">
        <constructor-arg name="document" value="true"/>
        <constructor-arg index="0" value="Juanito"/>
        <constructor-arg value="19"/>
    </bean>

    Estos atributos los podemos pasar por nombre, índice, tipo u orden de los argumentos.

    A demás, podemos tener tantos beans como queramos. y hacer referencia entre ellos con el atributo ref.

    Hasta aquí esta breve introducción a Spring Boot, vimos algunos puntos claves a cerca del ecosistema de Spring.

  • Aplicación de una sola página

    Aplicación de una sola página

    Una aplicación de una sola página, como su nombre lo indica, es un sitio donde su frontend se construye dinámicamente desde javascript en una única página, pero se hace de tal manera que cada uno de sus componentes o módulos se va cargando progresivamente, de esta manera se logra brindar una experiencia mucho más fluida. Veamos un ejemplo mas grafico para ver como funciona una petición(request) de una página comúnmente.

    Proceso de petición de una pagina. En paginas convencionales cada vez que hacemos una petición el servidor nos responde con todo el contenido y refresca la pagina.

    Imaginemos que entramos, por ejemplo, a una página construida en PHP (la web suele estar repleta de estos sitios). Nuestra carga inicial es cuando hacemos la petición al dominio, por ejemplo jhontona.com, el DNS se nos redirecciona al servidor que se encargará de brindarnos el contenido que solicitamos, suele ser común los .html (contenido), .css (estilos) y .js (funcionalidad). El problema es que cada vez que se procesa una nueva petición, por ejemplo al enviar un formulario, el cliente requiere hacer una nueva llamada al servidor, este la procesa y reenvía todo el contenido mas la respuesta para el usuario. Esto genera que el sitio se recargue en su totalidad.

    En sus inicios la web eran solo bloques de texto, pero ahora tenemos imagen y video, el cual es demasiado costoso de enviar, sobre todo en redes lentas; para apalear un poco este problema los navegadores guardan en memoria (cache) los archivos más comunes (los mismos que miramos antes) con el objetivo de eliminar de la descarga esos archivos que previamente se habían cargado.

    Las aplicaciones de una sola página (SPA) justamente se aprovechan de este sistema, enviando solamente el contenido que el usuario requiere en ese momento. Veamos como lo hace.

    En nuestro esquema parece que no cambia mucho pero en la pagina esto tiene una gran repercusión, ya que en múltiples peticiones al servidor solo se trae la información que se necesita en ese momento y esto se agradece mucho sobre todo en redes móviles, ya que hacen que nuestras paginas carguen mucho más rápido al solo traer lo que necesitamos para una carga inicial y a partir de esta vamos trayendo los fragmentos necesarios a medida que el usuario navega en nuestro sitio.

    Para crear este tipo de sitios de una sola página se suele trabajar con javascript, este justamente se ejecuta en el cliente y se encarga de hacer las peticiones de manera incremental, podríamos por ejemplo con javascript puro ir haciendo nuestras peticiones a un servicio he ir mostrando la información como deseamos; pero afortunadamente no toca iniciar desde cero, entre los mas reconocidos frameworks tenemos Angular, React y VUE. Todos estos frameworks tienen el mismo objetivo, construir sitios SPA, pero utilizan diferentes enfoques. En un próximo post veremos por que usar Angular y sus características.

  • PHP y MySQL

    PHP y MySQL

    PHP y MySQL (Del que ahora deriva MariaDB) son una combinación ganadora, por que es muy fácil implementarlo y desarrollar con estas dos herramientas.

    Para continuar con nuestro curso vamos a realizar una conexión a la base de datos y hacer unas pruebas sencillas, la conexión va a ser directa, sin uso de interfaces ni temas complejos, estos los veremos mas adelante.

    Conectando PHP con MySQL

    En este momento la ultima versión de PHP es la 7.2.6, así que la sintaxis que usare será para la versión 5.5 en adelante, esto lo aclaro por que si tienes una versión antigua debes usar la función mysql_connect, yo en este caso usare la clase mysqli. Si deseas saber que versión de php tienes, puedes usar la instrucción echo phpinfo(); dentro de un documento php, así te mostrara toda la información de PHP con la que cuenta tu equipo o servidor.

    Vamos a crear un archivo, en este caso lo llame 01.ConexionMySQL.php

    <!doctype html>
    <html lang="es">
        <head>
            <meta charset="utf-8">
            <title>PHP y MySQL</title>
            <meta name="description" content="PHP y MySQL template">
            <meta name="author" content="Jhontona.com">
        </head>
        <body>
            <?php
                $host = "localhost";
                $user = "jhontona";
                $password = "phpcurso1";
                $database = "test";
                $mysqli = new mysqli($host, $user, $password, $database);
    
                if ($mysqli->connect_errno) {
                    echo "Fallo al conectar a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
                }
                echo $mysqli->host_info . "\";
    
            ?>
        </body>
    </html>

    Ahora es momento de revisar el código, voy a enfocarme de la línea 15 a la 24, ya que es nuestro código PHP, en las primeras líneas(de la 15 a la 18) estamos declarando variables.

    Variables en PHP

    Si recordamos el anterior post, decíamos que PHP es un lenguaje interpretado y de tipado dinámico, por lo que no es necesario mencionar a que tipo de variable corresponde cada una, es decir, que tipo de valores puede almacenar (Si quieres profundizar en tipados revisa este post).

    Como podemos ver en el anterior ejemplo una variable en PHP se inicializa con el signo $ y seguido el nombre de la variable.

    Después, estamos asignándole un valor a cada variable, con el signo = y luego le pasamos un valor, en nuestro anterior ejemplo todos los valores son de tipo string(texto), pero puede ser de diferentes tipos, y como lo indicamos, puede tomar en el transcurso de la ejecución cualquier otro tipo, vamos a ejemplificar esto con otro pequeño fragmento de código.

     

    Ejemplo de variable con varios tipos

    <?php
    
    /*Tipos de variables*/
    $mivariable = "string"; //Texto
    $mivariable = 4; //Numero
    $mivariable = array(); //Matriz
    $mivariable = 5.32; //Numero decimal
    $mivariable = true; //Booleano (verdadero o falso)
    
    ?>

    En el anterior ejemplo podemos ver como una misma variable puede tomar varios valores de diferentes tipos, si quieres conocer todos los tipos que maneja PHP te dejo el enlace.

    También otra cosa importante es la inclusión de comentarios en el código.
    Adrede incluí los dos tipos de comentarios que maneja PHP, el comentario de varias líneas, que se inicia con /* y se debe cerrar con */, y el comentario de una sola línea //, que solo necesita la apertura, ya que se finaliza automáticamente con el salto de línea.

    Ya que conocemos la teoría sobre variables en PHP continuemos revisando el código.

    En la línea 20 se declara otra variable, y se le asigna una instancia de la clase mysqli, para poder crear un nuevo objeto de este tipo se le pasan unos valores, que en este caso son los valores que almacenamos en las variables antes declaradas. Estos valores corresponden a los datos de conexión a la base de datos. Si quieres conocer mas sobre objetos, clases y conceptos relacionados a la programación orientada a objetos te recomiendo leer este post.

    En PHP para crear una nueva instancia de una objeto se utiliza la sentencia new, que precisamente indica que es un nuevo objeto de un tipo de clase determinado. En la línea 21 estamos utilizando la condición if(si) para preguntar si ocurrió algún error en la conexión. (Si necesitas saber mas sobre las estructuras básicas de programación te dejo este post). Bien, dentro de este condicional tenemos la variable $mysqli que si recordamos era un objeto de clase mysqli, y al ser de este tipo tiene todos sus atributos y métodos(funciones), uno de estos atributos es connect_errno que nos indica si la conexión fue exitosa o no, es decir es una variable de tipo booleano. Si prestamos atención, podemos ver que para acceder a un atributo estamos utilizando los símbolos -> que le indica al interprete de PHP que es un atributo de un objeto.

    La línea 22 se ejecuta si hubo un error, y lo que hace es imprimir el error. Algo nuevo en esta línea es el uso del punto(.) que en PHP es el símbolo para concatenar, es decir, unir dos cadenas de texto.

    Y finalmente en la línea 24 imprimimos el valor de otro atributo de la clase mysqli. Tal vez eso halla sido un poco complejo, pero no te angusties en el transcurso del curso y de la practica entenderás los conceptos, este ejemplo lo saque directamente de la documentación de PHP por lo que te aconsejo que siempre en tus desarrollos y practicas revises el sitio para verificar la sintaxis y el uso de las funciones. También te dejo el link del archivo de esta clase en Github y si tienes dudas o algún comentario por favor déjalo, así podemos seguir aprendiendo todos.

  • Programación orientada a objetos (POO)

    Programación orientada a objetos (POO)

    La programación orientada a objetos (POO o sus siglas en ingles OOP) es un estilo(paradigma) de programación. Donde todo se comporta como un objeto, es decir, se hace una abstracción de un concepto y se lleva a código fuente.

    El concepto de abstracción es muy importante entenderlo ya que es la base de la programación orientada a objetos. Consiste en aislar un objeto de su contexto, e identificar este objeto ¿Qué hace?¿Cómo lo hace? y ¿Para que lo hace?. Estas preguntas se resuelven haciendo una análisis del sistema y llevándolo a modelos de código, donde se expresan las características del objeto deseado. Durante este análisis (abstracción) se identifican las características esenciales y las no esenciales, esto con el fin de generar la representación en código.

    Ahora veamos los conceptos por los que esta compuesto la forma de trabajo orientada a objetos.

    Clase

    Una clase es la abstracción de un objeto/concepto concreto, que tiene tiene propiedades(atributos) y realiza algunas acciones(funciones o métodos) y se pueden crear uno o mas copias de este a partir de un modelo.

    Vamos a ver como esta compuesto. Para ejemplificar y que quede mas claro los conceptos vamos a usar el típico ejemplo de una fabrica de vehículos. Supongamos que queremos construir un carro.

    Atributo

    Un atributo es una característica propia de una clase, por ejemplo, en el caso del carro los atributos pueden ser color, cantidad de ruedas, material, etc.. (podemos listar N cantidad de atributos, siempre y cuando sean necesarios para la descripción o funcionamiento de la clase).

    Método

    Un método es una acción que realiza nuestra clase. Netamente en programación es una porción de código encapsulado que se ejecuta en respuesta a alguna llamada, interacción u otra acción(método). Por ejemplo, en nuestro carro, algunos eventos pueden ser: encender, acelerar, frenar… El termino de encapsulamiento es muy importante en la programación orientada a objetos, ya que todo nuestro código debe ir correctamente estructurado, y los métodos deben ser concretos y bien definidos. (Para profundizar en código limpio te dejo este post). El encapsulamiento se refiere a la agrupación de elementos propios con el objetivo de crear un mayor nivel de cohesión y reutilización del código. En alguna literatura y arquitecturas de trabajo tenemos una separación(clasificación) de estos métodos en métodos, funciones y eventos, pero por lo general usaremos método o función para referirnos a lo mismo.

    Con estos conceptos ya podemos plantear un ejemplo completo de nuestra clase carro, así­ que lo pasaremos a código. Utilizare C# para hacer el ejercicio, aplicado a un proyecto de consola. Podríamos utilizar cualquier otro lenguaje que soporte este paradigma, yo elijo este simplemente por que la lectura de código se me hace muy sencilla y así­ todos podemos ver y entender los ejemplos un poco mejor.

     

    Clase vehí­culo

    public class Vehiculo {
        private string color;
        private int cantidadRuedas;
        private string material;
    
        public void encender() {}
        public void acelerar() {}
        public void frenar() {}
    }

    En el anterior ejemplo de código podemos ver la construcción de la clase vehículo, en donde le asignamos algunos atributos y métodos. Podemos ver que estamos usando unas palabras clave antes de declarar un atributo o método(private, public). No entrare a explicar como usarlas en este lenguaje, si no que dará una definición general, aplicable a cualquier lenguaje. Estas palabras nos indican el alcance(scope) de un atributo, método u objeto. ¿Qué quiere decir con alcance? Pues el nivel de visibilidad dentro del contexto. Es decir a que tiene acceso el contexto de un objeto. Aquí entramos a otro concepto fundamental de la programación orientada a objetos, el principio de ocultación. Esto quiere decir que cada objeto esta ligado a su propio contexto y aislado para el resto del entorno. Por ejemplo en nuestra clase vehículo, seria publico el color del carro, pero, por ejemplo, la marca del motor, no queremos que todos la conozcan, por lo que seria privado, o protegido. Este principio aplica para todos los objetos con los que se trabaje.

    En el ejemplo de código anterior deje los atributos como privados, si queremos exponerlos utilizaremos una función GET(obtener valor) o SET(asignar valor) para por medio de ellas tener acceso a este valor.

    Hemos hablado bastante de los objetos e hicimos un ejemplo de la declaración de una clase. No hay que confundir objeto y clase, son términos totalmente diferentes. Un objeto es la instancia de una clase, es decir, la clase anterior es nuestro modelo abstracto y una instancia de este objeto seria un vehículo como tal. Veamos un ejemplo de la creación de un objeto de tipo vehículo con código.

     

    Instanciando una clase

    Vehiculo modelo1 = new Vehiculo();
    Vehiculo modelo2 = new Vehiculo();
    Vehiculo modelo3 = new Vehiculo();

    Hemos creado varias instancias(objetos) de la clase vehículo, ahora hagamos algunos experimentos.
    Antes de continuar aclaro que a nuestra clase Vehiculo le agregue los getters y setters para trabajar con los atributos, a continuación voy a colocar un ejemplo para el atributo color.

    GET y SET

    public string getColor() {
        return this.color;
    }
    
    public void setColor(string color) {
        this.color = color;
    }

    En la mayoría de lenguajes lo pueden hacer de esta manera, pero en el código completo también encontraran otro modo para hacerlo con una notación propia del lenguaje.

    Bueno ahora si continuemos. Creamos tres vehículos, a cada uno vamos a asignarle las ruedas, un color y un material, finalmente imprimimos en pantalla el color de cada uno.

    Usando los métodos get y set

    modelo1.cantidadRuedas = 4;
    modelo2.cantidadRuedas = 4;
    modelo3.cantidadRuedas = 4;
    modelo1.setColor("Rojo");
    modelo2.setColor("Amarillo");
    modelo3.setColor("Azul");
    modelo1.material = "Aluminio";
    modelo2.material = "Plastico";
    modelo3.material = "Fibra De Carbono";
    Console.WriteLine(modelo1.getColor());
    Console.WriteLine(modelo2.getColor());
    Console.WriteLine(modelo3.getColor());

    Tenemos en este momento una clase Vehiculo, con la cual hemos creado tres carros, pero si lo pensamos bien podemos crear otro tipo de vehículos como una bicicleta, moto u otro tipo de vehículo sobre ruedas. Así­ que vamos a tocar otro pilar de la programación orientada a objetos.

    Herencia

    Aunque las clases se crean para estar aisladas de un contexto, estas se deben relacionar con otras, para así dar sentido y funcionalidad a ese contexto; este concepto podemos entenderlo como una relación padre-hijo, donde el hijo hereda propiedades y características del padre, dependiendo del scope que tengan estas características definidas el hijo podrá o no heredar características que estén como publicas o protegidas en el padre.

     

    Veamos el código. Agregaré dos clases para mostrar como funciona la herencia.

    Clase Carro que hereda de la clase Vehiculo

    public class Carro : Vehiculo {
        public Carro() {
            this.cantidadRuedas = 4;
            this.setColor("Dorado");
            this.material = "Hierro";
        }
    
        public Carro(string color, string material) {
            this.cantidadRuedas = 4;
            this.setColor(color);
            this.material = material;
        }
    }

    Clase Bicicleta que hereda de la clase Vehiculo

    public class Bicicleta : Vehiculo {
        public Bicicleta() {
            this.cantidadRuedas = 2;
            this.material = "Aluminio";
            this.setColor("Cromado");
        }
    
        public Bicicleta(string color) {
            this.cantidadRuedas = 2;
            this.material = "Aluminio";
            this.setColor(color);
        }
    }

    Podemos hablar de otro termino viendo el ejemplo, y son los constructores, no son propios de la programación orientada a objetos, pero se están convirtiendo en un estándar para todos los lenguajes que apuntan a este paradigma. Acerca de este tema solo voy a decir que el constructor es un método que se caracteriza por tener el mismo nombre de la clase y es el encargado de inicializar la instancia de la clase. Un tema mucho mas importante, y que si es propio de este paradigma es el concepto de polimorfismo, este atributo de la programación orientada a objetos nos permite crear varios métodos con el mismo nombre pero que se comporten de manera diferente dependiendo de los parámetros que recibe. En el código anterior podemos ver el ejemplo, donde hay dos constructores para cada clase y así ilustrar esta característica. También lo podríamos hacer con cualquier otro método.

    Hemos revisado el concepto de herencia y ahora podemos segmentar nuestra aplicación en diferentes clases con cierta relación, esto nos lleva a otro principio de la programación orientada a objetos. La modularidad, que se refiere a la capacidad de separar estas clases y agruparlas en módulos, es decir, secciones que comparten un mismo contexto.

    Por ultimo nos queda un ultimo termino que ver, este es la recolección de basura, que se refiere a la capacidad del lenguaje de eliminar de memoria los objetos que ya no se van a usar. La mayoría de lenguajes que usan este paradigma lo hacen de manera automática.

    Y esto es todo amigos… Dejamos por aquí esta introducción a POO, espero les halla sido de mucha utilidad, recuerden dejar sus comentarios y preguntas.

  • Código limpio – Haciendo código bien y bonito

    Código limpio – Haciendo código bien y bonito

    Cuando estas aprendiendo a programar te enfocas primero en la lógica, luego en el lenguaje y rara vez nos detenemos a pensar en la forma de hacerlo, es decir, como pasamos de la lógica al lenguaje. Es justamente el turno de revisar como debemos escribir este código, ver buenas practicas y como aplicarlas. El contenido de este post esta basado en el libro Código limpio(Clean code) de Robert C. Martin y también en mi experiencia. Lo estructurare tal cual esta dividido en el libro.

    ¿Por qué hacer código limpio?

    Si estas leyendo este post, o estas interesado en el libro, eres programador o futuro programador, y crees en la necesidad de hacer un código elegante. No por simple capricho o ego, si no por que a medida que te internas mas en el mundo del desarrollo de software, puedes ver sus falencias. Mientras estaba en el primer semestre de mi especialización en Ingeniería de software, tocamos el origen de este problema, se remonta a la conferencia de Crisis del software que se celebro en 1968, esta se llevo a cabo con el objetivo de identificar causas y dar posibles soluciones a los problemas con los que se venia trabajando el software y aun en la actualidad continua. Se identificaron muchas causas y se dijo que la calidad de un producto se mide por su funcionamiento. En aquel entonces sirvió, y esto dio paso a definición de metodologías, arquitecturas y patrones de desarrollo de software, pero gracias a estas nuevas proposiciones se descubrieron nuevos problemas que estaban ocultos ¿Por qué te cuento esto?, por una sencilla razón, “Aquel que no conoce la historia, está condenado a repetirla“. Miremos ahora el problema que nos concierne, y que actualmente no es tratado como un problema real, si no como un añadido, ya que son pocos los que trabajan con estas pautas de código limpio. La pregunta mas lógica a continuación sería ¿por qué es un problema no trabajar con código limpio? La respuesta te la dará la experiencia, en mi caso llevo varios años trabajando y he sido parte de fracasos de software precisamente por este detallito, se hace el código, y por las prisas, trabajo represado y falta de compromiso como profesional se hace el desarrollo a la carrera, y esto no es el problema. El problema no es correr, el problema es salirse de la pista para coger un atajo. Por ejemplo, inicias con un proyecto, tienes todas las ganas de hacerlo bien, es tu bebe y debes mimarlo, hacerlo fuerte y también sentirte orgulloso de el, pero te piden algo nuevo, o cambian las fechas de entrega y debes correr, ejercen presión sobre ti para generar una entrega rápida y optas por hacerlo rápido y olvidarte de ciertos estándares o la forma de trabajo con la que venias usando. Luego con el tiempo esto se transforma en una bola de nieve, va creciendo con cada iteración que se da, y esto es un grave problema, por que llega un punto en el que el código se vuelve muy difícil de mantener, las personas que lo trabajan se aburren y lo dejan de lado, Se convierte en un ciclo donde un error genera otro error, hasta el punto en que se piensa en reestructurar toda la aplicación, para lastimosamente luego cometer los mismos errores.

    Los lenguajes de programación han ido avanzando, encontramos desde lenguaje de maquina a lenguaje de alto nivel, que se acercan lo mas que pueden al lenguaje natural, pero si el programador es incapaz de expresarse correctamente su código estará lleno de errores, y los errores llaman mas errores. Otro caso, también podría ser que hagamos el código de afán y pospongamos el refinamiento, aquí entra la Ley de LeBlanc, que dice que después es igual a nunca, por eso, lo correcto es desde el inicio fijarnos un camino y seguir las buenas practicas y estándares. Debemos convertirnos en defensores del código elegante, del profesionalismo, eso hace parte de nuestra ética como ingenieros.

    El código limpio debe cumplir ciertas características, ser de fácil lectura, eficiente, concreto, legible, mejora con cada iteración y no contiene duplicados. En el desarrollo de este post entenderás estos principios mas a fondo.

    Nombres con sentido

    En la programación todo el tiempo estamos utilizando nombres, para las variables, funciones, clases. Por lo que la primera regla para un código limpio es crear correctamente estos nombres.

    Dicientes

    Esto se refiere a la capacidad de expresar su propósito, dejar de lado aquellas variables de unas cuantas letras que no expresaban absolutamente nada.

     

    Ejemplo de nombre de variable

    //Incorecto
    int a = 12;
    //Correcto
    int cantidadMeses = 12;

    Diferentes

    Los nombres de las variables, métodos, clases, etc. deben ser diferentes entre si y expresar correctamente su funcionamiento. Por ejemplo, supongamos que tenemos dos funciones, una se llama traerUsuario y la otra getUsuario. Esto nos puede llevar a una confusión y a perder tiempo revisando el código de cada una de estas funciones para verificar cual es la que necesitamos. Esto se puede evitar asignando nombres claros y diferentes.

    No redundantes

    Esto se refiere a no repetir las mismas palabras dentro de un nombre, ya que podemos confundir al lector. También lo podemos aplicar a no repetir los tipos de datos. Miremos el siguiente ejemplo:

    Redundancia en los nombres

    string nombreString = "";

    La palabra string dentro del nombre esta de mas, y si es necesario especificar el tipo de dato, se aconseja que sean palabras diferentes a las reservadas por el lenguaje.

    Pronunciación

    Un dato que me pareció curioso y válido, es que pasamos la mayoría del tiempo de codificación, no escribiendo código, por el contrario, la mayor parte esta dedicada a la lectura del código. Por este motivo tanto énfasis en hacer un código limpio y legible, por eso cada bloque de código se debe poder pronunciar y acercarse lo mas que se pueda al lenguaje natural, claro esta sin excesos, tampoco podemos crear todo un párrafo como nombre de algún objeto, siempre hay que tener buen criterio y la experiencia y uso de estas técnicas son las que nos ayudaran a mejorar.

    Codificaciones

    Debemos evitar el uso de siglas o codificaciones propias, ya que lo que puede ser claro o evidente para mi, puede que no lo sea para los demás. Si se desea usar algún tipo de convención, sigla o codificación especial debe ser consensuada y compartida a cada integrante del equipo.

     

    Para concluir este segmento y continuar revisando los principios del código limpio concluiremos diciendo que los nombres deben tener sentido dentro de su contexto, ser concretos, claros. Podríamos hacer una ejercicio, es tedioso y poco productivo, pero es muy educativo; podemos pasarla la lista de nombres a otra persona y si logra armar el contexto(clase) a partir de nuestros nombres de variables y funciones hemos realizado un excelente trabajo.

    Algunas recomendaciones para nombrar clases es no usar verbos, por el contrario en las funciones se recomienda siempre usarlos. Y por ultimo, aunque parezca contradictorio, intenta hacer nombres cortos.

  • Estructuras básicas de programación

    Estructuras básicas de programación

    Hola querido lector y entusiasta de la programación. En este post te mostrare las estructuras de control que son la base para la programación estructurada. Las condiciones y los ciclos. Para hablar de este tema no tomare ningún lenguaje en concreto, es mas daré ejemplos de varios lenguajes y me referiré a los conceptos basado en el teorema de programación estructurada, teniendo siempre presente que estas estructuras de control existen o se pueden recrear en cualquier lenguaje de programación.

    Estructuras condicionales o de selección

    Este tipo de estructuras ejecuta un bloque de código dependiendo de una o varias condiciones.

    Condición simple

    Iniciamos con esta estructura de control, ya que es la mas usada, sencilla y fácil de entender.

    Lo que permite esta estructura es hacer una evaluación simple, retornando como respuesta un valor (falso o verdadero).

    IF (Condición) THEN
        Hacer esto si la condición se cumple
    ELSE
        Hacer esto si la condición no se cumple
    END IF

    Los siguientes son ejemplos de una condición simple, con opción de ejecución en caso de que la condición sea verdadera o falsa (IF ELSE), ya que podemos hacer la estructura mas sencilla solo validando la condición y no hacer nada en caso de que no se cumpla la condición (IF) ya que la instrucción ELSE es opcional.
    Para el ejemplo vamos a utilizar dos variables y vamos a suponer que tienen asignado un valor numérico. El objetivo es validar si la primera variable es mayor a la segunda.
    Para los ejemplos utilizare los lenguajes que yo mas utilizo, si quieres preguntar por algún otro o quieres comentar con tu ejemplo, dejalo al finalizar el post en los comentarios.

    Nota: Existen las condiciones inline pero esto será tema para otra ocasión al ser un poco mas complejo

    PHP valida número mayor
    if($a > $b){
        echo $a;
    } else {
        echo $b;
    }
    C# valida número mayor
    if(a > b){    
        Console.WriteLine(a.ToString());
    } else {
        Console.WriteLine(b.ToString());
    }
    Python valida número mayor
    if a > b:
        print(a)
    else:
        print(b)
    Javascript valida número mayor
    if(a > b) {
        console.log(a);
    } else {
        console.log(b);
    }

    Estas condiciones simples se pueden volver mas complejas, a medida que agregamos mas condiciones. Además se pueden anidar una dentro de otra, miremos un ejemplo en seudocódigo.

    IF (Condición 1) THEN
        (Código si condición 1)
    ELSEIF (Condición 2) THEN
        (Código si condición 2)
    ELSEIF (Condición 3) THEN
        (Código si condición 3)
    ELSE
        (Código si ninguna de las condiciones se cumplió)
    END IF

    Selección

    Para evitar hacer varias condiciones simples anidadas se creo el control de selección, que se utiliza para escoger una opción dependiendo de una condición.

    Select (Expresión)
        Case Valor1
            (Código que se ejecuta si Expresión = Valor1)
        Case Valor2
            (Código que se ejecuta si Expresión = Valor2)
        Case Valor n
            (Código que se ejecuta si Expresión = Valorn)
        Case Else
            (Código que se ejecuta si Expresión no coincide con ningún valor anterior)
    End Select

    Veamos los ejemplos de este control con algunos lenguajes. Hay una particularidad con Python y es que no tiene por defecto el control switch, pero lo podemos recrear con varios IF ELSE o con un diccionario, como esta en el ejemplo.

    PHP selección con Switch
    switch ($i) {
        case 0:
            echo "i es igual a 0";
            break;
        case 1:
            echo "i es igual a 1";
            break;
        case 2:
            echo "i es igual a 2";
            break;
        default:
            echo "i no es igual a 0, 1 ni 2";
            break;
    }
    C# selección con Switch
    switch(i) {
        case 0:
            Console.WriteLine("i es igual a 0");
            break;
        case 1:
            Console.WriteLine("i es igual a 1");
            break;
        case 2:
            Console.WriteLine("i es igual a 2");
            break;
        default:
            Console.WriteLine("i no es igual a 0, 1 ni 2");
            break;
    }
    Python selección con diccionario
    switch = {0: "i es igual a 0", 1: "i es igual a 1", 2: "i es igual a 2"}
    print switch.get(i, "i no es igual a 0, 1 ni 2")
    Javascript selección con Switch
    switch (i) {
        case 0:
            console.log(i es igual a 0);
            break;
        case 1:
            console.log(i es igual a 1);
            break;
        case 2:
            console.log(i es igual a 2);
            break;
        default:
            console.log("i no es igual a 0, 1 ni 2");
            break;
    }

    Estructuras iterativas o de bucles

    Estas estructuras repiten un fragmento de código N veces, dependiendo de la condición que se este efectuando. Mientras la condición se cumpla el control ejecutara el código, una vez la condición deje de ser cierta sale del ciclo.

    Hay algunos tipos de estructuras que no voy a ejemplificar aquí, como lo son el do-while y el do-until, ya que en seudocódigo y en la teoría son estructuras diferentes, pero en los lenguajes modernos son las mismas estructuras que pasare a mencionar pero con algunos cambios en las condiciones que hace que se comporten de la manera deseada.

    Ciclo PARA – REPETIR

    Este control tiene la característica que desde el inicio se le pude indicar cuantas repeticiones debe hacer, al hacerlo de esta manera creamos una estructura de control Para(FOR), es decir con un numero definido de iteraciones. Si la validación la hacemos al final se convierte en un ciclo Repetir,

    FOR i=0 a 10, STEP = 1
        (Ejecutar código)
    END FOR

    A continuación para los ejemplos de código imprimiremos los números de 1 a 10.

    PHP ciclo For
    for ($i = 1; $i <= 10; $i++) {
        echo $i;
    }
    C# ciclo For
    for (int i = 1; i <= 10; i++) {
        Console.WriteLine(i);
    }
    Python ciclo For
    for x in range(1, 11):
        print(x)
    Javascript ciclo For
    for (let i = 1; i <= 10; i++) {
        console.log(i);
    }

    Ciclo MIENTRAS

    Este ciclo espera siempre una respuesta de una condición, ejecuta un bloque de código mientras que el resultado de la validación de la condición sea verdadera.

    Al igual que el anterior ejemplo, imprimiremos los números de 1 a 10.

    WHILE (Condición)
        (Bloque de código a ejecutar)
    END WHILE
    PHP ciclo While
    while ($i <= 10) {
        echo $i++;
    }
    C# ciclo While
    while (i <= 10) {
        Console.WriteLine(i);
        i++;
    }
    Python ciclo While
    while (i <= 10):
        print i
        i = i + 1
    Javascript ciclo While
    while (i <= 10) {
        console.log(i);
        i = i + 1;
    }

    Hasta aquí­ ha llegado este post, espero que lo hallas disfrutado mucho y te halla sido de mucha ayuda, muy educativo e interesante. No olvides compartirlo, déjame tus comentarios y dudas, hasta la próxima.

  • Introducción a PHP

    Introducción a PHP

    Este es el primer post de un muy prometido curso sobre PHP, los talleres los hare en vídeos que podrás encontrar al final de cada post, pero en cada uno de estos tendrás acceso al repositorio de GitHub y a la tan necesaria información teórica. Bueno y sin mas parafernalia entremos en materia.

    ¿Qué es PHP?”

    PHP es un lenguaje de programación interpretado, que se usa junto con el código HTML para crear paginas web, que es altamente famoso por contar con una gran cantidad de soporte y documentación.

    Para comenzar a utilizar PHP se necesita de un servidor web que le de soporte, recomiendo para desarrollo usar XAMPP, siempre he trabajado con este y nunca he tenido un problema grave. No voy a explicar la instalación ya que se me hace muy sencilla, solo debes tener cuidado que al momento de arrancar el Apache(Es el servidor que soporta PHP) el puerto este libre, por defecto toma el 80 y a veces puede dar conflicto, sobre todo si tienes Skype. Cierra estos programas o configura Apache para que inicie en otro puerto. Al igual si tienes dudas puedes dejarla en los comentarios.
    Continuando, una vez tenemos el servidor montado ya podemos trabajar con PHP, creando archivos con la extensión .php.

    ¿Porqué usar PHP?

    En otro post hablé sobre las ventajas de los lenguajes de tipado dinámico, y además de estas ventajas hay otras mas que pasare a mencionar.

    • Yo diría que la mayor ventaja es su alta difusión, casi cualquier servidor de hosting ofrece por defecto un servidor para PHP.
    • Otra ventaja es que para usarlo no necesitas licencias, y aprenderlo es muy fácil ya que tiene mucha, pero mucha documentación.
    • Es un lenguaje multiplataforma, lo puedes instalar, usar y aprender en cualquier entorno.
    • Junto con MySQL son la pareja mas conocida en la web.
    • Es de código abierto. Puedes formar parte del desarrollo de este lenguaje.

    Hola mundo

    Como mencione anteriormente, yo uso XAMPP, así que los ejemplos y capturas de pantalla que haga estarán sobre este servidor.
    Crearé un archivo llamado index.php con el siguiente código:

    <span>Hola mundo</span>

    Este es simplemente código HTML, pero funciona, ya que como lo había mencionado PHP es interpretado, es mas, en algunas fuentes lo llaman empotrado, ya que hace uso de la semántica de HTML, aunque PHP quiere dejar de lado esto, y que se trabaje de una forma orientada a objetos para olvidarnos de aquellos tiempos del código espagueti, que fue como en un principio inicio y se hizo popular PHP. Así que vamos a cambiar solo un poco ese código. Vamos a agregarle las etiquetas de inicio y cierre de PHP junto con la primera instrucción que veremos.

    <?php
    echo "<span>Hola mundo</span>";
    ?>

    ¿Qué podemos ver de las líneas anteriores de código? Primero conocemos la etiqueta de apertura de PHP, y en la tercera lineá la etiqueta de cierre, esto le indica al interprete que todo el contenido que este dentro de estas etiquetas se entenderá como código PHP.
    Ahora en la segunda lineá vemos nuestra primera función de PHP, bueno en realidad no es una función, es una instrucción propia del lenguaje. Y esta instrucción lo que hace es mostrar una cadena de texto, en este caso le estamos pasando nuestro “Hola Mundo” y finalizamos nuestra lineá con el caracter ; el cual es muy importante, ya que finaliza nuestra lineá y en este caso también la instrucción echo.
    Hay que recordar que PHP nació como un lenguaje estructurado, para ser usado junto con HTML, gracias a esto se popularizo, pero esto también le creo una “Época oscura”, donde casi ni se podía diferenciar el código de script y de HTML, era un caos hacer mantenimiento, por este motivo yo personalmente no aconsejo usar etiquetas HTML dentro del código PHP, mas adelante te enseñare formas elegantes de hacerlo. Por ahora solo quería comentarles que se puede hacer.
    PHP es interpretado lineá a lineá, por lo que es muy importante siempre finalizarlas con ;(punto y coma).

    Vamos a dejar por aquí este post, recuerda que este es el primero del curso de PHP, y por cierto te dejo el enlace a la documentación oficial de PHP. Deja tus comentarios, inquietudes y sugerencias.

  • Hello World – Quiero programar ¿Cómo comienzo?

    Hello World – Quiero programar ¿Cómo comienzo?

    Soy programador hace unos 5 años, empecé dando mis primeros pasos empíricamente, leyendo blogs, viendo vídeos y por su puesto con el método de prueba y error, que considero que es la mejor manera de aprender a programar. Pero antes de que te lances a programar déjame decirte que es muy fácil y al mismo tiempo no lo es. En mi opinión creo que todos deberían saber programar, pero no todos se pueden dedicar a esto, de aquí radica mi anterior afirmación.

    Hoy precisamente te quiero compartir los fundamentos de programación, que te van a ayudar muchísimo si quieres dedicarte profesionalmente a esto, o si no como dije todos deberían saber programar.

    El nombre del pots es Hello World (Hola mundo), y estas son las primeras palabras de un programador, independientemente del lenguaje siempre serán nuestros primeros pasos y al igual que en la vida, antes de correr debes andar, y te daré unos consejos para que te inicies exitosamente en la programación.

    Tomate tu tiempo

    Cada individuo aprende de maneras diferentes y a intervalos diferentes de tiempo, en mi caso la lectura y la practica me ayudaron muchísimo, así­ que al igual que yo lo hice, puedes encontrar tu método de aprendizaje, te aconsejo muchísimo que te apoyes en la web, busques literatura, libros, plataformas o aplicaciones que te ayuden, encontraras muchos recursos gratuitos y de pago, como por ejemplo este sitio web o mi canal de YouTube, creeme que esta comunidad es muy grande y muy colaborativa.

    Una vez tengas los recursos de aprendizaje, dedicale tiempo al mismo, y sobre todo practica lo que haz aprendido. Mide tu ritmo de aprendizaje, como dije al principio, todos tenemos nuestra propio ritmo de aprendizaje, así­ que no te angusties si no entiendes algo. Busca la manera de entenderlo, si no logras comprender cambia el recurso o la metodología. Algo que te dará un gran impulso es crear un proyecto propio, busca algo que te apasione y llévalo al mundo de la programación, por ejemplo ¿tienes una idea? empieza haciendo bocetos de la idea, empieza a programar un modulo pequeño de la misma, veras que con el tiempo esa pequeña idea que te apasiona te impulsara a aprender y mejorar, y dirás ¿Cómo voy a hacer mi idea realidad si no se programar? pero ahí­ es precisamente donde radica lo bonito del asunto, a medida que empiezas a desarrollar tu idea encontraras impedimentos y estos te empujaran a aprender y a superar estos retos.

    Todo esta en la mente

    Vuelvo a repetir esta frase, “todos deberían saber programar”, y es que la programación esta en todo, programar no es solo sentarse frente a un computador y digitar hasta que salga fuego entre los dedos; la programación esta en cada decisión que se toma, la programación inicia en nuestra proceso de pensamiento. Por ejemplo, Cuando queremos elegir entre un helado de fresa o chocolate (If – Else) utilizamos siempre condiciones, podemos decir que el ser humano programa antes del nacimiento de los computadores y es que todo lo podemos pasar a condiciones, ciclos o algoritmos. ¿Y a que viene toda esta carreta? Precisamente piensa en las situaciones cotidianas como un algoritmo, intenta deducir cada función, cada control. Por ejemplo en el anterior ejemplo de la selección del helado intenta pensar en el seudocódigo, a continuación te doy un ejemplo de como hacerlo.

    programa elegirHelado
        Si heladoChocolate esMejor Entonces
            comprar heladoChocolate
        Si no Entonces
            comprar heladoFresa
        Fin Si

    Como vez, es algo muy sencillo de entender y que luego se puede pasar fácilmente a cualquier lenguaje de programación; esto lo puedes hacer mentalmente o en un a hoja de papel o si prefieres puedes utilizar alguna herramienta como PSeInt, y esto va a ser un gran ejercicio, es mas, ahora hay herramientas con las que puedes hacer juegos 2D y aplicaciones sin siquiera escribir una lineá de código, solo debes estructurar correctamente el seudocódigo y la plataforma hará el resto, ejemplo de estas aplicaciones son Scratch o Construct 2.

    Así que la esencia de la programación esta en pensar antes de actuar, dedícale tiempo al análisis del problema, estructura bien la solución, ve de pequeño a grande, piensa en pequeñas soluciones que se unifiquen en una grande, piensa en pequeñas ideas, pequeños problemas, aprende a descomponerlo todo en pequeñas situaciones o funciones para así luego formar algo de lo que te sientas satisfecho. Y es mas, este es un principio de la programación orientada a objetos, que luego revisaremos en otro post.

    Desarrolla tu estilo

    Es muy importante que te sientas a gusto con lo que estas haciendo, de lo contrario lo vas a ver como un trabajo o peor como algo muy frustrante y tedioso. Se podría colocar un paralelismo entre la programación y la gastronomía, en las dos hay recetas, hay utensilios y se desea la satisfacción del consumidor, pero lo que yo quiero destacar es que la realización de un chef esta en innovar y crear, no es lo mismo seguir la receta a modificar o crear tu propia receta; en la programación es igual, debes conocer los estándares, conocer ciertas reglas básicas, y estas cambian dependiendo de las herramientas que uses, pero siempre estará tu sello personal en cada código que escribas.

    Este punto es un poco difícil de explicarlo y entenderlo, solo con la practica lo podrás notar, cuando comiences a trabajar con otros programadores, te darás cuenta, en el código se puede saber el conocimiento de una persona, su organización, hasta su estado de animo y aunque no lo parezca este punto es muy importante, por que debes desarrollar y mejorar tu forma de transmitir esas ideas y de plasmarlas en un código.

    Solo me queda decirte animo, no te rindas, practica y practica, nunca se termina de aprender, siempre puedes mejorar mas, y no te pierdas los siguientes post, este solo es el principio de una serie sobre los fundamentos de programación. También no te olvides dejar tu comentario opinando, preguntando o sugiriendo algún tema de interés.

  • Hilos de ejecución

    Hilos de ejecución

    Un hilo es simplemente una rutina que permite ejecutar tareas simultáneamente. La utilización de hilos permite ejecutar tareas en paralelo y compartir los recursos durante la ejecución.

    Los sistemas operativos hacen uso de los hilos permanentemente, ya que necesita hacer varias tareas simultáneamente. Estos hilos funcionan como una cola, en donde cada tarea que se anexa al hilio espera su turno para ser ejecutada. Cuando varios hilos comparten algún recurso, si alguno de ellos modifica el recurso, inmediatamente los demás hilos sabrán del cambio y se verán afectados.

    Cada hilo de ejecución tiene un puntero de instrucciones (Contador de programa), encargado de indicar el estado o posición dentro de la secuencia de instrucciones perteneciente al hilo. También tiene una pila de llamadas, donde se registra la secuencia de subrutinas y el punto de retorno de cada una de ellas. Por ultimo cada hilo tiene acceso a la CPU y a el valor de los registro de manera independiente.

    Para ver en detalle como funciona un hilo y que características y ventajas tiene frente a los procesos vamos a crear un ejemplo practico para visualizarlo.

    Los hilos se utilizan frecuentemente para generar respaldos… por ejemplo, estamos ahora editando un archivo csv, abrimos un programa de hoja de cálculo; suites como Office, LibreOffice, OpenOffice implementan este sistema, hasta aplicaciones en la nube, es decir que crean un hilo donde se guarda el documento de respaldo y mientras editas el archivo en cada cambio que vas haciendo va guardando una copia temporal, en caso de que el archivo se cierre inesperadamente el trabajo realizado no se perderá.

    Bueno, esto fue un pequeño resumen introductorio a lo que son los hilos. Si quieres mas información, como siempre puedes referirte a la Wikipedia o al omnisciente Google y no olvides dejar tus aportes o inquietudes en los comentarios.

  • JavaCup – Aprender Java mientras te diviertes!

    JavaCup – Aprender Java mientras te diviertes!

    Lamentablemente el evento de Javacup desapareció. Aunque JavaHispano avisará si hay una nueva edición.

    Este es uno de los mejores eventos y competencias que hay a nivel internacional de programación, lo mejor es que el ingreso es gratuito, el apoyo es constante y el aprendizaje es genial.

    JavaCup es un evento que se celebra cada año gracias a la comunidad de javaHispano y al patrocinio de Codemotion. Este año (2013) he participado por primera vez en su sexta versión y la experiencia a sido genial, a la fecha los partidos se están ejecutando y se pueden ver desde la pagina oficial.

    La comunidad de javaHispano desarrolló un framework que facilita al máximo el desarrollo del objetivo del concurso. Crear un equipo virtual de fútbol (desarrollar una clase Java que implementa una interfaz predefinida), como en el fútbol el objetivo es anotar goles y seguir avanzando. Esto se logra creando una buena táctica, es decir realizando una correcta programación que se adapte a cada posible situación.

    Para probarlo solo debes descargar el framework, pero si deseas participar debes registrarte, pero no te preocupes, la inscripción es muy sencilla, solo debes estar atento a las fechas en que se abren las convocatorias y colocar una información básica.

    Cuando descargas el framework vienen muchos ejemplos, las clases implementadas por los equipos que han participado anteriormente. Esto te facilita aun mas la implantación de los métodos a tu clase. Pero ahí no acaba, además cuentas con una documentación excelente y un foro muy activo.

    Para comenzar a realizar la táctica del equipo debes descargar el proyecto de la pagina, esta disponible para NetBeans y Eclipse, lo único que debes hacer es abrir el proyecto y ejecutar la interfaz que creara la clase base para crear la táctica.

    Me siento mas a gusto trabajando con NetBeans, así que utilice este, no pude dedicar mucho tiempo al desarrollo de la táctica, en realidad fueron como 2 horas, y obviamente esto se ve reflejado en los resultados de los partidos.

    Espero poder participar y generar mejores tácticas en las posteriores versiones, y te invito a que te animes a probarlo y ser parte de esta genial comunidad, Ahhhh, apropósito hay un buen premio en efectivo para los 4 primeros lugares, así que además de aprender, divertirte y programar participas por los premios.

    A continuación dejo el vídeo de mi primer partido. Quisiera decir que fue mejorando pero no fue así. Jaja, Seguro a la vuelta será mejor.

¡Hola a todos los entusiastas de la tecnología! Quería informarles que en mi blog utilizamos cookies para mejorar la experiencia de usuario. Estas pequeñas herramientas nos ayudan a personalizar el contenido y ofrecer funciones específicas. Al continuar explorando el sitio, aceptas nuestro uso de cookies. Puedes obtener más información sobre cómo las utilizamos en nuestra política de privacidad. ¡Gracias por ser parte de esta comunidad tecnológica! 🍪    Más información
Privacidad