Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/08/2011, 23:04
Avatar de neoarcangel
neoarcangel
 
Fecha de Ingreso: enero-2005
Ubicación: España
Mensajes: 566
Antigüedad: 19 años, 3 meses
Puntos: 5
Duda acerca de formas de programar

Hola, a ver si consigo transmitir la idea sin que lleva a malinterpretaciones. Vereis soy relativamente nuevo en esto de programar en java, voy siguiendo tutos y aprendiendo poco a poco y queria comentaros algo acerca de la forma de programar. Yo provengo de programar en php con bases de datos y demas, y ahi yo por lo menos no usaba ni una clase ni media, me enseñaron a programar asi. Ahora me he pasado a java y todos son clases, pero esto no se si es o no determinante para programar de la siguiente forma.
Este codigo por ejemplo

Código PHP:
import java.awt.event.ActionEvent;
import java.net.*;
import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import org.omg.CORBA.PRIVATE_MEMBER;
//CLASE QUE CREA NUMEROS PRIMOS
//PARA USAR THREADS NECESITAMOS LA INTERFACE RUNNABLE

public class Threads extends JFrame implements RunnableActionListener
{
    
Thread ir;
    
JLabel etiquetaCuantos = new JLabel("Cantidad: ");
    
JTextField cuantos= new JTextField("250"10);
    
JButton botonmostrar = new JButton("Mostrar Primos");
    
JTextArea primos = new JTextArea(840);
    public 
Threads() {
        
super("Mostrar Numeros Primos");
        
setSize(400300);
        
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
BorderLayout diseno = new BorderLayout();
        
setLayout(diseno);
        
botonmostrar.addActionListener(this);
        
        
//CREAMOS PANELES
        //AÑADIMOS COMPONENTES AL PANEL
        
JPanel panelsuperior = new JPanel();
        
panelsuperior.add(etiquetaCuantos);
        
panelsuperior.add(cuantos);
        
panelsuperior.add(botonmostrar);
        
//AÑADIMOS PANEL
        
add(panelsuperiorBorderLayout.NORTH);
        
        
//PANEL INFERIOR
        //MUESTRA LOS NUMEROS EN DIFERENTES LINEAS CUANDO LLEGUEN AL FINAL
        
primos.setLineWrap(true);
        
//JPanel panelinferior = new JPanel();
        //BARRA DE SCROLL
        
JScrollPane panelscroll = new JScrollPane(primos);
       
// panelinferior.add(panelscroll);
       // panelinferior.add(primos);
        
add(panelscrollBorderLayout.CENTER);
    
    }

  
    public 
void actionPerformed(ActionEvent e) {
        
botonmostrar.setEnabled(false);
        if (
ir==null)
            {
ir = new Thread(this);
            
ir.start();

            }
    }


    public 
void run() {
      
int cantidad Integer.parseInt(cuantos.getText());
      
int numPrimos 0;
      
//candidato = numero que puede ser primo
      
int candidato 2;
      
primos.append("Primeros "cantidad " numeros primos\n     ");
        while (
numPrimos cantidad)
        { if (
esPrimo(candidato))
            {
primos.append(candidato ", ");
                
numPrimos++;  
            }
            
candidato++;            
            
        }
    }
    
    public static 
boolean esPrimo(int comprobarnumero)
    {
double raiz Math.sqrt(comprobarnumero);
        for (
int i 2<=raizi++) {
            if (
comprobarnumero ==0)
            {return 
false;}
        }
        return 
true;
    }
    
    
    
    
    
    public static 
void main(String[] args) {
        
Threads marco = new Threads();
        
marco.setVisible(true);
    }
    
    
    

Es relativamente pequeño pero viene mas o menos a ilustrar lo que quiero comentar, según el codigo, aparte de que por temas de interfaz tienes que crearlas, divide el contenido de codigo como en partes, para luego ir llamando a esas partes en otras partes, por ejemplo en la funcion run, hay una parte de codigo que llama a la funcion esPrimo, que es otra funcion, a mi por lo menos....aunque igual es la forma correcta, esa forma de programar me confunde, me cuesta mas verlo asi, yo programaria lo mismo pero dentro de la funcion run, no lo iria dividiendo como en pequeñas funciones y entonces pregunto

¿cual es la forma correcta de programar?¿Cual os parece mas facil por partes o el codigo entero?....y por cierto en cuanto al codigo que he puesto....¿Como lo veis para lo que realmente hace?¿se podria hacer de algún modo mas simple o creeis que lo ha complicado mucho?(el codigo no es mio, es de un tuto). Nada mas.
Gracias.
__________________
Mi equipo

Gigabyte GA-MA770T-UD3P Socket AM3|OZC StealthxStream 600 w | Gigabyte Radeon HD 4770 512MB GDDR5| AMD Phenom II 945 X4 Quad Core 3.0Ghz| Memoria Kingston 6GB DDR3 1333