domingo, 2 de mayo de 2010

Paso de Parametros de una función

Generalmente existen dos tipos de pasos de parámetros, Por Valor y Por Referencia.

Para los pasos por Valor, se crea una copia del parametro sobre el cual trabaja la función, por lo que cualquier cambio que hagamos al parámetro este cambio no se verá reflejado fuera de la función.

Para los pasos por Referencia, el parámetro dentro de la función copia la referencia de la variable (parametro real) que ha sido enviada por medio de este parametro (parametro formal) por lo que cualquier cambio del valor del parametro dentro de la función afectaría al valor de la variable original por lo que se ve reflejado desde fuera de la función.

Para el caso de Java, las variables de tipos de datos primitivos pasan por Valor, miestras que las varibles tipo objeto pasan por referencia.

Cuando se pasan Objetos, realmente pasa por valor su referencia, en el grafico a continuación se representa la referencia como una flecha, la variable A almacena una referencia al objeto, en este caso de clase Imaginario.


Si se crea una función en la cual tenemos un parametro llamado pA, y enviamos el objeto A, el parametro pA copia la referencia que se encuentra almacenada en A, es decir en este instante los dos elementos pA y A hacen referencia al mismo objeto, gracias a esto si desde pA se cambia el valor de algun atributo del objeto es decir ParteReal o ParteImaginaria el cambio se refleja hacia el exterior de la función, similar a un paso por referencia.



Pero, si se crea un nuevo objeto y se le asigna a pA, la variable A mantiene la referencia sin cambiar (paso por valor) en el exterior de la función, porque si bien es cierto pasa la referencia, pero esta referencia es pasada por valor, los cambios del objeto completo no se pueden llevar a cabo, ya que crearía una nueva referencia al objeto nuevo.


Por este motivo en varios sitios se indica que realmente para JAVA solo existe paso por varlor, ahora si lo que pasa es un valor ya sea numérico o cadena o lo que pasa es el valor de una referencia (en C++ llamado puntero) siempre es por valor.

lunes, 22 de febrero de 2010

JAVA

Lenguaje de Programación Orientado a Objetos desarrollado por Sun Microsystems, toma la mucha de la sintaxis del lenguande de programación C++, pero simplifica el modelo de objetos y elimina el uso de punteros por lo cual minimiza el error de los programadores.

Para JAVA existen dos grandes grupos de tipos de dato:
  • Los Tipo de datos Primitivos:
    boolean:
    es decir, valores que pueden ser verdaderos o falsos
    char: los caracteres son de 16 bit y están codificados en Unicode 1.1.5; en los demás lenguajes son ASCII solamente de 8 bit.
    byte: enteros de 8 bit con signo, es decir, número entre menos (dos a la séptima) y dos a la octava.
    short: enteros de 16 bit con signo.
    int: enteros de 32 bit con signo.
    long: enteros de 64 bit con signo.
    float: reales de 32 bit con coma móvil (IEEE 754-1985).
    double: reales de 32 bit con coma móvil (IEEE 754-1985).
  • Las Clases:
    Son los elementos más importantes para JAVA, se crean por medio de la palabra reservada CLASS:
    public class Imaginario{
         //Propiedades
          public float parteReal;
          public float parteImag;

         //Constructor
          public Imaginario()
            {
              parteReal=0.0;
              parteImag=0.0;
            }
        //Metodos
         public void Suma(Imaginario &B)
         {
           parteReal+=B.parteReal;
           parteImag+=B.parteImag;
        }
    }
  • para poder crear objetos de una clase se debe usar la palabra reservada new:
    Imaginario A=new Imaginario();
    Imaginario B=new Imaginario();
    la palabra reservada new, crea una instancia de la clase en memoria y llama al constructor de la clase.
  • Si bien es cierto que existe new, a diferencia del C++ no existe delete, para dejar de usar un objeto y liberarlo de la memoria se le asigna el valor null.
    A=null;
    B=null;
  • al usar null, la memoria no es liberada en ese instante, java cuenta con un recolector de memoria (garbage collector) el cual analiza las zonas de memoria asignadas por new y libera la memoria si no existen objetos que hagan referencia a ellas. se puede crear un método llamado finalize, similara a un destructor, este será llamado por el recolector de memoria antes de liberar la memoria.