Curso Java. Volumen V : Argumentos, constructores y operadores

En este volumen os voy a explicar qué son los argumentos en Java y cómo se usan, también hablaremos de los constructores y de los principales operadores que nos podemos encontrar en Java.

Este artículo será más práctico que los anteriores que tenía sólo teoría, debemos ir poco a poco ya que sino programaremos sin saber qué es cada cosa, y al principio podremos «sobrevivir» pero cuando luego las cosas no salen…ahí está el problema.

Este va a ser de los últimos artículos de teoría pura y dura (necesitaremos uno más para hablar de los bucles) y a partir de aquí estaremos con ejemplos y con ejercicios diversos usando todo lo que hemos aprendido.

Argumentos

Representan un dato de un tipo determinado, declarado dentro de los paréntesis en el encabezamiento de un método, y alojado en la memoria.

  •  Contiene un valor.
  •  Se representa por un nombre.

Ejemplo de declaración de argumentos

public tipo_retornado nombreDelMetodo1 (tipo1 nombre1,
tipo2 nombre2)
{

}

Ejemplo de programa con datos

Cálculo de la media de tres notas.

La clase tendrá:

  •  Tres atributos enteros (las tres notas)
  •  Método para cambiar las notas: – Tres parámetros enteros (nuevos valores de las notas). – No retorna nada
  •  Método para hallar la media entera: retorna la media
  •  Método para hallar la media real: retorna la media

Este es el diagrama de clases que podría estar asociado a los requerimientos de el problema que se plantea:

Implementación

[java]public class Notas
{

//Atributos de la clase
private int nota1, nota2, nota3;

/** Pone los valores de las tres notas */
public void ponNotas (int n1, int n2, int n3)
{
nota1=n1;
nota2=n2;
nota3=n3;
}

/** Calcula la media real */
public double media()
{
return (nota1+nota2+nota3)/3.0;
}

/** Calcula la media entera */
public int mediaEntera()
{
return (nota1+nota2+nota3)/3;
}
}[/java]

Comentarios sobre el ejemplo:

  •  Argumentos de un método: datos que el método necesita.
  •  Valor de retorno de un método: respuesta.
  •  Operador de asignación : «=».
  •  Operador de suma: «+».
  •  Uso de paréntesis.
  •  Expresiones reales y enteras: conversiones automáticas.

¡Probad el cálculo como (nota1+nota2+nota3)*(1/3)!

Uso de un constructor

El ejemplo pone de manifiesto la necesidad de dar valor a los atributos

  •  Hemos creado ponNotas para ello
  •  Es una necesidad frecuente

El constructor:

  •  Es un método especial, usado al crear el objeto (con new) para dar valor a los atributos
  •  Sintaxis: método de nombre igual a la clase y en el que no se pone lo que retorna:
  •  Ventaja: al crear el objeto, el constructor nos obliga a poner las notas.

Operadores y expresiones

Las expresiones permiten transformar datos para obtener un resultado. Se construyen con operadores y operandos.

Operandos:

  •  Constantes literales.
  •  Datos simples (atributos, variables, o argumentos de tipos simples).
  •  Funciones (métodos que retornan un valor de un tipo simple).

Operadores más usuales:

Indican la operación a realizar en una expresión

  •  Dependen del tipo de dato
  •  Tienen unas reglas de precedencia
  •  El paréntesis altera la precedencia

Operadores aritméticos: operan con números, y dan como resultado números del mismo tipo.

Operadores relacionales: comparan dos números o caracteres y dan un resultado lógico.

Operadores lógicos: operan con valores lógicos y dan otro valor lógico.

Operador de asignación simple: copia un valor en una variable (=)

Otros operadores de asignación: opera con los operandos izquierdo y derecho y copia el resultado en el izquierdo.

Operador de concatenación: retorna la concatenación del operando izquierdo (String) con la conversión a String del operando derecho (+).

Ejemplo de uso de Operadores

Cálculo de valores resistivos en paralelo.

Diseño de la clase:

  • Atributos: las resistencias
  • Constructor que les da valor inicial
  • Un método que devuelve la resistencia equivalente

[java]public class Resistencias
{
private double r1, r2, r3; //Kohms

/** Constructor*/
public Resistencias(double res1, double res2, double res3)
{
r1=res1;
r2=res2;
r3=res3;
}

/** Calcula la resistencia equivalente a 3 resistencias en paralelo */
public double calculaResEquiv()
{ // Kohms
return 1/((1/r1)+(1/r2)+(1/r3));
}
}[/java]

Ejemplo: uso desde un programa principal (main).

Ahora podemos hacer una clase que usa un objeto de la clase anterior, para poder usar su operación:

[java]public class ResistenciasEnParalelo
{
public static void main(String[] args)
{
double r1=3.5; // Kohms
double r2=5.6; // Kohms
double r3=8.3; // Kohms
double reff; // Kohms
Resistencias res=new Resistencias(r1,r2,r3);

// alternativamente se podría hacer
// Resistencias res= new Resistencias(3.5,5.6,8.3);

reff=res.calculaResEquiv();
System.out.println
("Resist. en paralelo: "+r1+","+r2+","+r3);

System.out.println("Resistencia efectiva = "+reff);
}
}[/java]

Observaciones del ejemplo

  •  Creación de un objeto de la clase Resistencias: declaración+new.
  •  Creación de variables locales.
  •  Diferencias entre crear una variable y un objeto.
  •  Uso de un método.
  •  Concatenación.

Conversión de tipos

Compatibilidad de tipos: Java es un lenguaje con tipificación estricta..

  •  Los números son compatibles hacia «arriba» (promoción automática de tipos): es decir, el tipo destino tiene mayor cabida que el origen
  •  No son compatibles cosas de distinta naturaleza (p.e., números con char o boolean)
  •  También hay conversión automática al almacenar un literal en un byte o short (pero no en expresiones no literales).

Conversiones explicitas de tipos (cast)

Sintaxis

(tipo) exp

Hay que usarlas con precaución, porque hay truncamiento de la parte fraccionaria, y/o operación módulo. Por ejemplo:

[java]int i;
double d=3.4;
i= (int) d; // valor=3
byte b;
int j=1000;
b=(byte) j; // valor=-24[/java]

Hasta aquí finalizamos por hoy, el próximo artículo tratará sobre los distintos tipos de bucles en Java y luego nos pondremos a hacer ejercicios que es donde más se aprende.