viernes, 15 de julio de 2011

Demostracion Final

Para la demostracion final aqui les aniado los archivos del codigo que genere y tambien la Documentacion de usuario.

Codigo

Manual del Usuario





Gracias y espero sea de su agrado! :)

Interfaz Grafica

Para mi sistema inicialmente trabaje en terminal y asi es como se ve al funcionar la clase de articulos:



Sistemas distribuidos

Inicialmente la idea principal de mi sistema es que sea un sistema distribuido, ya que este trabajara en linea.

Como implementarlo para que sea distribuido?

Algo que me parecio importante es que el sistema sea compatible con los diferentes sistemas operativos que existen para que no existan problemas en la visibilidad de estos, ademas de que el manejo sea mas facil para los usuarios.

Otra cosa que me parecio importante es que la seguridad de este sistema no debe faltar ya que como es en linea corre riesgos a que quiera ser daniado etc..

Documentacion Tecnica

La Documentacion Tecnica que obtuve con la herramienta javadoc fue la siguiente:




Estas son algunas de las pantallas de la documentacion obtenida de la clase de articulos:

Liga a los archivos generados:
http://www.megaupload.com/?d=71EVP4C0

jueves, 14 de julio de 2011

Auto-generacion de codigo

En la comparacion de auto-generacion de codigo, que me facilito el programa Umbrello a partir del diagrama de clases es un tanto diferente al codigo que actualmente tengo implementado, esto es porque conforme estaba programando tuve ke ir cambiando algunas cosas que probablemente en un inicio no habia contemplado, o por ejemplo en yo tenia pensado realizar una clase llamada busqueda pero me resulto mejor implementarla como un atributo de la clase de articulos.

Esta es una de las clases que me genero el Umbrello y en la que trabaje yo:

import java.util.*;

public class articulos {
private String NombreArticulo;
private int Codigo;
private double Costo;
private boolean disponibilidad;
private char descripcion;

public articulos () { }; //Constructor

private void setNombreArticulo ( String newVar ) {
NombreArticulo = newVar;
}
private String getNombreArticulo ( ) {
return NombreArticulo;
}
//Pedir o asignar el nombre del articulo
private void setCodigo ( int newVar ) {
Codigo = newVar;
}
private int getCodigo ( ) {
return Codigo;
}// Pedir o asignar el Codigo para el articulo
private void setCosto ( double newVar ) {
Costo = newVar;
}
private double getCosto ( ) {
return Costo;
}// Pedir o asignar el Costo para el articulo
private void setDisponibilidad ( boolean newVar ) {
disponibilidad = newVar;
}
private boolean getDisponibilidad ( ) {
return disponibilidad;
}// Pedir o asignar la disponibilidad para el articulo
private void setDescripcion ( char newVar ) {
descripcion = newVar;
}
private char getDescripcion ( ) {
return descripcion;
}
public boolean Seleccionar( )
{
}
public int VerArticulos( )
{
}
public String AgregarArticulos( )
{
}
}//Fin de Articulos


y esto es lo que yo hice de codigo de la misma clase:

import java.io.*;
import java.util.*;
import java.sql.ResultSet;

public class Articulos {
public static void main(String[] args) throws Exception{
Scanner u= new Scanner(System.in);
Inventario con = new Inventario();
Inventario bdm= new Inventario();
bdm.mostrarArticulos();

int opcion=0;
do //Menu de articulos
{
System.out.println("Menu");
System.out.println("1.-Agregar");
System.out.println("2.-Buscar");
System.out.println("3.-Eliminar");
System.out.println("4.-Salir");
opcion = Integer.parseInt(u.nextLine());

switch(opcion)
{
case 1://Agregar articulos a la base
System.out.println("--------Agregar Articulo-------");
System.out.println("Nombre del articulo:");
String NombreArticulo= u.nextLine();
System.out.println("Codigo:");
int Codigo= Integer.parseInt(u.nextLine());
System.out.println("Costo:");
int Precio= Integer.parseInt(u.nextLine());
System.out.println("Palabra Clave:");
String Palabraclave= u.nextLine();
System.out.println("Cantidad:");
int Cantidad = Integer.parseInt(u.nextLine());
con.ingresar(NombreArticulo,Codigo,Precio, Palabraclave,Cantidad);
break;

case 2: //Busqueda de articulos
System.out.println("Codigo a buscar: ");
int codig = Integer.parseInt(u.nextLine());
ResultSet resultado=con.buscar(codig);
if(resultado.next())
{
System.out.println("Nombre del Articulo: "+resultado.getString(1));
System.out.println("Codigo: "+resultado.getString("Codigo"));
System.out.println("Costo: "+resultado.getString("Precio"));
System.out.println("Palabra clave: "+resultado.getString("Palabraclave"));


}else
System.out.println("Este articulo no se ha encontrado es posible ke halla sido eliminado.");
System.out.println(con.estado);
break;

case 3: //Eliminar Articulo
System.out.println("Codigo del articulo que desea eliminar: ");
int codi = Integer.parseInt(u.nextLine());
ResultSet result=con.buscar(codi);
if(result.next())
{
con.Eliminar(codi);
System.out.println("Articulo Eliminado");
}else
System.out.println("Este articulo no existe");
break;
}//Fin Switch
}while(opcion!=4);
}//fin main

}//**fin clase

