Foro de elhacker.net

Programación => Java => Mensaje iniciado por: .hack// en 16 Mayo 2007, 19:26 pm



Título: Poner metodo fuera de una clase
Publicado por: .hack// en 16 Mayo 2007, 19:26 pm
Como me estoy iniciando en el lenguaje de java, no se como hacerle para poner un metodo, que este fuera de la clase, que dicho metodo haga unas operaciones y regrese el resultado en el main.

Para explicarme mejor, les pongo un ejemplo del problema que tengo que hacer:


Código:
/*Este programa calcula el salario semanal, y el bono navideño*/
import javax.swing.JOptionPane;

public class bononavidenio{
    public static void main ( String args[]){
        double salariosemanal;
        double bononavidenio;
        double pagoHora;
        String Nombre;
       
        Nombre = JOptionPane.showInputDialog("Introduce el nombre del trabajador:");
        PagoHora = Integer.parseInt(JOptionPane.showInputDialog("¿Cuál es el pago por hora?"));
    }
}

public static CalculodePago(h, pago, a){
    // aqui quiero que haga lo de el calculo de pago, y que se llame en el main.
}

Espero que me hayan entendido, porfa ayudenme en esto que no se como hacerlo.

Gracias y Saludos  ;)


Título: Re: Poner metodo fuera de una clase
Publicado por: Casidiablo en 16 Mayo 2007, 21:02 pm
No es posible... cuando declares un método, éste debe estar SIEMPRE dentro de una clase, recuerda que Java es un lenguaje de programación Orientado a Objetos[/u]. Lo único que puedes hacer entonces, es declarar otra clase por fuera de la principal, por ejemplo:

 (http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos)
Código:
/*Este programa calcula el salario semanal, y el bono navideño*/
import javax.swing.JOptionPane;

public class bononavidenio{
    public static void main ( String args[]){
        double salariosemanal;
        double bononavidenio;
        double pagoHora;
        String Nombre;
       
        Nombre = JOptionPane.showInputDialog("Introduce el nombre del trabajador:");
        PagoHora = Integer.parseInt(JOptionPane.showInputDialog("¿Cuál es el pago por hora?"));
JOptionPane.showMessageDialog("Blabla", "El pago es: "+ClaseExtrerna.CalculodePago(h, pago, a));
    }
}

public class ClaseExtrerna
{
public static CalculodePago(h, pago, a){
    // aqui quiero que haga lo de el calculo de pago, y que se llame en el main.
}
}



Aunque obviamente no lo he probado con tu programa, esa es la idea.


Título: Re: Poner metodo fuera de una clase
Publicado por: [Ph4nt0m] en 16 Mayo 2007, 23:09 pm
Como bien han comentado java es un LOO luego no es posible. Solo tengo una cosa que añadir a la contestación dada.

Utilizando una clase externa (pej: EstrategiaPago) tendriamos una gran ventaja y sería que en el momento que quisieras (por lo que sea) cambiar el algoritmo de pago valdría con cambiar dicha clase sin tocar nada más lo cual es mucho más mantenible.

Tradicionalmente si tienes comportamientos distintos en una clase suele ser bueno pensar si podría dividirse en más.



Título: Re: Poner metodo fuera de una clase
Publicado por: .hack// en 16 Mayo 2007, 23:24 pm
Gracias por responder casidiablo.

Hice lo que me dices, pero me sigue marcando un error, uso el netbeans.

Aqui el codigo de como lo puse y el error que me da:

Código:
/*Este programa calcula el salario semanal, y el bono navideño*/
import javax.swing.JOptionPane;

public class bononavidenio{
    public static void main ( String args[]){
        double salariosemanal;
        double bononavidenio;
        double pagohora;
        String Nombre;
        double h;
       
        Nombre = JOptionPane.showInputDialog("Introduce el nombre del trabajador:");
        pagohora = Integer.parseInt(JOptionPane.showInputDialog("¿Cuál es el pago por hora?"));
        h = Integer.parseInt(JOptionPane.showInputDialog("Cuantas horas trabajo?"));
        a = Integer.parseInt(JOptionPane.showInputDialog("Cual es la antiguedad del trabajador?"));
        JOptionPane.showMessageDialog("Blabla", "El pago es: "+calculodepago.CalculodePago(h, pagohora, a));
    }
}

