Foros del Web » Programación para mayores de 30 ;) » Java »

Alguien dispuesto a revisar codigo?

Estas en el tema de Alguien dispuesto a revisar codigo? en el foro de Java en Foros del Web. Me compre un libro sobre java hace unos dias y desde entonces ando dándole fuerte a esto. Acabo de crear mi primera aplicación de prueba ...
  #1 (permalink)  
Antiguo 10/02/2011, 09:27
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Alguien dispuesto a revisar codigo?

Me compre un libro sobre java hace unos dias y desde entonces ando dándole fuerte a esto.

Acabo de crear mi primera aplicación de prueba y funcionar funciona, pero no si si lo he realizado correctamente.

Ya se que lo que pido es una faena relativamente pesada así que si nadie esta dispuesto a hacerlo es comprensible y tampoco voy a mosquearme.

Lo que decía, he creado mi primera aplicación, esta tiene 3 calses
  • main
  • pantalla
  • verclientes

lo que no se es si lo he realizado correctamente o si he cometido una aberración a la programación orientada a objetos, eso es basicamente lo que quiero que se mire y se proponga la solución correcta (No creo que lo haya hecho correcto al 100% ni mucho menos)

clase main
Código java:
Ver original
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5.  
  6. public class Main {
  7.     public static void main(String[] args)
  8.     {
  9.         Connection conn = null;  
  10.         Statement  st   = null;  
  11.         ResultSet  rst1 = null;
  12.         try {  
  13.             // Cargamos el controlador JDBC  
  14.              Class.forName("org.hsqldb.jdbcDriver");
  15.             conn = DriverManager.getConnection("jdbc:hsqldb:file:/usuarios");  
  16.             try {  
  17.                 st  = conn.createStatement();  
  18.                 rst1 = st.executeQuery("SELECT * FROM empleados");  
  19.                 System.out.println("las tablas ya estan creadas");
  20.                 st.close();  
  21.                 conn.close();
  22.                 Pantalla ventana;
  23.                 ventana= new Pantalla();
  24.                 ventana.setVisible(true);
  25.             } catch (Exception ex){  
  26.                 System.out.println(ex);
  27.                 //crear las tablas ya que no existen
  28.             }  
  29.         } catch (Exception ex){  
  30.             System.err.println("Se pa producido un error al cargar el controlador JDBC");  
  31.             return;  
  32.         }
  33.        
  34.     }
  35. }

clase pantalla
Código java:
Ver original
  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.WindowAdapter;
  6. import java.awt.event.WindowEvent;
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9.  
  10. import javax.swing.BorderFactory;
  11. import javax.swing.JButton;
  12. import javax.swing.JFrame;
  13. import javax.swing.JMenu;
  14. import javax.swing.JMenuBar;
  15. import javax.swing.JMenuItem;
  16. import javax.swing.JPanel;
  17.  
  18.  
  19. public class Pantalla extends JFrame
  20. {
  21.     JPanel marco;
  22.     public Pantalla()
  23.     {
  24.         setBounds(500,300,400,300);
  25.         setTitle("Facturas mini");
  26.         setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  27.         addWindowListener (new WindowAdapter()
  28.         {
  29.             public void windowClosing(WindowEvent arg0)
  30.             {
  31.                 System.exit(0);
  32.             }
  33.         }
  34.         );
  35.        
  36.         JMenuBar barraMenu;
  37.         barraMenu=new JMenuBar();
  38.         SeleccionarMenubar sm=new SeleccionarMenubar();
  39.        
  40.        
  41.         JMenu clientes;
  42.         JMenuItem nuevoCliente,buscarCliente;
  43.         clientes=new JMenu("Clientes");
  44.        
  45.         buscarCliente = new JMenuItem("Buscar cliente");
  46.         buscarCliente.addActionListener(sm);
  47.         buscarCliente.setActionCommand("buscarcliente");
  48.         clientes.add(buscarCliente);
  49.         nuevoCliente = new JMenuItem("Nuevo cliente");
  50.         clientes.add(nuevoCliente);
  51.         barraMenu.add(clientes);
  52.        
  53.         getContentPane().add(barraMenu,BorderLayout.NORTH);
  54.         marco = new JPanel();
  55.         marco.setBackground(Color.GREEN);
  56.         getContentPane().add(marco,BorderLayout.CENTER);
  57.        
  58.     }
  59.    
  60.     public class SeleccionarMenubar implements ActionListener
  61.     {
  62.         @Override
  63.         public void actionPerformed(ActionEvent e)
  64.         {
  65.             String comando;
  66.             comando=e.getActionCommand();
  67.             if (comando.equals("buscarcliente")){
  68.                 getContentPane().remove(marco);
  69.                 try {
  70.                     marco=new Verclientes();
  71.                 } catch (SQLException e1) {
  72.                    
  73.                     e1.printStackTrace();
  74.                 }
  75.                 getContentPane().add(marco,BorderLayout.CENTER);
  76.                 marco.updateUI();
  77.             }      
  78.         }
  79.     }  
  80. }

