Publicado el Deja un comentario

Capitulo 13 Java – Colaboracion entre clases

Capitulo 13  Java – Colaboracion entre clases

Normalmente en un programa de programación orientada a objetos no participa una sola clase, sino que hay muchas clases que dependen unas de otras para hacer soluciones del problema mas pequeñas y unirlas para obtener el completo, tecnica de “divide y venceras”.
Por lo que en este capitulo haremos un programa ejemplo que permita jugar a los dados, en el que se tiran dos dados y si sacan el mismo numero imprima doble.
Lo primero que hacemos es identificar las clases:
Podemos identificar la clase Dado y la clase Juego.
Luego los atributos y los métodos de cada clase:

Dado           
    atributos
        valor
    métodos
        tirar
        imprimir
        devolverValor
 
Juego
    atributos
        2 Dados (2 objetos de la clase Dado)
    métodos
        constructor
        jugar

Creamos un proyecto en Eclipse llamado: Dados y dentro del proyecto creamos dos clases llamadas: Dado y Juego.

Codigo:

public class Dado {
    private int azar;
   
    public void tirar() {
        azar=1+(int)(Math.random()*6);
    }
   
    public void imprimir() {
        System.out.println(“El valor del dado es:”+azar);
    }
   
    public int devolverValor() {
        return azar;
    }
}
 
 
 
 
importjava.util.Scanner;
public class Juego {
    private Dado dado1,dado2;
   
    public Juego () {
        dado1=new Dado();
        dado2=new Dado();   
    }
   
    public void jugar() {
        dado1.tirar();
        dado1.imprimir();
        dado2.tirar();
        dado2.imprimir();
        if (dado1.devolverValor()==dado2.devolverValor()) {
            System.out.println(“Es doble”);
        } else {
            System.out.println(“No es doble”);
        }       
    }
    public static int menu() {
        int opcion;
        System.out.println(” |————————————————-|”);
        System.out.println(” | ~ MENU PRINCIPAL ~ |”);
        System.out.println(” |————————————————-|”);
        System.out.println(” | 1. Tirar dados |”);
        System.out.println(” | 0. Salir de la aplicación |”);
        System.out.println(” |————————————————-|n”);
        System.out.println(“Introduzca la opción que desea:”);
        Scanner teclado = new Scanner (System.in);
        opcion = teclado.nextInt();
        return opcion;
    }
    public static void main(String[] ar){
        int opcion;
        do {
            opcion = Juego.menu();
            switch (opcion) {
            case 1:
                  Juego jue=new Juego ();
                  jue.jugar();
                  break;
            case 0:
                  System.out.println(“Se acabo la partida”);
                  break;
                  default:
                  break;
                  }
                  } while (opcion != 0);
            }
    }

La clase dado define el atributo “valor” donde almacenamos un valor aleatorio que representa el número que sale al tirarlo.

public class Dado {
    private int azar;

El método tirar almacena el valor aleatorio (para generar un valor al azar lo realizamos con random de la clase Math que nos dara un valor  entre 0 y 1, pero nunca 0 o 1. Luego este valor generado multiplicado por 6, incluyendo int para tomar la parte entera y sumandole 1 para que no salga el 0):

    public void tirar() {
        azar=1+(int)(Math.random()*6);
    }

Le sumamos uno ya que puede generar números enteros entre 0 y 5.
El método imprimir de la clase Dado muestra por pantalla el valor del dado:

    public void imprimir() {
        System.out.println("El valor del dado es:"+azar);
    }

Por último el método que devuelve el valor del dado se utiliza para ver si generan el mismo valor, comparando con if (ya visto en otros ejemplos)

    public int devolverValor() {
        return azar;
    }

La clase Juego define dos atributos de la clase Dado, aquí es donde esta la colaboración entre clases.

public class Juego {
    private Dado dado1,dado2;

En el constructor procedemos a crear los dos objetos de la clase Dado:

    public JuegoDeDados() {
        dado1=new Dado();
        dado2=new Dado();      
    }

En el método jugar llamamos al método tirar de cada dado, pedimos que se imprima el valor generado y finalmente procedemos a verificar si es doble o no.

    public void jugar() {
        dado1.tirar();
        dado1.imprimir();
        dado2.tirar();
        dado2.imprimir();
        if (dado1.devolverValor()==dado2.devolverValor()) {
            System.out.println("Es doble");
        } else {
            System.out.println("No es doble");
        }
        }

              
En el main creamos solo un objeto de la clase principal (Juego), en este main o parte principal introduzco un switch para que se le de opcion al usuario a continuar o terminar la aplicación si se pulsa 0. Es un poco repetitivo la aparicion del menú, se podria mejorar, pero es un ejemplo para ver un tipo de eleccion de continuar o finalizar.
El codigo que crea el menú al cual se llama desde el main es:

    public static int menu() {
        int opcion;
        System.out.println(” |————————————————-|”);
        System.out.println(” | ~ MENU PRINCIPAL ~ |”);
        System.out.println(” |————————————————-|”);
        System.out.println(” | 1. Tirar dados |”);
        System.out.println(” | 0. Salir de la aplicación |”);
        System.out.println(” |————————————————-|n”);
        System.out.println(“Introduzca la opción que desea:”);
        Scanner teclado = new Scanner (System.in);
        opcion = teclado.nextInt();
        return opcion;

    }
Que devuelve la opcion elegida.

    public static void main(String[] ar){
        int opcion;
        do {
            opcion = Juego.menu();
            switch (opcion) {
            case 1:
                  Juego jue=new Juego ();
                  jue.jugar();
                  break;
            case 0:
                  System.out.println(“Se acabo la partida”);
                  break;
                  default:
                  break;
                  }
                  } while (opcion != 0);
            }
    }
 

Con esto acabamos este ejemplo sencillo en el que hemos dividido el programa con dos clases.
 

Please follow and like us:

Deja una respuesta