lunes, 16 de mayo de 2011

PROGRAMACIÓN ORIENTADA A OBJETOS

Resumen de mi proyecto.


Mi proyecto trata sobre una cuenta para poder ahorrar, retirar, o transferir dinero.
Tiene una ventana inicial que te pide tu usuario y contraseña para tener acceso a tu cuenta, tambien tiene distintas ventanas para hacer las funciones antes mencionadas.

Patrones de diseño:

Patrones de diseño incorporados en Java.

Recordar que un patrón de diseño es una solución estándar para un problema común de programación.

Yo usé dos patrones de diseño: Subclase(herencia) y Excepciones

El patrón subclase se usa para no hacer repeticiones de código(ahorrar código) ya que esta actividad es muy propensa a errores y confusiones.
Utilicé este patrón en mi clase Gráficos, heredé de la clase JFrame.

El patrón excepciones, es usado cuando una parte de código es propensa a errores, este patrón lo usamos para controlar el flujo "normal" de ejecución.
En caso de que se presente una irregularidad o falla en nuestro sistema, este saltará ese pedazo de código, mostrando un mensaje de Error.

Aclaro que estos patrones de diseño que he mencionado ya vienen incorporados en Java.

Eventos:

Los únicos eventos que ocurren en mi programa son al hacer click sobre los diferentes botones, por ejemplo en la ventana inicial (acceso) vienen 2 botones "Aceptar" y "Crear cuenta" con obvios eventos que cuando damos click en Aceptar y si el usuario y contraseña son correctos se abre la ventana de meus, y cuando presionamos el "Crear cuenta" si el usuario ingresado no existe ya en la base de datos, se crea la nueva cuenta.

Otros eventos son cuando estoy en la ventana de menu , para seleccionar una opción solo se oprime un botón y te lleva a esa función por ejemplo ahorrar, transferir, retirar, eliminar cuenta.

Todos los eventos de mi programa se manejan por medio de botones.

Excepciones y errores:

Las excepciones y errores que yo manejo es en mi clase "BaseDatos" cuando se hace de forma erronea una consulta a la base de datos el catch avienta un mensaje de error: "Error al realizar la consulta".

En la misma clase tambien cuando intento conectarme a la base de datos, puse un try y en el catch puse que mostrara un mensaje de error con la leyenda: "Error en la conexión"

Pruebas unitarias:

En cuanto a pruebas unitarias yo como la mayoría de mis compañeros hice el tipo de prueba de caja negra porque algunos compañeros probaron mi sistema, unos me dijeron que no tenía suficiente información para el usuario pero las pruebas fueron que ponian cierto tipo de caracteres raros en mis JTextField y después mi sistema no respondía, para eso puse excepciones y errores, que el sistema solo debia aceptar el tipo de datos que estaba declarando en mis atributos, de manera que cuando hacian lo mismo de poner caracteres extraños, mi sistema mandaba un error en la acción que queria que se llevara acabo.


Interfaz gráfica:

En la interfaz gráfica batallé mucho porque es la primera vez que hago un proyecto con interfaz gráfica (ya las había usado antes pero fue un ejercicio muy secillo).

Mi proyecto cuenta con 6 ventanas:

1. Ventana de acceso.
2. Ventana de creación de cuentas.
3. Ventana de ahorro.
4. Ventana de retiro.
5. Ventana de transferencias
6. Ventana de eliminación de cuenta.

Para hacer todas estas ventanas heredé de JFrame, para acomodar los elementos de las ventanas utulicé FlowLayout porque tuve muchos problemas con setBounds.

La mayoría de mis ventanas tienen componentes como JButton, JTextField y JLabel.
Mi programa abría ventanas cada que hacía una función y al final quedaban muchas ventanas abiertas, para solucionar eso, antes abrir otra ventana puse un setVisible(false) para ocultar la ventana pasada.

Sistemas distribuidos:

