Diario de un programador. Día
184
Creando figuras en Java.
Al
igual que en su tiempo hicimos esto en Small Basic y luego en Python. Llegó el
momento de ver estas operaciones en Java. En esta ocasión, lo primero que se
hará será crear un círculo y un cuadrado.
Para
crear un crear un círculo, se utiliza el método drawOval y para crear un cuadrado se utiliza el método drawRect. Ambos métodos requieren de
cuatro argumentos, siendo los dos primeros los que indiquen la posición desde
donde se empezará a dibujar la figura y los otros dos sirven para dimensionar
la figura en su ancho y alto.
Como
ambos métodos son muy parecidos en su forma de programarse, vamos a mostrarlos
al mismo tiempo.
Al
igual que en el tutorial pasado, vamos a utilizar dos clases. La clase
principal se llamará Inicio y la otra se llamará Ventana. Estas clases
contendrán los mismos elementos que fueron utilizados en el tutorial anterior exceptuando los que
son utilizados para crear las líneas ya que en esta ocasión no las utilizaremos
(nos centraremos solamente en los círculos y cuadrados por el momento). La
clase Inicio, se mantendrá igual, sin cambios, pero de todas formas la voy a
escribir a continuación.
import javax.swing.JFrame;
public class Inicio{
public static void main(String []args){
Ventana panel = new Ventana();
JFrame marco = new JFrame();
marco.add(panel);
marco.setSize(250,250);
marco.setVisible(true);
marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
En la clase ventana voy a poner los
métodos correspondientes para crear un cuadrado y un círculo.
import javax.swing.JPanel;
import java.awt.Graphics;
public class Ventana extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(10,10,150,150);
g.drawOval(10,10,150,150);
}
}
Esto
creará un cuadrado y un círculo con las mismas coordenadas. Al ejecutar el
programa, esto se vería así:
Entonces,
para variar la forma y ubicación de las figuras, solamente habría que modificar
sus atributos.
Hay
muchas más figuras que se pueden crear, pero eso lo dejaremos para otro
tutorial. Antes de seguir avanzando quiero mencionar un tema que se mencionó
hace algún tiempo y que quedé con la deuda de explicar con un poco más de
detalle. Me refiero a los métodos static.
METODOS STATIC
Un
método static, también conocido como método de clase, es un método que no
depende del contenido de un objeto, sino más bien, es un método que depende de
su clase. Esto quiere decir que no hay que crear objetos para estos métodos
para poder usarlos, como cuando creamos un objeto con la palabra new. Por lo general, los métodos static se utilizan
para realizar tareas comunes que representan a sus clases. Al declarar un
método como static en una clase, se permite acceder de una forma
"casi" directa a ese método, pero solamente para realizar la función
que tiene ese método y no para manipular
sus atributos (variables). Esta es una de las diferencias que tienen los
métodos static de los no static.
Un
método static sólo puede llamar directamente a otros métodos static de la misma
clase
(es decir, usando el nombre del método por sí solo). Para acceder a los miembros no static de la clase, un método static debe usar una referencia a un objeto de esa clase. Los métodos no static se asocian con una instancia específica de la clase y pueden manipular las variables de instancia de ese objeto. Java no permite que un método static acceda directamente a los miembros no static de la misma clase.
(es decir, usando el nombre del método por sí solo). Para acceder a los miembros no static de la clase, un método static debe usar una referencia a un objeto de esa clase. Los métodos no static se asocian con una instancia específica de la clase y pueden manipular las variables de instancia de ese objeto. Java no permite que un método static acceda directamente a los miembros no static de la misma clase.
Para
utilizar o llamar a un método static, hay que escribir el nombre de la clase
seguido de un punto y el nombre del método. De esta forma:
nombreClase.nombreMetodo();
Por
ejemplo, la clase Math, posee muchos métodos static y para utilizarlos no es
necesario crear un objeto como dijimos antes, a diferencia de la clase Scanner
en la cual tenemos que crear un objeto con la palabra new. Volviendo a la clase
Math, el método Math.pow() permite calcular la potencia de un número, o el
método Math.sqrt(), permite calcular la raíz cuadrada. Por cierto, la clase
Math, es parte del paquete java.lang que se importa de manera implícita (o
automática), lo que significa que no hay necesidad de importarla para utilizar
sus métodos.
En
el siguiente ejemplo, se implementó un método static que calcula una potencia
sin utilizar el método Math, esto se logró con un método recursivo (que se
llama a sí mismo). En este caso el método al encontrarse en la misma clase, no
es necesario (aunque es posible) escribirlo mediante el nombre de la clase
seguido de un punto. Simplemente se llama por el nombre del método.
import java.util.Scanner;
public
class Ejercicios{
public static void main(String []args){
Scanner ingreso = new Scanner(System.in);
int a,b;
System.out.print("Base: ");
a = ingreso.nextInt();
System.out.print("Exponente:
");
b =
ingreso.nextInt();
//método potencia(a,b) se llamo sin el nombre de su clase
por encontrase
//dentro de la misma. Ejercicios.potencia(a,b) produce el
mismo resultado
System.out.println("Resultado: "+ potencia(a,b));
}//fin
main
//Metodo
static se implementa fuera del método main
public static int potencia(int base, int exp){
if (exp == 0)
return 1;
else
return base * potencia(base,exp - 1);
}//fin metodo
}//fin class
Si implementamos este mismo ejemplo en
una clase distinta, entonces en esa ocasión sí que hay que llamar al método por
el nombre de su clase seguido de un punto y el nombre del método.
Ejemplo de esa situación a
continuación:
//clase main
public
class Ejercicios{
public static void main(String []args){
Scanner ingreso = new Scanner(System.in);
int
a,b;
System.out.print("Base: ");
a = ingreso.nextInt();
System.out.print("Exponente:
");
b =
ingreso.nextInt();
//Se llama al método static mediante el nombre de su clase
seguido de un punto
//y luego el nombre del método
System.out.println("Resultado: "+ Metodos.potencia(a,b));
}//fin
main
}//fin class
//Clase creada en un archivo diferente
public
class Metodos{
public static int potencia(int base, int exp){
if (exp == 0)
return 1;
else
return base * potencia(base,exp - 1);
}//fin metodo
}//fin class
Como se mencionó antes, la clase Math,
proporciona varios métodos static, entre los cuales podemos destacar los
siguientes:
abs( x )
valor absoluto de x
ceil( x )
redondea x al entero más
pequeño que no sea menor de x
cos( x )
coseno trigonométrico de
exp( x ) método exponencial e
floor( x ) redondea x al entero más grande que no sea mayor de x
exp( x ) método exponencial e
floor( x ) redondea x al entero más grande que no sea mayor de x
log( x )
logaritmo natural de x
max( x,
y ) el valor más grande de x y
min( x,
y ) el valor más pequeño de x y
pow( x,
y ) x elevado a la potencia
sin( x )
seno trigonométrico de x
sqrt( x )
raíz cuadrada de x
tan( x ) tangente trigonométrica de x
Lo
siguiente es un extracto que saqué textual de la web.
¿Por qué el método main se declara como static?
Al declarar a main como
static, la Máquina Virtual de Java (JVM) puede invocar a main sin tener que
crear una instancia de la clase.
Esto es
todo por ahora. Saludos
Gustavo J. Cerda Nilo
Septiembre 2016, Octubre 2016
No hay comentarios:
Publicar un comentario