Empezar con java y mi primer programa

Gente como les va, les comento que quiero empezar a programar y he decidido hacerlo con java, he estado leyendo bastante sobre el lenguaje y además viendo varios videotutoriales, quisisera hacer mi primer porgrama algo facil para empezar, la idea es poder llevar un control del ingreso y egreso de dinero personal, llevar los gastos que tengo mensualmente para luego hacer calculos con los mismos, tengo una idea de como hacer el programa pero lo que no tengo en claro es como voy a ir guardando la información de los distintos ingresos de dinero y egresos (gastos), en varias variables creo que no, en arrays?, en base de datos es complejo para empezar creo yo, si me pueden dar una mano, algun consejo de que estructura usar se los agredeceria, saludos......

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Jose Manuel

Pues Bienvenido

Podrias ir empezando por leer un post que a mi me ayudo mucho, Como pasar del problema al código .

Y pues bueno que bien que empieces en Java, y con lo de tu duda, puedes usar varias cosas que vienen en la API de Java: List, ArrayList o LinkedList.
Dependerá de tu perspectiva del programa, osea como seria mas eficiente y mas cómodo para ti, que al fin de cuentas el producto sera para ti.
Analiza el post de OscarRyz y plasmalo como te lo aconseja, muchas dudas podrían desaparecer y tu estarás mas preparado para lo que siga.

Si tengo algo de tiempo mañana, nos ponemos a darle al programa y le avanzamos.
Saludos.

Gracias por el tiempo y las ideas

Jose Manuel muchas gracias por tomarte el tiempo de responderme y aconsejarme, voy a leer ese post que me decis e ir haciendo anotaciones paso a paso, tambien te digo que estuve viendo un poco las estructuras de java para esto y hay varias e interesantes como dices, ahora mas alla de las mismas entiendo que debo guardar los datos en una base de datos pero mis conocimientos son muy basicos y me han a aconsejado empezar con registros para mas adelante migrar Base de Datos, voy a seguir investigando y con mas teoria sobre esto, gracias y saludos......

Imagen de Jose Manuel

Bueno y porque no mientras

Bueno y porque no mientras seleccionamos un tipo de almacenamiento para tus datos no posteas como a quedado tu idea general del desarrollo del programa.

Digo, para que veamos una idea mas estructurada. Y a partir de allí, nos ponemos a darle. Así ya vemos que es lo que tenemos y que es lo que nos falta.
Saludos.

Surgieron dudas

Jose Manuel estuve analizando el post de OscarRyz y despues de anotar y ver mi problema surgieron otras dudas, voy a necesitar un poco de tiempo para pasar en limpio algunas idea y las forma en que voy a encarar determinadas cuestiones, una vez que tenga casi todo visto hare un post y seguiremos adelante, gracias por el apoyo y un poco de paciencia, soy novato novato

Imagen de Jose Manuel

Como prefieras, pero

Como prefieras, pero también podrías comentarnos que dudas te surgieron y así tratar de solucionarlas, no soy un experto ni nada pero, aquí, si los hay y si nos atoramos en algo pues les pedimos ayuda y ya veríamos.
Que surjan dudas es (aunque no lo creas) de lo mejor, pues al solucionarlas se aprende mas y mejor.

Hora si como quien dice, si tienes dudas de postear tus dudas, no dudes y postealas jeje.
Saludos.

Estoy medio trabado, alguna idea

Jose Manuel, estuve haciendo algunas anotaciones y estoy algo trabado, no voy para adelante ni para atras, jajajaj la idea es llevar el control del dinero que entra, que esn este caso la fuente de mis ingresos son 2 trabajos, por otro lado tambien llevaria el control del dinero que sale de los distintos gastos que son varios, luz, agua, tv, telefono, almacen, farmacia, deporte, gastos varios, nafta, obra social, municipales, kiosko, etc, son varios pero seria un numero finito. Tambien me he dado cuenta que podria crear una clase que abarcaria tanto los ingresos como los egresos ya que todos ellos tienen los mismos atributos y metodos para implementar los cuales serian, la fecha en que se lleva la operación ya sea de algun ingreso o gasto, la identifacación, en el caso de los ingresos son 2 y de los gastos todos los nombrados arriba, el importe de cada operacion y no se si es necesario por ahora o mas adelante un detalle que puede ser ingresado o no, no seria tan importante. Luego cada ingreso y los distintos gastos serian guardados en arreglos individuales para cada ingreso y cada gasto para luego poder sumarlos y mostrar los totales de cada cosa, el control creo que se haria mensualmente, para mas adelante mejorar el codigo y poder hacer comparacion de mes a mes, ya me estoy complicando aca pero bueno seguro iran aparareciendo otras ideas otras cosas por hacer, no se que te parece lo expuesto, estoy errado? alguna ayuda, algo que me estoy olvidando de contemplar, gracias y sigo llenendo y haciendo anotaciones, saludos....