En caso de que mi sistema quiera ser subido a la red y tuviera muchas consultas, se necesitaría de una computadora (servidor) que pueda responder a las peticiones de los usuarios, pero para poder realizar ese trabajo se necesita buen hardware en una máquina, además si se tuviera mi sistema en una sola máquina, si falla esa máquina pues fallaría todo el servicio.
Para evitar problemas de acceso a mi sistema desde la red, se necesitaría un Sistema distribuido en el cuál se puede instalar partes de mi sistema, y que todas las máquinas trabajen en conjunto, así si falla una máquina se puede seguir dando el servicio, no con la misma calidad pero seguiría estable, sería como un Cluster.
Lo que quiero decir es que conviene más para mi sistema que el trabajo se haga distribuido y no centralizado, para que el control de mi sistema no dependa de un solo punto y pueda presentar fallas solo por causa de una computadora (en la que está alojado).

Estos son los videos(explicación y ejecución de mi sistema) que subí a YouTube del Taller de Programación Orientada a Objetos:







Es todo en esta entrada, cualquier corrección pueden dejarla en comentarios.
Saludos!

jueves, 24 de marzo de 2011

PROGRAMACIÓN ORIENTADA A OBJETOS

Ejercicio.

  • Detección de eventos, errores y excepciones de mi proyecto.
El evento que he usado hasta ahorita en mi proyecto es:
  1. Hacer click sobre un botón.
Todas las consultas que haga a mi base de datos, además de los logins , serán accesadas por medio de botones. Cada ventana tendrá un botón a excepción de la ventana de Login que tendrá 2 botones, el botón para accesar a la cuenta y el botón para crear una nueva cuenta.

Los errores que pudiera tener mi proyecto son:
  1. Usuarios con el mismo nombre en mi tabla de base de datos.
  2. Asignación o ahorro de dinero con más cifras de las que se dispone.

  • ¿Cómo los voy a manejar?
Bueno los errores que mencione que pudieran salir son fáciles de manejar, porque en el atrbuto de la cifra del ahorro puedo limitarlo hasta cierto número.

viernes, 18 de marzo de 2011

TALLER DE PROGRAMACIÓN ORIENTADA A OBJETOS

Herramienta BOUML.

Acá está el diagrama de clases que hicimos en clase de Taller de Programación Orientada a Objetos con la herramienta BOUML.

Este fue solo un ejemplo que nos puso la Dra. Sara, luego subiré el diagrama de clases de mi proyecto.

(Hacer click sobre la imagen para verla más grande)




Cualquier duda pueden ponerla en los comentarios.
Saludos;)

jueves, 17 de marzo de 2011

PROGRAMACIÓN ORIENTADA A OBJETOS

Patrones de diseño.

Patrones de diseño o más comúnmente conocidos como "Design Patterns". Los patrones de diseño son soluciones simples y elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones basadas en la experiencia y que se ha demostrado que funcionan.

Patrón estructural:

- ADAPTER: Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles.

Es decir,
se usa para transformar una interfaz en otra, para que cuando una clase no pueda utilizar la primera, haga uso de la segunda (de la que se transformó).

- OBSERVER: Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.

Este patrón tiene como objetivo desacoplar la clase de los objetos clientes del objeto, aumentando la modularidad del lenguaje y para mi lo más importante es que evita bucles de actualización.


jueves, 24 de febrero de 2011

Entrada para comentarios.

Entrada para que mi equipo comente sobre mi proyecto, aunque creo que ya saben de que trata mi proyecto (los de mi equipo), en las entradas anteriores viene más detallado.

jueves, 17 de febrero de 2011

Taller de Programación Orientada a Objetos
(esta entrada todavía no está completa)

Sesión 4. - Codificación de Herencia y Polimorfismo en el proyecto.

Que tal, esta entrada trata sobre la codificación de lo que expliqué en la entrada anterior (Programación Orientada a Objetos, sesión 3).


Las clases que van a aplicar herencia son las de Graficos y la de UsuarioPremium, la clase Graficos heredara de la clase JFrame

miércoles, 16 de febrero de 2011

PROGRAMACIÓN ORIENTADA A OBJETOS

Sesión 3. - Polimorfismo y Herencia.

Que tal, en esta entrada voy a identificar y explicar las relaciones de herencia para el proyecto (solo eso, ya que la codificación de esto debe ir en otra entrada, en la sesión 4 del Taller).

