domingo, 13 de febrero de 2011

PROYECTO: Documentación y Herramientas de desarrollo

Programación Orientada a Objetos – Semana 4 – Reporte 4

La documentación en cualquier producto es importante, nos dan las instrucciones a seguir en caso de que se genere alguna duda o problema, mucha gente no le da crédito a la documentación de un artículo y por lo general al abrir algo nuevo comenzamos por tirar los instructivos y hasta las pólizas de seguro sin ni siquiera darles un vistazo.

Nosotros como desarrolladores tenemos la obligación de proporcionar a nuestros clientes un documento claro y conciso donde explicamos al funcionamiento de nuestro software; esta será una futura referencia para todos aquellos que quieran ayudarnos a mejorar nuestro software y para guiarlos y que entiendan la visión que tuvimos al momento de construirlo; incluso será una referencia para nosotros mismos ya que en códigos extensos es imposible recordar para que funcionaba y que acción realizaba un segmento de nuestro código.

Por lo general, en los lenguajes de programación que así lo permiten, los comentarios son suficientes para colocar referencias en ciertas partes de nuestro código, sin embargo, existen ciertas herramientas que nos ayudan a generar documentos avanzados que permiten tener una perspectiva más amplia y detallada de las partes y funciones de nuestro software.

JAVADOC





El lenguaje de programación Java incluye una poderosa herramienta que nos permite generar la documentación de nuestro código de manera rápida y bastante profesional, su nombre es JAVADOC.

Javadoc es capaz de generar la documentación de nuestro código de manera instantánea y sin necesidad de abandonar la tradicional sintaxis de los comentarios dentro del código.

Metodología



La forma de generar la documentación por medio de Javadoc es simple, tan fácil como introducir comentarios dentro de nuestro código.

Simplemente tenemos que colocar la explicación ya sea de una clase, método o atributo dentro de un espacio parecido a este:
/**
*Aqui
*pon
*el
*comentario
*

Como pueden ver, el inicio del comentario inicia con una diagonal y DOS asteriscos (los dos asteriscos son parte de la sintaxis de Javadoc, sirven como identificadores) y cada línea empieza con un asterisco y el comentario finaliza con un asterisco y una diagonal.

Si se quiere explicar el funcionamiento de una clase o función, el comentario de Javadoc se coloca justamente arriba de la misma, por ejemplo:
/**
* Clase de tipo Animal
* Genera un objeto animal
*/
public class Animal {
private String reino;
private String familia
}


En los métodos se puede colocar un identificador de parámetros que indica, valga la redundancia, los parámetros que dicho método recibe como atributos, para ello de escribe @param, y posteriormente el nombre del parámetro y la explicación del mismo. Así mismo el identificador @return indica el tipo y nombre del valor regresado por el método. Por ejemplo:
/**
* Divide un número entre otro número
* @param x Dividendo
* @param y Divisor
* @return El cociente de la division.
*/
Double division (double x, double y) {
…
Return cociente;
}


Para terminar, se deberá generar la documentación del código escribiendo en la terminal la instruccion Javadoc, con una sintaxis mas o menos asi:

javadoc ubicación

donde "ubicación" deberá sustituirse por la ubicación de nuestro paquete de clases, es como si fueramos a compilar pero utilizando el comando javadoc

Javadoc genera varios archivitos HTML y páginas de estilo CSS que en conjunto formaran una documentación muy parecida a la que encontramos en la página oficial de la API de Java. De igual forma podremos navegar por nuestra página donde veremos el resultado final de todos los comentarios que colocamos dentro del código.
Para más referencias sobre el uso, identificadores, sintaxis o tips acerca de Javadoc se puede visitar la página oficial del proyecto siguiendo esta liga:


El link lo agregaré a la barra de Recursos, la cual pueden encontrar en el Sidebar de mi blog.

Saludos!!!

☺ ☻ ☺ ☻

martes, 8 de febrero de 2011

PROYECTO: Implementación de Herencia y Poliformismo

Taller de Programación Orientada a Objetos - Semana 3 - Reporte 3

Hola de nuevo!!

Tal como lo expliqué en la entrada de abajo, trataré de implementar la herencia en el código de mi proyecto:

CLASE PERSONA

Esta clase contiene todos los datos propios de las personas que interactúan en el negocio, en este caso el comprador o cliente, y el vendedor o proveedor.
public class Persona {
   private String nombre;
   private String direccion;
   private String empresa;
   private String rfc;
   private String mail;
      
