El código duplicado es un caso de código sospechoso en el que se aconseja el uso de técnicas de
refactorización para eliminarlo. V F. La existencia de una sólida colección de pruebas unitarias es una precondición fundamental para la
refactorización. V F. “Los métodos que usan referencias a clases base deben ser capaces de usar objetos de clases derivadas
sin saberlo” es una posible formulación del principio de inversión de dependencias. V F. El enlace de la invocación a un método sobrescrito se produce en tiempo de ejecución en función del tipo
del receptor del mensaje. V F. this es un ejemplo de variable polimórfica en Java. V F. En Java el downcasting siempre se realiza en tiempo de ejecución. V F. En Java, un atributo de clase debe declararse dentro de la clase con el modificador static. V F. En Java, gracias a la sobrecarga de operadores podemos crear nuevos operadores en el lenguaje. V F. Si en una clase no se declara, implícita o explícitamente, un constructor por defecto, no se pueden crear
instancias de esa clase. V F. Una de las características básicas de unos lenguajes orientados a objetos es que todos los objetos de la
misma clase pueden recibir los mismos mensajes. V F. La instrucción throw en Java sólo permite lanzar objetos que son instancias de la clase
java.lang.Throwable o de clases derivadas de ésta. V F. En Java, la instrucción throw no se puede usar dentro de un bloque catch. V F. Los métodos genéricos no se pueden sobrecargar ni sobrescribir. V F. Una clase abstracta siempre tiene como clase base una clase interfaz. V F. De una clase abstracta no se
pueden crear instancias, excepto si se declara explícitamente algún constructor. V F. C++ sólo permite heredar cuando la clase hija es un subtipo de la clase padre (herencia como
implementación de la generalización). V F. El constructor de copia permite argumentos tanto por referencia como por valor. V F. El estado de un objeto es el conjunto de valores de los atributos y métodos que han sido invocados sobre
él. V F. En las jerarquías de herencia en C++, si la clase base define un operador de asignación y la clase derivada
no lo redefine, al invocar a dicho operador con objetos de la clase derivada se invocará al código de la clase
base. V F. La herencia es más flexible en cuanto a posibles cambios en la naturaleza de los objetos que la
composición V F. La herencia privada en C++ es un tipo de herencia insegura porque no preserva el principio de
encapsulación. V F. La relación de herencia es una relación de clases no persistente. V F. Un objeto se caracteriza por poseer un estado, un comportamiento y una identidad. V F. Una clase abstracta siempre tiene que tener alguna clase que derive de ella. V F. Tanto la herencia protegida como la privada permiten a una clase derivada acceder a las propiedades
privadas de la clase base V F. Una clase abstracta se caracteriza por no tener atributos. V F. La siguiente clase: class S {public: virtual ~S()=0; virtual void f()=0;}; constituye una interfaz en C++. V F. Desde un método de una clase derivada nunca puede invocarse un método implementado con idéntica
signatura de una de sus clases base. V F. Los métodos con enlace dinámico son abstractos. V F. Los constructores de las clases abstractas son siempre métodos abstractos. V F. Un atributo de clase debe tener visibilidad pública para poder ser accedido por los objetos de la clase. V F. Un método sobrecargado es aquel que tiene más de una implementación, diferenciando cada una por el
ámbito en el que se declara, o por el número, orden y tipo de argumentos que admite. V F. Todo espacio de nombres define su propio ámbito, distinto de cualquier otro ámbito. V F. Un método abstracto es un método con polimorfismo puro. V F. En la sobrecarga de operadores binarios para objetos de una determinada clase, si se sobrecarga como
función miembro, el operando de la izquierda es siempre un objeto de la clase. V F. La genericidad se considera una característica opcional de los lenguajes orientados a objetos. V F. Hablamos de encapsulación cuando diferenciamos entre interfaz e implementación. V F. Una operación de clase no es una función miembro de la clase. V F. Los constructores siempre deben tener visibilidad pública. V F. En C++, si no se captura una excepción lanzada por un método, se produce un error de compilación. V F. En C++, la cláusula throw() tras la declaración de una función indica q ésta no lanza ninguna excepción. V F. Dada una clase genérica, no puede ser utilizada como clase base en herencia múltiple. V F. De una clase interfaz no se pueden crear instancias. De una clase abstracta sí. V F. Cuando usamos la varianza estamos haciendo un uso inseguro de la herencia de implementación. V F. En la sobrecarga de operadores como función miembro, el operando de la izquierda puede ser un objeto
de la clase o cualquier otro tipo de objeto, mientras que en las funciones amigas siempre es un objeto de la
clase. V F. Cuando creamos un objeto en C++ mediante una variable automática el constructor se autoinvoca.
También se autoinvoca el destructor del mismo al salir del ámbito de la función donde se creó. V F. Si para una clase genérica llamada Pila<T> declaramos las siguientes funciones: virtual void apilar(T* pt);
virtual void apilar(T t); En caso de sobrescritura ya que el tipo devuelto es el mismo en ambos métodos. V F. De una clase abstracta se pueden crear referencias a objetos. V F. En un atributo de clase se reserva espacio en memoria para una copia de él por cada objeto de su clase
creado. V F. Declarar un dato miembro de una clase como private indica que sólo puede acceder a ese atributo desde
las funciones miembro de la clase. V F. El polimorfismo debido a la sobrecarga de funciones siempre se da en relaciones de herencia. V F. A los atributos de instancia si son constantes se les asigna su valor inicial fuera de la clase. V F. Toda sentencia que aparece después del punto del programa en el que ocurre una excepción, en ningún
caso se ejecuta. V F. Si utilizamos los mecanismos de manejo de excepciones disminuye la eficiencia del programa incluso si no
se llega a lanzar nunca una excepción. V F. Cuando se captura una excepción y ésta pertenece a una jerarquía de clases, el primer bloque catch debe
comenzar con la clase del nivel más alto de la jerarquía. V F. Hablamos de shadowing cuando el método a invocar se decide en tiempo de compilación. V F. A diferencia de otros lenguajes de programación en C++ la sobreesctritura en relaciones de herencia se
debe indiciar de forma explícita en la clase padre. V F. La encapsulación es un mecanismo que permite separar de forma estricta interfaz e implementación. V F. La interpretación de un mismo mensaje puede variar en función del receptor del mismo y/o del tipo de
información adicional que lo acompaña. V F. Un atributo de clase público puede ser accedido desde fuera de la clase a través de un objeto de la clase,
un puntero o referencia al mismo o mediante el nombre de la clase seguido del operador de ámbito. V F. El recolector de basura es un mecanismo de liberación de recursos presente en todos los lenguajes OO. V F. Es posibles definir un constructor de copia invocando en su cuerpo al operador de asignación. V F. Para que se pueda realizar una herencia múltiple en C++, es necesario que no coincida ninguno de los
nombre de atributo entre las clases bases involucradas. V F. La signatura de tipo de un método incluye el tipo devuelto por el método. V F. En el principio de sustitución implica una coerción entre tipos de una misma jerarquía de clases. V F. En C++, un destructor no puede ser virtual. V F. El puntero this no es una variable polimórfica porque es constante y no se puede cambiar su valor. V F. Las instrucciones para el manejo de excepciones nos permite mezclar el código que describe el
funcionamiento normal de un programa con el código encargado del tratamiento de errores. V F. La herencia de interfaz se implementa mediante herencia pública. V F. Una interfaz no puede tener atributos de instancia. Una clase abstracta si puede tenerlos. V F. No se puede definir un bloque catch sin su correspondiente bloque try. V F. Una variable polimórfica puede hacer referencia a diferentes tipos de objetos en diferentes instantes de
tiempo. V F. El downcasting siempre es seguro. V F. La sobrecarga basada en ámbito permite definir el mismo método en dos clases diferentes. V F. En el diseño mediante tarjetas CRC, utilizamos una tarjeta por cada jerarquía de herencia. V F. Un espacio de nombres es un ámbito con nombre. V F. Un sistema de tipos de un lenguaje asocia a cada tipo una expresión. V F. Hacer que el código sea más fácil de entender no es un motivo suficiente para refactorizarlo. V F. En Java, los tipos genéricos sólo se pueden aplicar a clases e interfaces. V F. En Java, una clase genérica puede ser parametrizada empleado más de un tipo. V F. Sean dos clases Base e Hija. La clase Hija hereda de Base. En Java, cuando asignamos un objeto de la
clase Hija a una referencia a Base haciendo conversión de tipo explícita estamos haciendo object slicing. V F. Una de las principales fuentes de problemas cuando utilizamos herencia múltiple es que las clases bases
hereden de un ancestro común. V F. Los lenguajes de programación soportan el reemplazo y el refinamiento como métodos de
sobrescritura, pero no hay ningún lenguaje que proporcione ambas técnicas (JAVA solo soporta reemplazo
y C++ sólo soporta refinamiento). V F. Una interfaz puede implementar otra interfaz. V F. En java es obligatorio indicar que un método de una clase derivada sobrescribe un método de la clase
base con la misma signatura. V F. En la sobrecarga basada en ámbito los métodos pueden diferir únicamente en el tipo devuelto. V F. En la herencia pública la clase derivada podrá acceder a los atributos privados de la clase base de la que
hereda. V F. Una clase abstracta se caracteriza por no tener ningún constructor. V F. El cambio de una condicional por el uso de polimorfismo es un ejemplo de refactorización. V F. Un atributo siempre tiene visibilidad pública. V F. El principio de segregación de interfaz indica que el código cliente no debe ser forzado a depender de
interfaces que no utilice. V F. El usuario de un framework implementa el comportamiento declarado en los interfaces del framework
mediante herencia de implementación V F.
|