Aprende a generar dinero desde casa

Escribir en un archivo con Java

¿Cómo escribir archivos en Java? Anteriormente publicamos una muy útil y sencilla guía que explica el proceso de creación de archivos. La guía la puedes encontrar aquí.

Una vez que creamos un archivo, desearemos muchas veces escribir información en él. Por ejemplo, si creamos un archivo para almacenar un log de información podemos escribir todos los cambios que vayan sucediendo en la aplicación. O si desarrollamos una aplicación de chat tal vez desearíamos guardar un historial de las conversaciones. Todo esto se hace posible mediante la escritura de archivos.

Java ofrece una librería exclusiva para este propósito, la librería FileWriter, la cual tiene muchas opciones para el desarrollo de esta clase de códigos. En acompañamiento a ella, para este fin usaremos de igual forma la librería BufferedWriter, esa librería nos ayuda a escribir los archivos mediante la implementación de un Buffer de caracteres, es decir, un lugar en donde se almacenan varios caracteres para facilitar su escritura sin causar conflictos o problemas.

En fin, necesitamos importar ambas librerías, para ello utilizaremos el siguiente código:

import java.io.BufferedWriter;
import java.io.FileWriter;

Una vez importadas las librerías nos enfocaremos en desarrollar una función o método que reciba como parámetros a la línea que deseamos escribir en el archivo, y el archivo al que deseamos escribir dicha línea. Al haber completado este paso será muy fácil llamarlo desde cualquier parte del programa mediante una única línea.

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Archivos{
 public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) {
    }
}

Ese método será llenado con lo que iremos armando poco a poco. Por fines de eficiencia es una función booleana, es decir que retornará true o false dependiendo de lo que codifiquemos, con ello podemos sacar provecho y mostrar un mensaje de error en caso de que sea false o hacer lo que debamos hacer en caso de ser true.

Las clases que importamos ofrecen utilidades excelentes para nuestro propósito, usando la clase FileWriter declararemos un objeto homónimo direccionando a nuestro archivo, y un escritor de Buffer: BufferedWriter, direccionando a nuestro FileWriter anterior, con lo que el código quedaría de la siguiente forma:

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Archivos{
 public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) {
        FileWriter escribir_archivo = new FileWriter(nombre_archivo);
        BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo);
    }
}

Recuerda: el archivo estará en una dirección absoluta o relativa de acuerdo a como lo configures.

Ahora que tenemos listos esos datos nos olvidaremos del FileWriter escribir_archivo, y daremos uso únicamente al BufferedWriter, el cual se encargará de escribir los datos.

En el siguiente código vamos a utilizar el método write() de esa clase para escribir en el fichero, el cual recibe como parámetro la línea a escribir, la cual a su vez fue enviada al método con el nombre: linea_a_guardar . Posteriormente usaremos el método newLine() para agregar un salto, lo que permitirá que el siguiente texto que escribamos no se pegue al anterior, esta línea es opcional. Muchas veces también se quiere escribir un texto continuo sin saltos.

Al terminar de guardar una línea debemos cerrar la conexión entre el archivo y java, pero para ello debemos primeramente “drenar” el Buffer para que se escriban todos los datos. Posteriormente cerramos el proceso.

Utilizamos un bloque try-catch para capturar excepciones, en caso de encontrar un problema se emitirá un error que significa que el archivo no se escribió, por lo que devolverá el método el valor false, y en caso de que sí se haya escrito todo el método devolverá true. Podemos ver la importancia de la captura y manejo de excepciones en este ejemplo. Una vez que se haya devuelto un valor el programa sabrá que hacer de acuerdo a lo que se le haya indicado.

/*Clase que escribe nueva información en los archivos
*Por: Daniel Ortiz Costa
*/

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Archivos{
    public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) {
        BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo);
        FileWriter escribir_archivo = new FileWriter(nombre_archivo);

        try {
            escribir_buffer.write(linea_a_guardar);
            escribir_buffer.newLine();
            escribir_buffer.flush();
            escribir_buffer.close();
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
        return true;
    }
}

El código que está arriba es el completo. Recuerda colocarlo en su propia clase o en la que sea más apropiado según el código de tu programa. A continuación mostraremos un ejemplo de como utilizar este código. Para ello lo instanciaremos desde otra clase:

public class Test{
 public static void main (String [] args){
  Archivos archivos = new Archivos();
  archivos.escribirEnArchivo ("Juanito es un hombre", "Frases.txt");
  archivos.escribirEnArchivo ("Me llamo David", "Frases.txt");
  archivos.escribirEnArchivo ("Mi casa es fea", "Datos.txt");
 }
}

Al final tendremos un archivo Frases.txt con los datos escritos y un Datos.txt con nueva información. Recuerda que este código NO crea un archivo, para saber como realizar ese proceso puedes revisar la anterior guía publicada.

Si tu código no está diseñado con clases o métodos es fácil solo tomar lo básico. Ejemplo del código que no utiliza clases, objetos o funciones:

public class Test{
 public static void main (String [] args){
  BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo);
        FileWriter escribir_archivo = new FileWriter(nombre_archivo);

        String linea_a_guardar = "Lo que deseas guardar";

        try {
            escribir_buffer.write(linea_a_guardar);
            escribir_buffer.newLine();
            escribir_buffer.flush();
            escribir_buffer.close();
        } catch (Exception e) {
            System.out.println(e);
        }
 }
}

¿Cómo crear archivos en Java?

Java proporciona una excelente forma de controlar los archivos, crearlos y leerlos mediante la librería File y algunas otras herramientas muy interesantes que nos permiten su creación.

Primeramente, para crear un archivo con Java debemos hacer uso de la clase de archivos. Viendo este tutorial podemos entender como verificar también si un archivo existe y si no crearlo; sin embargo nos centraremos específicamente en como crear un archivo de la nada, para ello debemos hacer uso de la librería File. Debemos traerla a la aplicación y lo hacemos importándola de la siguiente manera:

import java.io.File;

Una vez que la tengamos importada, escogemos el método o función en el que querramos crear el archivo. Eso depende de cada uno, en la guía haremos el proceso dentro del Main. Para ello debemos continuar armando nuestro código, ahora necesitamos establecer el nombre del archivo, es recomendable que uses una String, aunque puedes hacerlo directamente:

import java.io.File;

public class Archivos{
 public static void main (String [] args){
  String nombredelarchivo = "TuArchivo.txt";
 }
}

A continuación referenciaremos el nombre del archivo para poder crearlo, finalmente aplicaremos la función createNewFile() que pertenece a la importada clase File:

import java.io.File;

public class Archivos{
 public static void main (String [] args){
  String nombredelarchivo = "TuArchivo.txt";
  File archivo = new File (nombredelarchivo);
  try {                
            archivo.createNewFile();
        } catch (Exception e) {
            System.out.println("No se ha podido crear el archivo");
        }
 }
}

Pueden notar que utilizamos un control de excepciones con el bloque Try-Catch para emitir un error personalizado en caso de cualquier problema con la creación del archivo (lo cual usualmente no debería pasar).

Ese código es la estructura básica que te permite crear un archivo para cualquier utilidad que quieras darle. ¿Escribir en un fichero?, ¿Leer datos?, bueno eso lo veremos en otros tutoriales que puedes buscar en el sitio. Por el momento esperamos que este concepto te sirva.

Comprobar que un archivo exista, caso contrario crearlo en Java