Pruebas unitarias

Para realizar las pruebas unitarias Utilice la herramienta JUnit desde la terminal de ubuntu en donde le realice las pruebas necesarias a mi codigo y esto fue lo que obtuve:Esta prueba la realice para la clase de Articulos

Y esta para la clase de Inventario.

Retroalimentacion

Para la retroalimentacion, decidi comentar con mis companieros algunos temas los cuales fueron los siguientes:

Casos de Uso: es un forma de ver la interaccion con el sistema, viendo que actores pueden hacer tal cosa y como estas estan relacionadas con otras funciones

Diagramas de Secuencia:respresentan el comportamiento del sistema y ke muestran ordenadamente como van sucediendo los escenarios de casos de uso y se realiza uno por cada caso de uso.

Clases: uelen ser publicas con sus atributos privados y metodos publicos nos sirven para divir en varias partes lo que vendria siendo el programa para la hora de codificar no oscureser el codigo teniendo todo en un solo main
Tambien podemos identificar las clases del sistema como sustantivos, los atributos cono caracteristicas y los metodos como verbos.

Documentacion:la documentacion sirve para mostrarnos los requerimentos del sistema, como los casos etc.. el disenio,: como la arquitectura del sistema los diagramas de clase y de secuencia, y la tecnica del sistema ke es el codigo creado, es importante documentar bien todo lo que hacemos porque por ejemplo nunca sabemos quien mas va a estar trabajando en el codigo pudiera ser alguien que no lo diseno y debe ser claro cada una de las cosas que hace para que cualquier persona pueda trabajar en el.

Las pruebas unitarias: nos ayudan a encontrar posibles errores de los cuales no nos hayamos percatado y de esta manera probar si el funcionamiento es correcto, una herramienta util es JUnit.

Otra cosa importante es que en la prgramacion OO tenemos la reutilizacion de codigo, lo que nos permite ahorrarnos tiempo, y un poco de trabajo.

Pruebas unitarias

Este es un desenio de prueba para lo que es el login de mi sistema.

La prueba siguiente es para revisar que el ingreso de articulos sea el correcto.

El resultado obtenido aun no esta definido ya que faltan algunos detalles en el codigo.

Interfaz Grafica

Asi es como tengo visualizada la interfaz grafica para mi proyecto, claro aun falta ver como valla dandole forma mientras lo codifico.
Mientras es solo la idea :D
Solo son las ventanas que considero principales aun me falta definir algunas cosas de las clases siguientes.

miércoles, 13 de julio de 2011

Patrones de Disenio

En mi proyecto creo que podria aplicar el siguiente un patron de comportamiento, que seria el patron Command ya que permite realizar un registro de las peticiones realizadas por los clientes y tambien permite deshacer las operaciones.

Otro patron de disenio que podria utilizar seria el Abstract Factory que es un patron de creacion ya que proporciona una interfaz que crea familias de objetos que dependen entre si.

Por el momento creo que son los patrones de disenio que puedo utilizar.

Sistemas distribuidos

"Sistema de computadoras autonomas conectadas en una red, en las que se comunican para coordinar sus actividades y acciones, que aparecen como una sola ante un usuario."

Como podria hacer mi proyecto un sistema distribuido?

