Pages

Mostrando entradas con la etiqueta Clase. Mostrar todas las entradas
Mostrando entradas con la etiqueta Clase. Mostrar todas las entradas

Diagramas de Secuencia

Estos son algunos de los diagramas que hice en la pagina websequence, muy util y recomendable debo decir.

Al estar usando umbrello en mi ArchLinux me da problemas ya que es propio de KDE y Arch utiliza Gnome por eso opte por el websequence.
Bueno, esto ya es otra historia.

Los siguientes diagramas estan describiendo situaciones completas y "dias felices". Y la verdad es que algunos si estan un poco extensos, pero partirlos a secuencias mas reducidas no ayuda a comprender mejor la situacion, asi que lo deje con un contexto mas extenso.


Diagrama de una secuencia de inicio de sesion



Registrar un nuevo usuario



Ver Articulos del Carrito de compras



Ver Datos del usuario

Sistemas Distribuidos

Mi proyecto es apto para el su uso al estilo de computacion distribuida.

Lo primero que se me ocurre es que usar un sistema de Clustering puede beneficiar en gran medida a mi sistema para poder aumentar por mucho su funcionamiento.

Imaginando que el sistema crece, tendremos que las bases de datos de los clientes y los articulos seran mas extensas, por lo cual nos costara mas tiempo realizar todas las acciones de busqueda, inserccion y alteracion de datos.

Si mi sistema funcionara con clustering podria tener varios procesos esparcidos entre las computadoras del cluster, esto implicaria una gran ventaja en su uso ya que seria mucho mas potente y rapido, pero implica un riesgo mucho muy grande ya que si un Nodo del cluster falla el sistema puede quedar inestable y dejar de funcionar.

Cluster de 6 computadores.


Este problema se podria arreglar con un nodo provisional al que recurran si algo falla, pero todo queda en manos de las pruebas al momento de la implemetacion de un sistema distribuido.

Patrones de Diseño

Al parecer un patron de diseño es el que mas destaca en mi proyecto, el MVC.

Comunmente se usa el MVC en casi cualquier proyecto para aumentar la reutilizacion de codigo, hacer mas facilmente mejoras y poder tener una amplia perspectiva del entorno del proyecto.

Resulta que en mi proyecto tengo inmiscuidos JSP, Servlets y Clases ¨comunes¨ de java.

Todo indica que mis JSP son mi vista, mis controladores son mis Servlets y las clases son mi modelo, por lo menos de esta manera lo visualizo.

Tambien tenia en mente la fachada como patron.
Asi tendria solo un servlet que controlara a los demas, aprovechando que los servlets se cargan solo 1 vez al ser llamados podria ahorrarme recursos y optimizar un poco el codigo si las bases de datos se llegasen a ampiliar mucho.

Eventos, excepciones y errores

Bien, los eventos de mi proyecto son basicamente acciones de que hacen forms o click de hipervinculos, esto se debe que mi proyecto esta basado en programacion del lado del servidor que no esta al pendiente de lo que sucede en el lado del cliente.

La principal forma de crear eventos es mediante el uso de hipervinculos en los distintos menus


En este caso al dar click en Log In, el Jsp que contiene el Log In es llamado.


Si estas por loggearte y utilizas el boton reiniciar, los parametros se borran y puedes volver a introducir datos, acepto que no es muy util, pero en la zona de registro donde reiniciar los datos con un click si es conveniente por la cantidad  de inputs que son. En el caso de este Log In, manda llamar un Servlet que verifica los parametros que se le envian y determina si el usuario y password son correctos, despues redirecciona a la pagina principal.


Las Excepciones en su mayoria son del tipo ServletException, y SQLException donde las exepciones del Servlet pueden succeder en cualquier momento de la ejecuccion de un servlet y las exepciones de sql ocurren con las consultas.
En los servlets si llegase a ocurrir una exepcion de alguno de esos tipos se desplegara una pagina que informa esa exepcion en concreto, sin embargo si es alguna otra la exepciones se arrojan hasta el contenedor y tomcat las maneja desplegando su menu de exepciones.


Algo parecido a esto.

Interfaz Grafica

Esto cumple con el diseño y la implementacion de la interfaz.

utilize html5 y Css3.

Al iniciar se despliega esta pantalla


Al pasar al Log In

La pantalla inicial cambia despues del Log In ( aparecen nuevas secciones )


Se puede accesar a los datos del usuario


Si el usuario es administrador puede entrar al menu de agregar usuario.
La verdad es que prefiero un formulario en  secuencia para poder ir haciendo tab y estar seguro que ingresare el dato que esta abajo inmediatamente y no que saltare a otra parte de la pagina.




 Se puede accesar a la seccion de libros o gadgets para poder ver los articulos que estan en venta y agregarlos a carro.



Podemos pasar a ver lo que contiene nuestro carro y eliminarlo

Retroalimentacion

Bueno en cuanto a la retroalimentacion fue con mi compañero Juan esteban.

Discutimos en concreto un punto.

