Tablas: un ejemplo de Interfaz en Java

/* Se construye una Interfaz de tipo Tabla que se implementa en 2 clases distintas, una diseñada (Tabla1) para trabajar con tablas de datos generales y la otra (Tabla2) diseñada únicamente para tablas numéricas debido a que permite el cálculo de la traza.  */

 package tablas;

/*
 * @author ARF, RLR
 */

public class Tablas {

    public static void main(String[] args) 
    {
        Integer[][] x = {{1, 2, 3, 4}, {5, 6, 7, 8}, 
                               {9, 10, 11, 12}};
        Integer[][] y = {{1, 2, 3}, {5, 6, 7}, {9, 10, 11}};
        Character[][] z = {{'1', '2'}, {'3', '4'}};

        Tabla1<Integer> t1 = new Tabla1<>(x);
        Tabla2<Integer> t2 = new Tabla2<>(y,"TABLA2");
        Tabla1<Character> t11 = new Tabla1<>(z);
        //Tabla2<Character> t22 = new Tabla2<>(z,"TABLA3"); 
        //ERROR EN TABLA t22 --> VERLO

        //ESCRIBIR TABLA1
        escribeTabla(t1); System.out.println();

        //ESCRIBIR TABLA2
        System.out.println("Tabla " + t2.getNombreTabla() + ": ");
        escribeTabla(t2); 
        System.out.println("Traza: " + t2.getTraza());
        System.out.println();

        //ESCRIBIR TABLA11
        escribeTabla(t11); System.out.println();

    }

    //public static <T> void escribeTabla(Tabla<T> tabla) 
    public static void escribeTabla(Tabla<?> tabla)
    {
        int filas = tabla.getNumFilas();
        int cols = tabla.getNumColumnas();
        for(int i=0; i<filas; i++) 
        {
            for(int j=0; j<cols; j++) 
            {
                System.out.print(tabla.getElemento(i, j) + "  ");
            }
            System.out.println();
        }
    }

}

/*** INTERFAZ ****/
interface Tabla<T> 
{
    int getNumFilas();
    int getNumColumnas();
    T getElemento(int fila, int col);
}

/**** TABLA1 ********/
class Tabla1<T> implements Tabla<T> 
{
    private T[][] elementos = null;

    //CONSTRUCTOR
    public Tabla1(T[][] x) 
    {
        elementos = x;
    }

    // METODOS DEL INTERFAZ TABLA<T>
    @Override
    public int getNumFilas()
    { return elementos.length; }

    @Override
    public int getNumColumnas() 
    {
        if (getNumFilas()==0) return 0;
        else return elementos[0].length;
    }

    @Override
    public T getElemento(int fila, int col) 
    {
        return elementos[fila][col];
    }
}

/**** TABLA2 ********/
class Tabla2<T extends Number> implements Tabla<T> 
{
    private T[][] elementos = null;
    private String nombreTabla = null;

    //CONSTRUCTOR
    public Tabla2(T[][] x, String nombre) 
    {
        elementos = x;
        nombreTabla = nombre;
    }

    //METODOS    
    public String getNombreTabla()
    {
        return nombreTabla;
    }

    public <T extends Number> double getTraza()
    {
        int filas = this.getNumFilas();
        int cols = this.getNumColumnas();

        if(filas != cols) return 0.0;

        double traza = 0.0;
        for(int i=0; i<filas; i++) 
        {
            traza += this.getElemento(i,i).doubleValue();
        }
        return traza;
    }

    // METODOS DEL INTERFAZ TABLA<T>
    @Override
    public int getNumFilas()
    { return elementos.length; }

    @Override
    public int getNumColumnas() 
    {
        if (getNumFilas()==0) return 0;
        else return elementos[0].length;
    }

    @Override
    public T getElemento(int fila, int col) 
    {
        return elementos[fila][col];
    }
}
Esta entrada fue publicada en Ciencia y programación. Guarda el enlace permanente.

2 respuestas a Tablas: un ejemplo de Interfaz en Java

  1. DaniFP dijo:

    Tiienes buenos ejemplos de TAD en este blog, los estoy mirando todos. Gracias, son muy útiles.

  2. Matrix dijo:

    Muy bueno, excelente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s