Segun los ejemplos vistos en clase mi proyecto seria un sistema distribuido, ya que la idea de este sistema es que sea un servicio a traves de internet. (Nube)

Para que esto sea posible necesito implementar algunas cosas como la Seguridad y confiabilidad de este.
Principalmente la seguridad ya que los datos que se toman del usuario deben ser confidenciales, y que en caso de que el sistema pueda recibir un ataque o un mal uso, el serivicio sea negado.

domingo, 10 de julio de 2011

Patrones de disenio

Patrones de disenio o conocidos como "Design Patterns" son soluciones simples a problemas especificos, revolucionando el disenio orientado a objetos, estos son basados en su demostracion de funcionalidad.
Una vez entendido el funcionamiento de los patrones, los disenios seran mucho mas flexibles, modulares y reutilizables.

Los patrones se dividen en tres tipos:
*De creacion* * Estructurales* *De comportamiento*


Patron de Creacion:
Factory Method.- Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan que clase instaciar. Permite que una clase delegue en sus subclases la creacion de objetos.

Patron Estructural:
Decorator.- Aniade dinamicamente nuevas responsabilidades a un objeto proporcionando una alternativa flexible a la herenca para extender la funcionalidad.

Patron de Comportamiento:
Memento.- Representa y externaliza el estado interno de un objeto sin violar la encapsulacion, de forma que este puede volver a dicho mas tarde.



*Referencias :
http://www.ingenierosoftware.com/analisisydiseno/patrones-diseno.php *

Documentación tecnica

La documentacion tecnica en sistemas es cuando se recopila toda la informacion que nos dice que es lo que hace el sistema, como lo hace y para quien.
Esta documentacion explica las caracteristicas tecnicas y la operacion de un sistema, es escencial para quien vaya a usar o enseniar a utilizar el sistema.

Existen varios tipos de documentacion
1.- la de programas que explican la logica de un programa e incluye descripciones, diagramas de flujo, listados de programas y otros documentos.
2.-La de usuarios en forma general la naturaleza y capacidades del sistema y como usarlo.
3.- Otro tipo de documentacion es el registro fisica, generalmente por escritoque contiene lo siguiente:

-Politicas y normas referente al desarrollo del sistema, operacion y mantenimiento.
-Disenio del sistema de informacion administrativo.
-Procedimientos para instalar, operar y mantener el sistema de informacion administratio.

La importancia de la documentacion de sistemas
La mayoria de las veces la documentacion es la parte a la que se le dedica menos tiempo y no se le presta la atencion adecuada; Sin embargo, Una documentacion adecuada y completa es escencial en cualquier sistema de informacion, para cuando se desea implantar, mantener y actualizar en forma satisfactoria dicho sistema.
Esta documentacion debe ser realizada ya que, es una manera de asegurar que el sistema funciona correctamente ademas del apoyo que puede brindar las personas responsables del mantenimiento de estos.

Existen herramientas que facilitan la documentacion, una de ellas es JavaDoc que genera documentacion de APIs en formato HTML a partir de codigo fuente Java. Javadoc tambien proporciona una API para crear doclets y taglets, que le permiten analizar la estructura de una aplicacion Java.

Otra herramienta util es Doxygen que genera documentacion para C++, C, Java, Objective-C, Python, IDL, PHP, dado que es facilmente adaptable, funciona en la mayoria de los Sistemas Operativos.

*******
http://www.stack.nl/~dimitri/doxygen/
http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html
******

referencias:
http://www.monografias.com/trabajos6/dosi/dosi.shtml
http://es.wikipedia.org/wiki/Javadoc

http://es.wikipedia.org/wiki/Doxygen

Diagramas de secuencia :)

Un diagrama de secuencia representa el comportamiento del sistema, tambien muestra el flujo ordenado de mensajes entre objetos para un escenario de los casos de uso. Puede verse como la invocacion de un metodo del objeto.

Estos son algunos diagramas de secuencia de mi proyecto:
El primero es de la clase articulos el caso de uso seleccionar articulos


El segundo es de la clase Busqueda caso de uso buscar:El tercero es de la clase compras caso de uso seleccionar y ver totales


Herramienta de apoyo:
Umbrello

sábado, 9 de julio de 2011

Taller POO - Especificacion Tecnica

