Вы находитесь на странице: 1из 6

PATRONES DE DISEÑO

Los patrones de diseño son soluciones reutilizables que se encuentran en los problemas habitualmente. Tienen
Nombre: identifica el problema, Problema: describe la situación y las condiciones en las que es conveniente utilizar,
Solución: describe los elementos del diseño de la solución, Consecuencias: describen las ventajas e inconvenientes
Tipos: estructurales: Separan la interfaz de la implementación. creacionales: Inicialización y configuración de
objetos. comportamiento: describen la comunicación

Patrón factory
Creacional, define una interfaz para la creación de objetos, permitiendo que sean las subclase las que decidan qué clase
necesitan instanciar.

Aplicabilidad: no puede prever la clase de objetos que debe crear o quiere que sean sus subclases quienes especifiquen
los objetos que esta crea.
Consecuencias: Conecta jerarquías de clases paralelas.

Patrón singleton
Creacional, asegura que una clase tiene una única instancia y proporcionar un punto de acceso global a la misma. En Java
se han incluido librerías para dar soporte a este patrón a través de la clase java.util.Observable y la interface
java.util.Observer

Aplicabilidad: La instancia única pueda tener subclases y los clientes deban ser capaces de usar las subclases sin
modificar su propio código.
Consecuencias: El acceso a la instancia de la clase se realiza mediante un método de clase o método estático.

Patrón observer
Comportamiento, define una dependencia de uno-a-muchos entre objetos de forma que, cuando el objeto
observado cambia, se notifica a los objetos observadores.

Aplicabilidad: Un objeto sea capaz de notificar algo a otros sin saber quiénes son esos objetos, una abstracción tiene
dos aspectos, que dependen uno del otro.
Consecuencias: Permite modificar sujetos y observadores de manera independiente.

Patrón composite
Estructural, permite construir objetos compuestos en estructuras en forma de árbol, permitiendo tratar de la misma
manera a los objetos simples y compuestos.

Aplicabilidad: Se desee representar jerarquías de objetos todo-parte.


Consecuencias: Permite que en cualquier parte del código donde se espera un objeto simple, también se pueda recibir
un objeto compuesto.
RELACIONES ENTRE CLASES
Abstracción: En programación orientada a objetos hablamos de abstracción cuando en el proceso de identificación de
clases seleccionamos aquellos atributos y métodos comunes para crear una clase que nos permita generalizar los valores
comunes.

Herencia: Es el proceso por el que una subclase obtiene todos los métodos y atributos de una clase superior. Como se
puede ver, la herencia no puede existir sin la abstracción.

Polimorfismo: El polimorfismo dentro de la programación orientada a objetos es la capacidad que tiene un objeto de
ejecutar un método que cambia de comportamiento dependiendo de cómo se haya realizado la instanciación del mismo.

Agregación: Es un tipo de asociación que indica que una clase es parte de otra más grande, también se llama como
composición débil. La destrucción del objeto compuesto no supone la destrucción de los objetos que la componen.

Composición: Este tipo asociación indica que una clase contenedora contiene elementos más pequeños. Los
componentes forman parte del objeto compuesto. La destrucción del objeto contenedor supone la eliminación de los
objetos que la componen. También se llama agregación fuerte.