   public Persona (String n, String d, String e, String r, String m) {
      nombre = n;
      direccion = d;
      empresa = e;
      rfc = r;
      mail = m;
   }
}

class Proveedor extends Persona {
   public Proveedor (String n, String d, String e, String r, String m) {
   super(n, d, e, r, m);
   }
}

class Cliente extends Persona {
   public Cliente (String n, String d, String e, String r, String m) {
   super(n, d, e, r, m);
   }
}

CLASE Factura

La clase Factura puede generar dos tipos de facturas: electronicas o en papel
Esta clase hará uso de los datos de las personas involucradas y del pedido para generarse a si misma
public class Bill {

    private Person client;
    private Person supplier;
    private Order order;

    private String id;

    public Bill (Person c, Person s, Order o, String i) {
        client = c;
        supplier = s;
        order = o;
        id = i;
    }
}

class ElectronicBill extends Bill {
    public ElectronicBill (Person c, Person s, Order o, String i) {
        super (c, s, o, i);
    }
}

class PaperBill extends Bill {
    public PaperBill (Person c, Person s, Order o, String i) {
        super (c, s, o, i);
    }
}


Estas son las implementaciones de herencia en mi código, espero les sea útil la información.

SALUDOS!! :)

PROYECTO: Herencia y Polimorfismo

Programación Orientada a Objetos - Semana 3 - Reporte 3

Hola a todos. Para este reporte veremos cómo implementar la herencia y polimorfismo en el código de nuestro proyecto.

Para empezar veamos algunas definiciones y ejemplos rápidos:

HERENCIA: Cuando una clase padre (o superclase) comparte atributos y métodos propios con las clases hijas (o subclases).

Para que se entienda mejor:
En el mundo hay animales (superclase), pero hay diferentes tipos de animales (mamíferos, reptiles, aves, peces [subclases]). La clase animales hereda a las demás subclases algunos de sus atributos, por ejemplo: número de patas, color, tamaño, etcétera. A su vez hereda algunos métodos, por ejemplo: ver, oler, oir.

Las subclases pueden a su vez implementar métodos propios, por ejemplo: las avez vuelan, característica dificílmente compartible con los demás. Es el mismo caso con los peces, los cuales nadan y los demás no.

Atributos serían las características de los animales (físico, aunque no necesariamente), y los métodos serían lo que los animales hacen con dichos atributos.





POLIMORFISMO: La superclase puede hacer referencia a cualquiera de sus subclases, y dependiendo de dicha referencia, serán los métodos a ejecutar y su resultado.

Por ejemplo:
Animal hace referencia a la subclase mamífero y se ejecuta el método Desplazamiento y se imprime la línea ("Los mamíferos van sobre sus patas peludas").
En cambio si animal hace referencia a la subclase pez y se ejecuta el método Desplazamiento se imprimira la línea ("Los peces nadan con sus delicadas aletas").
El resultado depende de la referencia hecha por la superclase.

Aplicando al código



Hice una reformulación masiva de mi código para poder lograr que éste tema encajará en mi proyecto.

La herencia la aplicaré en la clase que ahora llamo Persona. Esta clase tiene 2 subclases idénticas llamadas Cliente y Proveedor, ambos comparten los atributos de la clase madre:

- Un nombre
- Una dirección
- Un RFC (Importantísimo en las facturas)
- Una empresa
- Etcétera

Ambas subclases se construyen de acuerdo a los atributos de la clase madre.

Una factura comparte atributos de otras clases, ya que una factura se genera a partir de un Cliente, un Proveedor y un Pedido (2 personas y 1 pedido). Entonces, haciendo uso de algunos métodos, se necesitan saber los atributos de las personas y del pedido para poder llenar la factura. Por consiguiente debe existir cierta herencia por parte de las personas hacia las facturas.

Un comunicación entre mi aplicación y mi base de datos necesita saber más cosas que ningún otro, primeramente necesito saber si he de buscar una factura o un cliente; sabiendo eso yo necesito usar los atributos de alguna de estas 2 clases para generar una buena búsqueda, alta, baja o modificación.

Es una explicación general de mi código, espero generar mas ideas conforme realizo mi código asi que espero hacer más conexiones raras entre mis clases conforme pasé el tiempo (no mucho :) ).

Saludos

jueves, 27 de enero de 2011