¿Cómo comprobamos que un archivo exista en Java?, ¿Cómo lo creamos en caso de no existir? Generalmente cuando desarrollamos aplicaciones que utilizan determinadas clases de archivos en su ejecución no queremos que se presenten problemas en caso de que un fichero importante falte, tampoco queremos que el usuario tenga que encargarse de crear un archivo con un determinado formato porque perdería interactividad nuestro programa.

Una vez que hayamos finalizado con el diseño de un programa es bueno utilizar esta clase para evitar toda esta clase de situaciones. Es de hecho muy beneficioso llamar a esta clase al arrancar la aplicación para que el proceso comprobatorio se ejecute al inicio y evitemos problemas posteriores.

Recuerda crear una clase para almacenar todo este código:

package proyectorestaurante;

/*
*Clase que comprueba que existan los archivos
*Por: Daniel Ortiz Costa
*/

import java.io.File;

public class Comprobaciones {    

    //Comprueba que exista un archivo en un directorio
    public void comprobarArchivo(String nombre_archivo, String nombre_carpeta) {

        File directorio = new File(nombre_carpeta);

        File archivo = new File(directorio, nombre_archivo);

        //Comprueba si el directorio no existe
        if (!directorio.exists()) {

            //En caso de no hacerlo, lo crea
            directorio.mkdir();
        }

        //Comprueba si el archivo existe
        if (!archivo.exists()) {
            try {
                //En caso de no hacerlo 
                archivo.createNewFile();
            } catch (Exception e) {
                System.out.println("No se ha podido crear el archivo");
            }
        }
    }
}

El código requiere como parámetros el nombre del archivo y el nombre del directorio absoluto o relativo que se encuentre instalado.

¿Cómo ejecutarlo? Simplemente debes instanciar la clase con un objeto y llamar al método principal. Así:

Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombredearchivo', 'Carpeta');

Un ejemplo de como comprobar la existencia:

//Comprobación relativa
Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombres.txt', 'Datos');

//Comprobación de subdirectorio relativo a un subdirectorio
Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombres.txt', 'Datos/Nombres');

//Comprobación de directorio absoluto
Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombres.txt', 'C:/Datos');

Esperamos que encuentres útil este código, recuerda que el mismo solo recreará el archivo, es cuestión tuya de manejar el llenado de los datos si es que tu inicial no debe estar vacío. Posteriormente colocaremos un artículo relacionado al manejo de datos con archivos en detalle.

Comparación Java vs Python: ¿Cuál es más rápido?

Hablemos de estos dos populares lenguajes de programación. Tanto Java como Python son lenguajes interpretados (a pesar de que solo una parte de Java lo es), pero ¿Cuál resulta más rápido al momento de ejecutar pedazos de código, o inclusive programas complejos?

Enfoquémonos en el concepto principal: Ninguno de los dos como tal es más rápido que el otro puesto que los lenguajes de programación no tienen velocidad. Lo que sí podemos comparar es la velocidad de las implementaciones de cada uno de ellos.


Veremos un poco en detalle cómo las funcionalidades de cada uno resultan ventajosas en ciertos casos. A fin de este artículo se necesita utilizar benchmarking. Benchmarking no es nada más que el uso de distintos programas, códigos o lo que sea necesario para comparar el rendimiento de varias situaciones.

Usando códigos de diferentes fuentes que cumplen la misma funcionalidad podemos notar que:

  • Tabla de datos hash: El procesamiento y formación de una tabla hash resulta casi 5 veces más rápido en Python.
  • Entrada y salida de datos: De igual forma Python lleva una ventaja al momento de procesar datos y valores de entrada y salida.
  • Listas y arreglos: El equivalente de un arreglo en Python: Una lista, resulta ser más lento en procesamiento y formación que en Java.
  • Ejecución de métodos nativos: Los métodos nativos se ejecutan de forma más rápida usando la Máquina Virtual de Java.
  • Inicialización del intérprete: Tanto Java como Python son interpretados, es decir tienen módulos que traducen lo codificado en otro lenguaje que posteriormente será traducido. El intérprete de Python se carga cuatro veces más rápido que el de Java, lo que es notable al momento de correr aplicaciones por primera vez codificadas en cualquiera de los lenguajes.
  • Colocación de objetos: Java resulta tener una aplastante victoria en el momento de colocar objetos en memoria, tomándole aproximadamente 8 veces menos tiempo. Python aún no tiene el nivel del lenguaje de la tacita en este punto.
  • La velocidad del intérprete: Quizás el punto más interesante. Java por el momento también tiene una ventaja al momento de convertir el código de fuente en Bytecode. Python resulta un poco más lento en rendimiento general al momento de correr aplicaciones grandes, como juegos por ejemplo.
Java es un lenguaje de 3 tiempos a diferencia de Python que es de 2.

En Java se siguen los siguientes pasos resumidos:

  • Se interpreta el código de fuente en Bytecode
  • El Bytecode es ejecutado en la máquina virtual
  • La máquina virtual trabaja posteriormente con la máquina física

En Python:

  • Se interpreta el código de fuente
  • Se trabaja directamente con la máquina física
Este paso adicional hace que el rendimiento de Java resulte un poco más “pesado” en el sentido estricto.

Vamos a ver una comparación un poco más detallada:

Java es ciertamente un buen lenguaje, pero hay lenguajes para cada cosa. Si hablamos de un lenguaje basado en flujos de datos quizás querramos pensar 2 veces cuál utilizar. El enfoque en flujos (digamos por ejemplo un bucle for que imprima un millón de datos) resulta bastante mejor en Python al momento de presentar datos en una consola. Lo que nos hace notar que Java pudo haber sido pensado en un propósito más de “usuario final” que  ”usuario experimental”.

Considerando que el intérprete de Java resulta vastamente más rápido que el de Python, el hecho de que la entrada y salida de datos sea más veloz en Python resulta destacable. Al momento de enforcarnos en listas de datos, los vectores de Java funcionan a una velocidad mayor que la de los operadores list[] del intérprete reptiliano.

Hablando desde el punto de vista del programador la velocidad de creación de aplicaciones en Python es probablemente la más rápida. Con Java se requiere el excesivo uso de encabezados, definiciones, llaves y métodos. Un ejemplo sencillo:

Si deseamos una aplicación vacía que no haga absolutamente nada, ¿Qué debemos hacer?
  • En Python: NADA, literalmente un archivo vacío resulta en una aplicación que no haga ningún cálculo o proceso.
  • En Java: Debemos definir una clase de prueba, un método de inicialización vacío y correrlo.
En cuentas resumidas:

El intérprete de Java resulta extensamente superior al de Python. Quizás resultado de más años y dinero invertidos en su desarrollo. Sin embargo, no todo es color de rosa. Técnicamente podemos hablar de la ventaja de ese componente en programas que dependen de la velocidad. En ellos va a ser claro que Java tiene un desempeño mejor, pero en referencia a la gran cantidad de código base que Python posee en C, este principio se puede contradecir. Si por ejemplo nuestra aplicación consiste en escribir archivos de historiales originados por un chat proveniente de la conexión de red, la velocidad de escritura no va a importar tanto al ser prioridad la velocidad con la que llegan los datos de la red, lo cual entra en el concepto de “Entrada y salida”, algo en lo que Python tiene su ventaja.

Obviamente Python resulta bastante más fácil para programar que Java: Un código muchísimo más limpio y que evita decenas de posibles confusiones. Resulta ventajoso también el hecho de que a pesar de que la documentación de la API de Java es mucho más extensa y organizada, en Python todo es más fácil de recordar al ser mucho menos.