Primero quiero dejar claro los tipos de visibilidad que podemos heredar o no.

- private: No puede ser accedida desde otra clase ni puede ser heredada.
- protected: No puede ser accedida desde otra clase pero si puede ser heredada.

- public: Puede ser accesada y heredada desde cualquier clase.

Les repito las clases que usaré para el proyecto(son solo algunas, todavía no son todas las que voy a usar)

~~ class Login
~~ class Ingreso
~~ class Transferencia
~~ class Retiro

En este proyecto, la clase Login será la clase padre de todas las demás clases(por lo menos las que llevo hasta ahorita), será la clase padre porque le heredará los atributos y métodos base que se encargaran a la vez de construir los métodos de otras clases.

Los 2 atributos que tengo en la clase Login son :
* protected String usuario
* private String password

El atributo usuario, y todos los métodos de la clase Login los heredaré a las demás clases, por eso puse como protected la visibilidad del aributo usuario.

Por ejemplo, en la clase Ingreso, se necesitará un usuario al cual adicionarle el dinero ingresado a su cuenta de ahorro, por eso lo de heredar ese atributo.

También en la clase Transferencia se debe saber a que usuario se le va a transferir el dinero, y de parte de quien.

Y al final para hacer un retiro, pues se ocupa un usuario para que a su cuenta se le resté lo que va a retirar, de su ahorro total.

Prácticamente todo el sistema gira alrededor de los usuarios, y los atributos de los usuarios están almacenados en una base de datos (la base de datos en MySQL se las debo, apenas ando en eso).

Bueno, eso es todo, la codificación de esto que acabo de explicar, va en la próxima entrada, es la entrada correspondiente a la Sesión 4 del Taller de Programación Orientada a Objetos.

Cualquie duda o corrección pueden ponerla en los comentarios.
Saludos ;)





lunes, 14 de febrero de 2011

Taller de Programación Orientada a Objetos

Sesión 3. -Esqueleto de las clases del proyecto

Que tal, este es el esqueleto de las clases de mi proyecto, por esqueleto, y las indicaciones que nos dio la Dra. Sara entendí que solo debiamos poner los atributos y métodos de las clases.

Al principio en una entrada anterior puse que mi proyecto constaría de 5 clases, pero estoy viendo que voy a necesitar de más clases, fue lo que nos dijo la Dra. Sara , que al ir avanzando en el proyecto van a salir nuevas cosas que ni siquiera tenimos en mente.

Este es el esqueleto de la primera clase, es la clase que se encargará de dar la bienvenida preguntando por un User y un Password, todo esto, todavía sin interfaz gráfica.

Clase Login :


//Alumno: Carlos Triana Matricula: 1412573
import java.util.Scanner;

public class Login
{
public static final Scanner entrada = new Scanner(System.in); //Entrada de datos
private String usuario;
private String password;

public void login(){
System.out.println("Ingrese su cuenta de usuario");
usuario = entrada.nextLine();
//int a = Integer.parseInt(usuario) Se usa cuando quieres convertir un valor String a un valor Int
System.out.println("Ingrese su contraseña");
password = entrada.nextLine();
}
}//Fin de la clase Login



Clase Ingreso:


//Alumno: Carlos Triana Matricula: 1412573
import java.util.Scanner;

public class Ingreso
{
public static final Scanner entrada = new Scanner(System.in); //Entrada de datos
private double monto;

public void Ingreso(){
System.out.println("Ingrese el monto que quiere ahorrar: ");
monto = entrada.nextDouble();
System.out.println("\nEl valor que ahorraste es: " + monto);

}
public double getMonto(){
return monto;
}

}//Fin de la clase Ingreso



Clase Transferencia:

//Alumno: Carlos Triana Matricula: 1412573
import java.util.Scanner;

public class Transferencia{

public static final Scanner entrada = new Scanner(System.in); //Entrada de datos
private double cantidad;
private String user;

public void Transferencia()
{
System.out.println("Ingrese el cantidad que quiere transferir: ");
cantidad = entrada.nextDouble();
System.out.println("\nIngrese un usuario para realizar la transferencia: ");
user = entrada.nextLine();
}

public double getCantidad(){
return cantidad;
}
}//Fin de la clase Transferencia


