Primer Examen Intermedio de La Asignatura Programación Orientada A Objetos
Primer Examen Intermedio de La Asignatura Programación Orientada A Objetos
Primer Examen Intermedio de La Asignatura Programación Orientada A Objetos
4/11/98: Problemas de JAVA 1. Supongamos que vamos a definir una clase llamada Arbol. En esa clase habr un atributo llamado nombre. Convendr definir ese atributo como variable de objeto o como variable de clase? Por qu? (1 punto) 2. Escriba un programa que imprima una etiqueta como la siguiente:
3. 4. 5. 6. 7. 8. ------------------------| Nombre | | Direccin | | Ciudad | | Telfono | -------------------------
con el menor nmero de instrucciones posible (1 punto). 9. La clase Math posee un mtodo esttico sqrt. Escribir una instruccin que asigne a x el valor de la raz cuadrada de
10. 11. 12. 13. 2 b -4ac -----2a
1. (1 punto). 2. x=Math.sqrt((b*b-4*a*c)/(2*a));
3. 4. 5. 6. 7. 2 2.0 3 3.14... 1
(1 punto). 20. Supongamos que una clase contiene las siguientes declaraciones de atributos. Cules de ellas sern rechazadas por el compilador de JAVA? Por qu?
21. 22. int i, j, k; max = 10 ;
double x = 1; double K = 1,000; static int Premio = 50; static int 2doPremio = 25; int horaLocal = 4.30; static double x = 6;
donde cada lnea contiene un nmero, tantos asteriscos como indica el nmero, y un signo +. Para ello se ha escrito el siguiente programa:
int numero; for (numero = 1; numero<5; numero++) System.out.print(numero); for (int aster = 1; aster<numero; aster++) System.out.println(aster); System.out.println('+');
Qu escribira en realidad este programa? Cmo habra que corregirlo para que haga lo que se desea? (2 puntos). 34. Cundo una clase no necesita constructor? (1 punto). 35. Escriba un programa que imprima las dcadas del siglo XX (1900 1910...) en una sola lnea y pase lnea al final. (1 punto).
Soluciones:
8. Como variable de objeto, porque cada objeto tiene un nombre diferente.
9. 10. 11. 12. 13. 14. 15. 16. void print() { System.out.println("---------------"+ "|"+nombre+"|"+ "|"+direccion+"|"+ "|"+ciudad+"|"+ "|"+telefono+"|"+ "---------------"); }
max = 10 ; double K = 1,000; static int 2doPremio = 25; empezar por 2 29. static double x = 6;
30. Ninguno, el interior del bucle no se ejecuta nunca. 31. Tal como est, escribe:
32. 33. 34. 35. 36. 12341 2 3 4 +
41.
2. Escribir un mtodo que realice una bsqueda binaria en una coleccin de datos ordenados. En qu clase debera definirse el mtodo? (5 puntos).
Soluciones:
1.
o o o o o o o o
5 <(#(2 4 6 8 10) at: 3)ifTrue: [1] ifFalse: [0] Resultado: 1 5 <(('abcd' at: 3)< $d ifTrue: [4] ifFalse: [6])ifTrue: [1] ifFalse: [0] Resultado: 0 | x y | x:=0. y:=#(1 3 5 7 9). (y at: 3) to: 2*y size - 1 do: [:i|x:=x+i]. x Resultado: 35 Ningn cambio. Resultado: 5
| x | x:=SortedCollection with: 'abcd' with: 'mnop' with: 'cdef' with: 'cddd'. (x select: [ :i | (i at: 1) = $c ]) asSortedCollection: [ :i :j | i>j]
21. Debera definirse en la clase Array (aunque slo sera aplicable a arrays ordenados), SortedCollection, o un antepasado comn de ambas.
1. Los motores elctricos pueden ser de corriente alterna o continua, aunque algunos funcionan con ambas. Los de corriente alterna pueden ser sncronos o de induccin. Entre los motores elctricos podemos citar los motores sncronos, los motores de induccin, los motores universales y los motores de imn permanente. En el hogar suelen encontrarse motores de induccin y universales. Estos se usan para obtener altas velocidades en mezcladoras o aspiradoras. Funcionan con corriente alterna o continua. Los motores de imn permanente funcionan slo con continua y se encuentran en juguetes. Se pide: Construir un diagrama de clases de motores elctricos, especificando posibles atributos y utilizando herencia mltiple (1 punto). o Modificar el diagrama de clases anterior para eliminar la herencia mltiple. Hay varios modos de hacerlo? (1 punto). 2. Un motor elctrico tiene un control externo que decide cundo debe ponerse en marcha o pararse. El motor dispone de dos bobinas, una de encendido y la otra de marcha. Al ponerse en marcha, las dos bobinas reciben corriente. Cuando el motor entra en rgimen permanente, slo recibe corriente la bobina de marcha. El paso de puesta en marcha a rgimen permanente es controlado automticamente por un sensor interno. El motor contiene tambin un sensor de temperatura que provoca la parada automtica si el motor se sobrecalienta. En este caso, el motor no puede ponerse en marcha de nuevo hasta que se pulse el botn "reset". Se pide:
o o o
Construir el diagrama de estados del motor, incluyendo las actividades realizadas en cada estado. (1 punto). Escribir la lista de los eventos que afectan el funcionamiento del motor. (1 punto).
B) Problemas de SMALLTALK 3. Cul es el resultado de las siguientes expresiones? Si alguna de ellas es incorrecta, corregirla con el nmero mnimo de cambios y decir cul sera entonces el resultado (1 punto).
4. a) (#(1 'abc' #Juan) class with: 2 with: "abcd") at: 2 5. b) (#(1 #(2 3) 4) at: 2) at: 2 + 1 6. c) | x | x:=7. 5 < x ifTrue: [ x < 8 ifTrue: [ x = 6 ifTrue: [ x:=2*x ] 7. ifFalse: [ x:=2*x+1 ]] ifFalse: [ x:=2*x-1 ] ifFalse: [ x=x//2 ] ] 8. d) | x | 9. x:=SortedCollection with: 'abcd' with: 'mncp' with: 'cdcf' with: 'cddd'. 10. x select: [ :i | i at: 3 = $c ] asSortedCollection: [ :i :j | i>j] 11. e) | a b | a:=Array new: 2. a at: 1 put: #('abcd' #(2 3)). 12. b:=Array new: 2. b at: 1 put: 2. b at: 2 put: a at: 1 at: 2. 13. a at: 2 put: b. a
14. Definir una clase Matriz con tres parmetros: filas, columnas, datos. Escribir los mtodos necesarios para que pueda crearse un objeto de clase Matriz (aunque no tenga datos). (1 punto). C) Problemas de JAVA 15. Sea el siguiente programa JAVA:
16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. class TryTry { public static void main(String[] args) { try { if (args.length==0) throw 5; else throw "abcd"; } catch (int n) { System.out.println("Error " + n); } catch (Object o) { System.out.println("Error " + o); } } }
Si este programa es correcto, explicar lo que hace. Si es incorrecto, explicar por qu. (1 punto). 30. Construir un programa que, ejecutado indistintamente como aplicacin o como "applet", escriba "Hola, mundo!" en la pantalla. (1 punto). D) Problemas de C++ 31. Construir un "template" que implemente la clase Bag a la Smalltalk, con los siguientes mtodos: o Un constructor que cree un objeto Bag vaco. o Un destructor que borre el objeto. o Un mtodo "add" que aada un valor nuevo al objeto. o Un mtodo "do" que ejecute una funcin sobre cada elemento y devuelva un objeto del mismo tipo que los contenidos en la bolsa. o Mtodos adicionales al gusto. Se supondr que hay memoria suficiente para todo (no preocuparse de los fallos de memoria). Aadir un programa principal que genere un objeto Bag de enteros e introduzca varios enteros. (2 puntos).
Soluciones:
A) Problemas de anlisis y diseo 1.
o
o o o o o o o o o o o o o o o o o o o
Motor elctrico (voltaje, potencia, velocidad, etc) Motor de corriente alterna ---------> Motor universal (frecuencia, etc) ^ (uso) Motor sncrono | Motor de induccin | (uso) | Motor de corriente continua ----------Motor de imn permanente (induccin magntica, uso)
O bien:
Motor elctrico Motor de corriente alterna Motor sncrono Motor de induccin Motor de corriente continua Motor de imn permanente Motor universal
Eventos:
Pulsacin del control de encendido/apagado Pulsacin del botn de reset Activacin del sensor interno de rgimen permanente Activacin del sensor interno de sobrecalentamiento
B) Problemas de SMALLTALK
3. 4. 5. 6. 7. 8. 9. a) (#(1 'abc' #Juan) class with: 2 with: 'abcd') at: 2 ^ ^ Resultado: 'abcd' b) ((#(1 #(2 3) 4) at: 2) at: 2) + 1 ^ ^ Resultado: 4 c) | x | x:=7. 5 < x ifTrue: [ x < 8 ifTrue: [ x = 6 ifTrue: [ x:=2*x ] 10. ifFalse: [ x:=2*x+1 ]] ifFalse: [ x:=2*x- 1 ] ] ifFalse: [ x:=x//2 ] 11. ^ ^ ^ ^ 12. Resultado: 15
13. d) | x | 14. x:=SortedCollection with: 'abcd' with: 'mncp' with: 'cdcf' with: 'cddd'. 15. (x select: [ :i | (i at: 3) = $c ]) asSortedCollection: [ :i :j | i>=j] 16. ^ ^ ^ ^ 17. Resultado: SortedCollection ('mncp', 'cdcf', 'abcd') 18. e) | a b | a:=Array new: 2. a at: 1 put: #('abcd' #(2 3)). 19. b:=Array new: 2. b at: 1 put: 2. b at: 2 put: ((a at: 1) at: 2). 20. ^^ ^ ^ 21. a at: 2 put: b. a 22. Resultado: Array (('abcd' (2 3)) (2 (2 3)))
23.
24. Variables de objeto: filas, columnas, datos. 25. Mtodo de clase: 26. new: aNumber1 new: aNumber2 27. "Crea una matriz" 28. |x| 29. x:=Matriz new. "Crea el objeto con el constructor por defecto" 30. x new: aNumber1 new: aNumber2. "Lanza el mtodo de objeto" 31. ^x "Devuelve el objeto" 32. Mtodo de objeto: 33. new: aNumber1 new: aNumber2 34. "Asigna valores a las variables de objeto" 35. filas := aNumber1. 36. columnas := aNumber2. 37. datos := Array new: filas. 38. "Da estructura a los datos" 39. 1 to: filas do: [:i|datos at: i put: (Array new: columnas)]
40. C) Problemas de JAVA 41. El programa TryTry es incorrecto porque en JAVA no se pueden lanzar nmeros ni cadenas de caracteres, sino slo objetos descendientes de la clase Throwable.
42. 43. 44. 45. 46. 47. /* Aplicacin/applet */ import java.applet.Applet; import java.awt.Graphics; public class HelloWorld2 extends Applet { public static void main(String[] args) { System.out.println("Hola, Mundo!"); // Display the string 48. } 49. public void paint(Graphics g) { 50. g.drawString("Hola, mundo!", 50, 25); 51. } 52. }
53.