Java resulta más conveniente para programación basada en sistemas, sin embargo un programador de Python puede ser más productivo. Todo gracias a que menos tiempo empleado en desarrollar una aplicación = más tiempo libre para otras aplicaciones.

Ambos son lenguajes de tipado fuerte, lo que los diferencia es que uno usa tipado estático y el otro dinámico. Siendo una de las ventajas de Python el uso de tipos a objetos dinámicos, lo que genera eficiencia en el desarrollo. Resumiendo todo lo de arriba, Java es menos consiso que Python.

Ningún lenguaje de programación es mejor que otro. Pero siempre un lenguaje de programación es mejor que otro PARA CIERTAS COSAS. El asunto está en saber qué necesito para mi aplicación.

Un problema grave es cuando un programador se enfoca en uno de ellos, porque se cierra a muchas posibilidades.

¿Cómo crear una página web?

Una página web es una herramienta grandiosa. Encontramos decenas de miles en toda la red y es en lo que se basa el internet. Muchas veces deseamos desarrollar nuestra propia comunidad o sitio y ofrecer los servicios que se nos ocurran. Inclusive es fácil ganar dinero con nuestra página mediante los famosos servicios de publicidad.

Para empezar debes saber que no existe ninguna complejidad en el proceso. Cualquiera puede tener una y no es necesario conocer más que un poco sobre como funcionan estas herramientas. Debes considerar que si bien muchos servicios tienen costo, puedes tener la tuya tranquilamente sin pagar un centavo.

Es común para un estudiante en muchas universidades aprender a crear páginas web, pero no como tener un acceso a ella desde el internet.

Empezemos por lo básico:

1- ¿Estás en la capacidad de crear páginas propias desde 0, con códificación HTML, PHP, etc?

Si es así, excelente, podrás personalizar de muchas maneras, modificar y crear tus páginas como te plazca. Pero si es que no, no hay problema, existen muchas formas de poseerlas sin conocer mucho sobre el tema. Explicaremos más sobre el tema en los siguientes numerales.

2- Definir que tipo de página web deseamos

Las páginas web se cuentan por montones y de igual forma los tipos que podremos tener. Es cuestión de definir lo que vamos a desarrollar:
  • Blogs: Son útiles bitácoras que pasaron de ser diarios personales a completos sistemas web que utilizan muchísimas empresas al rededor del mundo. Nuestra página funciona con un sistema de este tipo y como podrá notarse, es suficiente para un servicio como el que se ofrece.
  • Web de propósito general: Una empresa podría no necesitar un blog, o tú como persona podrías encontrar más atractivo crear una web que permita ofrecer sistemas descargas, foros y comunidades, etc.

3- Obtener la página web

Una vez que hayamos definido la página web podremos empezar a construirla. Si es que eres una persona novata en el tema, siempre es bueno empezar por un blog.

Puedes crear blogs gratuitamente, los servicios más usados son: Blogspot, Tumblr y WordPress. Es muy fácil registrar uno desde la página que ofrece el servicio. Una vez que accedamos a esta página, nos pedirá una serie de datos sobre el blog que planeamos crear. Posterior a ello nos asignarán una dirección que nosotros hayamos definido. Ej: blogdemaria.blogspot.com

Esa dirección es la que utilizaremos para acceder a nuestro blog. Claro, existen decenas de servicios que no se limitan a blogs, sino a plataformas un poco distintas. Un claro ejemplo es Webs.com; sin embargo, la mecánica de la creación es la misma: Llenar datos y obtener una dirección.

Una vez que hayamos obtenido la dirección es muy intuitivo lo que podremos hacer después: Configurar y llenar de contenido nuestra creación.

Esta forma es la más sencilla de obtener un sitio web. Si consideras que esto es lo que buscas, puedes saltar al paso 6 y omitir los 2 siguientes que van enfocados en otros métodos.

Si somos personas que tenemos un poco más de conocimiento en el desarrollo web, quizás un blog de Blogger alojado en el servidor de Google no nos parezca lo más conveniente, es por ello que muchas veces desearemos instalar y gestionar todo lo respectivo a nuestro sitio sin depender de los servidores de estas empresas. En ese momento es vital el uso de lo que conocemos como Hosting o Alojamiento.

También en caso de ser desarrolladores (Personas que construyen sus sitios web usando HTML, CSS, PHP, JavaScript, etc.) Vas a necesitar revisar el paso 4 para saber como colocar tus creaciones en la nube del internet.

4- Hosting o Alojamiento

Este servicio permite que nosotros almacenemos todos los archivos que conforman al sitio web en una computadora llamada servidor. El servidor puede ser gratuito, personal o pago. Un servidor de hosting gratuito siempre presentará limitaciones en cuanto a lo que podamos hacer, un ejemplo: Blogspot, WordPress y todos las páginas mencionadas en el paso 3 ofrecen hosting gratis, pero no permiten que gestionemos los datos, veamos el rendimiento, etc. Al final del artículo encontrarás una lista de servicios gratuitos para crear tu web en pocos pasos.

Existen otras clases de hosting gratuitos que permiten que almacenemos páginas de nuestra autoría, o los ficheros de los sistemas de gestión de contenidos (CMS) tales como Joomla, Drupal, WordPress, PHPNuke, SMF, etc. Pero no permiten ancho de banda que sustancie una gran cantidad de visitas, o solicitan que se coloque publicidad en tu página. Una lista de estos la puedes encontrar AQUÍ, en esa fuente podrás ver una lista de los servicios: Espacio de almacenamiento, Ancho de banda, bases de datos, etc. Todo lo que ellos ofrecen. Otro problema de esta clase de servicios es que no brindarán mucho soporte ya que no es un servicio pago.

Cuando utilices uno de estos sitios, al igual que en el caso de los servicios de blogs, se te asignará una url para referenciar al acceso de tu página web, además otra información relevante para gestionar tu servidor en un panel. Ejemplo: sitioqueyoquiera.hostingratis.com

Los servicios gratuitos por otro lado, son lo único que necesitas si es que tu página no planea ser muy grande o no necesitas realmente controlar el servidor. Una gran ventaja de utilizar páginas como las del paso 3 es que no limitan la cantidad de visitas y siempre están funcionando al ser gestionados por empresas poderosas como Google.

Usando herramientas como XAMPP puedes configurar tu computador como un servidor web en pocos pasos, es muy sencillo. Con ello solo necesitas la IP de tu computador para acceder a la página desde cualquier parte del mundo. El problema con ello es que no puedes apagar tu equipo o no se podrá acceder al sitio, además conlleva la necesidad de una conexión rápida y computadora potente adicionada de Firewalls que eviten problemas posteriores. Esto es recomendado para usuarios más avanzados.

Los hostings pagos ofrecen muchísimas ventajas, sin embargo no muchas personas están dispuestas a pagar 70 dólares al año por un servicio que van a subutilizar. El más recomendado por parte de Zona de Programación es Banahosting. Tiene algunos planes muy interesantes. Encontrarás servicios muy baratos de 1 dólar al año; Sin embargo, la desventaja es que son muy lentos y no recomendados por no ser empresas serias.

Para pagar el alojamiento podrás usar tarjetas de crédito o PayPal.

5- Gestionando los archivos

Si finalmente decidiste por un hosting personalizado, como los que se recomendaron en el paso 4 deberás considerar que ahora está en tus manos configurar y administrar los archivos de tu sitio.