Al momento de distribuir mi software ( debo decir que tengo la idea de subirlo a mi servidor y dejar que lo mis amigos lo utilizen para hacer pruebas reales ) mediante mi servidor casero me comento sobre lo que sucederia si solo quedaba un solo articulo y dos personas daban click sobre en al mismo tiempo.

Esto representa un problema para mi proyecto ya que debe manejar concurrencias entre muchas peticiones al servidor, buscando un poco me di cuenta que las jsp pueden activar o no activar la concurrencia cuando estan en uso. Por desgracia aun no llego a una solucion definitiva, optima e infalible para manejar ese tipo de situaciones por mi bajo dominio de la programacion en Server Side.

La unica idea que me quedo en mente es la de usar timestamps en las peticiones de los usuarios para ver quien "gano" el articulo, pero falta investigar aun mas.

Digrama de Clases

Bueno usando umbrello genere el diagrama de clases.

Actualmente es un poco confuso porque no domino el uso de umbrello, asi que dejare el .xmi por si no es muy claro.

La imagen es esta:

Documentacion Tecnica

La importancia de la documentacion tecnica

Para entender la importancia de la documentacion veamos un ejemplo.

Imaginemos que somos llamados para realizar nuestras practicas profesionales en la empresa Jcode. En dicha empresa necesitan una minima modificacion a el sistema encargado de las bases de datos de los empleados, ya que el encargado esta de vacaciones y las modificaciones son de prioridad maxima, si el practicante puede implementar dichas modificaciones aseguraria su puesto.

El requisito es el siguiente.
* No permitir que los nombres de los empleados en la base de datos contengan numeros; solo seran permitidios los caracteres.

* No permitir que los campos de nombres y apellidos queden vacios.

Inmediatamente te diriges a modificar el codigo fuente del sistema, y localizas la parte que ejecuta las inserciones a la base de datos.


public class insert {

    String p;
    String l;
    String x;

    EscuchaEventos m = new EscuchaEventos("as"1,true);

    p = m.insen();
    l =    m.insea();
    x =    m.insee();

    basedatos bd = new basedatos();

    bd.upd(p,l,x);

}
Al ver esto cualquiera se asustaria. Las variables no tienen mucho sentido,  no hay forma de saber cuales son los elementos importantes, no tiene metodos implementados. No se sabe si esta clase es necesaria, y al parecer solo el encargado principal, aquel que escribio el codigo es capaz de interpretarlo.

Quiza aun exista manera de arreglarlo, pero ahora imaginen que se quedan con el empleo.
Traten de visualizar todo el codigo igual de codificado, seria una pesadilla, no?

Es por ello que la documentacion tecnica es tan importante, a nivel de proyecto es indispensable mantener una documentacion limpia y clara para poder darle mantenimiento a nuestros propios sistemas o a sistemas ajenos.

Veamos este ejemplo de codigo.

public class Elevator {

  public boolean doorOpen = false; // variable que indica si la puerta esta abierta
  public int currentFloor = 1; // entro que indica el piso actual
  public final int TOP_FLOOR = 4; // Constante donde se indica el maximo de pisos
  public final int MIN_FLOOR = 0; // Constante donde se indica el minimo de pisos

  // Metodo openDoor para abrir las puertas modificando la variable openDoor  

  public void openDoor() {
    System.out.println("Abriendo puerta....");
    doorOpen = true;
    System.out.println("La puerta esta abierta.");
  }

  // Metodo closeDoor para cerrar las puertas modificando la variable openDoor  

  public void closeDoor() {
    System.out.println("Cerrando puerta ....");
    doorOpen = false;
    System.out.println("La puerta esta cerrada.");
  }

  // Metodo goUp para aumentar el currentFloor y desplegar en pantalla el piso actual 

  public void goUp() {
    System.out.println("Subiendo un piso.");
    currentFloor++;
    System.out.println("Estamos en el piso: " + currentFloor);
  }

  // Metodo goDown para decrementar el currentFloor  y desplegar en pantalla el piso acutal 

  public void goDown() {
    System.out.println("Bajando un piso.");
    currentFloor--;
    System.out.println("Estamos en el piso: " + currentFloor);
  }

} 
Al ver un codigo asi es mas facil comprender y modificar su estructura, es un hecho. Como un consejo extra, la documentacion tecnica esta bien acompañada de un estandar de codigo esto hace una lectura y comprension tan sencilla que es facil aplicarles mantenimiento a los sistemas ademas de aplicarles optimizaciones.

Herencia

En mi proyecto Determine que la herencia puede aparecer en la clase Articulo y en los Servlets.

La clase Articulo puede derivar a ArticuloGadget.

Ademas la herencia de los servlets esta implicita, ya que la clase Verificador y la clase Registro heredan de HttpServlet.

Modelado de Clases del Proyecto

Para el proyecto del carro web de compras las clases que se consideran importantes a implementar son las siguientes.
-Desgraciadamente aun no tengo claro si el uso de bases de datos me oblige a utilizar nuevos atributos, asi que hasta no investigarlos los agregare.


Clase:
    public Accesos
             importancia:
              esta clase es sumamente importante porque sin ella el sistema no se puede accesar,
              posiblemente se utilize como interface, ya que puede usarse para el
               Log In, Log Out y la  Autentificacion de Usuario.