Clase Retiro:

//Alumno: Carlos Triana Matricual: 1412573
import java.util.Scanner;

public class Retiro{
public static final Scanner entrada = new Scanner(System.in); //Entrada de datos
private double retiro;

public void Retiro(){
System.out.println("Ingrese la cantidad que quiere retirar de su cuenta: ");
retiro = entrada.nextDouble();
System.out.println("La cantidad que retiraste de tu cuenta es " + retiro);
}

public double getRetiro(){
return retiro;
}
}//Fin de la clase Retiro



Esto es todo por esta entrada,esto es solo el esqueleto y como dije antes, seguiré añadiendo más clases.



Cualquier corrección o duda puede dejarla en comentarios.

Saludos;)

sábado, 12 de febrero de 2011

Taller de Programación Orientada a Objetos

Sesión 2. -Implementación de varias clases que se comunican.

Este programa está pensado en una aplicación (nada decente) para el cine.
El programa da a elegir qué película quieres ver mediante un menú, después
de elegir hace el cobro por el boleto, y al final te dice las características del mismo
como el precio, el título y la hora de la función.

Se compone de 3 clases que se llaman: class MenuEleccion, class Boleto, class Entrega:

Acá les dejo el código de las 3 clases y las imágenes del programa en ejecución.

Clase Boleto:


/*

ALUMNO:CARLOS TRIANA DRA. SARA ELENA GARZA
Este programa esta pensado en una aplicación
para un cine, el programa da a elegir qué película
quieres ver mediante un menú , después de
elegir hace el cobro por la película y al final
te entrega el boleto, con las características del mismo.

Tiene 3 clases, las cuales se llaman class MenuEleccion,
class Cobro y class Entrega.

*/
public class Boleto
{
private int precio;
private int hora;
private String titulo;

public Boleto(int precio, int hora, String titulo)
{
this.precio = precio;
this.hora = hora;
this.folio = folio;
this.titulo = titulo;
}//Fin de constructor Boleto

public void setPrecio(int precio){

this.precio = precio;
}

public int getPrecio(){
return precio;
}

public int getHora(){
return hora;
}

public String getTitulo(){
return titulo;
}

}


Clase Entrega:




import java.util.*;
// ALUMNO: CARLOS TRIANA DRA. SARA ELENA GARZA
public class Entrega
{
public static void Entrega1(){
Boleto b1 = new Boleto(100,5,"Sin memoria");

System.out.println("El nombre de la pelicula es : " + b1.getTitulo());
System.out.println("El precio del boleto es : " + b1.getPrecio());
System.out.println("La hora de la funcion es : " + b1.getHora());
}//Fin de Entraga1

public static void Entrega2(){
Boleto b2 = new Boleto(100,8,"Venganza letal");

System.out.println("El nombre de la pelicula es : " + b2.getTitulo());
System.out.println("El precio del boleto es : " + b2.getPrecio());
System.out.println("La hora de la funcion es : " + b2.getHora());
}//Fin de entrega2

public static void Entrega3(){
Boleto b3 = new Boleto(100,11,"Sanctum");

System.out.println("El nombre de la pelicula es : " + b3.getTitulo());
System.out.println("El precio del boleto es : " + b3.getPrecio());
System.out.println("La hora de la funcion es : " + b3.getHora());
}//Fin de Entrega3
}//Fin de la clase Entrega




Clase MenuEleccion:



import java.util.Scanner;

//ALUMNO: CARLOS TRIANA DRA.SARA ELENA GARZA