La palabra reservada this nos permite acceder a los miembros de la propia clase.
La palabra reservada super nos permite hacer referencia al método o variable de la clase padre.
Test#1
1. ¿Cuál crees que es la mejor descripción de clase?
C. Generalización de las características de elementos que forman parte de un problema.
2. ¿Qué significa instanciar una clase?
D. Crear un objeto.
3. Cuando hablamos de objetos, qué sentencia es verdad:
A. Un objeto se crea siempre a partir de una clase.
4. Si estamos definiendo un problema para gestionar un taller mecánico y decimos que de un coche
queremos guardar su matrícula, kilometraje y cilindrada. ¿A qué nos estamos refiriendo?
A. A los atributos de la clase coche.
5. Los métodos getters se utilizan para:
C. Obtener el valor de los atributos de una clase.
6. Los métodos setters se utilizan para:
B. Asignar el valor a los atributos de una clase.
7. Respecto a los métodos de una clase, ¿qué sentencia es verdad?
A. Los métodos de una clase identifican el comportamiento de la clase.
8. Los constructores
A. Son invocados cuando se crea una clase.
9. En Java:
A. La visibilidad indica desde donde es accesible un atributo.
10. En UML las clases gráficamente:
D. Se pone el nombre y los atributos dentro de un rectángulo.
Test#2
1. En Java la herencia se implementa:
C. Indicando en la clase hija el padre de la que deriva.
2. En Java la herencia múltiple:
A. No existe pero se puede simular.
3. La agregación es:
C. Es la relación que tienen dos clases en las que una clase forma parte de la otra.
4. Para acceder a una clase desde su clase hija utilizamos:
A. El operador super.
5. Para saber si un objeto se ha creado a partir de otra se utiliza:
D. Se utiliza el operador instanceof
6. Las clases abstractas en Java:
C. No pueden ser instanciadas.
7. En UML la herencia se representa:
B. Con un triángulo apuntando a la clase padre.
8. En UML la composición se representa:
C. Con un rombo apuntando a la clase contendora.
9. Los paquetes en Java se utilizan:
A. Para agrupar clases por comportamiento o función.
10. Una clase que hereda de otra:
C. Ve todos los métodos y atributos menos los privados.
Test#3
1. Los patrones de diseño se utilizan para:
A. Se utilizan para solucionar problemas comunes en el desarrollo del software.
2. Los tipos de patrones son:
B. Estructurales, creacionales y de comportamiento.
3. El patrón factory method es de tipo:
A. Creacional.
4. El patrón factory method se utiliza para:
B. Crear objetos dentro de una clase que no sabe qué tipo de objetos debe crear.
5. El patrón singleton es de tipo:
A. Creacional.
6. El patrón singleton se usa para:
A. Asegurar que una clase tiene una única instancia.
7. El patrón observer es de tipo:
D. Comportamiento.
8. El patrón observer se utiliza para:
B. Se utiliza para comprobar si un objeto cambia de estado.
9. Los patrones estructurales se utilizan para:
A. Separan la interfaz de la implementación.
10. Los patrones de comportamiento:
D. Definen las reglas de comunicación de los elementos implicados en un problema.
Test#4
1. Una excepción es:
A. Un suceso en tiempo de ejecución.
2. Dentro del funcionamiento de las excepciones:
B. Pueden ser lanzadas por el usuario.
3. Cuando una sentencia lanza una excepción:
B. El bloque try…catch es obligatorio.
4. Los tipos de excepciones que existen son:
A. Error y Exception.
5. Para poder lanzar una excepción:
A. El objeto debe derivar de la clase Throwable.
6. Las excepciones siempre:
B. Pueden propagarse al objeto que invocó el método que lo ha generado.
7. Un bloque try:
C. Puede tener uno o varios catch.
8. La sentencia finally:
D. Tiene el conjunto de sentencia que se ejecutan siempre que hay una excepción.
9. Viendo el siguiente código ¿existe algún error? try{ }catch(Exception e){ }catch(IOException e){ }
C. El orden de los catch no es correcto.
10. Cuando creamos un bloque try….catch:
A. En los catch se deben poner las capturas de excepciones desde la más específica a la más general.
Test#5
1. Un evento es:
C. Un suceso que ocurre en el sistema.
2. La diferencia entre AWT y SWING es:
C. AWT utiliza código nativo y SWING no.
3. Las interfaces gráficas suelen tener:
A. Un contenedor de primer nivel, componentes de interfaz gráfica y gestión de eventos.
4. Para crear una interfaz gráfica de usuario sobre un Frame hay que:
A. Heredar de la clase JFrame.
5. Para indicar el título de un marco debemos:
B. Indicarlo en el constructor o establecerlo invocando el método setTitle(String Titulo).
6. JDialog se utiliza para:
A. Crear cuadros de diálogo.
7. Para obtener el elemento seleccionado de un ComboBox utilizamos el método:
A. getSelectedItem().
8. Para pedir una cadena de texto al usuario utilizamos:
A. JTextField.
9. Las casillas de verificación
B. Se crean con JCheckBox y pueden tener más de una opción seleccionada.
10. Podemos poner un icono en:
D. Botones, botones de radio, casillas de verificación y etiquetas.
Test#6
1. Para establecer el gestor de posicionamiento en un contenedor se debe:
A. Utilizar el método setLayout.
2. A través del gestor de contenido FlowLayout:
C. Los componentes fluyen de izquierda a derecha.
3. El gestor de contenidos BorderLayout:
C. Divide el contendor en cinco partes, norte, sur, este, oeste y centro.
4. El gestor de contenidos GridLayout:
D. Los componentes se colocan en una rejilla de celdas iguales.
5. El gestor de contenidos BoxLayout:
A. Muestra los componentes en una única fila o columna.
6. Qué afirmación es verdad:
B. Un contenedor solo puede tener un gestor.
7. Que afirmación es correcta:
D. Los eventos siempre tienen una fuente.
8. En Java:
A. Se pueden crear Listener propios.
9. Los adaptadores se utilizan para:
B. Para simplificar la creación de Listener propios.
10. Los adaptadores en Java:
B. Tienen el mismo nombre que el Listener pero con Adapter al final en lugar de Listener.
Test#7
1. Indica cuál de las siguientes afirmaciones es correcta:
B. Un hilo se ejecuta dentro de un programa.
2. Para iniciar la ejecución de un hilo se utiliza el método:
C. start()
3. En la creación de hilos mediante la interfaz Runnable es necesario:
A. Implementar la interfaz en una clase.
4. Indica cuál de las afirmaciones no es correcta:
A. Al constructor de la clase Thread siempre hay que pasarle un argumento.
5. A una sección crítica podrá acceder:
B. Solo un proceso o hilo.
6. Considera el siguiente escenario: dos hilos H1 y H2, y dos recursos R1 y R2. Cada hilo necesita acceder
simultáneamente a los dos recursos. El hilo H1 posee el recurso P1 y el hilo H2 posee el recurso R2. Indica
qué problema se produce:
C. Interbloqueo.
7. Considera el siguiente escenario: tres hilos H1, H2 y H3, que acceden al recurso compartido R1. Si el
recurso R1 se concede a los hilos H1 y H2 alternativamente y se niega el acceso indefinidamente al hilo
H3, ¿qué problema se produce?
A. Inanición.
8. Indica cuál de los siguientes problemas no es necesario controlar cuando los procesos o hilos cooperan
por comunicación:
B. Exclusión mutua.
9. Indica cuál de las afirmaciones es correcta:
A. Los hilos compiten por los recursos cuando no tienen conocimiento del resto de hilos.
B. Los hilos cooperan para compartir recursos cuando tienen un conocimiento indirecto del resto.
C. Los hilos cooperan para compartir recursos cuanto tienen un conocimiento directo del resto.
D. Todas las anteriores son correctas.
10. El paralelismo es:
B. La ejecución simultánea con varios procesadores.
Test#8
1. La planificación de hilos en Java:
C. Es apropiativa por prioridades.
2. El método yield():
B. Cede el control a otro hilo.
3. Un hilo en estado Nuevo:
D. Está inicializado pero no ha llamado al método start().
4. Un hilo puede finalizarse:
A. Al llegar al final del método run().
5. Para obtener la prioridad de un hilo se utiliza el método:
B. getpriority()
6. Señale la afirmación correcta sobre grupos de hilos:
D. Se crean mediante la clase ThreadGroup.
7. Para indicar que un hilo es de tipo de demonio se utiliza el método:
B. setDaemon()
8. Indica cuál de las siguientes afirmaciones es cierta:
C. Un hilo no es ejecutable si está muerto.
9. Indica cuál de las siguientes afirmaciones es falsa:
A. Los hilos pueden ceder el control a hilos con menor prioridad con el método yiedl().
de menor prioridad.
10. Indica cuál de las siguientes afirmaciones es cierta:
B. En Java un hilo ejecutable de más alta prioridad desaloja a los hilos de más baja prioridad.
Test#9
1. Los cerrojos en Java:
D. Se implementan mediante métodos y bloques synchronized.
2. Si un hilo posee el cerrojo de un método:
C. Ningún otro hilo puede ejecutar otro método synchronized del objeto.
3. Un hilo que ha llamado a wait():
B. Es despertado por un hilo que llama a notify().
4. Un hilo que ejecuta un método synchronized:
A. Si no puede continuar, llamará al método wait().
5. Las llamadas a métodos wait() y notify():
B. Deben estar dentro de métodos synchronized.
6. El método notify():
C. Desbloquea un hilo.
7. El método notifyAll():
B. Desbloquea todos los hilos.
8. Un monitor es:
D. Una instancia de una clase con al menos un método synchronized.
9. Un monitor:
A. Es un objeto que implementa del acceso en exclusión mutua a sus métodos.
10. El método notify():
B. No permite indicar que hilo se va a desbloquear.
Test#10
1. En el problema de los filósofos comensales, ¿qué problema se daría si todos los filósofos cogiesen al
mismo tiempo el palillo que se encuentra a su derecha?
B. Interbloqueo.
2. En la solución propuesta al problema de los filósofos comensales, ¿para qué se realiza una llamada a
notifyAll en el método cedePermiso?
C. Para avisar al resto de filósofos, que están esperando, de la liberación del objeto compartido.
3. En el problema de los lectores/escritores, ¿qué situación podríamos evitar si el número de escritores
fuese 1?
D. Ninguna de las anteriores.
4. En la solución propuesta al problema de los productores/consumidores, ¿qué sucedería si no
utilizásemos la variable valueSet?
B. No podríamos garantizar que cuando un consumidor accede al buffer hay datos en él.
5. En el problema de los productores/consumidores, ¿cuántos consumidores pueden acceder
simultáneamente al objeto compartido?:
A. Solo uno.
6. En la solución propuesta al problema de los lectores/escritores, ¿cuándo se despertará un hilo lector
que ha realizado una llamada a wait?
C. Cuando un escritor haga la llamada a notify.
7. En la solución propuesta al problema de los filósofos comensales, ¿para qué se utiliza la variable
private boolean [] comiendo?
A. Para indicar si los filósofos de la mesa están comiendo o no.
8. En el problema de los filósofos comensales, ¿cuáles es el objeto compartido por el que compiten los
filósofos?
D. Los palillos.
9. En el problema de los filósofos comensales, si en la mesa hubiese cinco filósofos, ¿cuál sería el mayor
grado de concurrencia posible?
C. Dos filósofos comiendo.
10. En el problema de los lectores/escritores, si hubiese cinco lectores y cinco escritores, ¿cuál sería el
mayor grado de concurrencia posible?
B. Cinco lectores.
Test#11
1. ¿Cuál de las siguientes afirmaciones es correcta?
B. Las decisiones de diseño de datos de bajos nivel deben dejarse para el final del diseño.
2. El modelado de datos
D. Parte de los diagramas de entidad-relación.
3. El comentario que se utiliza en JavaDoc:
C. Debe comenzar por /** y cada línea del comentario debe estar precedida por *
4. Las etiquetas utilizadas por JavaDoc:
A. Comienzan por @
5. La etiqueta @version:
C. Indica la versión de la clase o método.
6. El diseño del software comprende:
B. Diseño de datos, diseño arquitectónico, diseño de interfaz y diseño procedimental.
7. El diseño de interfaz comprende:
D. Interfaces internas, interfaces externas e interfaz de usuario.
8. Los diagramas de flujo se utilizan en:
A. Diseño procedimental.
9. Respecto a la herramienta JavaDoc, ¿qué afirmación es correcta?
A. Genera documentación en formato HTML a partir de código fuente Java.
B. Las etiquetas se insertan en los comentarios.
C. Los comentarios soportan la incrustación de código HTML estándar.
D. Todas las afirmaciones anteriores son correctas.
10. ¿Cuál de las siguientes afirmaciones es incorrecta?
B. El diseño de pruebas forma parte del diseño del software.
Test#12
1. Las pruebas de caja blanca:
C. Se centran en la estructura del código.
2. La prueba de partición equivalente:
A. Es una prueba de caja negra.
3. Las pruebas de unidad:
C. Suelen utilizar pruebas de caja blanca.
4. Las estructuras de datos se examinan en:
B. Las pruebas de unidad.
5. En la integración ascendente:
B. Se combinan los módulos de bajo nivel en grupos.
6. Las pruebas alfa y beta se utilizan en:
D. Pruebas de validación.
7. En las pruebas de validación se utilizan
A. Pruebas de caja negra.
8. La prueba de rendimiento se realiza en:
C. Pruebas del sistema.
9. La integridad incremental:
B. Prueba pequeños segmentos del programa.
10. Las pruebas de resistencia:
D. Enfrentan a los programas a situaciones anormales.
Test#13
1. En el computó paralelo, ¿qué arquitecturas son más usadas?
C. Procesadores multicore y ordenadores conectados en una red de comunicación.
2. Tipos de memoria usada en una arquitectura paralela:
D. Memoria compartida y distribuida.
3. En una serie de instrucciones, ¿qué operaciones pueden realizarse de manera paralela?
A. Variables independientes.
4. Al usar un método multihilo, ¿qué paquete de Java puede ser utilizado para realizar procesos
paralelos?
B. java.util.concurrency.
5. La interfaz de Executor usa TheadPool para:
D. Gestionar varios hilos de trabajo
6. ¿Qué método asegura que siempre hay un número fijo de subprocesos disponibles para procesar las
tareas?
B. newFixedThreadPool
7. ¿Qué otro método se puede usar en Java para realizar tareas paralelas en un sistema distribuido?
A. Uso de librerías externas para computo paralelo compatibles con el lenguaje de programación.
8. ¿Qué significa MPI?
D. Interfaz de paso de mensajes.
9. ¿Qué ventaja tiene el uso de MPI?
B. La biblioteca es portable y los ordenadores con sistema de memoria distribuida son fáciles de escalar.
10. ¿Qué desventaja tiene el uso de MPI?
C. Difícil programación.