viernes, 15 de julio de 2011

Patrones de Diseño

Que es un patron de diseño?
Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado suefectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.


Los patrones de diseño que utiliza mi proyecto:


Facade(Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o un grupo de interfaces de un subsistemas.


- Este patron me ayudara en lo que es la ventana GUI, ya que ahi lo manejo completamente todo y al momento de ver las tablas o hacer las consultas se abren otras ventanas con ese tipo de informacion.


Flyweight (Peso Ligero): Reduce la redundancia cuando gran cantidad de objetos poseen identica informacion.


- Este me ayudara a lo que cuando se utiliza el statement simplemente lo declaro como 
st = statemente y al momento de mandarlo a llamar solo poner st.


Singleton (Instancia única): Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.


- Este patron me ayudara en lo que es el main ya que solamente instancia para poder hacer lo que se esta instanciando.


Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.


- Este patron lo utilizo en el action performed de la clase GUI ya que como son muchos botones tiene que haber una secuencia de cada uno de ellos al momento de hablar al ActionListener.

Demostración final

Como se pudo apreciar en la clase, me falto mucho por implementar en lo que resta de las vacaciones intentare trabajar en ello para poder hacer un sistema que se aprecie.

Que le falto?
Que se pudiera realizar un prestamo.
Que me cree un pdf para dar el ticket.
Que se puedan realizar consultas de los juegos prestado.
Que aparezca la persona que tiene el juego.


Documentacion al usuario.


Para poder usar este sistema es simple en la ventana GUI se agrego una pestaña llamada ayuda donde usted puede ver que es lo que quiere hacer. 


Como punto numero uno.- Tenemos que usted quiere agregar a alguien como lo hace?, bien se dirige a la pestaña  Catalagos y escoge ya sea juego o clientes y le da click en agregar, aparecera una ventana donde podra llenar los requisitos que se necesitan para poder estar en el sistema.


Punto numero dos.- Como visualizar las tablas de los clientes, se dirige a la pestaña consultas y escoge la seccion de clientes da click en todos y podra visualizar la tabla, para ver la tabla de juegos, se dirige a la pestaña inventarios y le da click en la seccion de juegos usted podra ver los juegos.


Punto tres.- Como realizar un prestamo, se dirige a la pestaña prestamo, y escoge la seccion de realizar prestamo se abrira una ventana en este lugar llenara los requisitos que requiere para hacer el prestamo y le dara al boton imprimir.


Demo

Documentación técnica

Aqui dejo la liga sobre mi documentacion tecnica:
 Esta ligas es de un .RAR
http://www.megaupload.com/?d=61KQK5MB

Auto-generación de código


Lo diferente es que en mi proyecto yo use un actionPerfomed por cada accion que se debia hacer, en el código auto-generado solo tenia uno, en donde abarca todo eso.

En mi caso yo solo compare el ID de la tabla para poder elimnar y el codigo auto-generado lanza gets y sets para poder hacer lo mismo que yo, que quiere decir que me ahorre lineas al momento de agregar o eliminar ya sea un juego o un cliente.

Al comparar mi codigo con el auto-generado si puede haber ciertos aspectos en los que el codigo auto-generado me pueda ayudar, por eso siempre es bueno hacer un diagrama antes de empezar a programar creo yo que que es la mejor maner de empezar un buen sistema

Interfaz Grafica

Aqui les dejo una serie de mis ventanas.

Esta es cuando se va a entrar al sistema:


Aqui la ventana princpal con una tabla:

Esta es cuando no llenas un campo en agregar cliente, te apraece lo siguiente:

Aqui es cuando se llena correctamente los campos de la imagen anterior:

Ventana para eliminar, cuando no se pone nada:

Ventana eliminar cuando si se pone el id:
Y un simple JDialog para mostrar al acerca del Sistema:


Eventos, excepciones y errores

Evento:

Esta parte del codigo es el metodo que se tiene que implementar de ActionListener, el cual va a "escuchar" el menu desplegable de la ventana principale:
public void actionPerformed(ActionEvent ae) {
  if(ae.getSource() == Agregar){
   AgregarCliente a = new AgregarCliente();
  }else if(ae.getSource() == Eliminar){
   EliminarCliente DEL = new EliminarCliente();
  }else if(ae.getSource() == Nuevo){
   //AgregarJuego AJ = new AgregarJuego();
  }else if(ae.getSource() == Borrar){
   //EliminarJuego Bor = new EliminarJuego();
  }else if(ae.getSource() == TC){
   this.fillTable();
   System.out.println("Conectando...");
  }

Este pedazo es sencillo, lo que hace es utilizar un metodo "getSource" del objeto ActionEvent, 
para saber de que boton se produjo el evento, y despues lo que hace es compararlo con  cada uno de los botones disponibles para ver si el evento se produjo de tal boton.  Y asi realizar la accion que tenga ese boton.

Excepciones:
public void actionPerformed(ActionEvent e) {
   JButton b = (JButton)e.getSource();
   if(b==boton_aceptar){
    c = (campocliente.getText());
    t = (campotel.getText());
    d = (campodir.getText());
           l = (campoed.getText());
    u = (campocel.getText());
    r = (camporefe.getText());
     try{
      rows_updated = 0;
      PreparedStatement aux = objeto_base.ct.prepareStatement("INSERT INTO Clientes(Nombre, Edad, Direccion, Telefono, Celular, Referente)VALUES(?,?,?,?,?,?)");
      aux.setString(1,c); 
      aux.setString(2,l); 
      aux.setString(3,d);
      aux.setString(4,t); 
      aux.setString(5,u);
      aux.setString(6,r);
      rows_updated = aux.executeUpdate(); 
       
      JOptionPane.showMessageDialog(this, "Registro Agregado");
      this.setVisible(false);
    
     }catch(SQLException d){
      JOptionPane.showMessageDialog(this, "Error");
     }
  }else if(b==botoncancelar){
   this.setVisible(false);
  }
   
  }
  
 }
 Al igual que en el codigo que mencione arriba, primero fue igualar un boton local con el getSource del ActionEvent, para asi comparar solo botones.
Despues en el Try, lo que hace es prepar la sentencia de SQL para agregar cliente pasandole los parametros que extraje de los campos que lleno el usuario. 
Despues se ejecuta el update y me manda un mensaje de que se pudo hacer.
En el Catch, hay una excepcion del tipo "SQLException" la cual solo mostrara un mensaje  que diga que no se puedo, esto ayuda a que el programa no se quede buscando informacion.

Errores:
Un error que tiene el sistema, es uno simple donde no le pongo que funcionen las teclas por lo
tanto al momento de querer oprimir un boton se tiene que hacer con el mouse.

SISTEMAS DISTRIBUIDOS.

Sistemas distribuidos
Definición:

"Sistemas cuyos componentes hardware y software, que están en ordenadores conectados en red, se comunican y coordinan sus acciones mediante el paso de mensajes, para el logro de un objetivo. Se establece la comunicación mediante un protocolo prefijado por un esquema cliente-servidor".

Características:
    * Concurrencia.- Esta característica de los sistemas distribuidos permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por los usuarios y/o agentes que interactúan en la red.
    * Carencia de reloj global.- Las coordinaciones para la transferencia de mensajes entre los diferentes componentes para la realización de una tarea, no tienen una temporización general, esta más bien distribuida a los componentes.
    * Fallos independientes de los componentes.- Cada componente del sistema puede fallar independientemente, con lo cual los demás pueden continuar ejecutando sus acciones. Esto permite el logro de las tareas con mayor efectividad, pues el sistema en su conjunto continua trabajando.

Sistemas Distribuidos en mi proyecto:

cliente-servidor.
En mi proyecto se pudiera realizar un sistema distribuido cliente-servidor en donde el cliente seriia el dispositivo y se solicita un servicio, luego una maquina seria el servidor.



El cliente pide ver los juegos disponibles con precios actualizados, y un servidor se los proporciona, al igual que si el cliente desea escoger uno, que se conecte a un servidor a donde esta el inventario y que este muestre los juegos disponibles en una lista, existen diferentes categorias de servidores, para mi proyecto se implementaria servidor de bases de datos para poder acceder al inventario.