Herencia, clases abstractas…

<<Preliminar>>

Para la materia de Optativa II estamos viendo los procesos de desarrollo de software. Por necesario y global no podemos dejar de lado el proceso unificado debido a la importancia bestial de la POO. Es por ello que para entrar en materia, una vez más trabajamos con el juego de serpientes y escaleras.

Nos adelantamos un poco y empezamos a programar la clase Dado.

La idea es hacer la aplicación en consola en Java, y pues pensando en el futuro próximo en una de escritorio , web, o móvil. Entonces nuestro primer diagrama de clases preliminar es así:

…(luego detallamos…)

Vamos a crear un proyecto nuevo en Netbeans.

Elegimos un nuevo proyecto.

Y Java Class Library, y damos click en el botón Next.

Damos un nombre y click en el botón Finish.

Al proyecto se le agrega un paquete, esto es para organizar las clases de acuerdo a categorías.

En este caso vamos a poner utags.utilities.random, ya proyectaremos después usar alguna clase volado, pirinola, etc.

Dentro de ese paquete vamos  a insertar la clase padre y la clase hija.

Y escribimos el siguiente código:

package utags.utilities.random;

import java.util.Random;

/**
*
* @author MIGUEL.ARAUJO
*/
public abstract class Dado {

private int valor;

public int getValor() {

return valor;

}

public void setValor(int valor) {

this.valor = valor;

}

public abstract void mostrar();

public abstract void animacion();

public void generarValor(){

Random valorale = new Random();
setValor(valorale.nextInt(7));

}

}

Aquí tenemos el método generarValor() y el atributo valor que servirán para todas las clases hijas,  y los métodos mostrar() y animacion() que serán particulares para las clases hijas, por ello son métodos abstractos.

Ahora insertamos la clase hija DadoConsola.

package utags.utilities.random;

/**
*
* @author MIGUEL.ARAUJO
*/
public class DadoConsola extends Dado{

@Override
public void mostrar() {

switch(this.getValor()){
case 1:

System.out.println(” ___”);
System.out.println(“| |”);
System.out.println(“| * |”);
System.out.println(“|___|”);
break;

case 2:

System.out.println(” ___”);
System.out.println(“| * |”);
System.out.println(“| |”);
System.out.println(“|_*_|”);
break;

case 3:

System.out.println(” ___”);
System.out.println(“| * |”);
System.out.println(“| * |”);
System.out.println(“|_*_|”);
break;

case 4:

System.out.println(” ___”);
System.out.println(“|* *|”);
System.out.println(“| |”);
System.out.println(“|*_*|”);
break;

case 5:

System.out.println(” ___”);
System.out.println(“|* *|”);
System.out.println(“| * |”);
System.out.println(“|*_*|”);
break;

case 6:

System.out.println(” ___”);
System.out.println(“|* *|”);
System.out.println(“|* *|”);
System.out.println(“|*_*|”);
break;

default:

System.out.println(“El valor no especificado”);
break;

}
//throw new UnsupportedOperationException(“Not supported yet.”); //To change body of generated methods, choose Tools | Templates.

}

@Override
public void animacion(){

for (int i = 0; i < 29; i++) {
System.out.print(“.”);
retardo(300);
}
System.out.println(“”);

}

private void retardo(int milis){

try{
Thread.sleep(milis);
}
catch(InterruptedException ex){}

}

}

Aquí es donde desarrollamos los métodos abstractos de la clase padre, haciendo una representación del Dado y una “animación” de cuando se tiran los dados.

Por último el código para probar las clases.

import utags.utilities.random.DadoConsola;

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author MIGUEL.ARAUJO
*/
public class TestDado {

public static void main(String args[]){

DadoConsola dado1 = new DadoConsola();
DadoConsola dado2 = new DadoConsola();
System.out.println(“Lanzando los dados”);
dado1.generarValor();
dado2.generarValor();
dado1.animacion();
dado1.mostrar();
dado2.mostrar();

}

}

Les dejo una corrida del test.

Continuamos…

Profesor Miguel Araujo.

Deja un comentario