PROYECTO: Diseño de clases

Taller de Lenguajes de Programación - Semana 2 - Reporte 2


Que tal compañeros!!!

Esta vez les mostrare el esqueleto de mi proyecto, aún le falta pulir y perfeccionar bastante:

CLASE Facturacion

Como ya lo mencione, esta sera la clase padre de todo, quien se encargara de generar la ventana, redibujarla en cada acción, importar las facturas a otros formatos, etcétera
package Facturar;

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

public class Facturacion extends JFrame {

    private Factura f;

    JButton Boton = new JButton();
    JPanel Herramientas = new JPanel();
    
    public void buscar () {
 return;
    }

    public void imprimir() {
 return;
    }

}

CLASE Factura

Es la encargada de generar las facturas y los datos que irán dentro de la misma, aún no defino algunos métodos para esta clase.
package Facturar;

public class Factura {

    private Cliente c;
    private Pedido i;
    private Proveedor p;

}

CLASES Cliente, Proveedor, Pedido

Estas clases tienen como atributos los datos fiscales de las 2 personas que intervienen en la compra-venta de los servicios y productos. La clase pedido tiene como atributos los datos de cada artículo a registrar.
package Facturar;

public class Proveedor {
    
    private String nombre;
    private String direccion;
    private String rfc;

}



package Facturar;

public class Cliente {

    private String nombre;
    private String direccion;
    private String rfc;

}



package Facturar;

public class Pedido {

    private String codigo;
    private String articulo;
    private int cantidad;
    
}

CLASE Comunicacion

El nombre de esta clase esta en debate. Su función es la de realizar el intercambio de informacón entre todas las partes del programa, intercambiando información entre las bases de datos y la aplicación
package Facturar;

import java.io.*;
import java.util.StringTokenizer;

public class Comunicacion {

    BufferedReader input = new BufferedReader(newFileReader(archivo));

    public void buscar() {
 return;
    }

    public void guardar() {
 return;
    }
    
    public void modificar() {
 return;
    }

    public void eliminar() {
 return;
    }

}


Bueno, estas son las clases muy austeramente creadas de mi proyecto. :)

SALUDOS

martes, 25 de enero de 2011

PROYECTO: Definición de Clases

Programacion Orientada a Objetos - Semana 2 - Reporte 2

Para esta entrada trataré de explicar para que servirán algunas de las clases de mi código, las que mostraré aqui son las mas evidentes y conforme el código vaya creciendo se iran agregando mas clases.

Teniendo como ejemplo nuevamente la imagen de mi entrada anterior enlistare las clases que son identificables:



Clase Facturación:



Esta clase yo la visualizo como la principal, uno de sus objetivos es dibujar la ventana en la cual se llevaran acabo todas las acciones del programa, por consiguiente algunos de sus atributos seran efectivamente el tamano de la ventana, su forma, etc. Otro de sus objetivos será redireccionar todas las acciones generales del programa mediante botones porque una de mis intenciones es colocar una barra de herramientas que permita llamar a diferentes comandos directamente tales como abrir la base de datos, imprimir o modificar una factura, buscar, etcétera.

Clase Factura



La misma factura sera una clase, ya que tendrá diferentes atributos como el número de serie, el sello digital, datos del cliente y del vendedor y los artículos o servicios que se estan facturando. Puede crear un cliente, un proveedor y un pedido. Algunos de sus métodos serán ir armando la factura con los datos que se vayan pidiendo, importar la misma a otros formatos como PDF o formato electrónico (XML), imprimir o simplemente mostrar en pantalla la factura.

Clase Cliente


Esta clase como su nombre lo dice tendrá como atributos todos los datos personales y fiscales del cliente: nombre, dirección, RFC, etcétera.
Sus funciones realmente no son muchas y su funcionalidad depende mucho de la clase comunicación ya que esta clase envía sus datos a la clase comunicación quien después los manipula de diferentes formas.

Clase Proveedor


Será parecida a la clase cliente ya que almacenara todos los datos personales y fiscales del proveedor: nombre, dirección, RFC, etcétera.

Clase Pedido


Como su nombre indica, esta clase contendrá los datos necesarios para generar un producto: artículos, cantidad, precio, número de producto, etcétera. Como en la clase cliente esta necesita estar conectada a la clase comunicación quien es la que manipula los datos de diferentes maneras.

Clase Comunicación