Itera rmc, itera Es más

Itera rmc, itera

Es más fácil, si divides un programa grande en varias iteraciones donde en cada una hagas alguna parte que te parezca importante.

Aplicando lo de los cuatro pasos tendrias:

Paso 1.- Lee el problema y entiéndelo ( hasta que todo este claro )
Bueno básicamente tienes que registrar ingresos y egresos.
Paso 2.- Identificar variables y funciones
variables
saldo
ingreso
egreso
funciones
muestraSaldo()
registraIngreso()
registraEgreso()
persistirInformacion()

Paso 3.- Escribir paso a paso como se resuelve el problema ( escribir el algoritmo o pseudo-código )

Vamos a suponer que queremos una aplicacion gráfica, empezaríamos así:

 

Por absurdo que parezca, este sería un muy buen inicio que te llevaría del absoluto 0 a algo tangible. Puedes trabajar en este nivel hasta que estés satisfecho y puedas/quieras meterle más funcionalidad, lo que tienes que hacer es aplicar el mismo método y crear más variables y funciones.

Si notas, hay varias funciones auxiliares, como "crearBoton()" y "obtenerSaldoInicial" y seguirán saliendo varias más. Cuando no sepas como resolver algo, crea una funcion auxiliar y pretende que ya lo hace. Luego evencualmente esa funcion hará algo realmente y tu programa funcionará.

Paso 4. - Escribir el código!!

Como el pseudo código fue algo simple, el código en Java también es algo simple. La idea es ir atacando por partes. Cuando te atores puedes preguntar por una de esas partes y es mucho más fácil decirte como mostrar un botón que como hacer un programa que haga el balance de tu cartera.

Voy a traducir linea por linea y metiendo cosas especificas de Java. Hay que notar que la estructura será la misma por que ya tengo mi psudocodigo.

 

En este punto el código no hace ( aparentemente ) absolutamente nada, pero al menos es tu pseudo-codigo totalmente compilable. Si te fijas, es casi identico al pseudo-codigo ( en parte por que yo medio ya sé como va a lucir, y en parte por que no hace muchas cosas especificas de Java aún ) Pero , de nuevo , lo importante, ¡es que ya no está solo en tu imaginación, ya es un programa que compila!

La parte del "new ActionListener" etc. etc, es algo que yo ya sabía que tenía que poner, pero , como te decía es más fácil preguntar y obtener una respuesta concreata a una pregunta como:

"Como hago que cuando el usuario de click en un boton, ejecute una funcion"

O para preguntas como "¿Como muestro una pantalla en Java?¿Como leo un númeor? etc. etc.

Que preguntar por como hacer un programa completo.

Acá te va el programa con el resto del código:

 

De aquí en adelante es ir repitiendo el proceso. Preguntarse que nuevas variables/funciones agregar, estructurarlas en un pseudo-codigo y luego investigar como cada una de esas partes de puede ir traduciendo a Java.

Para las siguiente iteraciones puedes hacer lo siguiente:

  • Persistir el saldo, puedes usar una base de datos, o simplemente escribir y leer de un archivo.
  • Presentar la informacion en una tabla
  • Aumentar las variables de ingreso y egreso para que tengan fecha y concepto
  • Persistir cada movimiento // básicamente solo tienes que persistir la lista donde los guardes
  • Agregar validaciones
  • Eventualmente poner una base de datos
  • Separar mensualmente
  • Soportar tags
  • Etc. etc. etc

Cada una de esas iteraciones muestra algo que le agrega valor a tu aplicación. Cada iteración puede ser de algunos días o de un par de horas. Lo importante es que tengas cosas concretas que preguntar y no cosas que sean demasiado abstractas.

Espero que esto te sirva.

Imagen de Jose Manuel

