Anuncios

Bienvenidos sean a este post, hoy pondremos en practica algunas de las cosas que platicamos en el post anterior como son el this, los modificadores y el tema de los metodos estaticos.

Anuncios

Para comenzar vamos a crear un nuevo proyecto con las siguientes caracteristicas:

  • Dispositivos: Phone and Tablet
  • Actividad: Empty Activity
  • Nombre: Encapsulacion a full (pueden usar otro no es obligatorio)
  • Nombre de paquete: org.example.encapsulacion
  • API Minimo: API 14 (Android 4.0)
Anuncios

Con nuestro proyecto generado vamos a crear una nueva clase dentro de los contenedores de las clases de Java, para ello click con el boton derecho sobre Java -> org.example.encapsulacion y seleccionan New -> Java class, en el nuevo cuadro completan:

  • Nombre: NaveAlien
  • Tipo: Class
Anuncios

Una vez completo presionen Enter para generar nuestra nueva clase, una vez creada modificaremos el codigo de la misma por el siguiente:

NaveAlien.java

package org.example.encapsulacion;

import android.util.Log;

public class NaveAlien {

    private static int numNaves;
    private int fuerzaEscudo;
    public String nombreNave;

    public NaveAlien(){
        numNaves++;
        this.setFuerzaEscudo(100);
    }

    public static int getNumNaves(){
        return numNaves;
    }

    private void setFuerzaEscudo(int f){
        this.fuerzaEscudo = f;
    }

    public int getFuerzaEscudo(){
        return this.fuerzaEscudo;
    }

    public void impactoDetectado(){
        fuerzaEscudo -= 25;
        Log.i("Encapsulacion ","Bam!!");
        if (fuerzaEscudo==0){
            destruirNave();
        }
    }

    private void destruirNave(){
        numNaves--;
        Log.i("Encapsulacion ", this.nombreNave + " fue destruida");
    }
}
Anuncios
Anuncios

Esta es una clase simple donde crearemos a cada una de nuestra naves alienigenas, al igual como sucedia con Soldado, donde tendremos cada uno de los componentes de las mismas. Comencemos con las tres variables, la primera sera privada y de tipo estatica donde almacenaremos la cantidad de naves, despues veremos la particularidad de ser estatica, la segunda tambien privada se encargara de controlar la fuerza del escudo y la ultima de tipo publica sera la que guarde el nombre de la nave, a continuacion tendremos los siguientes metodos:

Anuncios
  • NaveAlien, sera nuestro constructor el cual incrementara a numNaves por cada nuevo objeto que creemos en el juego y tambien establecera el escudo de cada uno de ellas
  • getNumNaves, nos devolvera la cantidad de naves existentes en el juego
  • setFuerzaEscudo, es la funcion encargada de establecer el escudo si observan es de tipo privada, esto esta hecho para que pueda ser unicamente usada por la clase (en este caso el constructor)
  • getFuerzaEscudo, es el encargado de devolvernos el valor de fuerzaEscudo de la instancia solicitada
  • impactoDetectado, es el encargado de detectar los impactos en las naves, resta en 25 el valor de fuerzaEscudo y chequea si este es igual a 0, en caso de ser verdadero llama a destruirNave, tambien muestra cada impacto en el log
  • destruirNave, esta se encarga de restar una nave a numNaves y mostrar en el log cual fue destruida
Anuncios
Anuncios

Primera curiosidad de esta clase, la variable numNaves es static y esto porque? Simple, cuando le decimos que es static el valor de esta variable sera siempre el mismo para todas los objetos creados a partir de esta, hasta ahora siempre que hablamos de las clases y objetos dijimos que cada objeto tiene su espacio en memoria con sus valores y metodos pero nosotros para esta variable necesitamos que sea la misma para todos y no que cada objeto tenga un valor distinto, por ejemplo a medida que crearamos mas naves estas nunca se incrementarian en numNaves sino que siempre sera igual a 1 y no nos reflejaria la verdad, despues en varias oportunidades usamos a this seguida de la variable fuerzaEscudo, esto es para decirle al programa que modifique el valor de ese objeto o instancia solamente, con esto tenemos nuestra clase cubierta pero ahora pasaremos a modificar a MainActivity con el siguiente codigo:

MainActivity.java

package org.example.encapsulacion;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        NaveAlien yamato = new NaveAlien();
        NaveAlien bebop = new NaveAlien();

        Log.i("Encapsulacion","numNaves: " + NaveAlien.getNumNaves());

        yamato.nombreNave = "Yamato";
        bebop.nombreNave = "bebop";

        Log.i("Encapsulacion",yamato.nombreNave + ": " + yamato.getFuerzaEscudo());
        Log.i("Encapsulacion",bebop.nombreNave + ": " + bebop.getFuerzaEscudo());

        bebop.impactoDetectado();

        Log.i("Encapsulacion",yamato.nombreNave + ": " + yamato.getFuerzaEscudo());
        Log.i("Encapsulacion",bebop.nombreNave + ": " + bebop.getFuerzaEscudo());

        for(int i=0; i<3; i++)
            yamato.impactoDetectado();

        Log.i("Encapsulacion",yamato.nombreNave + ": " + yamato.getFuerzaEscudo());
        Log.i("Encapsulacion",bebop.nombreNave + ": " + bebop.getFuerzaEscudo());

        yamato.impactoDetectado();

        Log.i("Encapsulacion",yamato.nombreNave + ": " + yamato.getFuerzaEscudo());
        Log.i("Encapsulacion",bebop.nombreNave + ": " + bebop.getFuerzaEscudo());

        Log.i("Encapsulacion","numNaves: " + NaveAlien.getNumNaves());

    }
}
Anuncios
Anuncios

En este codigo primero crearemos dos naves (yamato y bebop) de la clase NaveAlien, la siguiente linea mostrara el total de naves en nuestro espacio, despues asignaremos los valores de nombres para nuestras naves, las siguientes lineas nos mostraran los valores de los escudos de las naves, usamos un impactoDetectado para atacar a bebop, volvemos a mostrar los escudos, y despues por medio de un ciclo for le damos tres impactos a yamato, volvemos a mostrar los valores y damos un ultimo golpe a yamato, volvemos a mostrar los valores de escudo de las naves y por ultimo la cantidad de naves, si lo compilamos y probamos veremos una salida como esta

Anuncios

En esta imagen podemos ver como nuestro log hizo todo lo dicho anteriormente, nos mostro la cantidad de naves en nuestro espacio, los valores, el primer impacto (bam!), los nuevos valores, los tres impactos, los nuevos valores, el nuevo impacto y nos notifico cual fue destruida, muestra los valores y cual es la cantidad final.

Anuncios

En este caso funciono correctamente porque gracias al this pudimos decirle cuales eran las variables de cual objeto sin que estas interfieran con las otras, tambien hemos visto lo bueno de haber usado el static para la cantidad de naves y como sacarle provecho por medio de for para hacer varios impactos, tambien hemos visto como pudimos restringir el acceso a determinadas partes del codigo para nuestra conveniencia.

Anuncios

En resumen, hoy hemos puesto en practica parte de lo hablado en el post anterior, tanto modificadores de acceso, como getter and setter, el uso del this y como es fundamental para poder trabajar con los objetos o instancias creadas a partir de cada clase, y tambien como podemos beneficiarnos con el uso de la palabra static para mantener un valor en comun por medio de todos los objetos creados a traves de la clase, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00