Es posiblemente otra de las más importantes, tiene como atributos algunas variables que guardarán los datos enviados por las otras clases. Su función será la de apertura y cierre de archivos; lectura, escritura, borrado o modificación de las bases de datos. Como ya se habrán dado cuenta su función es ser intermediario entre el proceso de entrada y salida pues las clases Pedido o Cliente piden y generan datos y después esta clase los guarda, o también,mediante una petición previa, extrae datos de la base y después los reedirige ya sea a la clase Cliente o la clase Pedido.

Espero y tengan una perspectiva más amplia de mi proyecto :)

Referencias:
http://elvex.ugr.es/decsai/java/pdf/3B-Clases.pdf

domingo, 23 de enero de 2011

PROYECTO: Herramientas

Taller de Programación Orientada a Objetos - Semana 1 - Reporte 1

Hola a todos !!

En esta entrada vamos a repasar las herramientas que vimos en clase y que nos serán útiles para nuestros proyectos.

LENGUAJES


Python


Este es un poderoso lenguaje de programación, se trata de un lenguaje multiparadigma y de alto nivel. Es muy fácil de aprender ya que su sintaxis es muy sencilla y ligera lo cual le otorga muchos puntos a favor.
Otra de las características es que cuenta con un soporte bastante completo en la web y librerías que facilitan el desarrollo de aplicaciones.
Es muy utilizado en las interfaces CGI.

Cómo empezar


Realmente no hay que empezar, Python viene completamente cargado en Ubuntu, para verificar su existencia basta con entrar a la Terminal y teclear:

which python

Lo que resultara en una ventana como la siguiente:


Esa línea que se nos es mostrada (que por lo general es /usr/bin/python) es lo que se conoce como interprete, esa línea hay que incluirla en cada uno de los códigos que escribamos en este lenguaje, por ejemplo:
 #!/usr/bin/python
print "\t\tOBTENER EL PORCENTAJE DE UN TOTAL\n"
x = float(input("Dame el valor total ->  "))
y = float(input("Porcentaje  obtener ->  "))
porcentaje = x*y/100
print "El resultado es -> "
print porcentaje

El script es un ejemplo muy austero de cómo obtener un porcentaje.

ESTA ES UNA ENTRADA ANTERIOR DONDE EXPLICO MUY A FONDO LAS CARACTERÍSTICAS DE PYTHON: Click aqui

C++


Es una extensión del lenguaje C, a través de la cual se le proporciona de programación orientada a objetos. Para los que hemos programado en C nos será relativamente fácil entender este lenguaje ya que la sintaxis es la misma a excepción por supuesto de aquellas funciones de la POO.

Cómo empezar


Depende de la versión de Ubuntu, la versión 10.04 incluía el compilador g++, pero, la versión 10.10 ya no lo incluye.

Para verificar su existencia basta con entrar a la terminal y teclear:

g++

Se nos pueden presentar 2 situaciones, si existe veremos algo asi:


Si no existe veremos algo asi:



Entonces será necesario instalarlo. Para ello teclearemos en la terminal:

sudo apt-get update

para obtener las listas actualizadas de los repositorios:


Despues teclearemos:

sudo apt-get install g++

y la instalacion comenzara. Cuando sea necesario presionamos Y


y dejamos que la instalación concluya. Después volveremos a teclear g++ para verificar que realmente se haya instalado con éxito:


EN ESTA ENTRADA PODRÁN VER UNA RESEÑA MUY COMPLETA HECHA POR MI SOBRE ÉSTE LENGUAJE: Click aqui!!

JAVA


Otro lenguaje muy completo y muy poderoso, utilizado muy ampliamente por desarrolladores de juegos y aplicaciones. Éste será el lenguaje que usaré para escribir mi proyecto.
Cuenta con muchos soportes técnicos (oficiales y no oficiales) muy completos en línea.

Cómo empezar


Para comenzar a utilizar Java necesitamos instalar el Java Development Kit (JDK), este incluye el compilador y el runtime para probar nuestras aplicaciones.
Para instalar esta herramienta teclearemos en la terminal:

sudo apt-get install openjdk-6-jdk

Verermos algo como esto:



Presionamos Y para aceptar la instalacion y esperamos a que ésta concluya.

Para verificar que se haya instalado con éxito tecleamos en la Terminal

javac

Lo que mostrara un texto parecido a ésto:


Tambien tecleamos

java