Cuando te suscribas a un servicio de alojamiento ellos te darán mucha información referente al producto que acabas de adquirir ya sea gratuitamente o pagando, sin embargo las más importantes son:
  • Una dirección para acceder al sitio, una dirección para acceder a tu panel de control, una dirección FTP, una clave y un usuario para tu panel de control, y una clave y usuario para acceder al FTP.

¿Qué es el FTP?

Es un protocolo de transferencia de archivos, el cual permite que desde tu computador “subas” los archivos que desees enviar al sitio web para que se muestren al usuario que te visite.

Generalmente desde el panel de control podrás subir los archivos a tu sitio, pero si es que no tienes la opción, o simplemente no deseas acceder a él cada vez puedes utilizar herramientas de acceso FTP.

La mejor herramienta para este propósito es Filezilla. Filezilla es un programa gratuito en el cual colocaremos los datos que nos brindó el servicio de hosting para acceder al FTP y con ello accederemos a un sistema de carpetas, en ese sistema colocaremos nuestros archivos.

Si vamos a utilizar una CMS como Joomla deberemos expresamente usar esta clase de programas porque aquellos sistemas funcionan con cientos de archivos.

Apenas subamos los archivos al servidor, podremos acceder a ellos mediante la dirección principal de nuestro sitio (siempre y cuando haya un archivo index).

6- Personalizando la dirección de nuestra página con dominios

Los servicios gratuitos nos asignarán direcciones del tipo subdominio (juan.blogspot.com, mipagina.000webhost.com, etc). Los servicios pagos nos asignarán direcciones IP sin identificación textual (101.12.1.4, 123.12.122.1, etc.).

Pero ¿Qué pasa si yo quiero que la dirección de mi sitio sea www.mipagina.com o www.mipagina.net?. Simple: Debemos adquirir un servicio de dominio. Un dominio es precisamente eso, el identificador de nuestra página web.

Cuando adquirimos un servicio web de pago nos permitirá generalmente adquirir un dominio personalizado por un precio anual adicional, servicios como Blogger también permiten que lo realizemos. Configurarlos no lleva mucho tiempo y con los tutoriales de las mismas empresas lo podemos tener funcionando en 2 minutos.

7- Ganar visitas

Recuerda que ahora que posees una página debes empezar a recibir visitas. Pero esto no sucederá por arte de magia. Escribe buen contenido, promociónala en redes sociales, si deseas paga servicios de publicidad, etc. Poco a poco empezarás a ganar más gente de todo el mundo y te irás posicionando en los buscadores para que los internautas cada vez más encuentren tu web. Investiga lo que es SEO y como te puede ayudar en este propósito.

8- Dudas

¿Qué es una CMS?

Antes de utilizar una definición exacta te diremos en palabras fáciles lo que es un Sistema de Gestión de Contenido: Es una página web ya armada que tú solo personalizas e instalas en tu servidor. No tienes que codificarla porque ya fue creada por otras personas.

Para utilizar una necesitas gestionar una base de datos que almacene toda la información de tu web. Usuarios, publicaciones, datos, etc. Usar un servicio de alojamiento pago te permite colocar estos archivos del sistema e instalar la base de datos que almacene sus datos.
Un sistema de gestión de contenidos (o CMS, del inglés Content Management System) es un programa que permite crear una estructura de soporte (framework) para la creación y administración de contenidos, principalmente en páginas web, por parte de los administradores, editores, participantes y demás roles.
Consiste en una interfaz que controla una o varias bases de datos donde se aloja el contenido del sitio web. El sistema permite manejar de manera independiente el contenido y el diseño. Así, es posible manejar el contenido y darle en cualquier momento un diseño distinto al sitio web sin tener que darle formato al contenido de nuevo, además de permitir la fácil y controlada publicación en el sitio a varios editores. Un ejemplo clásico es el de editores que cargan el contenido al sistema y otro de nivel superior (moderador o administrador) que permite que estos contenidos sean visibles a todo el público (los aprueba).

 10- Resumen

Para crear una página web gratis sin gestionar el servidor:
  1. Se registra un blog o página en cualquiera de los links que se indicaron
  2. Se configura el diseño desde su panel de control
  3. Si se desea se adquiere un dominio único y se lo configura para que apunte a la página
Para crear una página web gratis gestionando el servidor:
  1. Se crea una cuenta en la página del alojamiento en donde nos darán todos los datos de nuestra web, direcciones e información.
  2. Desde el panel de control o usando un programa FTP accedemos al servidor y almacenamos los archivos de nuestro sitio web.
  3. Si se desea se adquiere un dominio único y se lo configura para que apunte a la página.
Para crear una página web pagando servicio de alojamiento:
  1. Se crea una cuenta en la página del alojamiento en donde nos darán todos los datos del servicio adquirido, direcciones e información. Procedemos a pagar.
  2. Necesitaremos un dominio, es necesario adquirir uno (preferiblemente en la misma empresa para evitar pasos de configuración).
  3. Usando el panel de control o un servicio FTP almacenaremos los archivos de nuestra página web.
  4. Si almacenamos una CMS o desarrollamos una web que la requiera, debemos crear una base de datos.
  5. Si almacenamos una CMS, accederemos a la página y la instalaremos siguiendo los pasos, configurando los datos creados.

11- Links importantes

1. Servicios de creación de páginas web directos, sin necesidad de alojamientos externos.
2. Servicios de alojamiento gratuitos
3. Servicios de alojamiento pagos y dominios
5. Descarga de CMS gratuitas

¿Qué pasos debo seguir para obtener un buen programa?

Tengo una idea de como programar, pero ¿Qué pasos son importantes al momento de crear un programa?. Anteriormente vimos en nuestro sitio web ¿Cómo empezar a programar? , una buenísima guía para gente que no tiene idea del campo de la programación pero desea iniciarse. Seguramente muchos entonces ya tendrán claro como funciona el trabajo de un programador. En esta guía nos enfocaremos en los pasos más importantes para el desarrollo de un programa en sí.

Cuando uno realiza un programa debe seguir una serie de pasos para obtener resultados bastante buenos, lo cual generalmente implicará que tus clientes (el cual puedes ser tú mismo) estén a gusto con tus productos, ya sea un programa de facturación o un script diseñado para el Sistema Operativo.

1- Planifica un algoritmo

Un algoritmo es una lista de pasos que permitirán crear y diseñar correctamente un programa. ¿Qué es en realidad un algoritmo?, un algoritmo es algo que sucede cada día, presentaremos un algoritmo de la vida real:

Escenario: 

No se enciende el foco de mi lámpara.

Algoritmo:

  • ¿Está la lámpara enchufada?
  • ¿No? – Enchufarla
  • ¿Sí?
  • ¿Está quemado el foco?
  • ¿Sí? – Cambiarlo
  • ¿No?
  • Comprar nueva lámpara
Podemos ver claramente que un algoritmo representa los pasos que debemos seguir para lograr determinar qué sucede con la lámpara. Muchos pensarán, ¿Cuál es el objetivo de un algoritmo?, la respuesta es que esta simple conceptualización textual aplicada al desarrollo de un programa nos permite obtener un planeamiento claro de qué queremos y cómo lo obtendremos. Vamos a ver el ejemplo anterior aplicado a una metodología de programación:

Escenario: 

Necesitamos obtener el salario más alto de una lista de 20 personas almacenada en un archivo.

Algoritmo:

  • Leer el archivo línea por línea
  • Comparar cada salario con el anterior
  • ¿Es el salario mayor al anterior?
  • ¿Sí? – Definir que el salario mayor hasta el momento es el que estamos leyendo actualmente
  • ¿No? 
  • Continuar el análisis con el salario de la siguiente persona