Atributos

  •     protected-Usuario(clase)   usuario
Metodos
            VerificarUsuario(String nombre, String password)
                Recibe como parametro la respuesta del llenado del formulario de
                verificacion de usuario y despues se hace una consulta
                a la base de datos, y se le asignan valores a la clase Usuario.
 



Clase:
    public Usuario
                importancia:
                   con esta clase se manejaran los datos del usuario, 
                   importantes ya que para ellos fue creado el sistema.
Atributos
  •   private-String     nombres
  •   private-String     apellidoMaterno
  •   private-String     apellidoPaterno
  •   private-String     password
  •   private-double    efectivoDisponible
  •   private-int          idUsuario
  •   private-boolean  administrador
Metodos
         Usuario(String nombres, String apellidoMaterno, String ApellidoPaterno,
                      String password, double efectivoDisponible,
                        int idUsuario, boolean administrador )
              El usuario es creado recibiendo como parametros los atributos
               que son sustraidos de la base de datos.

            VerificarDatos(void)
                El usuario puede ver los valores registrados en su cuenta.
     

           ModificarDatos(dato a modificar)
                se accede a la base de datos 
                y se modifica el valor de dato que se requiere.
     



Clase:
    public ManejadorBD
             importancia:
              Sin el majeador de la base de datos este software no tiene razon de ser.

Atributos

  •     protected-Conecction   
Metodos
            VerificarUsuario(String nombre, String password)
                Recibe como parametro la respuesta del llenado del formulario de
                verificacion de usuario y despues se hace una consulta
                a la base de datos, y se le asignan valores a la clase Usuario.

Casos De Uso Para El Proyecto

En esta entrada presentare la tabla que escribi con el formato que la Doctora Sara nos sugirió.

Lo que mas destaca es el hecho de que si el usuario o el administrador no hace Log In practicamente no se puede hacer nada.

Ambos actores usuario y administrador, comparten muchas caracteristicas a excepcion del administrador que como es obio tiene mayor cantidad de permisos en cuanto a modificacion y uso del sistema.

Definicion del Proyecto

Despues de mucho meditarlo, decidi implementar un software de un carro de compras web.

Porque?
Bueno existen dos buenas razones, la primera es que deseo implementar sobre la web, en segunda despues de una platica con un empresario me comento sobre la falta de profesionalismo departe de los programadores en cuanto a carros de compra web, lo cual me impulsa a comprobar el porque es tan dificil hacer uno.

Descripcion detallada.

El usuario podra acceder a una pagina de incio en la cual necesitara registrarse o acceder a su cuenta, despues pasara a el menu de usuario donde podra validar sus datos, nombre, edad, apellido, trabajo, cantidad de efectivo disponible e historial de transacciones. Si todos los datos son correctos y el cliente esta conforme, tendra la opcion de pasar a realizar sus compras en determinada tienda o sucursal.
Estando en la sucursal o tienda de su preferencia, podra buscar los articulos que necesita o simplemente inspeccionar que articulo tiene disponible la tienda, si el cliente encuentra algun articulo de su agrado puede agregarlo su carro web de compras. El usuario podra verificar en cualquier momento el estado de su carro de compras, la cantidad de articulos que tiene y sus precios, al verificar el estado de su carro se le proporcionara el usuario el coste total de los articulos actualmente seleccionados para que tome en cuenta el efectivo que dispone. Tambien desde la opcion de verificacion podra remover articulos de su carro de compras.

Tambien estara el usuario especial, un administrador el cual podra modificar a placer la base de datos para agregar articulos, modificarlos, borrarlos, y agregar efectivo a los usuarios.

Porque el administrador podra agregar efectivo a los usuarios?
la respuesta a ello, es porque no se manejan tarjetas de credito, ni depositos, la forma de abonar dinero es directamente con el administrador(digase empresa) para que al momento de su "deposito" el administrador personalmente le agrege dicha cantidad a la cuenta del usuario.

En cuanto a los articulos a vender, la idea es que sean libros principalmente pero se pueden agregar mas  articulos dependiendo las necesidades.



Carro de compras web




- Funciones -

  Acceder como usuario. 
Log in/out


  Verificar datos de la cuenta. 
Comprobacion de datos


  Modificar datos de la cuenta. 
Modificacion de datos


  Añadir objetos al carro. 
Añadir compra


  Quitar objetos del carro. 
Remover compra


  Verificar los objetos del carro. 
Checar articulos a comprar





Sobre la implementacion.

Pienso usar como lenguaje de programacion Java.
Concretamente pienso utilizar Servlets y Java Server Pages para la implementacion final, tambien usare el Rdbms Mysql para el uso de bases de datos.


Referencia:

Imagen carro de compras web
http://www.jevaplastic.com.mx/persona-con-carrito-de-compras-245x300.gif

referencia de Mysql
http://www.mysql.com/

referencia de los JSP
http://www.desarrolloweb.com/articulos/831.php

referencia de los Servlets de java
http://www.oracle.com/technetwork/java/javaee/servlet/index.html