3
Programaci ´ on Orientada a Objetos Examen final Curso 2004–05 Mi´ ercoles 22 de junio de 2005 1. Indique y d´ e una breve descripci´ on de al menos cuatro ventajas del enfoque orientado a objetos 1,0 p respecto del enfoque estructurado. Adem´ as, describa tambi´ en cuatro limitaciones propias del enfoque orientado a objetos. 2. Se desea implementar en C++ una clase que almacene un diccionario. Esta clase se denomi- 4,0 p nar´ a Diccionario y su representaci´ on interna estar´ a basada en un atributo, una aplicaci´ on o map. Cada elemento de esta aplicaci´ on ser´ a un par de palabras (string); el primer componente del par ser´ a una palabra en un idioma y el segundo ser´ a su correspondiente traducci´ on en otro idioma. a ) Defina un constructor que reciba un nombre de fichero en un string. Ese fichero con- 0,75 p tendr´ a una serie de l´ ıneas compuestas de dos palabras separadas por espacios. El cons- tructor deber´ a leer cada una de esas l´ ıneas e introducir, por cada una de ellas, un par en la aplicaci´ on cuyo primer elemento ser´ a la primera palabra de la l´ ınea y el segundo la segunda palabra de la l´ ınea. Si se le pasa la cadena vac´ ıa como nombre de fichero no a˜ nadir´ a nada a la aplicaci´ on. b ) ¿Qu´ e hay que hacer para que dicho constructor sirva adem´ as de constructor predetermi- 0,25 p nado (para la cadena vac´ ıa) y para que no se realicen conversiones impl´ ıcitas con ´ el? c ) Defina un m´ etodo entradas que devuelva el n´ umero de entradas del diccionario. 0,25 p d ) Defina un m´ etodo introduce que reciba dos string, una palabra y su traducci´ on, e 0,25 p introduzca una nueva entrada en el diccionario. e ) Defina un m´ etodo traduccion que reciba una palabra y devuelve su traducci´ on asociada. 0,50 p Si no se encuentra, devuelve la cadena vac´ ıa. f ) Sobrecargue el operador de ´ ındice para poder acceder al par i-´ esimo del diccionario. Si no 0,50 p se encuentra, devuelve un par de cadenas vac´ ıas. Para realizar este operador le ser´ util la funci´ on gen´ erica de la STL advance que recibe un iterador y un entero, y hace avanzar el iterador tantas posiciones como indique el entero. g ) A continuaci´ on se quiere desarrollar una clase DiccionarioBilingue que implemente 1,5 p un diccionario biling¨ ue a partir de un diccionario simple. Este diccionario biling¨ ue debe permitir realizar consultas en los dos sentidos. Es decir, si el diccionario biling¨ ue es de espa˜ nol e ingl´ es, deber´ ıa dada una palabra inglesa devolver su correspondiente espa˜ nola, y viceversa. ¿Qu´ e relaci´ on podemos establecer entre las clases Diccionario y DiccionarioBilingue para poder implementar la segunda a partir de la primera? Razone la respuesta y escriba todo lo necesario para implementar dicha relaci´ on. Tenga en cuenta que la clase DiccionarioBilingue tiene que tener un constructor, un etodo entradas, un m´ etodo introduce y el operador ´ ındice que act´ uen de la misma forma que los correspondientes en la clase Diccionario. Adem´ as, deber´ a tener dos m´ etodos traduccionDirecta y traduccionInversa que reci- ban una palabra y devuelvan su traducci´ on asociada, cada una en un sentido distinto. Si no se encuentra, devuelven la cadena vac´ ıa. 3. Observe el siguiente programa: 1,5 p 1

jun-05

Embed Size (px)

Citation preview

  • Programacion Orientada a ObjetosExamen final

    Curso 200405 Miercoles 22 de junio de 2005

    1. Indique y de una breve descripcion de al menos cuatro ventajas del enfoque orientado a objetos 1,0 prespecto del enfoque estructurado. Ademas, describa tambien cuatro limitaciones propias delenfoque orientado a objetos.

    2. Se desea implementar en C++ una clase que almacene un diccionario. Esta clase se denomi- 4,0 pnara Diccionario y su representacion interna estara basada en un atributo, una aplicacion omap. Cada elemento de esta aplicacion sera un par de palabras (string); el primer componentedel par sera una palabra en un idioma y el segundo sera su correspondiente traduccion en otroidioma.

    a) Defina un constructor que reciba un nombre de fichero en un string. Ese fichero con- 0,75 ptendra una serie de lneas compuestas de dos palabras separadas por espacios. El cons-tructor debera leer cada una de esas lneas e introducir, por cada una de ellas, un paren la aplicacion cuyo primer elemento sera la primera palabra de la lnea y el segundo lasegunda palabra de la lnea.Si se le pasa la cadena vaca como nombre de fichero no anadira nada a la aplicacion.

    b) Que hay que hacer para que dicho constructor sirva ademas de constructor predetermi- 0,25 pnado (para la cadena vaca) y para que no se realicen conversiones implcitas con el?

    c) Defina un metodo entradas que devuelva el numero de entradas del diccionario. 0,25 p

    d) Defina un metodo introduce que reciba dos string, una palabra y su traduccion, e 0,25 pintroduzca una nueva entrada en el diccionario.

    e) Defina un metodo traduccion que reciba una palabra y devuelve su traduccion asociada. 0,50 pSi no se encuentra, devuelve la cadena vaca.

    f ) Sobrecargue el operador de ndice para poder acceder al par i-esimo del diccionario. Si no 0,50 pse encuentra, devuelve un par de cadenas vacas.Para realizar este operador le sera util la funcion generica de la STL advance que recibe uniterador y un entero, y hace avanzar el iterador tantas posiciones como indique el entero.

    g) A continuacion se quiere desarrollar una clase DiccionarioBilingue que implemente 1,5 pun diccionario bilingue a partir de un diccionario simple. Este diccionario bilingue debepermitir realizar consultas en los dos sentidos. Es decir, si el diccionario bilingue es deespanol e ingles, debera dada una palabra inglesa devolver su correspondiente espanola,y viceversa.Que relacion podemos establecer entre las clases Diccionario y DiccionarioBilinguepara poder implementar la segunda a partir de la primera? Razone la respuesta y escribatodo lo necesario para implementar dicha relacion.Tenga en cuenta que la clase DiccionarioBilingue tiene que tener un constructor, unmetodo entradas, un metodo introduce y el operador ndice que actuen de la mismaforma que los correspondientes en la clase Diccionario.Ademas, debera tener dos metodos traduccionDirecta y traduccionInversa que reci-ban una palabra y devuelvan su traduccion asociada, cada una en un sentido distinto. Sino se encuentra, devuelven la cadena vaca.

    3. Observe el siguiente programa: 1,5 p

    1

  • #include #include using namespace std;

    class Libro {char titulo ;int paginas ;

    public:Libro() : titulo (new char[1]), paginas (0) { titulo = 0; }Libro(const char t, int p) : paginas (p){titulo = new char[strlen(t) + 1];strcpy(titulo , t);

    }Libro() { delete [] titulo ; }void paginas(int p) { paginas = p; }int paginas() const { return paginas ; }char titulo() const { return titulo ; }

    };

    void mostrar(Libro l){ cout

  • class Objeto{public:

    Objeto(char const nombre): nombre (nombre) {cout