Al terminar básicamente habremos definido el salario mayor. Este es un código bastante simple, se podría decir que no es necesario establecer un algoritmo y que es muy fácil lanzarnos a codificarlo sin más, pero ¿Qué pasaría si tu proyecto es mucho más grande?, sería bastante complicado realizar el programa sin una guía que no se haya realizado en lenguaje humano. He ahí el recalco a la importancia que tienen los algoritmos.

2- Realiza un diagrama de flujo

Un programa no siempre contará de pasos simples como:
  • Ingresa un número
  • Ingresa otro número
  • Súmalos
  • Muestra resultado
  • Fin
Esta imagen tomada de Wikipedia indica claramente el ejemplo del algoritmo de la lámpara en un diagrama de flujo.
La mayoría de las veces un programa empleará ciclos repetitivos, llamará a otros programas o subpartes del mismo, necesitará realizar almacenamientos temporales, contadores, acumular valores referenciales, etc. Por eso es importante que aparte de diseñar un algoritmo establezcamos un dibujo que represente el proceso mediante el cual el algoritmo corre. Mira la importancia del diagrama de flujo con una analogía:

El diseño de una casa: El algoritmo 
Los acabados de la casa: El debugging y testing (Pruebas) 
La casa terminada: El programa

¿Pero cómo sé si mi algoritmo funciona correctamente?, ¿Uno construyó la casa simplemente al instante de terminar el diseño en un plano?, ¿No hace falta algo?. En realidad sí. Muchos arquitectos simularán su diseño para conocer si esos cálculos permitirán que la estructura de la casa soporte su peso. En este caso se hace lo mismo. Un diagrama de flujo determinará si el programa a codificar funcionará como se espera. Un diagrama de flujo se puede realizar a mano, o a computadora, inclusive existen herramientas como Raptor para desarrollar programas basados en esto y no programando algún código.

3- Organiza a tu equipo de trabajo

Generalmente en un gran proyecto no es recomendable trabajar solo (aunque nunca es malo arriesgarse y quedarse con todo el crédito); sin embargo, cuando vayas a trabajar con otras personas define las cualidades en las que se destaca cada uno. ¿Quién es mejor para diseño?, ¿Quién sabe optimizar mejor la memoria?, ¿Quién está más familizarizado con el entorno?, ¿Cuál de todos sabe como interactuar mejor con los usuarios?, ¿Quién es el mejor buscador de información?, etc. Con todo ello sabrás que roles asignar y quién se encargará de cada cosa; al final tu aplicación tendrá un aporte de todos.

4- Organiza tu aplicación

siempre sigue las reglas y estándares para tu lenguaje; procura mantener orden y siempre DOCUMENTA todo lo que hagas. Recuerda que porque tú sepas como funciona determinado pedazo de código otros programadores no lo harán.

ESTABLECE UN ESTÁNDAR PROPIO. Es mucho mejor que establezcas reglas de programación con tu equipo de trabajo, para que todos se manejen en el mismo idioma. Por ejemplo: Todas las variables deben llamarse como su clase, o todos deben programar usando el mismo IDE, etc.

Esto es realmente imperativo en el caso de trabajar en equipo. Muchas veces necesitarás integrar, cambiar o hasta mejorar códigos programados por otras personas y si no realizas eso se te hará muy difícil o hasta imposible combinarlos y entenderlos.

Siguiendo esos 4 esenciales pasos tendrás un buen proyecto y tus usuarios quedarán muy contentos, podrás tener una mejor organización y al final se hará mucho más fácil para ti mejorar la aplicación en el futuro, o entregarla a otra persona que al final no se hará problema entendiendo lo que hiciste para continuar tu trabajo.

¿Cómo empezar a programar?

Programar es un proceso bastante complejo pero realmente sencillo de comprender para un principiante, siempre y cuando se tenga el interés suficiente. La programación se enfoca en conseguir un resultado deseado mediante el desarrollo de uno o más códigos en diferentes lenguajes. Mediante estos elementos codificados se logran obtener aplicaciones o programas finales que cumplen el objetivo para el cual fueron diseñados.

Una persona común y corriente puede empezar a programar sin necesidad de complicarse. Programar no cuesta nada, puede hacerse desde casi cualquier computador, no requiere muchas herramientas y abarca un expectro gigantésco, el cual permite que la programación sea hecha con muchos fines, desde aportar a tu casa, hasta para hacer maldades en internet.

¿Cómo inicia el proceso de programación?

Es esencial seguir los siguientes pasos:
  1. Establece tu propósito: ¿Para qué quieres programar?, ¿Qué beneficios deseas obtener de ello?
  2. Enriquécete con información sobre el proceso que abarca programar, generalmente se resume en: Codificar, Testear, Compilar, Publicar, Utilizar. Basicamente con esos pasos podrás obtener una aplicación o herramienta deseada que sea funcional y útil.
  3. Define un lenguaje de programación con el que te sientas cómodo. Constantemente publicamos una serie de artículos que te permiten identificar y escoger el que va contigo. Los lenguajes de programación sirven para cosas distintas y no todos harán lo mismo; por ello es necesario que te familiarices con ellos. Los lenguajes de programación como Java, C++, Delphi son muy útiles en el desarrollo de herramientas de escritorio, Python, PHP, JavaScript en herramientas web, etc.
  4. Ordénate: Descarga las herramientas necesarias para el desarrollo de aplicaciones. Muchas veces la programación la puedes hacer con un simple editor de texto plano como el Bloc de Notas, compilar el código con las herramientas ofrecidas por el desarrollador de determinado lenguaje u organizaciones externas y correrlo desde tu equipo; sin embargo, para facilitar la programación existen otras utilidades adicionales conocidas como IDE, los cuales son entornos que permiten que programar sea hecho desde un solo programa, incluyendo un sistema de pruebas y el compilamiento con un solo clic. Puedes referirte a la búsqueda página para encontrar información más a fondo.
  5. Una vez que tengas todo en tu computador: Es hora de empezar. Siempre es bueno comenzar con lo básico, los lenguajes de programación la mayoría de las veces (al menos los más importantes del mundo) vienen con decenas de miles de páginas de documentación, la cual te enseñará paso como trabajar con cada uno, desde como iniciar con el clásico “Hola mundo” para presentar un simple mensaje en la pantalla, hasta avanzados procesos de diseño de interfaz.
  6. Planifica y luego desarrolla: ¿Construirías una casa sin un plano?, ¿Sería razonable poner los muebles dentro de una habitación y luego construir las paredes?. Logicamente la respuesta es NO. Siempre debes trabajar antes de empezar a codificar. ¿Cómo?, Diseña tu programa, usa diagramas de flujo, establece un algoritmo con tus propias palabras, luego que tengas el “plano” de tu proyecto puedes empezar a construirlo con las herramientas que sean adecuadas.
  7. Una vez terminada la estructura principal de tu programa puedes empezar a “adornarlo“, ¿Por qué no le agrego una ventana atractiva para ingresar los datos?, ¿Por qué no controlo errores mediante el manejo de excepciones para evitar que tus usuarios vean errores del sistema y mostrar una bonita ventana de error en su lugar?
  8. Corre tu aplicación, úsala, aprende más.
La mejor forma de aprender a programar es: PROGRAMANDO

Al terminar una aplicación habrás aprendido -si es que la hiciste por tu propia cuenta- nuevas cosas que podrás aplicar en el futuro.

