Está en la página 1de 12

2017Parcialsol.

pdf

Carlesmg

Programación

3º Grado en Ingeniería Telemática

Escuela Técnica Superior de Ingeniería


Universitat de València

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.
Alumno: Parcial
Programacion (27-04-2017)

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejercicio 1

1.5 puntos (0.25*4 + 0.5). Contestaciones erróneas restan -0.125.

1. Dado el siguiente código


public c l a s s Sensor {
private int valor ;

public void setValor ( i n t d){


v a l o r= d ;
}
}

p u b l i c c l a s s Test {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

Reservados todos los derechos.


S e n s o r s 1 = new S e n s o r ( ) ;
S e n s o r s 2 = new S e n s o r ( ) ;
S e n s o r s 3 = new S e n s o r ( ) ;

s1 . setValor ( 1 5 0 ) ;
s2 . setValor ( 1 5 0 ) ;
s3 = s2 ;

i f ( s 1 == s 2 ) System . out . p r i n t l n ( ” DOS ” ) ;


i f ( s 1 == s 3 ) System . out . p r i n t l n ( ” TRES ” ) ;
i f ( s 2 == s 3 ) System . out . p r i n t l n ( ” UNO ” ) ;

}
}

Indica qué sacará por pantalla

A DOS TRES UNO


B DOS TRES
C UNO
D DOS

2. Indica si hay error o no, y si hay la causa:

C l a s s Prueba {
Sensor vSensores [ ] ;
v S e n s o r e s [ 0 ] = new S e n s o r ( ) ;
}

A Correcto.
B Falta indicar la cantidad de elementos del vector n=10.
C Falta la inicialización del vector vSensores.
D La posición 0 no existe, la primera posición del vector es 1.

3. Dada una clase Sensor, queremos definir un método para saber si dos Sensores son del mismo
tipo. Indica la signatura más adeucada para definir el método:

A public boolean mismoTipo (Sensor s1, Sensor s2);


B public boolean mismoTipo (Sensor s1);
C public boolean mismoTipo (int tipo1, int tipo2);
D public boolean mismoTipo (int tipo1);

1
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)

4. ¿Qué significa polimorfismo en POO?

A Enviar mensajes sintácticamente iguales a objetos de distintos tipos.


B Enviar mensajes sintácticamente diferentes a objetos del mismo tipo.
C Crear un método con distinto nombre pero con los mismos argumentos.
D Crear un método con el mismo nombre pero con diferentes argumentos.

5. Dado el siguiente código en Java. Corrige los errores sobre el código para que éste sea correcto.
Sabemos que los instrumentos de cuerda frotada se afinan de forma distinta a los de cuerda
pulsada, y qué todos los de la misma familia se afinan igual (por ejemplo todos los de cuerda
pulsada). Sin embargo, la forma de tocar cada tipo de instrumento es propia de cada uno de
ellos. Si se señalan errores incorrectos restan.
public i n t e r f a c e I n s t r u m e n t o {
public void t o c a r ( ) ;
public void a f i n a r ( ) ;

}
public abstract c l a s s I n s t r u m e n t o s C u e r d a s implements I n s t r u m e n t o {
public I n s t r u m e n t o s C u e r d a s ( ) {
}
}

public abstract c l a s s CuerdaFrotada extends I n s t r u m e n t o s C u e r d a s {


public CuerdaFrotada ( ) {
}
public void a f i n a r ( ) {
System . out . p r i n t l n ( ” Afinando c u e r d a f r o t a d a ” ) ;
}
}

public abstract c l a s s CuerdaPulsada extends I n s t r u m e n t o s C u e r d a s {


public CuerdaPulsada ( ) {
}

public void a f i n a r ( ) {
System . out . p r i n t l n ( ” Afinando c u e r d a p u l s a d a ” ) ;
}
}