public class calculodepago
{
public static double CalculodePago(h, pagohora, a)
{
    double salariosem;
    double salariototal;
   
    if (h>40)
    {
        salariosem = ((h-40)*1.5*pagohora)+40*pagohora;
    }
   
    else
    {
        salariosem = h*pagohora;
    }
   
    salariototal=salariosem+calculobono(a);
   
    return salariototal;   
}


public class calculodebono
{
    public static double calculobono(a)
    {
        double bono;
       
        if (a>=10)
        {
            bono=5000;
        }
       
        else {
            if (a>=5)
            {
                bono=2500;
            }
           
            else
            {
                bono=1250;
            }
        }
       
        return bono;
    }
}

errores

Código:
init:

deps-jar:

Compiling 1 source file to C:\Documents and Settings\hack\JavaApplication18\build\classes

C:\Documents and Settings\hack\JavaApplication18\src\javaapplication18\Main.java:22: <identifier> expected

public static double CalculodePago(h, pagohora, a)

C:\Documents and Settings\hack\JavaApplication18\src\javaapplication18\Main.java:43: ')' expected

public class calculodebono

C:\Documents and Settings\hack\JavaApplication18\src\javaapplication18\Main.java:45: <identifier> expected

    public static double calculobono(a)

C:\Documents and Settings\hack\JavaApplication18\src\javaapplication18\Main.java:68: ')' expected

}

C:\Documents and Settings\hack\JavaApplication18\src\javaapplication18\Main.java:68: '}' expected

}

5 errors

BUILD FAILED (total time: 0 seconds)

[Ph4nt0m] me podrias explicar mas a fonodo, me interesa, es que lo que pasa, es que tipico maestro que solo pone el problema y como lo quiere pero no lo explica, y esto no lo habia hecho antes
Saludos  ;)[/size][/font]


Título: Re: Poner metodo fuera de una clase
Publicado por: Casidiablo en 16 Mayo 2007, 23:56 pm
Cuando declares una función, y coloques los parametros de dicha fucnción, debes colocar el tipo de dato, por ejemplo:

public funcion(int entero, double doble)

Tu codigo quedaría mas o menos así:

Código:
/*Este programa calcula el salario semanal, y el bono navideño*/
import javax.swing.JOptionPane;

public class bononavidenio{
    public static void main ( String args[]){
        double salariosemanal;
        double bononavidenio;
        String Nombre;
        double h=0,a=0,pagohora=0;
       
        Nombre = JOptionPane.showInputDialog("Introduce el nombre del trabajador:");
        pagohora = Integer.parseInt(JOptionPane.showInputDialog("¿Cuál es el pago por hora?"));
        h = Integer.parseInt(JOptionPane.showInputDialog("Cuantas horas trabajo?"));
        a = Integer.parseInt(JOptionPane.showInputDialog("Cual es la antiguedad del trabajador?"));
        JOptionPane.showMessageDialog(null, "El pago es: "+calculodepago.calculoDePago(h, pagohora, a));
    }
}

class calculodepago
{
public static double calculoDePago(double h,double pagohora,double a)
{
    double salariosem;
    double salariototal;
   
    if (h>40)
    {
        salariosem = ((h-40)*1.5*pagohora)+40*pagohora;
    }
   
    else
    {
        salariosem = h*pagohora;
    }
   
    salariototal= salariosem + calculodebono.calculobono(a);
   
    return salariototal;   
}
}


class calculodebono
{
    public static double calculobono(double a)
    {
        double bono;
       
        if (a>=10)
        {
            bono=5000;
        }
       
        else {
            if (a>=5)
            {
                bono=2500;
            }
           
            else
            {
                bono=1250;
            }
        }
       
        return bono;
    }
}

Saludos!!!


Título: Re: Poner metodo fuera de una clase
Publicado por: .hack// en 17 Mayo 2007, 05:57 am
Muchisimas gracias casidiablo me has ayudado bastante.

Ahora ya se como hacerlo, solo me falta practicarlo para que no se me olvide.
Ya quedo listo, y hace lo que pide.

Nuevamente gracias.
Saludos  ;)