public class MenuEleccion
{
public static final Scanner entrada = new Scanner(System.in); //Entrada de datos
private int numero;
private int eleccion;

public static void MenuEleccion()
{
int eleccion;
int numero;

System.out.print("\nMENU DE ELECCION DE PELICULA");
System.out.println("\n\nIngrese un numero para elegir una pelicula:\n");
System.out.print("1 - Sin Memoria\n2 - Venganza letal\n3 - Sanctum\n\n");
eleccion=entrada.nextInt();
System.out.println();

if (eleccion==1)
{
System.out.println("Has elegido la pelicula: Los ojos de Julia\n");
Entrega.Entrega1();
}

else if (eleccion==2)
{
System.out.println("Has elegido la pelicula: Venganza letal\n");
Entrega.Entrega2();
}

else if (eleccion==3)
{
System.out.println("Has elegido la pelicula: Sanctum\n");
Entrega.Entrega3();
}

}//Fin del metodo MenuEleccion

public static void main(String args[]){

MenuEleccion();

}//Fin de la funcion main
}//Fin de la clase MenuEleccion



Es todo por esta entrada, cualquier duda o corrección pueden dejarla en comentarios.
Saludos ;)

lunes, 31 de enero de 2011

Programación Orientada a Objetos

Sesión 2

Borrador!

Este es mi borrador inicial de las clases que involucra mi proyecto.

Las clases son:

  • Login.

Atributos:
-usuario(privado)
-password(privado)

Métodos:
-login(publico)

  • Ingreso

Atributos:
-Monto(privado)

Métodos:
-getMonto(public)

  • Transferencia

Atributos:
-Cantidad(public)
-Usuario(public)

Métodos:
-getTransferencia(public)

  • Retiro

Atributos:
-cantidad(private)
-usuario(private)

Métodos:
-getRetiro(public)

  • Impresiones

Atributos:
-Usuario(private)
-DineroTotal(private)
-Transferencias(private)
-Ahorros(private)

Métodos:
-GetDatoUsuario(public)
-GetDatoTotal(public)
-GetDatoTransferencia(public)
-GetDatoAhorro(public)



Cualquier corrección pueden ponerla en los comentarios. Saludos! ;)


miércoles, 26 de enero de 2011

Programación Orientada a Objetos

Sesión 1

Idea del proyecto...

Mi idea para el proyecto de Programación Orientada a Objetos es hacer un sistema de cuenta de ahorro.

La Parte inicial del sistema contendrá una área en la que se podrá capturar el usuario y la contraseña, para poder accesar a tu cuenta.

Después en la sección del usuario, tendrá distintas funciones como: revisar el estado de cuenta ($ el dinero que tenemos ahorrado), ahorrar, transferir dinero a otra cuenta (otro usuario), retirar dinero.

Obviamente al inicio del programa aparte de pedirte un usuario y contraseña, también habrá una opción de crear una cuenta, para empezar a usar el sistema.

Pienso usar la entrada y salida de archivos en Java, porque eso nunca lo he hecho en ese Lenguaje y quiero aprender más sobre eso, voy a guardar cada cuenta de ahorro en archivos de texto distintos.

También quiero que el sistema se maneje con una interfaz gráfica para hacerlo más amigable, y de paso aprender nuevas cosas de Java.

Espero con el tiempo encontrar qué más cosas ponerle al sistema o si se me ocurre algo más ambicioso chance y cambio de proyecto jeje...

Cualquier corrección pueden escribirla en los comentarios.

Saludos!

lunes, 24 de enero de 2011

Taller de Programación Orientada a Objetos

Taller de Programación Orientada a Objetos.
Sesión 1

Hola soy Carlos Triana, para la clase de Programación Orientada a Objetos y Taller (clase con la Dra. Sara Elena Garza) yo me decidí por utilizar el lenguaje Java.

Herramientas.

Las herramientas que yo tengo instaladas en Windows para trabajar con Java son las siguientes:

-JDK: JDK es el kit para desarrollador de Java, nos servirá para compilar nuestros programas hechos en Java.

Si están usando Windows, esta creo yo es la mejor manera para instalar JDK:
Primero vayan a este link para descargar el JDK : http://www.oracle.com/technetwork/java/javase/downloads/index.html

Dentro de la página les preguntarán para que sistema operativo quieren el JDK, eligen y dan continuar, después les aparecerá una liga para descargar un archivo .exe que contiene el JDK, pesa aproximadamente 70MB

Ya descargado, abren el ejecutable, y siguen los pasos de la instalación.