public c l a s s Piano extends CuerdaPulsada {


public Piano ( ) {}
public void t o c a r ( ) {
System . out . p r i n t l n ( ” Tocando p i a n o ” ) ;
}

public c l a s s V i o l i n extends CuerdaFrotada {


public V i o l i n ( ) {}
public void t o c a r ( ) {
System . out . p r i n t l n ( ” Tocando v i o lı́ n ” ) ;
}
}

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-3768637
Alumno: Parcial
Programacion (27-04-2017)

Ejercicio 2

4 puntos (0.25+0.25+0.25+0.25+0.25+0.75+1.25+0.5+0.25)

El alquiler de material de nieve es un negocio en alza que requiere de un buen control. El


responsable de la estación de La Marcilla necesita diseñar un sistema de gestión que permita alquilar
esquı́es, botas y snowboards. El responsable tiene algunos conocimientos de Java y ha empezado a
diseñar el sistema de gestión de alquiler de la tienda, pero tiene algunas dudas en las que quiere que
le ayudes para tener un buen diseño del sistema.
public i n t e r f a c e MaterialTienda {
double g e t P r e c i o ( ) ;
i n t getCodigo ( ) ;
}

public c l a s s Material {
private int codigo ;
p r i v a t e double p r e c i o ;

p u b l i c Material ( i n t codigo , double p r e c i o ) {


t h i s . codigo = codigo ;
this . precio = precio ;
}
}

p u b l i c c l a s s Bota e x t e n d s M a t e r i a l {
private String t a l l a ;

public String getTalla () {


return t a l l a ;
}
}

p u b l i c c l a s s E squi e x t e n d s M a t e r i a l {
p r i v a t e S t r i n g marca ;
}

p u b l i c c l a s s Snowboard e x t e n d s M a t e r i a l {
private String color ;
}

public class Alquiler {


p r i v a t e S t r i n g nombre ;
f i n a l i n t N=100;
p r i v a t e Vector<M a t e r i a l > m i s M a t e r i a l e s ;
}

1. ¿Qué clase crees que serı́a la más adecuada para implementar los métodos getPrecio y
getCodigo?. Razona tu respuesta. Reescribe dicha clase con los nuevos métodos y los cambios
que consideres oportunos.
La clase Material ya que cualquier material independientemente del tipo que sea tiene un
atributo código y precio, y por tanto, necesitaremos consultarlo.

p u b l i c c l a s s M a t e r i a l impplements M a t e r i a l T i e n d a {
private int codigo ;
p r i v a t e double p r e c i o ;

p u b l i c Material ( i n t codigo , double p r e c i o ) {


t h i s . codigo = codigo ;
this . precio = precio ;
}

p u b l i c double g e t P r e c i o (){
return precio ;
}

p u b l i c i n t getCodigo (){

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-3768637
Parcial Alumno:
Programacion (27-04-2017)

return codigo ;
}
}

2. Escribe el constructor con parámetros para crear un objeto de tipo Bota.


p u b l i c Bota ( i n t c o d i g o , d o u b l e p r e c i o , S t r i n g t a l l a ) {
super ( codigo , p r e c i o ) ;
this . talla = talla ;
}

3. Si tenemos un objeto Bota cuya referencia es miBota creado con el siguiente código. ¿Qué
mensajes le puedes mandar a miBota?.
M a t e r i a l miBota= new Bota ( c o d i g o , p r e c i o , t a l l a ) ;

getPrecio ( ) ;
getCodigo ( ) ;

4. La empresa tiene un nombre y una capacidad máxima de almacenamiento de 100 productos de


cualquiera de los tres tipos que alquila (botas, esquı́es o snowboards). Escribe el constructor
de la clase Alquiler con parámetros.
public Alquiler ( string n) {
nombre= n ;
m i s M a t e r i a l e s= new Vector<M a t e r i a l > ( 1 0 0 ) ;
}

5. Indica todas las formas con las que podemos referenciar a una bota de la tienda de alquiler.
Object
MaterialTienda
Material
Bota

6. Escribe un método en la clase Alquiler en el que a partir de la posición de un elemento del


vector de materiales nos devuelva la talla de la bota si el material es una bota, y en caso
contrario un String vacio.
p ub l ic S tr in g t a l l a B o t a ( i n t i ){}

public String t a l l a B o t a ( i n t i ){

S t r i n g nombre =””;

M a t e r i a l m= m i s M a t e r i a l e s . g e t ( i ) ;

i f (m i n s t a n c e o f Bota )
{
nombre= ( ( Bota ) m) . g e t T a l l a ( ) ;
}

r e t u r n nombre ;
}

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-3768637
Alumno: Parcial
Programacion (27-04-2017)

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
7. Escribe un método insertaMaterial para dar de alta un nuevo material en la tienda. Sabemos
que la capacidad máxima de la tienda es de 100 productos, por tanto si intentamos dar de
alta un producto cuando la tienda ha alcanzado su capacidad máxima de almacenamiento, el
método tiene que lanzar una excepción ExcepcionTiendaLlena.
Escribe también la clase excepción ExcepcionTiendaLlena sabiendo que cuando se lanza una
excepción de esto tipo se manda un mensaje por pantalla indicando que ese material con toda
la información referente a sus atributos no se puede dar de alta en la tienda. A continuación
tienes un ejemplo del mensaje que se la excepción ExcepcionTiendaLlena.
M a t e r i a l [ c o d i g o= 2 9 , p r e c i o= 2 . 4 ] no s e puede a l m a c e n a r .

Definimos la clase excepción ExcepcionTiendaLlena


p u b l i c c l a s s ExcepcionTiendaLlena extends Exception {

Reservados todos los derechos.


p r i v a t e M a t e r i a l mat ;

p u b l i c E x c e p c i o n T i e n d a L l e n a ( M a t e r i a l m) {

t h i s . mat= m;
s u p e r ( ” M a t e r i a l ”+mat+” no s e puede a l m a c e n a r ” ) ;
}

Y, en la clase Alquiler, el método insertaMaterial es el que lanzará una excepción de tipo


ExcepcionTiendaLlena en caso de que la tienda esté a tope de su capacidad.

public class Alquiler {

p u b l i c v o i d i n s e r t a M a t e r i a l ( M a t e r i a l a ) throws E x c e p c i o n T i e n d a L l e n a
{
i f ( m i s M a t e r i a l e s . s i z e ()== m i s M a t e r i a l e s . c a p a c i t y ( ) ) {
throw new E x c e p c i o n T i e n d a L l e n a ( a ) ;
}

m i s M a t e r i a l e s . add ( a ) ;
}
}

8. En la siguiente clase Prueba tenemos el programa principal para dar de alta un producto en
la tienda. Rellena los huecos 1 y 2 para realizar actividad indicada en cada uno de ellos.
p u b l i c c l a s s Prueba {

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

// 1 : Da de a l t a l a Tienda de a l q u i l e r cuyo nombre e s ” Blanca Nieve ” .

A l q u i l e r miTienda= new A l q u i l e r ( ” Blanca Nieve ” ) ;

f o r ( i n t i =0; i < miTienda . c a p a c i d a d T i e n d a ( ) + 1 ; i ++)


{
M a t e r i a l m= new Bota ( i , ( d o u b l e ) i , ” bota”+ i ) ;

// 2 : Da de a l t a e l nuevo m a t e r i a l en l a t i e n d a .

try {
miTienda . i n s e r t a M a t e r i a l (m) ;
} catch ( ExcepcionTiendaLlena e ) {

System . out . p r i n t l n ( e ) ;
}
}

/ / 3 : Mostramos l o s p r o d u c t o s de l a t i e n d a por P a n t a l l a
System . out . p r i n t l n ( ” Mi t i e n d a ” ) ;

5
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)

System . out . p r i n t l n ( miTienda ) ;


}

9. Si queremos que nos salga por pantalla toda la información de los materiales de la tienda de
la siguiente forma
Mi t i e n d a
Material [ c o d i g o =0 , p r e c i o = 0 . 0 ] Bota [ t a l l a=bota0 ]
Material [ c o d i g o =1 , p r e c i o = 1 . 0 ] Bota [ t a l l a=bota1 ]
Material [ c o d i g o =2 , p r e c i o = 2 . 0 ] Bota [ t a l l a=bota2 ]
Material [ c o d i g o =3 , p r e c i o = 3 . 0 ] Bota [ t a l l a=bota3 ]
Material [ c o d i g o =4 , p r e c i o = 4 . 0 ] Bota [ t a l l a=bota4 ]

con la sentencia que tenemos en el código del programa principal.


System . out . p r i n t l n ( miTienda ) ;

Explica qué método/s tendrı́as que implementar y en qué clase/s. No hace falta que escribas
el código.

Tenemos que implementar el método toString que muestra por pantalla la información de un objeto
en la clase Esqui, Bota, y Snowboard para sacar la información propia de cada clase; en la clase
Material para mostrar la información de un material, y en la clase Alquiler para que recorra el
vector y muestre todos los materiales.

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-3768637
Alumno: Parcial
Programacion (27-04-2017)

Ejercicio 3

3 puntos

Tenemos el código en Java de un contenedor de datos ordenados, que es el mismo que habéis
usado en las prácticas. Queremos usar este contenedor ordenado para almacenar los materiales de
la tienda de alquiler de esquı́. Explica qué cambios tienes que realizar en las clases del ejercicio
anterior (alquiler del material de esquı́), y en el programa principal para que los materiales en vez
de guardarse en un Vector de las Collection Framework, se guarden en un ContenedorOrdenado.
Reescribe las partes del código que sufren modificaciones.
import j a v a . u t i l . V e c t o r ;

public c l a s s ContenedorOrdenado <T extends EsComparable <T>>{


private Vector<T> d a t o s ;

/∗ ∗ Construye un Contenedor de d a t o s por d e f e c t o


∗ de 10 e l e m e n t o s
∗/
public ContenedorOrdenado ( ) {
d a t o s= new Vector<T> ( ) ;
}

/∗ ∗
∗ Construye un Contenedor de d a t o s con p a r á m e t r o s de e n t r a d a :
∗ Capacidad i n t
∗ @return
∗/
public ContenedorOrdenado ( i n t cap ) {
d a t o s= new Vector<T>(cap ) ;
}

/∗ ∗
∗ Nos i n d i c a s i e l c o n t e n e d o r e s t a o no l l e n o
∗ @return b o o l e a n
∗/
private boolean c o n t e n e d o r L l e n o ( ) {
i f ( d a t o s . s i z e ()== d a t o s . c a p a c i t y ( ) )
return true ;
else
return f a l s e ;
}
/∗ ∗
∗ Anyade un d a t o ordenado que l e pasamos como parametro a l c o n t e n e d o r
∗ @param d a t o
∗ @return b o o l e a n o : S i s e puede a n y a d i r o no e l d a t o a l c o n t e n e d o r
∗/
public boolean anyadeDatoOrdenado (T dato ) {
boolean ok=f a l s e ;
i n t i =0;

while ( i <d a t o s . s i z e ( ) && ( dato . mayorQue ( d a t o s . elementAt ( i ) ) ) ) {


i ++;
}
d a t o s . add ( i , dato ) ;
ok= true ;

return ok ;
}
/∗ ∗
∗ Metodo para o b t e n e r e l d a t o que e s t á en una d e t e r m i n a d a p o s i c i ó n
∗ @param pos p o s i c i ó n d e l e l e m e n t o que queremos o b t e n e r
∗ @return e l e l e m e n t o que e s t á en e s a p o s i c i ó n
∗/
public T getDatoPos ( i n t pos ) {
T res ;

r e s= d a t o s . elementAt ( pos ) ;

return 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-3768637
Parcial Alumno:
Programacion (27-04-2017)

/∗ ∗
∗ Método para e l i m i n a r un d a t o d e l c o n t e n e d o r
∗ @param d a t o que queremos e l i m i n a r d e l c o n t e n e d o r
∗/
public void e l i m i n a r D a t o (T dato ) {
d a t o s . removeElement ( dato ) ;
}

/∗ ∗
∗ Método que d e v u e l v e e l número de d a t o s a c t u a l e s
∗ e x i s t e n t e s en e l c o n t e n e d o r
∗ @return número de d a t o s d e l c o n t e n e d o r
∗/
public i n t numElementos ( ) {
return d a t o s . s i z e ( ) ;
}

public S t r i n g t o S t r i n g ( ) {
return ” Contenedor [ d a t o s=” + d a t o s + ” ] ” ;
}

/∗ ∗
∗ Método para b u s c a r un d a t o en e l c o n t e n e d o r
∗ @param d a t o a b u s c a r
∗ @return b o o l e a n o i n d i c a n d o s i e l d a t o s e e n c u e n t r a o no en e l c o n t e n e d o r .
∗/
public boolean buscarDato (T dato ) {
boolean e s t a= f a l s e ;

i n t i =0;
while ( ( i <d a t o s . s i z e ( ) ) & & ( ! dato . e q u a l s ( d a t o s . elementAt ( i ) ) ) )
i ++;

// Elemento e s t a en e l v e c t o r
i f ( i <d a t o s . s i z e ( ) )
e s t a= true ;
return e s t a ;
}

/∗ ∗
∗ Método para b u s c a r un d a t o en e l c o n t e n e d o r
∗ @param d a t o a b u s c a r
∗ @return e n t e r o i n d i c a n d o s i l a p o s i c i o n d e l d a t o en e l c o n t e n e d o r , −1 s i no e s t a
∗/
public i n t buscarDatoPos (T dato ) {
i n t pos =−1;

i n t i =0;
while ( ( i <d a t o s . s i z e ( ) ) & & ( ! dato . e q u a l s ( d a t o s . elementAt ( i ) ) ) )
i ++;

// Elemento e s t a en e l v e c t o r
i f ( i <d a t o s . s i z e ( ) )
pos=i ;

return pos ;
}
}

Y la interfaz
/∗ ∗ I n t e r f a z p a r a m e t r i z a d a que implementa l a c l a s e Contenedor
∗ @param <T>
∗/
public i n t e r f a c e EsComparable <T> {
public boolean mayorQue (T dato ) ;
}

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-3768637
Alumno: Parcial
Programacion (27-04-2017)

No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Los cambios se realizan en las clases:

Alquiler En esta clase cambiamos el atributo privado misMateriales que era un vector de ma-
teriales, Vector<Material> misMateriales, por un objeto de tipo ContenedorOrdenado,
ContenedorOrdenado<Material> misMateriales. Esto hace que cambia en el construc-
tor de Alquiler la forma en la que se reserva memoria. En la misma clase, el método
insertaMaterial que añade un material (Material) al Vector ahora tiene que añadir un
objeto Material al ContenedorOrdenado, y por tanto hacer uso de los métodos definidos
en la clase ContenedorOrdenado, usando el método anyadeDatoOrdenado para añadir el
elemento al contenedor. Para comprobar si el contenedor está lleno usaremos el método
contenedorLleno() sustituyendo al método size() de la clase Vector.
public class Alquiler {

p r i v a t e S t r i n g nombre ;

Reservados todos los derechos.


p r i v a t e ContenedorOrdenado<M a t e r i a l > m i s M a t e r i a l e s ;
f i n a l i n t N=5;

p u b l i c A l q u i l e r ( S t r i n g nombre ) {
t h i s . nombre= nombre ;
m i s M a t e r i a l e s= new ContenedorOrdenado<M a t e r i a l >(N ) ;

p u b l i c i n t capacidadTienda () {
r e t u r n N;
}

// I n c o r p o r a a l v e c t o r un m a t e r i a l a l q u i l a d o
p u b l i c v o i d i n s e r t a M a t e r i a l ( M a t e r i a l a ) throws E x c e p c i o n T i e n d a L l e n a
{
i f ( misMateriales . contenedorLleno ( ) ) {
throw new E x c e p c i o n T i e n d a L l e n a ( a ) ;
}
m i s M a t e r i a l e s . anyadeDatoOrdenado ( a ) ;
}

Material Los objetos de esta clase son los que guardamos en la clase contenedora ContenedorOrdenado,
y, es por tanto, esta clase la que tiene que implementar la interfaz parametrizada EsComparable<Material>
que le obliga a implementar el método boolean mayorQue(Material dato). Si observamos
el código de la clase ContenedorOrdenado, en el método buscarDato hace uso del método
boolean equals(Object o). Por lo tanto, la clase Material está obligada a implementar
dicho método.
public c l a s s Material implements M a t e r i a l T i e n d a , EsComparable<M a t e r i a l >{
p u b l i c b o o l e a n mayorQue ( M a t e r i a l dato ) {
i f ( c o d i g o >dato . g e t C o d i g o ( ) )
return true ;
else
return f a l s e ;
}

p u b l i c b o o l e a n e q u a l s ( M a t e r i a l dato ) {
i f ( c o d i g o== dato . g e t C o d i g o ( ) )
return true ;
else
return f a l s e ;
}
}

9
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)

Ejercicio 4

1.5puntos (0.5*3)

Proporciona la sentencia completa que construye flujos con la funcionalidad especificada:

1. Se deseen leer tipos primitivos almacenados en un fichero binario cuyo nombre es ”datos2.txt”,
usando un buffer intermedio para mejorar la velocidad de lectura.
DataInputStream i n 1 = new DataInputStream (new B u f f e r 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 ( ” d a t o s 2 . t x t ” ) ) ) ;

2. Se desea guardar en un fichero binario ”datos.bin” los datos existentes en la dirección de


memoria datos byte a byte.
OutputStream out = new F i l eO u t p u t S t r e a m ( ” d a t o s . b i n ” ) ;

3. Se deseean leer los caracteres de un fichero de texto llamado ”palabras.txt”.


F i l e R e a d e r f r = new F i l e R e a d e r ( ” p a l a b r a s . 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 ” ) ) ;

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-3768637

También podría gustarte