clase verclientes
Código java:
Ver original
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.sql.Statement;
  6.  
  7.  
  8. import javax.swing.JPanel;
  9. import javax.swing.JTable;
  10. import javax.swing.table.DefaultTableModel;
  11.  
  12. public class Verclientes extends JPanel
  13. {
  14.     public Verclientes()throws SQLException
  15.     {
  16.         Connection conn2 = null;  
  17.         Statement  st2   = null;  
  18.         String     sql2  = null;
  19.         ResultSet  rst2 = null;
  20.        
  21.         try {  
  22.             // Cargamos el controlador JDBC  
  23.              Class.forName("org.hsqldb.jdbcDriver");  
  24.         } catch (Exception ex){  
  25.             System.err.println("Se pa producido un error al cargar el controlador JDBC");  
  26.             return;  
  27.         }  
  28.         conn2 = DriverManager.getConnection("jdbc:hsqldb:file:/usuarios");  
  29.         st2  = conn2.createStatement();  
  30.         rst2 = st2.executeQuery("SELECT * FROM empleados");  
  31.        
  32.        
  33.         DefaultTableModel modelo = new DefaultTableModel();
  34.         JTable tabla = new JTable(modelo);
  35.        
  36.        
  37.      // Creamos las columnas.
  38.         modelo.addColumn("id");
  39.         modelo.addColumn("nombre");
  40.         modelo.addColumn("nacimiento");
  41.  
  42.         // Bucle para cada resultado en la consulta
  43.         while (rst2.next())
  44.         {
  45.            // Se crea un array que será una de las filas de la tabla.
  46.            Object [] fila = new Object[3]; // Hay tres columnas en la tabla
  47.  
  48.            // Se rellena cada posición del array con una de las columnas de la tabla en base de datos.
  49.            for (int i=0;i<3;i++)
  50.               fila[i] = rst2.getObject(i+1); // El primer indice en rs es el 1, no el cero, por eso se suma 1.
  51.  
  52.            // Se añade al modelo la fila completa.
  53.            modelo.addRow(fila);
  54.         }
  55.         tabla = new JTable();
  56.         tabla.setModel(modelo);
  57.         add(tabla);
  58.         st2.close();  
  59.         conn2.close();
  60.        
  61.     }
  62. }
  #2 (permalink)  
Antiguo 10/02/2011, 11:16
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Alguien dispuesto a revisar codigo?

Para ver si hace lo que quieres, deberías primero decir que es lo que quieres xD
  #3 (permalink)  
Antiguo 10/02/2011, 11:18
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Alguien dispuesto a revisar codigo?

La primera burrada es anidar bloques try.
Se hace un único try.
Se incluyen tantos catch como errores distintos quieras manejar.

Busca por internet ejemplos de try-catch pq te veo hecho un lío
  #4 (permalink)  
Antiguo 10/02/2011, 11:33
Avatar de francopai  
Fecha de Ingreso: agosto-2008
Mensajes: 42
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Alguien dispuesto a revisar codigo?

Mi humilde aporte: una clase no se puede llamar "verClientes", una clase es una representacion de una entidad, gralmente es un sustantivo como: VisorDeClientes, Automovil, Inmueble, etc.
verCliente, hace referencia a un metodo, ya que es un verbo.

Espero que te sea de ayuda
Saludos
  #5 (permalink)  
Antiguo 10/02/2011, 11:33
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Alguien dispuesto a revisar codigo?

fuzzylog-gracias esos son los consejos que andaba buscando

heimish-no es ver si hace lo que quiero, lo que quiero lo hace perfectamente, lo que quiero que reviseis son las burradas que pueda haber cometidio como bien ha hecho fuzzylog o ya decir que el programa esta escrito correctamente
  #6 (permalink)  
Antiguo 10/02/2011, 11:36
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Alguien dispuesto a revisar codigo?

Cita:
Iniciado por francopai Ver Mensaje
Mi humilde aporte: una clase no se puede llamar "verClientes", una clase es una representacion de una entidad, gralmente es un sustantivo como: VisorDeClientes, Automovil, Inmueble, etc.
verCliente, hace referencia a un metodo, ya que es un verbo.

Espero que te sea de ayuda
Saludos
vale que lo que me quieres decir no es que tengo mal la clase en si, sino simplemente el nombre de la clase que tendria que ser VisorcClientes o CreadorClientes y ya si lo necesitara crearia un metodo dentro que se podria llamar verClientes o crearClientes.
he comprendido bien?
  #7 (permalink)  
Antiguo 10/02/2011, 12:06
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Alguien dispuesto a revisar codigo?

fuzzylog, de nuevo gracias

