C++ Disponemos de las siguientes clases: class Excepcion{ public: const char *mensaje(){ return "¡Excepción!"; } }; class Etiquetado{ public: virtual double etiqueta(){ return 0; } }; Tabla ? + Tabla( tam ) + elementoEn( pos ) + hayElementoEn( pos ) + eliminaElementoEn( pos ) + insertaElementoEn( el, pos ) Tabla( tam ): Construye un nuevo objeto Tabla con capacidad máxima de tam elementos. NOTAS: - - elementoEn( pos ): Devuelve el elemento en la posición pos. Si no hay un elemento en dicha posición, devuelve NULL. - hayElementoEn( pos ): Devuelve true si hay un elemento en la posición pos y false en caso contrario. - El tamaño máximo se fija en el constructor. No se considerará correcto utilizar un tamaño máximo arbitrario para las estructuras de almacenamiento. Todos los métodos comprobarán que se está accediendo a una posición válida de la tabla con el parámetro pos. En caso contrario, se lanzará una excepción. Usted deberá tomar las decisiones oportunas sobre los tipos devueltos por los métodos y los tipos de los parámetros de entrada. Si es necesario, programe el destructor apropiado. eliminaElementoEn( pos ): Elimina de la tabla el elemento en la posición pos. En caso de que no hubiera elemento en esa posición, no hace nada. insertaElementoEn( el, pos ): Inserta el elemento el en la posición pos de la tabla. - Programe la clase EnteroEtiquetado, que se construye con un valor entero que será el valor de su etiqueta y que, a su vez, se pueda usar como un Etiquetado simple. Programe la clase Tabla. ¡Tenga en cuenta las notas! Haga un pequeño programa de ejemplo usando la clase que usted programó que cree una tabla de 10 elementos y la rellene con EnterosEtiquetados del 0 al 9 y luego haga otro recorrido mostrando los valores de las etiquetas de los EnterosEtiquetados almacenados. #include <cstdlib> #include <iostream> using namespace std; class Excepcion{ public: const char *mensaje(){ return "¡Excepción!"; } }; class Etiquetado{ public: virtual double etiqueta(){ return 0; } }; class EnteroEtiquetado : public Etiquetado{ int x; public: EnteroEtiquetado( int val ){ x=val; } double etiqueta(){ return x; } }; class Tabla{ private: Etiquetado **array; int tam; public: Tabla( int ntam ){ tam = ntam; array = new Etiquetado*[tam]; // Marcamos todo vacío for ( int i=0; i<tam; i++ ){ array[i] = NULL; } } ~Tabla(){ delete [] array; } Etiquetado * elementoEn( int p ) throw (Excepcion){ if ( (p < 0) || (p >= tam) ) throw Excepcion(); return array[p]; } bool hayElementoEn( int p ) throw (Excepcion){ if ( (p < 0) || (p >= tam) ) throw Excepcion(); return array[p] != NULL; } void eliminaElementoEn( int p ) throw (Excepcion){ if ( (p < 0) || (p >= tam) ) throw Excepcion(); array[p] = NULL; } }; void insertaElementoEn( Etiquetado *e, int p ) throw (Excepcion){ if ( (p < 0) || (p >= tam) ) throw Excepcion(); array[p] = e; } int main(int argc, char *argv[]){ Tabla t(10); try{ for ( int i=0; i<10; i++ ){ t.insertaElementoEn( new EnteroEtiquetado(i), i ); } for ( int i=0; i<10; i++ ){ cout << t.elementoEn(i)->etiqueta() << ", "; } cout << "\n"; }catch( Excepcion e ){ cout << "Ocurrió una excepción\n"; } system("PAUSE"); return EXIT_SUCCESS; } Java - Traduzca la clase Excepcion a java cambiando el nombre del método mensaje para que sobrescriba al método toString() de la clase Object Traduzca la clase Tabla y EnteroEtiquetado (suponga que la clase Etiquetado ya está traducida). NOTA: No es necesario que traduzca los métodos eliminaElementoEn ni insertaElementoEn. Traduzca el programa de prueba Señale las principales diferencias conceptuales entre ambas implementaciones. class Excepcion extends Exception{ public String toString(){ return "¡Excepción!"; } } class Etiquetado{ public double etiqueta(){ return 0; } } class EnteroEtiquetado extends Etiquetado{ int x; public EnteroEtiquetado( int val ){ x=val; } public double etiqueta(){ return x; } } class Tabla{ private Etiquetado array[]; private int tam; public Tabla( int ntam ){ tam = ntam; array = new Etiquetado[tam]; // Marcamos todo vacío for ( int i=0; i<tam; i++ ){ array[i] = null; } } public Etiquetado elementoEn( int p ) throws Excepcion{ if ( (p < 0) || (p >= tam) ) throw new Excepcion(); return array[p]; } public boolean hayElementoEn( int p ) throws Excepcion{ if ( (p < 0) || (p >= tam) ) throw new Excepcion(); return array[p] != null; } public void eliminaElementoEn( int p ) throws Excepcion{ if ( (p < 0) || (p >= tam) ) throw new Excepcion(); array[p] = null; } public void insertaElementoEn( Etiquetado e, int p ) throws Excepcion{ if ( (p < 0) || (p >= tam) ) throw new Excepcion(); array[p] = e; } } public class Pregunta3 { public static void main( String args[] ){ Tabla t = new Tabla( 10 ); try{ for ( int i=0; i<10;i++ ){ t.insertaElementoEn( new EnteroEtiquetado( i ), i ); } for ( int i=0; i<10;i++ ){ System.out.print( t.elementoEn(i).etiqueta() + ", " ); } System.out.println(); }catch( Excepcion e ){ System.out.println( e ); } }