190_seminariogrupal5 (1) poo

3
Departamento de Informática Programación Orientada a Objetos Apellidos, Nombre / GRUPO ____________________________________/______ Examen Junio 2014 1. (2 puntos) Responda a las siguientes preguntas (15 líneas como máximo) a) ¿Qué es el miembro this? Describa las tres situaciones en que se debe utilizar y escriba un pequeño ejemplo de cada una de ellas. b) Clases abstractas: ¿qué son? ¿para qué sirven? ¿cómo se utilizan? 2. (2 puntos) Responda brevemente las siguientes cuestiones (entre 3 y 7 líneas como máximo) a) Explique la diferencia entre una clase y un objeto b) ¿Por qué es (casi siempre) necesario definir expresamente el constructor de copia y el operador de asignación? c) Suponiendo el código del cuadro inferior, explique cómo cambia la visibilidad de los atributos y métodos de la superclase Equipo en las subclases en base al carácter de la herencia (puedes hacer un cuadro resumen) class Equipo { private: std::string nombre; protected: int numJugadores; } class Futbol: public Equipo{}; class Baloncesto: protected Equipo{}; class Tenis: private Equipo{}; d) ¿Cómo se puede comunicar internamente (esto es: sin mostrar mensajes al usuario) un error producido en un constructor, para tratarlo adecuadamente? Pon un ejemplo en código C++ 1/3

Upload: cristobal-romero

Post on 17-Dec-2015

213 views

Category:

Documents


0 download

DESCRIPTION

examen poo

TRANSCRIPT

  • DepartamentodeInformtica

    Programacin Orientada a Objetos

    Apellidos, Nombre / GRUPO

    ____________________________________/______

    Examen Junio 2014 1.(2puntos)Respondaalassiguientespreguntas(15lneascomomximo)

    a) Qu es el miembro this? Describa las tres situaciones en que se debe utilizar y escriba un pequeoejemplodecadaunadeellas.b)Clasesabstractas:quson?paraqusirven?cmoseutilizan?

    2.(2puntos)Respondabrevementelassiguientescuestiones(entre3y7lneascomomximo)

    a)Expliqueladiferenciaentreunaclaseyunobjetob) Por qu es (casi siempre) necesario definir expresamente el constructor de copia y el operador deasignacin?c) Suponiendo el cdigo del cuadro inferior, explique cmo cambia la visibilidad de los atributos y mtodos de la superclase Equipo en las subclases en base al carcter de la herencia (puedes haceruncuadroresumen)

    classEquipo{private:std::stringnombreprotected:intnumJugadores}

    classFutbol:publicEquipo{}classBaloncesto:protectedEquipo{}classTenis:privateEquipo{}

    d) Cmo se puede comunicar internamente (esto es: sin mostrar mensajes al usuario) un error producidoenunconstructor,paratratarloadecuadamente?PonunejemploencdigoC++

    1/3

  • 3. (3 puntos) El Departamento de Informtica ha decidido construir una aplicacin para gestionar repositorios de objetos de aprendizaje. Cada repositorio tiene asociado un nombre y una fecha de creacin, e incluye una coleccin nica de objetos de aprendizaje. Un objeto de aprendizaje puede ser un fichero (de cualquier tipo), una actividad (guardamos solo el nmero de ejercicios que contiene) o un enlace a un recurso web (guardamos su direccin URL). Por motivos de derechos de autor, un objeto de aprendizaje solo puede pertenecer a un repositorio. Cada objeto de aprendizaje lleva asociados un nombre y un peso medido en Kilobytes. El peso de una actividad se calcula como nmero de ejercicios que contiene multiplicado por 0.5KB el de un enlace a un recurso es siempre 0.5KB mientras que el de un fichero es el peso que se le asigne en el constructor. Por motivos de espacio, el peso de un fichero nuncapuedesersuperiora16000KB.

    a) Modele en UML el diagrama de clases detallando la mxima informacin posible sobre atributos (tipos y visibilidad) y relaciones (tipo, nombre, cardinalidad). Refleje cualquier suposicinadicionalquehaga.

    b) Implemente en C++ la representacin (esto es, atributos) de las clases Repositorio, el Objeto de aprendizaje y Actividad. Implementar los mtodos get/set bsicos necesarios de objeto de aprendizajeyactividad.c) Implemente los siguientes mtodos de la clase Repositorio segn las especificaciones del modelo: Constructor de copia de un repositorio Aadir una nueva actividad a un repositorio Obtener el peso total del repositorio (como la suma de los pesos de los objetos de aprendizaje que contiene)

    Nota: en los anteriores apartados implemente cualquier otro mtodo que fuera necesario y detallar cualquiersuposicinqueconsidereoportunoparajustificarsusdecisionesdediseo

    (Elexamencontinapordetrs)

    2/3

  • 4. (1 punto) Este diagrama UML representa un sistema de publicacin y subscripcin de contenidos. El sistema dispone de diferentes canales de contenidos identificados por un ttulo. Para un canal, los usuarios pueden subscribirse para recibir sus contenidos. Cuando se publica un mensaje al canal, se enva a todos los usuarios subscritos utilizando respectivamente su mtodo Usuario::envia(). Los contenidos queseaceptandebenimplementarlainterfazMensaje.

    a) Definir en C++ la clase Canal junto con todos sus atributos necesarios e implementar un constructorparametrizadoquetambinpuedausarsepordefecto.Omitalosmtodosget/set

    b)ImplementardeformainlinelosmtodosCanal::alta(usuario)yCanal::totalUsuarios()5.(2puntos)Sobreelmodelodelejercicio4:

    a) Definir en C++ la Interfaz Mensaje. Definir tambin las clases Noticia y Anuncio (omita los mtodos en la definicin para estas ltimas). Implementar los mtodos de la interfaz para Noticia y Anuncio teniendo en cuenta que en el caso de anuncios, el asunto del mensaje debe tener la formaConsejopublicitariodeyacontinuacinlamarcaquelopatrocina.

    b) Implementar el mtodo Canal::publicar(mensaje), tal y como se indica en el diagrama, de forma que se enve el mensaje indicado a todos los subscriptores del canal. Si el canal es de pago, no se admitir el envo de Anuncios, en cuyo caso se lanzar la excepcin std::invalid_argument juntoconunmensajedescriptivoasociado.

    Nota para ejercicios 4 y 5: Suponer que estn implementados todos los mtodos get y set para los atributos de tipos simples en todas las clases. Implemente cualquier otro mtodo o funcin del cual deba hacerusopararesolverlosmtodosaqusolicitados.

    3/3