Para mi proyecto, LAs funcionalidades que aun no estan completas 1.- es la de los usuarios que aun falta como proceder para crear su cuenta, 2.- para los articulos falta tambien implementar la busqueda y terminar la manera de ingresarlos en la base de datos (ya que aun me marca error), esto mismo relaciona a la busqueda de tales.
Algo en lo que puedo decir que falta al 100% es trabajar sobre mi clase de compras, ya que no la eh inicializado.
Ademas de esto Me falta relacionar las clases entre si, esto para las funcionalidades ya juntas, ya que tengo dudas pues por separado podrian y funcionar y al juntarlas no se que pasara.

Para terminar estas funcionalidades creo que necesito estudiar bien la maner de enlazar las clases ya que eh ahi mis dudad y pues tambien las interfaces graficas faltarian implementarlas para ver el funcionamiento en si.

Taller POO - Avance

Ups! para el avnce parcial creo que no es mucho aun ya que solo cuento con una cosa funcional exacta, esta es la coneccion de la clase usuarios con la base de datos, esta almacena los usuarios y las contrasenias, la idea de esto es que cuando un usuario intente entrar el nombre y la contrasenia se manden buscar dentro de esta base de datos, aun me falta implementar la busqueda.
El codigo hasta ahoritha es el siguiente:

Para la conexion:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.*;

public class Conexion{

MysqlDataSource datasource;
Connection conexion;
Statement st;
String estado="Todo Ok";//Estado de la conexion

public Conexion()
{
datasource=new MysqlDataSource();
datasource.setUser("root");
datasource.setPassword("21082010");
datasource.setDatabaseName("Usuarios");//nombre de la base de datos
datasource.setServerName("localhost");
try{
conexion=datasource.getConnection();
st = conexion.createStatement();
}catch(SQLException ex){
estado=ex.getMessage();
}
}

}//Fin de la clase Conexion


y para pedir los nombres y contrsenias el siguiente codigo:


import java.util.*;

public class Pagina {
public static void main(String[] args){
Scanner u= new Scanner(System.in);
Conexion con = new Conexion(); //Conexion

System.out.println("Nombre:");
String Nombre = u.nextLine();
System.out.println("Password:");
String Password = u.nextLine();
con.agregar(Nombre,Password);//Conexion a la base de datos

} //fin main

}//fin clase


Ademas de esto tambien intente almacenar lo que es referente a la clase de articulos, pero en eso eh tenido algunos detalles, entonces creo que hasta ahora es lo que tengo.

Taller POO - Herencia

En esta entra pondre el codigo con la herencia que aplique a mi proyecto intentando no forzarla y esperando este bien aplicada en la manera en que lo hice.
El codigo es el siguiente:


import java.util.*;

public class Articulos extends BaseDatos {
public static void main(String[] args){
Scanner u= new Scanner(System.in);
Conexion2 con = new Conexion2();

System.out.println("Ingrese lo siguiente");
System.out.println("Nombre del articulo:");
String NombreArticulo= u.nextLine();
System.out.println("Codigo:");
int Codigo= Integer.parseInt(u.nextLine());
System.out.println("Costo:");
float Costo= Integer.parseInt(u.nextLine());
System.out.println("Palabra Clave:");
String Palabraclave= u.nextLine();
System.out.println("Cantidad:");
int Cantidad = Integer.parseInt(u.nextLine());
con.ingresar(NombreArticulo,Codigo,Costo, Palabraclave,Cantidad);
} //fin main

}//fin clase


Aplique la herencia a la clase de los articulos que tengo avanzada ya que al igual que la clase de usuarios se conecta con la base de datos creo que esto tambien se extenderia a la clase de busqueda ya que tambien esta relacionada con esta clase, porque su principal funcion es buscar los articulos dentro de la base de datos.

viernes, 8 de julio de 2011

Taller POO - Clases

Estas son los esqueletos de las clases que utilizare para desarrollar mi programa, la clase inicial que tengo es Usuario: que se encargara de los almacenar los datos de usuario al crear una cuenta


import java.util.*;

public class Usuario { /*Class Usuario*/
private String Nombre;
private int Password;
private String Direccion;

public Usuario () { }; //Constructor

private void setNombre ( String newVar ) {
Nombre = newVar;
}

private String getNombre ( ) {
return Nombre;
}
private void setPassword ( int newVar ) {
Password = newVar;
}
private int getPassword ( ) {
return Password;
}
private void setDireccion ( String newVar ) {
Direccion = newVar;
}
private String getDireccion () {
return Direccion;
}
public String CrearCuenta()
{
}
public Usuario Acceder()
{
}
}//Fin de la clase Usuario