Con lo que veremos algo como esto:


Aquí pueden ver la documentación de JAVA 6: API

Herramientas


Diagramas UML


“ Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.

Es importante resaltar que UML es un "lenguaje de modelado" para especificar o para describir métodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que está descrito el modelo.”

Fuente: http://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado


Los diagramas UML son muy útiles ya que nos ayudan a diseñar nuestro sistema por medio de una iinterfaz muy intuitiva. Cada una de nuestras las parte de nuestro programa es representada por medio de un nodo de un diagrama de árbol, y cada parte la podemos interconectar con otras con las cuales es necesario entablar comunicación. Una vez ensamblado nuestro sistema es posible generar el código del mismo en diversos lenguajes.

Podemos instalar diversas herramientas para generar diagramas UML, dos de ellas son Bouml y Umbrello

Instalar UMBRELLO


1. Entrar al menú APPLICATIONS
2. Entrar al programa UBUNTU SOFTWARE CENTER
3. En la ventana de UBUNTU SOFTWARE CENTER, teclear en la caja de busqueda "UMBRELLO"
4. Dar click en "INSTALL"


INTERFAZ



Instalar BOUML


1. Entrar al menú APPLICATIONS
2. Entrar al programa UBUNTU SOFTWARE CENTER
3. En la ventana de UBUNTU SOFTWARE CENTER, teclear en la caja de busqueda "BOUML"
4. Dar click en "INSTALL"


INTERFAZ



Espero les sirvan estas herramientas, en la barra de la derecha en "RECURSOS" hallaran muchas mas herramientas.

SALUDOS :)

PROYECTO: Sistema de Facturación

Programación Orientada a Objetos - Semana 1 - Reporte 1

Que tal compañeros!

La idea de mi proyecto nació de una petición que se me hizo a finales del año pasado del que ahora considero mi cliente. Él es dueño de una empresa de transportación y su necesidad principal es tener un sistema completo de facturación para poder manipular toda su base de datos sin necesidad de depender de programas como Excel; además de necesitar un sistema que le permita crear facturas electrónicas ya que este método de facturación es obligatorio para todos los empresarios contribuyentes a partir de éste año

Entonces mi objetivo es desarrollar un sistema de facturación que además de facturar tenga algunos extras para facilitar el trabajo del cliente, recordemos que al desarrollar una aplicación hay que tomar en cuenta la optimización de tiempos y procesos, eso es algo que intentare lograr con mi sistema.



OBJETIVOS DEL PROYECTO


PROGRAMACIÓN


Para la programación utilizaré el lenguaje Java, ya que es el más adhoc a mis necesidades, una de las cosas que me hizo decidirme por este lenguaje es la existencia de librerías que ayudan a certificar y validar facturas electrónicas.

INTERFAZ


No es muy necesario contar con una interfaz, pero en la actualidad es un poco engorroso y poco atractivo manipular una aplicación desde una terminal.
Una interfaz minimalista que trabaje por medio de campos de texto para ingresar datos y botones para realizar diversas acciones

BASE DE DATOS


Crear una base de datos que permita automatizar el proceso de captura de datos.
La base de datos alojaría todos los datos necesarios de los clientes y vendedores. Serán posibles también acciones como dar de alta, dar de baja o modificar información de un cliente.
Esto me servirá también para automatizar el proceso de facturación: al introducir por ejemplo el nombre del cliente los campos con la información personal del mismo serán rellenados automáticamente.

FACTURACIÓN


El objetivo principal de mi sistema.
El programa facturara procesos y servicios, posteriormente estas facturas podrán ser impresas ya sea en papel, PDF, o electrónicamente (XML). Así mismo se podrán guardar en algún formato propio para manipularse posteriormente.

CREACIÓN DE CFD


Siglas de “Comprobante Fiscal Digital” posiblemente una de las etapas más complicadas del sistema, generar facturas electrónicas. Para poder generar un CFD necesito contar con una clave que el SAT proporciona a todos aquellos contribuyentes que facturen servicios y un certificado de seguridad, con estos datos el módulo o clase que programaré tendrá que cifrar y validar una firma digital para que el comprobante sea válido.


Ésta es la descripción de mi proyecto para el semestre, como tal vez pudieron notarlo estoy muy entusiasmado por lograr mi objetivo y pronto iré mostrando avances y también espero que dichos avances sean útiles para sus proyectos.

☺ ☻ ☺ ☻