No creas que todos estos términos son un lenguaje extraterrestre. Aclara tus dudas. Todos podemos aprender juntos.

Crear una ventana splash (de bienvenida) en Java

¿Has visto las famosas y muy usadas splash-screens que utilizan muchos programas al momento de iniciarse para “darte la bienvenida? Si te parecen llamativas es muy sencillo realizarlas.

Usando la librería swing, un hilo o tarea, y un poco de código podemos tener nuestra ventana de bienvenida o de cargando en pocos segundos. Las ventanas de este tipo son famosas por proveer un interesante forma de interactuar con el usuario.

Programas como Photoshop, Power Point, algunos juegos, etc. Las presentan y hacen ver a nuestro programa más serio y completo. Es una buena forma de mejorar la experiencia de usuario.

Requisitos:

Primeramente este tutorial no te enseñará como utilizar Swing para crear ventanas, simplemente se menciona el diseño como referencia. Por ello como único requisito es indispensable que sepas diseñar interfaces usando este framework, o también puedes usar simples herramientas como el diseñador de Netbeans o Eclipse para crearlas. Eso depende de ti.

Pasos:

Crearemos una clase que extienda a JFrame o JPanel (se recomienda el primero, al ser más adaptable), este paso puede ser omitido si usamos un IDE como Netbeans o Eclipse que diseñan las ventanas por nosotros.

Por propóstitos del ejemplo diseñaremos una ventana bien sencilla, elemental y fea con el siguiente código, pero ahí tendrás la idea de como hacerla.

package ventanabienvenida;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class VentanaBienvenida extends JFrame {

//Constructor
    public VentanaBienvenida() {
        dibujarVentana();
    }

//Código de inicialización
    private void dibujarVentana() {
        this.setSize(200, 200);
        this.setTitle("Bienvenido");
        this.setUndecorated(true);
        this.setLocation(300, 300);
        JLabel linea = new JLabel("CARGANDO...");
        this.add(linea);
    }
}

La definiremos como clase principal del proyecto (Tal como se mencionó antes, esto se omite si usamos los entornos anteriores).

Por cuestiones de estética, es bueno que la ventana no sea decorada. Ello permite eliminar el marco con botones de maximizar, salir y minimizar. Para ello puedes colocar el siguiente código en el constructor o mientras inicializás los componentes. Puedes notar como se la agregó en el código publicado anteriormente.

this.setUndecorated (true);

Una vez que tengamos definido todo el diseño de la ventana, solo necesitaremos definir un poco de código que cree un hilo de procesador para realizar la ejecución de la ventana, que espere un poco de tiempo y la cierre.

Como habrás notado, en el código anterior, hace falta un código de inicialización. Aquel código incluirá un hilo de procesador encargado de ejecutar el código de la clase paralelamente al código principal, lo que evita que se congele el programa.