En caso de que usen ubuntu es mas facil la instalación, solo deben poner en terminal el siguiente comando:
sudo apt-get install sun-java6-jdk

O también pueden usar la herrmamienta Synaptic para descargarlo e instalarlo.

-Notepad ++ : Para escribir el código en Windows, yo utilizo el editor de textos Notepad ++, porque tiene resaltador de palabras para muchos lenguajes de programación.

Cuando estoy en Ubuntu utilizo el editor de textos que viene por default en Ubuntu "gedit".

Ahora les voy a mostrar el primer programa que nos encargó la Dra.

Clase Prepago.

El programa es muy simple, trata sobre la tarjeta de prepago en los camiones, llevará un saldo inicial de $16.50 y el costo de cada pasaje será de $5.50 en esta clase los atributos son:

-SaldoDefault -->La cantidad de dinero que trae la tarjeta por Default
-PASAJE --> El costo del pasaje

En esta clase los Métodos son:

- pago() --> Realiza el pago del pasaje
- SaldoActual() --> Devuelve el saldo actual

En este programa construí 3 objetos, que son tarjeta 1. tarjeta2 y tarjeta3, donde con la tarjeta 1 se paga un pasaje, con la tarjeta 2 compro 2 pasajes y con la tarjeta 3 compro tres pasajes, de manera que al imprimir el saldo actual de cada tarjeta, aparecerá el Saldo por default menos la cantidad pagada por cada pasaje. Quedando para la tarjeta 1 = $11.00, para la tarjeta 2 =$5.50 y para la tarjeta 3 = $0.0

El siguiente es el código de la clase Prepago:



/*
Taller de Programación Orientada a Objetos
Dra. Sara Elena Garza
Alumno: Carlos Eduardo Triana Sarmiento Matrícula: 1412573
Programa 1

La clase Prepago hace la función del método de pago actual de los camiones, la tarjeta cuenta con $16.50 pesos
y un pasaje tiene un costo de $5.50 pesos, de tal manera que cuando se compre un pasaje, a los $16.50 pesos
iniciales se les restará $5.50.

*Atributos:
- SaldoDefault -->La cantidad de dinero que trae la tarjeta por default
- PASAJE -->Precio del pasaje

*Métodos:
- pago() -->Realiza el pago del pasaje
- SaldoActual() -->Devuelve el saldo actual
*/

public class Prepago
{
private double SaldoDefault; //Cantidad de saldo por default
private static final double PASAJE=5.50; //Precio de un pasaje

public Prepago()
{
SaldoDefault=16.50;
}

public void pago()
{
if(SaldoDefault==0)
{
System.out.println("El saldo de la tarjeta se ha terminado!");
}
else
{
SaldoDefault=SaldoDefault-5.50;
}
}//Fin del método pago()

public double SaldoActual()
{
return SaldoDefault;
}

public static void main(String args[]) //Funcion principal
{
Prepago tarjeta1, tarjeta2, tarjeta3; //Objetos de la clase Prepago
tarjeta1=new Prepago();
tarjeta2=new Prepago();
tarjeta3=new Prepago();
//---------------------------
tarjeta1.pago(); //Un pago en la tarjeta 1, solo se le restará 5.50
tarjeta2.pago();
tarjeta2.pago();//Dos pagos en la tarjeta 2, se le restará 5.50+5.50=11
tarjeta3.pago();
tarjeta3.pago();
tarjeta3.pago();//Tres pagos en la tarjeta 3, el saldo de la tarjeta quedará en 0

System.out.printf("\n\n");

System.out.println("El saldo de la tarjeta 1 es: " + tarjeta1.SaldoActual()); //Para tarjeta 1
System.out.println("El saldo de la tarjeta 2 es: " + tarjeta2.SaldoActual()); //Para tarjeta 2
System.out.println("El saldo de la tarjeta 3 es: " + tarjeta3.SaldoActual()); //Para tarjeta 3
}//Fin de main
}//Fin de la clase Prepago










Acá les dejo la captura de pantalla del programa en la terminal:(Hacer click en la imagen para verla más grande) Cualquier corrección pueden ponerla en los comentarios. Saludos!