Si aun no lo entiendes rmc,

Si aun no lo entiendes rmc, comenta tus dudas, yo veo muy bien la explicacion de Oscar, aunque a la mejor aun no es necesario que se hable de GUI.
Pienso que lo mejor es que entiendas bien el procedimiento, despues podemos ir haciendolo mas agradable a la vista. Haber si mañana me pongo y realizo otra forma de atacar el problema u otra explicacion de resolucion de problemas.

Gracias Oscar voy entendiendo

Oscar muy buena la explicación que me has dado, estaba medio parado y no sabia por donde empezar, es dificil por ahi llevar las ideas al papel o darle forma pero de a poco voy entendiendo, baje varios libros y manuales para leer, estoy en eso, tambien me compre el libro de Deitel asique estoy haciendo varias cosas a la vez, y leyendo bastante, voy a agregar algunas cosas mas al codigo que formulaste y tratare de codificarlo en java y ver si corre, si bien por ahi no importa tanto lo visual como dice Jose Manuel veo que java tiene opciones faciles y rapidas para mostrar algun que otro cartelito lindo a la vista, gracias y saludos a los dos espero pronto poner codigo hecho por mi para que vean el avance y que sus ayudas sirvieron, saludos....

Oscar y Jose Manuel otra ayuda

Les paso el pseudocodigo que mas o menos pude elaborar de cuales serian los pasos a seguir del programa, faltan cosas pero bueno es para que lo vean y den sus opiniones.

 
Esa seria la logica del programa, por supuesto falta el tema de guardar los datos en el disco rigido para despues recuperarlos.

Una cosas que no me doy cuenta es que nercesitaria usar creo yo dos clases distintas de objetos; una donde corra la logica principal y otra serian los objetos Ingreso Egresos.

No me doy cuenta si hacer una sola clase donde contenga todos los ingresos y egresos ya que tienen los mismo atributos y metodos o hacer una clase padre IngresoEgreso y que de esta deriven dos clases hijas Ingresos por un lado y Egresos por el otro.

Ademas tampoco me doy cuenta de que manera distinguir los ingresos que en este caso son 2 para los ingresos (RComp y RNet) y los egresos que son un poco mas (Luz, Agua, Gas, Municipalidad, Deporte, Almacen, Kiosko, Avicola, Obra Social, Nafta, etc); no logro darme cuanta como manejar esto ya que lo que se carga de cada uno de ellos es la fecha en que fue la operacion ya sea Ingreso o Egreso y el monto de la misma.

Gracias y sepan tener paciencia para este novato, saludos...

La estructura me parece

La estructura me parece excelente. Quizá la unica cosa que puedes mejorar, es, en vez de crear una fucion por movimiento, puedes crear una sola y parametrizarla.

 

Y así poder llamar:
 


"No me doy cuenta si hacer una sola clase donde contenga todos los ingresos y egresos ya que tienen los mismo atributos y metodos o hacer una clase padre IngresoEgreso y que de esta deriven dos clases hijas Ingresos por un lado y Egresos por el otro."

Un criterio que puedes tomar para crear subclases es el siguiente:

"
....Cuando lo que cambia son los datos, lo que necesitas es parametrizar la clase, cuando lo que cambia es el comportamiento necesitas una subclase....
"

Lee y relee y vuelve a leer este parrafo hasta que lo entiendas al 100%. Esta es ( una de ) la(s) base de la programación orientada a objetos.

A mi me parece que solo necesitarías para todos los movimientos, donde lo único que cambia, son los datos de esos movimientos:

 

Entonces, ya aterrizando esto un poco más hacia el código, puedes tener dos funciones:

 
Y modelar el resto de tu programa en base a estas dos funciones:

 
Entonces, tendrías dos clases hasta ahora. 1. La clase principal, 2. La clase de datos: "Movimiento"

Cuando necesitas una especialización en el comportamiento ( es decir, cuando no son los datos lo único que cambia ) entonces, necesitas una subclase. Eso es el famoso polimorfismo, pero luego hablamos de él.

A mi me parece que vas por muy buen camino.

Espero que te sirva.

p.d. Modifique el formato de tu post. Fijate en usar los tags "code" para darle formato ( ve el codigo en "editar" ) También recuerda que es más fácil de leer un texto si utilizas varios parrafos, en vez de escribirlo todo en uno solo ;)