Disponemos de las siguientes clases: class Excepcion{ public: const

Anuncio
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 );
}
}
Descargar