en este esqueleto se puede apreciar que algunos datos son get o set esto es
por que para crear usuario el usuario tendra que ingresar sus datos y se almacenaran en
una base de datos y cuando el usuario valla a tener acceso a su cuenta los datos se le
asignaran desde la base de datos. Lo mismo ocurre con la siguiente clase que es Articulos, aqui el esqueleto:


import java.util.*;

public class articulos {
private String NombreArticulo;
private int Codigo;
private double Costo;
private boolean disponibilidad;
private char descripcion;

public articulos () { }; //Constructor

private void setNombreArticulo ( String newVar ) {
NombreArticulo = newVar;
}
private String getNombreArticulo ( ) {
return NombreArticulo;
}
//Pedir o asignar el nombre del articulo
private void setCodigo ( int newVar ) {
Codigo = newVar;
}
private int getCodigo ( ) {
return Codigo;
}// Pedir o asignar el Codigo para el articulo
private void setCosto ( double newVar ) {
Costo = newVar;
}
private double getCosto ( ) {
return Costo;
}// Pedir o asignar el Costo para el articulo
private void setDisponibilidad ( boolean newVar ) {
disponibilidad = newVar;
}
private boolean getDisponibilidad ( ) {
return disponibilidad;
}// Pedir o asignar la disponibilidad para el articulo
private void setDescripcion ( char newVar ) {
descripcion = newVar;
}
private char getDescripcion ( ) {
return descripcion;
}
public boolean Seleccionar( )
{
}
public int VerArticulos( )
{
}
public String AgregarArticulos( )
{
}
}//Fin de Articulos



El siguiente esquelo pertenece a la clase de Busqueda

public class Busqueda {
private String PalabrasClave;
private int Codigos;

public Busqueda () { }; //Constructor
private void setPalabrasClave ( String newVar ) {
PalabrasClave = newVar;
}
private String getPalabrasClave ( ) {
return PalabrasClave;
}
private void setCodigos ( int newVar ) {
Codigos = newVar;
}
private int getCodigos ( ) {
return Codigos;
}
public articulos BuscarArticulos( )
{
}
}//Fin de la clase Busqueda



El ultimo esqueleto es de la clase Compras

import java.util.*;

public class Compras {
private String pedidos;
private String Ventas;
private boolean Total;
private int pago;

public Compras () { }; //Constructor

private void setPedidos ( String newVar ) {
pedidos = newVar;
}
private String getPedidos ( ) {
return pedidos;
}
private void setVentas ( String newVar ) {
Ventas = newVar;
}
private String getVentas ( ) {
return Ventas;
}
private void setTotal ( boolean newVar ) {
Total = newVar;
}
private boolean getTotal ( ) {
return Total;
}
private void setPago ( int newVar ) {
pago = newVar;
}
private int getPago ( ) {
return pago;
}
public articulos PedirArticulos( )
{
}

public articulos ComprarArticulo( )
{
}
public double MostrarTotal( )
{
}
public double MostrarMonto( )
{
}


}// Fin de la clase Compras


en este esqueleto agrege algunos set y get aunque aun no defino
completamente cuando asignar los totales, pero ya lo ire acomodando
segun valla desarrollando el sistema.

lunes, 4 de julio de 2011

domingo, 3 de julio de 2011

POO- Herencia y polimorfismo


La herencia aplicada en mi proyecto.

Las herencias que encontré en mi proyecto fueron las siguientes:
aunque solo fue una, alas demás clases les encuentro mas bien una relación y no una herencia,
en cuanto al polimorfismo podría aplicarlo en las clases de artículos y compras ya que en ambas podemos seleccionar los artículos que se desean.

POO- Diseño con clases

Diagrama de clases.
Clases del sistema con su respectivos atributos y métodos.
Las clases serán de visibilidad publica, los atributos de visibilidad privada y los métodos seran públicos al igual que las clases.

sábado, 2 de julio de 2011

POO- Casos de Uso

Los casos de uso de mi proyecto son los siguientes:
Cada caso contiene una definición especifica de su función y/o uso.
El diagrama quedaría de la siguiente manera: