Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Wuolah Free 2016ConvocatoriaJunySol
Wuolah Free 2016ConvocatoriaJunySol
Carlesmg
Programación
Ejercicio 1
Tengo un equipo de Domótica en casa que gestiona distintos tipos de sensores: sensores in-
clinómetros y sensores de Temperatura. Dada la clase Sensor que gestiona cualquier tipo de sensor,
public c l a s s S e n s o r {
private S t r i n g nombre ;
private double v a l o r ;
public S e n s o r ( S t r i n g nom) {
nombre= nom ;
}
public double g e t L e c t u r a ( ) {
return v a l o r ;
}
1. Escribe las clases Inclinometro y Temperatura que son dos clases que representan a tipos
especı́ficos de sensor: sensor inclinómetro y sensor de temperatura respectivamente. En estas
dos clases, la lectura y escritura del dato del sensor se realiza de la misma forma que en
cualquier tipo de sensor, como está ya especificado en la clase Sensor.
SOLUCIÓN
public c l a s s I n c l i n o m e t r o extends S e n s o r {
public I n c l i n o m e t r o ( S t r i n g nombre ) {
super ( nombre ) ;
}
}
2. Indica todas las formas con las que podemos referenciar a un sensor de tipo Inclinometro.
SOLUCIÓN
Inclinometro
Sensor
Object
4. Los sensores pueden dar alguna lectura negativa y en nuestro sistema de domótica, las lec-
turas negativas se consideran lecturas erróneas. Modifica la clase Sensor anterior para poder
controlar las lecturas erróneas mediante excepciones. Escribe una clase nueva si es necesario.
SOLUCIÓN
Necesitamos crear una clase excepción nueva que trate las lecturas erróneas,
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Convocatoria 1 Alumno:
Programacion (14-06-2016)
public c l a s s N e g a t i v o E x c e p c i o n extends E x c e p t i o n {
private double dato ;
public N e g a t i v o E x c e p c i o n ( double x ) {
dato= x ;
}
public double g e t V a l o r ( ) {
return dato ;
}
}
5. Escribe una clase llamada Domotica que gestionará todos los sensores del sistema de domótica
de nuestra casa. La clase almacenará todos los sensores en un vector, tipo Vector<T> de las
Collections Framework. Para gestionar las lecturas positivas y negativas de todos los sensores
la clase tendrá un vector de reales dónde almacenará las lecturas positivas, y otro vector donde
almacenará las lecturas negativas. Atendiendo a estas caracterı́sticas de la clase Domotica
define la clase con sus atributos y un constructor sin parámetros.
SOLUCIÓN
import j a v a . u t i l . V e c t o r ;
public c l a s s Domotica {
private Vector<S e n s o r > m i s S e n s o r e s ;
private Vector<Double> l e c t u r a s P o s i t i v a s ;
private Vector<Double> l e c t u r a s N e g a t i v a s ;
public Domotica ( ) {
m i s S e n s o r e s= new Vector<S e n s o r > ( ) ;
l e c t u r a s P o s i t i v a s= new Vector<Double > ( ) ;
l e c t u r a s N e g a t i v a s= new Vector<Double > ( ) ;
}
}
6. Escribe un método en la clase Domotica que añada un sensor que se le pase como argumento
al vector de sensores de la clase.
SOLUCIÓN
public void a n y a d e S e n s o r ( S e n s o r s ) {
t h i s . m i s S e n s o r e s . addElement ( s ) ;
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Alumno: Convocatoria 1
Programacion (14-06-2016)
try {
double x= m i s S e n s o r e s . g e t ( i ) . g e t L e c t u r a ( ) ;
l e c t u r a s P o s i t i v a s . add ( x ) ;
} catch ( N e g a t i v o E x c e p c i o n ex ) {
l e c t u r a s N e g a t i v a s . add ( ex . g e t V a l o r ( ) ) ;
}
}
}
S e n s o r s 1= new I n c l i n o m e t r o ( ” I n c l i D i g i t a l ” ) ;
S e n s o r s 2= new I n c l i n o m e t r o ( ” I n c l i C a p a c i t i v o ” ) ;
S e n s o r s 3= new Temperatura ( ” A i r e A c o n d i c i o n a d o ” ) ;
miDomotica . a n y a d e S e n s o r ( s 1 ) ;
miDomotica . a n y a d e S e n s o r ( s 2 ) ;
miDomotica . a n y a d e S e n s o r ( s 3 ) ;
miDomotica . b a r r i d o S e n s o r e s ( ) ;
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Convocatoria 1 Alumno:
Programacion (14-06-2016)
Ejercicio 2
Supongamos que tenemos el siguiente código que sólo funciona con tipos de dato int.
public c l a s s Contenedor {
private i n t [ ] d a t o s ;
private i n t n ;
private i n t b u s c a r P o s i c i o n D a t o ( i n t dato ) {
i n t pos ;
i n t i =0;
while ( ( i <n ) && d a t o s [ i ]< dato )
i ++;
i f ( d a t o s [ i ]==dato )
pos=i ;
else
pos =−1;
return pos ;
}
}
1. Modifica y reescribe el código que te damos a continuación para que la clase Contenedor
funcione para cualquier tipo de datos usando tipos parametrizados.
SOLUCIÓN
Parametrizamos la clase y y obligamos a la clase parametrizada que implemente los métodos
definidos en la interfaz.
public i n t e r f a c e EsComparable <T>{
public boolean menorQue (T d a t o s ) ;
private i n t b u s c a r P o s i c i o n D a t o (T dato ) {
i n t pos ;
i n t i =0;
while ( ( i <n ) && d a t o s [ i ] . menorQue ( dato ) )
i ++;
i f ( d a t o s [ i ] . e q u a l s ( dato ) )
pos=i ;
else
pos =−1;
return pos ;
}
2. Queremos usar el contenedor generalizado para guardar sensores de la clase Sensor, escribe la
clase Domotica, indicando atributos y un constructor sin parámetros.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Alumno: Convocatoria 1
Programacion (14-06-2016)
public c l a s s S e n s o r {
private S t r i n g nombre ;
private double l e c t u r a ;
public S e n s o r ( ) {
nombre=” ” ;
}
}
SOLUCIÓN
public c l a s s Domotica {
private Contenedor<S e n s o r > m i s S e n s o r e s ;
public Domotica ( ) {
m i s S e n s o r e s= new Contenedor<S e n s o r >( ) ;
}
3. ¿Qué tienes que cambiar en la clase Sensor para que podamos guardar en el contenedor objetos
de tipo Sensor.
SOLUCIÓN
Obligar a la clase a que implemente la interfaz, definiendo el método menorQue que hemos
definido en la interfaz y redefinir el método equals en la clase Sensor.
public c l a s s S e n s o r implements EsComparable<S e n s o r > {
public boolean menorQue (T dato ) {
// Implementar e l método menorQue para que compare dos s e n s o r e s
public boolean e q u a l s ( O b j e c t o ) {
// Implementar e l método e q u a l s que compara s i dos s e n s o r e s son i g u a l e s
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Convocatoria 1 Alumno:
Programacion (14-06-2016)
Ejercicio 3
Competición (Exclusión mútua) Cuando dos o más tareas comparten variables, queremos que
cada tarea ejecute un conjunto de sentencias como si fuese una operación indivisible o atómica
(de forma que la otra tarea no interfiera), denominándose este conjunto de sentencias sección
crı́tica.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Alumno: Convocatoria 1
Programacion (14-06-2016)
Ejercicio 4
En la práctica 7 implementamos un servidor de hora que ofrece la hora actual a los clientes que
la solicitan. El servidor le manda la hora actual al cliente serializando una instancia del objeto Hora.
La comunicación entre Cliente y Servidor se realiza mediante el protocolo TCP.
La clase Servidor
public c l a s s S e r v i d o r
{
private S e r v e r S o c k e t s e r v e r S o c k e t ;
private I n e t S o c k e t A d d r e s s inboundAddr ;
private Hora hora ;
La clase Hora
public void Hora ( )
{
C a l e nd a r c a l e n d a r i o = C al e n d a r . g e t I n s t a n c e ( ) ;
Escribe el trozo del código del servidor en el que le manda la hora actual al cliente que lo ha
solicitado.
SOLUCIÓN
// Escuchando s o c k e t s de c o n e x i ó n y generamos e l f l u j o de s a l i d a
Socket sock = this . serverSocket . accept ( ) ;
OutputStream oStream = s o c k . getOutputStream ( ) ;
ObjectOutputStream ooStream = new ObjectOutputStream ( oStream ) ;
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Convocatoria 1 Alumno:
Programacion (14-06-2016)
Ejercicio 5
Tenemos un sistema de domótica que controla varios sensores, y queremos que la adquisición de
datos se realice de forma concurrente. Dadas las siguientes clases del sistema de domótica:
public c l a s s S e n s o r {
protected S t r i n g nombre ;
public S e n s o r ( S t r i n g n ) {
t h i s . nombre= n ;
}
}
1. Modifica el código anterior para que se puedan lanzar de forma concurrente el funcionamiento
de un sensor de tipo Temperatura.
SOLUCIÓN
public c l a s s Temperatura extends S e n s o r implements Runnable {
public Temperatura ( S t r i n g n ) {
super ( n ) ;
}
2. En esta simulación del sistema de domótica, lo que realizará cada hilo que se ejecuta es mostrar
por pantalla un mensaje con el nombre del sensor. Escribe el programa principal que lance
cuatro sensores de temperatura distintos según su ubicación de la casa: ”salón”, ”habitación”,
”banyo” y ”cocina”.
SOLUCIÓN
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
t1 . start ();
t2 . start ();
t3 . start ();
t4 . start ();
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Alumno: Convocatoria 1
Programacion (14-06-2016)
Ejercicio 6
1. Se deseen leer tipos primitivos almacenados en memoria (supongamos que la referencia al array
de datos es datos).
SOLUCIÓN
DataInputStream i n 1 = new DataInputStream (new ByteArrayInputStream ( d a t o s ) ) ;
2. Se desean leer un objeto serializado que está guardado en un fichero llamado ”objeto.txt”.
SOLUCIÓN
O b j e c t I n p u t S t r e a m i n 2 = new O b j e c t I n p u t S t r e a m (new F i l e I n p u t S t r e a m ( ” o b j e t o . t x t ” ) ) ;
o
DataInputStream f r = new DataInputStream ( F i l e I n p u t S t r e a m ( ” p a l a b r a s . t x t ” ) ) ;
5. Se desea automatizar la lectura de los tres primeros items items anteriores de forma que se
leen los 3 de forma sequencial en el orden especificado y automáticamente.
SOLUCIÓN
V e c t o r <InputStream> i n p u t s = new V e c t o r <InputStream> ( ) ;
i n p u t s . add ( i n 1 ) ;
i n p u t s . add ( i n 2 ) ;
i n p u t s . add ( i n 3 ) ;
Enumeration <InputStream> enu = i n p u t s . e l e m e n t s ( ) ;
S e q u e n c e I n p ut S t r e a m s e q = new S e q u e n c e I n p u t S t r e a m ( enu ) ;
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Convocatoria 1 Alumno:
Programacion (14-06-2016)
Ejercicio 7
Explica que significa la persistencia en el lenguaje de programación java. Indica qué clases lo
llevan a cabo.
SOLUCIÓN
La persistencia es la posibilidad de guardar un objeto de forma que pueda existir incluso cuando
la aplicación haya finalizado.
En java se consigue con las clases Serializable y Externalizable.
10
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Alumno: Convocatoria 1
Programacion (14-06-2016)
Ejercicio 8
public c l a s s S e n s o r {
private S t r i n g nombre ;
private i n t i d ;
private S t r i n g t i p o ;
public S e n s o r ( S t r i n g n , i n t i , S t r i n g t ) {
nombre = n ;
id = i ;
tipo = t ;
}
public S e n s o r ( ) {
nombre=” ” ;
i d =0;
t i p o=” ” ;
}
}
1. Escribe el código completo de la clase Sensor de forma que cuando se serialicen objetos de
este tipo solo serialice el identificador del sensor. Usa la clase Externalizable para serializar
los objetos.
SOLUCIÓN
public c l a s s S e n s o r implements E x t e r n a l i z a b l e {
private S t r i n g s e n s o r ;
private i n t i d ;
private S t r i n g t i p o ;
2. Escribe el método que hace falta en la clase Sensor para que sea capaz de mostrar por pan-
talla la información de un sensor de la siguiente forma Sensor(nombre, id, tipo) cuando se
ejecute esta sentencia desde el programa principal
S e n s o r mi S en sor ;
System . out . p r i n t l n ( m i Sen sor ) ;
SOLUCIÓN
Reescribir el método String toString()
public c l a s s S e n s o r implements E x t e r n a l i z a b l e {
public S t r i n g t o S t r i n g ( ) {
String res ;
r e s = ” S e n s o r ( ”+nombre+” , ”+i d+” , ”+t i p o+” ) ” ;
return r e s ;
}
}
11
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749
Convocatoria 1 Alumno:
Programacion (14-06-2016)
3. Escribe el main que cree un sensor con nombre ”Temperatura1”, identificador 1 y tipo ”tem-
peratura”, muestre la información del sensor por pantalla, serialice el objeto guardando la
información en un fichero de texto llamado ”sensores.txt”, y posteriormente deserialice el ob-
jeto guardado en el fichero ”sensores.txt”, y lo muestro por pantalla.
SOLUCIÓN
public s t a t i c void main ( S t r i n g [ ] a r g s ) throws IOException , ClassNotFoundException {
S e n s o r s 1 = new S e n s o r ( ” Temperatura1 ” , 1 , ” t e m p e r a t u r a ” ) ;
System . out . p r i n t l n ( ” S e r i a l i z a n d o o b j e t o ” + s 1 ) ;
O b j e c t I n p u t S t r e a m i n = new O b j e c t I n p u t S t r e a m (new F i l e I n p u t S t r e a m ( ” s e n s o r e s . t x t ” ) ) ;
Sensor s1 = ( Sensor ) in . readObject ( ) ;
out . c l o s e ( ) ;
in . close ( ) ;
}
12
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-5226749