arreglado try/catch
Código java:
Ver original
  1. try {  
  2.             // Cargamos el controlador JDBC  
  3.             Class.forName("org.hsqldb.jdbcDriver");
  4.             conn = DriverManager.getConnection("jdbc:hsqldb:file:/usuarios");  
  5.             st  = conn.createStatement();  
  6.             rst1 = st.executeQuery("SELECT * FROM empleados");  
  7.             System.out.println("las tablas ya estan creadas");
  8.             st.close();  
  9.             conn.close();
  10.             Pantalla ventana;
  11.             ventana= new Pantalla();
  12.             ventana.setVisible(true);
  13.            
  14.         } catch (SQLException ex){
  15.             //System.out.println(ex);
  16.             System.out.println("Las base de datos no existe");  
  17.             System.out.println("Creando bases de datos");  
  18.             //codigo para crear bases de datos
  19.             return;  
  20.         }
  21.         catch (ClassNotFoundException ex){
  22.             //System.out.println(ex);
  23.             System.out .println("Se pa producido un error al cargar el controlador JDBC");  
  24.             return;  
  25.         }
  #8 (permalink)  
Antiguo 11/02/2011, 06:41
Avatar de francopai  
Fecha de Ingreso: agosto-2008
Mensajes: 42
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Alguien dispuesto a revisar codigo?

Si, asi es. Aqui te dejo un link para que te orientes un poco sobre nombres y demas asuntos.
http://java.sun.com/docs/books/jls/t...tml/j3TOC.html

Saludos
  #9 (permalink)  
Antiguo 12/02/2011, 08:53
 
Fecha de Ingreso: febrero-2011
Mensajes: 27
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Alguien dispuesto a revisar codigo?

Quizás te interese leerte algo sobre el principio de ocultación de la información, ahora es una aplicación pequeña hecha por ti pero cuando otra persona tenga que hacer uso de las clases que tú has generado te interesará evitar aliasing y que toquen atributos que no deben...
  #10 (permalink)  
Antiguo 12/02/2011, 16:09
(Desactivado)
 
Fecha de Ingreso: diciembre-2008
Ubicación: por ahi!!!
Mensajes: 113
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Alguien dispuesto a revisar codigo?

yo veo lo siguiente:
1- No existe un esquema de objetos de dominio. Por ej: cliente. (Aunque los atributos parecen mas de una persona que de cliente). No existe ninguno de los conceptos de POO. En un simple ABMC(CRUD) ya los podes aplicar.
2- No hay una separacion de la presentacion (Swing) con tu capa de manejo de BD(JDBC).
Para ver mejor esto deberias entender como maneja swing el modelo MVC.
3- Es cierto lo del try, catch que dijo juanito1712. Aunque para un mejor manejo seria que entiendas que es una excepcion chequeada y cual no.
4- Tenes codigo repetido para obtener la conexion de la BD.

Y yo agregaria utilizar algun plugin para verificar bugs como (FindBugs) y un checkstyle creo que
te aniquilaria.

Saludos.
  #11 (permalink)  
Antiguo 13/02/2011, 17:14
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Alguien dispuesto a revisar codigo?

megajandro:
juanito1712 soy yo :P eso es una modificacion que me sugirió fuzzylog.

Pero bueno tu post tiene mucho contenido y no entiendo nada de lo que me quieres hacer ver
es la primera vez que me meto en esto de programación orientada a objetos y el libro sobre el que me baso, me parecía muy bueno al comprarlo y me ha parecido muy pobre al terminarlo

si no te importase ir poco a poco...

1- No existe un esquema de objetos de dominio. Por ej: cliente. (Aunque los atributos parecen mas de una persona que de cliente). No existe ninguno de los conceptos de POO. En un simple ABMC(CRUD) ya los podes aplicar.

que es un esquema de objetos de dominio?
  #12 (permalink)  
Antiguo 14/02/2011, 01:34
 
Fecha de Ingreso: febrero-2011
Mensajes: 27
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Alguien dispuesto a revisar codigo?

Creo que lo que te quiere decir es que en ningún momento has creado una clase Persona o Cliente (Recuerda, nombres de clases empiezan en mayúsculas cada una de sus primeras letras de palabra), como sería lo lógico, está claro que eso funciona, si, pero si te fijas la consulta de la base de datos te devuelve en cada fila (conjunto de datos perteneciente a la misma entrada) un objeto, ¿no sería lógico que cada entrada de una misma tabla sea un objeto de la misma clase? Es decir, tu tabla Clientes tiene, por ejemplo 5 entradas (Filas distintas) de las cuales cada una tiene 5 columnas, o lo que es lo mismo, tienes cinco objetos Cliente de los cuales cada uno tiene 5 atributos... Quizás eso sería más lógico que construir un array de Object del cual extraes la información índice a índice. En general no debe darte miedo crear clases, al fin y al cabo son para eso, mejoran la extensibilidad y legibilidad del código, es más facil que cuando tengas que agregar, por ejemplo, a los clientes un campo nuevo, lo hagas tocando únicamente la clase Cliente. En resumen, utiliza los objetos y las ventajas que éstos te aportan!

No se si me he explicado lo más mínimo pero lo he intentado... :D
  #13 (permalink)  
Antiguo 14/02/2011, 07:17
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: Alguien dispuesto a revisar codigo?

explicarte , lohas hecho muy bien y creo que he entendido lo que quieres decir
ahora voy a ver si soy capaz de plasmarlo en el programa
gracias

Etiquetas: revisar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:04.