Objetos, Métodos y Constructores.




"Comenzaremos con una analogía simple, para ayudarle a comprender el concepto de las clases y su contenido. Suponga que desea conducir un automóvil y, para hacer que aumente su velocidad, debe presionar el pedal del acelerador. ¿Qué debe ocurrir antes de que pueda hacer esto? Bueno, antes de poder conducir un automóvil, alguien tiene que diseñarlo. Por lo general, un automóvil empieza en forma de dibujos de ingeniería, similares a los planos de construcción que se utilizan para diseñar una casa. Estos dibujos de ingeniería incluyen el diseño del pedal del acelerador, para que el automóvil aumente su velocidad. El pedal “oculta” los complejos mecanismos que se encargan de que el automóvil aumente su velocidad, de igual forma que el pedal del freno “oculta” los mecanismos que disminuyen la velocidad del automóvil y por otro lado, el volante “oculta” los mecanismos que hacen que el automóvil de vuelta. Esto permite que las personas con poco o nada de conocimiento acerca de cómo funcionan los motores puedan conducir un automóvil con facilidad.
Desafortunadamente, no puede conducir los dibujos de ingeniería de un auto. Antes de poder conducir un
automóvil, éste debe construirse a partir de los dibujos de ingeniería que lo describen. Un automóvil completo tendrá un pedal acelerador verdadero para hacer que aumente su velocidad, pero aún así no es sufi ciente; el automóvil no acelerará por su propia cuenta, así que el conductor debe oprimir el pedal del acelerador.
Ahora utilizaremos nuestro ejemplo del automóvil para introducir los conceptos clave de programación de esta sección. Para realizar una tarea en una aplicación se requiere un método. El método describe los mecanismos que se encargan de realizar sus tareas; y oculta al usuario las tareas complejas que realiza, de la misma forma que el pedal del acelerador de un automóvil oculta al conductor los complejos mecanismos para hacer que el automóvil vaya más rápido. En Java, empezamos por crear una unidad de aplicación llamada clase para alojar a un método,
así como los dibujos de ingeniería de un automóvil alojan el diseño del pedal del acelerador. En una clase se proporcionan uno o más métodos, los cuales están diseñados para realizar las tareas de esa clase. Por ejemplo, una clase que representa a una cuenta bancaria podría contener un método para depositar dinero en una cuenta, otro para retirar dinero de una cuenta y un tercero para solicitar el saldo actual de la cuenta.
Así como no podemos conducir un dibujo de ingeniería de un automóvil, tampoco podemos “conducir” una clase. De la misma forma que alguien tiene que construir un automóvil a partir de sus dibujos de ingeniería para poder conducirlo, también debemos construir un objeto de una clase para poder hacer que un programa realice las tareas que la clase le describe cómo realizar. Ésta es una de las razones por las cuales Java se conoce como un lenguaje de programación orientado a objetos. Cuando usted conduce un automóvil, si oprime el pedal del acelerador se envía un mensaje al automóvil para que realice una tarea-hacer que el automóvil vaya más rápido. De manera similar, se envían mensajes a un objeto; cada mensaje se conoce como la llamada a un método, e indica a un método del objeto que realice su tarea.
Hasta ahora, hemos utilizado la analogía del automóvil para introducir las clases, los objetos y los métodos. Además de las capacidades con las que cuenta un automóvil, también tiene muchos atributos como su color, el número de puertas, la cantidad de gasolina en su tanque, su velocidad actual y el total de kilómetros recorridos (es decir, la lectura de su odómetro). Al igual que las capacidades del automóvil, estos atributos se representan como parte del diseño en sus diagramas de ingeniería. Cuando usted conduce un automóvil, estos atributos siempre están asociados con él. Cada uno mantiene sus propios atributos. Por ejemplo, cada conductor sabe cuánta gasolina tiene
en su propio tanque, pero no cuánta hay en los tanques de otros automóviles. De manera similar, un objeto tiene atributos que lleva consigo cuando se utiliza en un programa. Éstos se especifican como parte de la clase del objeto. Por ejemplo, un objeto tipo cuenta bancaria tiene un atributo llamado saldo, el cual representa la cantidad de dinero en la cuenta. Cada objeto tipo cuenta bancaria conoce el saldo en la cuenta que representa, pero no los saldos de las otras cuentas en el banco. Los atributos se especifican mediante las variables de instancia de la clase.
"Extracto de Como programar en Java, deitel y deitel, octava edición"