public static void main(String[] args) {

//Se crea un ejecutable
        Runnable ejecutable = new Runnable() {
            public void run() {

//Se instancia la ventana
                VentanaBienvenida ventanabienvenida =
                        new VentanaBienvenida();

//Se muestra la ventana
                ventanabienvenida.setVisible(true);

                try {

//Se espera el número definido de segundos

                    Thread.sleep(segundos * 1000);

                } catch (Exception e) {

                    e.printStackTrace();

                }

                ventanabienvenida.dispose();

            }
        };

//Se corre la tarea
        Thread tarea = new Thread(ejecutable);
        tarea.start();

Vale mencionar que estas ventanas son meramente decorativas, aunque siempre puedes modificarlas a tu gusto con un poco de lenguaje más avanzado.

Una vez que hayan pasado los segundos definidos por ti, el siguiente código:

ventanabienvenida.dispose();

Se encargará de cerrar el JFrame, debajo de él harás lo que desees que pase. En general desearás instanciar una nueva clase y mostrarla.

Metodologías de la programación

Las metolodologías de la programación son bastante especiales en el mundo de los programadores.

Las metodologías del desarrollo del software se pueden considerar como marcos de trabajo estructuradados encargados de planear y manejar el proceso de desarrollo en sistemas de información o programas. Las mismas se enfocan en el empleo de herramientas, modelos y formas encargadas de complementar el proceso de desarrollo de un programa.

Las metodologías se emplean con sus enfoques respectivos, los cuales denotan los pasos que aplican para lograr obtener la aplicación. De acuerdo a fuentes citadas al final, los tipos de enfoques pueden definirse como:
  • Cascada: Es un proceso secuencial de desarrollo en el que los pasos de desarrollo son vistos hacia abajo. Esta metodología da mucha importancia a los pasos secuenciales, enfocando el tiempo, horarios y orden en todas las etapas. Se enfoca en una documentación destacable.
  • De prototipos: El proceso prototipado establece una serie de “prototipos” o “previas” de la aplicación de acuerdo a distintos criterios, al final se escogerá el mejor prototipo o se combinarán algunos, tal como se hace en empresas como las de juguetes o industrias de autos.
  • Incremental e iterativo: Define el desarrollo de una parte “segura” de la aplicación, es decir que evita el agregado de funciones secundarias al reservar el desarrollo de solo una parte de la aplicación, con lo que se evita problemas que podrían surgir si se incluye todo de una sola forma. Por ejemplo: Se desarrolla la parte más sencilla de una aplicación, posteriormente se codifican los módulos complementarios, uno a uno, agregándolos de igual manera, uno a uno, y así evitando problemas en caso de que se combinaran todos al mismo tiempo.
  • Espiral: Se divide un proyecto o programa en partes pequeñas, determina los objetivos, alternativas, el desarrollo y planifica la próxima iteración.
  • Desarrollo rápido de aplicaciones: Se enfoca en el establecimiento de prototipos, dando mucha más importancia al objetivo comercial que a la tecnología o ingeniería empleada en el desarrollo, en pocas palabras: “Obtener un programa que simplemente funcione como debe sin importar como lo haya hecho”. En esta metodología los usuarios participan en el desarrollo o mejora del programa.
Wikipedia menciona que estas metodologías de desarrollo resumen un proceso para desarrollo de software:
Un proceso para el desarrollo de software, también denominado ciclo de vida del desarrollo de software es una estructura aplicada al desarrollo de un producto de software. Hay varios modelos a seguir para el establecimiento de un proceso para el desarrollo de software, cada uno de los cuales describe una enfoque diferente para diferentes actividades que tienen lugar durante el proceso. Algunos autores consideran un modelo de ciclo de vida un término más general que un determinado proceso para el desarrollo de software. Por ejemplo, hay varios procesos de desarrollo de software específicos que se ajustan a un modelo de ciclo de vida de espiral.
Las metodologías de la programación no son estrictamente enfocadas en el desarrollo subjetivo de un programa (la forma en que planificamos realizarla), sino también pueden ser objetivas (la forma en que una aplicación DEBE se realizada).

La programación orientada a objetos, por ejemplo, también es una metodología de la programación.

Listaremos algunas de las metodologías más usadas:
Obviamente esos enlaces son meramente conceptos teóricos más específicos, pero son bastante útiles para darnos una idea. En Google encontraremos muchísima más información sobre la programación metodológica.

Introducción a HTML5

Introducción a HTML5
Llevo un tiempo sin publicar contenido en el blog, y hoy quería hacerlo con este pequeño post. Para aquellas personas que se quieren adentrar en la programación de páginas web, les traigo una Introducción a HTML 5.

HTML5 (HyperText Markup Language) es la 5ta revisión importante del lenguaje básico de la W3C, html. Publicado el 28 de octubre de 2014. HTML se emplea  únicamente para definir la estructura y el contenido o información de una página web, la presentación visual no se define con HTML.

El lenguaje HTML está formado por etiquetas, que se escriben encerradas por corchetes angulares "menor qué" (<) y "mayor qué" (>). Desde que el lenguaje HTML se creo en el año 1990, el número de etiquetas que posee ha ido aumentando. Y en la actualidad, HTML5, está formado por más de 100 etiquetas.
Introducción a HTML5

El elemento es el componente básico de una página web. Una página web está compuesta por un conjunto de elementos escritos en un orden concreto. Un elemento se compone de una etiqueta inicial o de apertura, y una etiqueta final o de cierre.
La etiqueta final se define con una barra inclinada y el nombre de la etiqueta inicial. 

En este ejemplo la etiqueta se llama p y define un párrafo de texto de la página. La etiqueta inicial puede llevar atributos, pero la final nunca lleva. En HTML los atributo puede llevar un valor. Por último las etiquetas pueden tener contenido, que es todo lo que se escriba entre la etiqueta inicial y la final. El contenido puede estar formado por otras etiquetas o puede ser simplemente texto. 

Los elementos se pueden anidar, es decir, escribir unos dentro de otros. 
El lenguaje HTML es un lenguaje, y como tal tiene su vocabulario y gramática. 

Las etiquetas esenciales para crear una página web son:

  • <html> esta etiqueta es la principal (raíz), sólo puede existir una.
  • <head> define la primera parte de una página web, la cabecera. Normalmente esto no aparece representado en la página web cuando se visualiza.
  • Dentro de la cabecera, podemos escribir la etiqueta <title> que es obligatoria y se emplea para definir el título de la página.
  • <body> es el cuerpo y el contenido visible, esto sí que aparece representado en la página web cuando se visualiza en un navegador web.
  • <h1>, ..., <h6> las etiquetas h1, h2, h3 y así, se emplean para definir encabezados o títulos en la página. Poseen 6 niveles de importancia, siendo h1 el más importante y h6 el nivel menos importante. Los que normalmente se utilizan son los niveles h1, h2 y h3. Muy rara vez utilizarás los niveles h4, h5 y h6.
  • <p> se emplea para definir un párrafo de texto.
  • <strong> se emplea para destacar un fragmento de texto importante.
  • <em> se emplea para definir un texto enfatizado.
Con todas estas etiquetas, ya podemos crear nuestra página web sencilla. Les recomiendo que para empezar a programar, se descarguen el programa Notepad ++ o Sublime Text

Ahora bien, una vez dentro de cualquier de los 2 programas, procederemos a escribir nuestro sitio web. Que en resumidas palabras nos quedaría así.

<!DOCTYPE html>
<html>
 <head>
   <title>Nombre de nuestro primer sitio</title>
 </head>
 <body>
   <h1>Esto es un titulo</h1>
     <h2>Esto seria un subtitulo</h2>
   <p>Nuestro contenido no es cool, es <strong>RE COOL</strong></p>
     <h2>Esto seria otro subtitulo mas</h2>
   <p>Cada vez estamos mas cerca de poder configurar nuestro propio sitio web</p>
 </body>
</html>

Siempre es recomendable que cuando escribas una etiqueta de inicio, automáticamente escribas la etiqueta de cierre. Así no se nos olvida. 

Nuestro documento de HTML lo podríamos escribir en una sola línea, de esta manera:

<!DOCTYPE html><html><head><title>Nombre de nuestro primer sitio</title></head><body><h1>Esto es un titulo</h1><h2>Esto seria un subtitulo</h2><p>Nuestro contenido no es cool, es <strong>RE COOL</strong></p><h2>Esto seria otro subtitulo mas</h2><p>Cada vez estamos mas cerca de poder configurar nuestro propio sitio web</p></body></html>

Y visualmente se obtendría el mismo resultado. Pero normalmente se separa para que sea más fácil de leer y editar. 

Una vez que tengamos nuestro sitio web, pasaremos a guardarlo con la extensión .html y ¡Gualá!

Espero que les haya sido de utilidad. 

Tutorial como crear un carro de compras con PHP y MySQL

Tutorial como crear un carro de compras con PHP y MySQL
A través de este tutorial veremos cómo podemos crear un carro de compra para permitir a nuestros clientes comprar uno o múltiples productos en nuestro sitio. 

La creación del sistema la haremos utilizando PHP y MySQL. Necesitaremos la base de datos para almacenar la información de los productos, los datos de la compra como así también información del cliente que realizo la compra.

Antes de comenzar a programar, necesitamos hacer una estudio o análisis del sistema para tener claro con cuantos modules contara nuestro carro de compras online. Es muy cierto que como programadores muchas veces queremos ir directamente a la codificación, pero es muy importante que adoptemos una metodología a la hora de comenzar a construir nuestros sistemas.

Análisis del Sistema: 

Habitualmente un carrito de compras se programa teniendo en cuenta los módulos: productos, clientes, categorías y compras.
Como ya hemos visto en el tutorial de Programación Orientada a Objetos en PHP, podemos decir que los modules se pueden interpretar como clases, lo que implica que vamos a tener cuatro clases primarias: Producto, Cliente, Categoria y Venta.

Modulo Productos: 
Este módulo es el encargado de controla todo lo relacionado a un producto, usualmente un producto tienen un nombre, una descripción, un costo y está asociado a una categoría.

Modulo Clientes: 
Por definición lógica una compra está asociada a un cliente, por lo tanto vamos a necesitar una clase que se encargue de administrar a los clientes, sus datos y sus compras.

Modulo Ventas: 
La venta es el resultado final de todo el proceso y está relacionada a un cliente, como así también a uno o varios artículos.

Módulo Categorías:
Las categorías son una forma de clasificar y ordenar los productos en nuestro sitio. Por ejemplo: en un sitio de ventas de electrodomésticos un monitor estaría asociado a la categoría “Computación”, un televisor estaría en “electrodomésticos”.

Para nuestro tutorial usaremos como ejemplo una librería, para lo cual podemos decir que los productos serían los libros y las categorías los géneros: por ejemplo: terror, historia, drama etc.

Estructura de la Base de Datos: 

En la Programación Orientada a Objetos la estructura de la base de datos puede ser deducida mayoritariamente del diagrama de clases o lo que se conoce como UML. Por lo tanto, basándonos en las clases que tendrá el sistema podemos decir que tendremos 5 tablas primarias en nuestro sistema.

Las tablas de nuestro carrito de compra serán las siguientes: Productos, Categorias, Ventas y Clientes.

Comenzamos a Programar El Carro de Compras: 

Para el desarrollo de nuestro carrito de compras utilizaremos variables de sesión las cuales nos permiten almacenar los artículos seleccionas por el cliente a través de todas las paginas mientras este en nuestro sitio.

En una variable de sesión almacenaremos nuestra clase “Cart” la cual tienen los métodos básicos de un carrito de compra, estos son: agregar producto, borrar producto del carrito, obtener total de la compra.

Análisis de Clases: 

Clase Cart.php:
class Cart 
{
 var $colProducts;
 function calcTotal(){
  $sTotal=0;
 
  for ($i=1; $i <= count($this->colProducts); $i++){
 
   $sTotal=$sTotal + $this->colProducts[$i]->mCost;
  }
  $sTotal = number_format($sTotal,2,".",",") ;
  return $sTotal;
 }
 
 function borrarProduct($linea){
  $pos = 0;
  $colAux;
  for ($i=1; $i <= count($this->colProducts); $i++){
   if ($i != $linea){
    $pos++;
    $colAux[$pos] = $this->colProducts[$i];
   }
  }
  $this->colProducts = $colAux;
 } 
 
 function agregarProduct($unProducto){
  $this->colProducts[count($this->colProducts)+1]=$unProducto;
 } 
 function mostrarProduct($line){
  return $this->colProducts[$line];
 }
}
Como ya hemos visto PHP soporta encapsulamiento, de esta manera la clase Cart tendrá dentro una colección de productos. Lo que se traduce en una colección de objetos “Producto”. De no comprender estos conceptos te recomiendo veas el curso de Programación Orientada a Objetos en PHP. Lo vas a encontrar en la sección cursos.

Clase Producto.php:
require("ProductoPersistent.php");
 
class Producto  
{
 var $mPer; 
 var $mIdOrden;
 var $mId;
 var $mQty;
 var $mCost;
 var $mStatus;
 
 function Producto() //constructor
 {
  $this->mPer = new ProductoPersistent(); 
    }
 
   function guardarProdOrder() //guardar el producto en la tabla de ordenes
 {     
     return $this->mPer->guardarProdOrder($this);
   }
 
 function darTodosDeCategoria($cod) //me da todos los productos dependiendo de la categoria
 {     
        return $this->mPer->darTodosDeCategoria($cod);
   }
 
 function darNombreProd($name) //optimiza el nombre del producto
 {     
  $name = ucwords($name);
  return $name;  
   }
 
 function darUno($cod) //me da una producto con el ID
 {     
        return $this->mPer->darUno($cod);
   } 
}
En la primera línea incluimos la clase “ProductoPersistent” que es la encargada de interactuar con la base de datos, es ahí donde se encontraran todas las sentencias SQL.

Recuerda siempre mantener el orden y la prolijidad en tu código fuente, te va a pasar muchas veces que tenga que reutilizar el código y cuanto más claro este más rápido lo comprenderás.

La metodología recomendada es la llamada en tres capas, UI o interface del usuario, el dominio que sería la capa intermediaria y la capa persistente, la encargada de comunicarse con la base de datos. Pero, para no entreverarnos, prosigamos con el carro de compras.

Clase ProductoPersistent.php: 

Esta clase controla todas las sentencias SQL, realiza consultas, actualiza registros y borra. Las tareas básicas de cualquier carrito de compras.
require_once("Persistent.php");
class ProductoPersistent extends Persistent {
 
 function guardarProdOrder($unPerm) 
 {
  $result = "";  
 
  $sql = "INSERT INTO orden_detalles(detalle_orden_id , detalle_producto_id , detalle_cant , detalle_precio )
 
   VALUES(";
  $sql.= "'".$unPerm->mIdOrden."', ";
  $sql.= "'".$unPerm->mId."', ";
  $sql.= "'".$unPerm->mQty."', ";
  $sql.= "'".$unPerm->mCost."') ";   
 
  $this->setSql($sql);
  $result = $this->save();
  return  $result;
     } 
 
  function darUno($cod) 
  {
        $sql = " SELECT pro.*, cat.cat_id , cat.cat_name ";
 
  $sql .= " FROM productos pro";  
  $sql .= " RIGHT JOIN categorias  cat ON (cat.cat_id = pro.prod_cat_id)";
  $sql .= " WHERE cat.cat_id = pro.prod_cat_id  AND pro.id = '$cod'"; 
 
  //echo $sql;
 
        $this->setSql($sql);
        return $this->obtain();
    }
 
  function darTodosDeCategoria($cat) 
  {
        $sql = " SELECT pro.*, cat.cat_id , cat.cat_name  ";
 
  $sql .= " FROM productos pro";  
  $sql .= " RIGHT JOIN categorias  cat ON (cat.cat_id = pro.prod_cat_id)";
  $sql .= " WHERE cat.cat_id = pro.prod_cat_id  AND pro.prod_cat_id = '$cat'"; 
 
        $this->setSql($sql);
        return $this->obtain();
    }   
}
 Clase Orden: 

Esta clase es una de las más importantes, pero, en este tutorial solo agregaremos un método, el encargado de crear la orden en la tabla correspondiente.
require("OrdenPersistent.php");
 
class Orden  
{
 var $mPer;
 var $m_orden_cliente_id;
 var $m_orden_total; 
 function Orden() //constructor
 {
  $this->mPer = new OrdenPersistent(); 
    }
 
   function guardar() 
 {     
     return $this->mPer->guardar($this);
   }    
}
require_once("Persistent.php");
class OrdenPersistent extends Persistent {
 
 function guardar($Obj) {
  $result = "";  
 
  $sql = "INSERT INTO  ordenes 
 
  (orden_cliente_id, orden_total ,  orden_fecha )
 
   VALUES(";
  $sql.= "'".$Obj->m_orden_cliente_id."', ";
  $sql.= "'".$Obj->m_orden_total."', ";     
  $sql.= "'".date("Y-m-d")."') ";      
  $this->setSql($sql);
  $result = $this->save();
  return  $result;
     }    
}

Una clase secundaria es la que administra las categorías. Solo necesitamos dos métodos, uno para recuperar todas las categorías de la base de datos y otro para recuperar solo una teniendo en cuenta el ID de la misma.
require("CategoriaPersistent.php");
 
class Categoria  {
 function Categoria() 
 {
  $this->mPer = new CategoriaPersistent(); 
     }  
 
 function giveAll($catid) 
 {       
       return $this->mPer->giveAll($catid);
   }
 
 function getOne($cod) 
 {     
        return $this->mPer->getOne($cod);
   } 
}
Básicamente, ya tenemos programado lo que será el corazón de nuestro carro de compras en PHP. Ahora solo tenemos que empezar a integrar las clases con la interface gráfica del usuario.

Puesta en marcha de nuestro Carro de Compras: 

Para comenzar necesitamos una página donde mostrar todos los productos, los cuales podrán ser elegidos para comprar.

Usualmente, una lista de artículos son desplegados en la primera página de un sitio de compras online la cual puede ser filtrada seleccionado criterios que son mostrados en la columna izquierda.

También, cada producto debe tener la opción de “agregar”, la cual, al ser clickeada agrega el producto a la cesta. Una foto en miniatura tiene que ser mostrada también al igual que el precio.

Para la demostración de todo lo que hemos aprendido he creado una demo la cual puede ser vista haciendo clic aquí:

[Link caído]* Instalación del Carrito de Compra de Ejemplo: 

  1. Descarga el archivo comprimido aquí. 
  2. Descomprímelo. 
  3. Edita el archivo de conexión a la base de datos “db_conection.php” que está en la carpeta “classesfra” 
  4. Abre el documento “db_estructura.txt” para crear las tablas en tu servidor. 
  5. Sube todo los archivos a tu servidor. 
  6. Listo 

Recordar: 

El carrito de compras de ejemplos esta tan solo eso, un ejemplo. Con el cual se pretenden mostrar las funcionalidades básicas. La intención de este tutorial es darte las herramientas y guiarte para que tú puedas construir tu propio sistema.

Buena suerte amigos.

*Queremos aclarar que actualmente no poseemos los archivos como se muestran en el post. Trataremos de actualizarlo lo más antes posible ya que por ciertos problemas, no se ha podido subir contenido al blog.
Muchas gracias.