Metodos

Existen dos tipos de métodos; los que tienen valor de retorno y los de tipo void.

Los métodos con tipo de retorno devuelven un valor al ser llamados dentro de una clase, sintaxis

int suma(int num1, int num2)
{
int resultado = num1+num2;
return resultado;
}

Debemos poner un tipo de valor (en este caso int) antes del nombre del método. seguido del nombre del método van ( paréntesis ) en los cuales se pueden poner ( o no ) argumentos los cuales vana ser manipulados al interior del mismo. Los tipos de valores de los argumentos deben ser exactamente iguales a los de la declaración del método. *en realidad y siendo extricto los tipos de datos d elos argumentos si se pueden mezclar pero recuerden que el retorno es uno solo
la sentencia final del método con tipo de valor de retorno es " return " que es la encargada de retornar un valor del mismo tipo de la declaración del tipo de método.

métodos sin tipo de retorno. Tambien podemos crear métodos sin tipo de retorno, estos son los void, al igual que el otro tipo, estos pueden o no llevar argumentos y al no devolver un valor simplemente se ejecutan las acciones del cuerpo.

void miMetodo()
{
System.out.println("llamaste a este método");


Al llamar al método  " miMetodo() " el resultado seria simplemente el mensaje especificado en su cuerpo
un metodo void con argumentos.

void miMetodo(String  nombre, String apellido)
{
System.out.println("Bienvenido a la programación Don :"+nombre +" "+apellido);
}

Lo cual devolvería:   Bienvenido a la programación Don -------  --------
*siendo estricto todos los métodos tienen valor de retorno, ya que void también es un tipo de retorno.

Cuando cambiamos los valores de variables de instancia (son las declaradas afuera de cualquier método  incluyendo el o main). en un método, estos nuevos valores solo se mantienen validos al interior del método a menos que sea una variable de tipo static.
*las variables declaradas como static (static int numero;) cambian sus valores reales desde cualquier lugar de una clase


EJ:


class EjemploMetodos
{
    //metodo con tipo de valor de retorno y argumentos
    int suma(int num, int num2)
    {
    int suma = num+num2;
    return suma;
    }
    //metodo con tipo de retorno void
    void mensaje(int num, int num2)
    {
    System.out.println("El valor de la suma es :"+(num+num2));
    }
 
    public static void main(String[]argumentos)
    {
    EjemploMetodos ini = new EjemploMetodos();
 
    System.out.println("La suma es :"+ini.suma(44, 12));
    ini.mensaje(10,15);//lamamos directamente al metodo void
 
    }//fin del main
}//fin de la clase



En el main, instanciamos la nuestra propia clase para poder llamar a los metodos desde su interior, ya que el método main al ser static solo permite llamar a otros metodos estáticos (static)  con la instanciacion eliminamos este problema.
llamamos al método suma a traves de la variable ini que creamos.  "ini.suma( )" y le pasamos dos argumentos de tipo int. el método realiza su tarea y devuelve un valor int que es la suma de los dos especificados.

*Es un error en tiempo de compilación especificar valores de otros tipos de datos a los solicitados por el método llamado.

*El método  println no permite poner en su interior métodos con valor de retorno void.

*Los metidos con tipo de valor de retorno, si no son usados en un mensaje deben pasarse como valor a otra variable ya que de lo contrario el retorno (un valor) queda sin contenedor.

*Es necesario que te familiarices con la vasta coleccion de clases de la api de Java, asi que evita inventarlo todo de nuevo, hay cerca de 6000 clases disponibles. http://docs.oracle.com/javase/6/docs/api/
*todas las clases  extienden de manera predeterminada del paquete java.lang que es el paquete padre de todo programa en java, es por eso que se pueden utilizar clases como String, Math, System... sin necesidad de importarlas.
*no se puede declarar un metodo dentro de otro.



Constructores 

Un constructor es una clase especial de método del cual podríamos diferenciarlos por:

1. Un constructor debe tener el mismo nombre de la clase en que se declara.

2. El constructor no tiene tipo de valor de retorno.

3. Los constructor no usa la sentencia return.


La labor del constructor es poner a los objetos de la clase en un estado consistente, es decir, el constructor inicializa las variables de clase y las pone en un estado correcto para ser utilizadas,
Cuando tenemos variables de clase y estas no han sido inicializadas con valores se produce un error en tiempo de ejecución, es por ello que el constructor se encarga de dicha tarea.
De manera predeterminada las variable de tipo primitivo se inicializan en 0, a excepcion de las booleanas que se establecen en false y las de tipo de referencia (cono un String) en null.

Los constructor se ejecutan de manera predeterminada cuando instanciamos una clase atraves de la palabra clave new. en caso de no especificar un constructor, el compilador establece un constructor sin argumentos para inicializar las variables y poder poner al programa de manera consistente en la memoria.

Java nos permite tener mas de un constructor por clase a través de la denominada "sobrecarga de constructores. Esto es diferenciar a los diferentes constructores solo por el numero y tipo de sus argumentos.
ej:

class Sobrecarga
{
 Sobrecarga(){
}//fin del constructor 1

Sobrecarga(int valor1){
}//fin del constructor 2

Sobrecarga(String nombre, int valor1){
}//fin del constructor 3

}//fin de la clase

Al instanciar nuestra clase Sobrecarga, podemos hacer la diferencia entre que constructor necesitamos utilizar dependiendo del numero de argumentos que le pasemos.

por ejemplo para ocupar el constructor 3:

Sobrecarga instancia = new Sobrecarga ("Pedro Gonzales",14); //el numero y orden de los argumentos
                                                                                                   debe ser el mismo que en la declaración
                                                                                                   del constructor.


Tambien es posible hacer que los diferentes constructores de una clase se comuniquen entre si, atraves de la palabra clave this.
la palabra clave this nos permite llamar a un constructor dentro de otro. ejemplo.



class Generalidades
{
    int numeroi;
    int numeroe;    //estas dos variables no las inicialize para que lo hagan los constructor
 
    Generalidades(int i, int e)          /*constructor de dos variables.
    {
    numeroi = i;                             * le damos los valores de los argumentos  i y e a las variables de instancia,                    
    numeroe = e;                           */inicializandolas.
    }
 
    Generalidades(int x)            /*segundo constructor con un solo argumento, este constructor
   {                                           *utiliza this para llamar al contructor de dos argumentos
    this(x, 0);                             *y le pasa el valor de X como primer argumento y establece el segundo
   }                                         */en un valor cualquiera
 
    void imprimir()
    {
        System.out.printf("valor de numeroi : %d\nvalor de numeroe : %d\n",numeroi, numeroe);
    }
 
    public static void main(String[]agrs)
    {
        Generalidades ini = new Generalidades(55);  /*llamamos al constructor de un solo argumento
        ini.imprimir();                                                *y le damos un solo valor, este lo establecen en su
                                                                            *En su variable X y se lo pasa atraves de this al
    }//fin del metodo main                                       * constructor de dos argumentos.
}// Fin de la clase




la salida de este programa es la sgte:


valor de numeroi : 55
valor de numeroe : 0
GENERACIÓN CORRECTA (total time: 0 seconds)

Como pueden comprobar a pesar de que llamamos en la instanciacion al contructor  de un argumento, en realidad llamamos al de dos.


4 comentarios:

  1. oye me puedes ayudar en un taller

    ResponderEliminar
  2. oye me puedes ayudar en un taller

    ResponderEliminar
  3. oye me puedes ayudar en un taller

    ResponderEliminar
  4. Esta muy buena la explicación me ayuda porque estoy comenzando a ver java,, espero me ayude en mi carrera..

    ResponderEliminar

Alguna consulta, dato, reclamo o donacion1313?