Programación Orientada a Objetos - Ejercicios y ejemplos de clase

Última modificación: 14/03/12

Ejercicio 1

Partiendo del programa Vector3D.java similar a los ejemplos elaborados en clase:

  1. Añadir (en el mismo fichero) una clase Plano3D con las siguientes operaciones:
  2. Añadir a la clase Vector3D:
  3. Añadir un par de líneas a la función main para probar estas extensiones.

Nota: para el tipo de retorno del método perpendicular, Java tiene un tipo primitivo "boolean".

Solución: Vector3D-v2.java.

Ejercicio 2

  1. Añadir un método a la clase Plano3D que compruebe si es igual a otro plano.
  2. Describir a grandes rasgos (en una o dos frases) qué tipo de variables y llamadas se necesitarían para implementar un programa de dibujo con un comando para calcular el área de una figura seleccionada (ver conceptos.pdf, transparencia 32).

Solución

  1. Vector3D-v3.java.
  2. Se necesitará declarar una variable 'seleccion' (o similar) con la superclase Figura. Se necesitará que cada subclase de Figura implemente su propia versión del método area ( ). Se necesitará que area ( ) esté también declarado en la clase Figura. La llamada 'seleccion.area ( )' se resolverá en tiempo de ejecución directamente mediante ligadura dinámica, de forma que se ejecutará la versión de area ( ) definida en la clase específica del objeto almacenado en 'seleccion' en ese instante. Es probablemente deseable (por complejo e innecesario) no implementar el método area en la clase Figura, lo cual es posible declarándolo como método abstracto, lo que implica que la clase Figura será abstracta. La consecuencia es que no se podrán crear instancias directas de Figura, lo cual en este caso es razonable (normalmente se dibujan siempre figuras de algún tipo contemplado en la aplicación, pero no figuras de tipo indefinido).

Ejercicio 3

¿En qué versiones de Java se introdujeron los siguientes elementos del lenguaje?

Respuesta: Swing y el framework de colecciones se introducen en la JDK 1.2. La clase Console en la 1.6, y el resto de elementos en la 1.5.

Ejemplo 4

Ejecutar el programa Test.java. Observar los resultados y entender bien todos los casos. Probar a introducir variaciones y observar los cambios resultantes.

El ejemplo reúne los diversos casos que pueden darse respecto de la sobreescritura y la sobrecarga, y el efecto de los tipos estáticos y dinámicos.

Ejercicio 5

  1. Sin utilizar ninguna clase del paquete java.util, definir una clase Lista basada en un array que permita guardar una lista de valores de cualquier tipo, con un método para añadir un valor (al final de la lista) y otro para extraer un valor (el último de la lista).
  2. Definir una clase Circulo con centro y radio, y un método que devuelva su área. Utilizando la clase Lista, definir una clase Grupo al que se puedan añadir y eliminar círculos. Definir un método area en esta clase, que devuelva la suma de las áreas de los círculos que contiene.

Nota: además de lo indicado, será útil definir en la clase Lista un método que devuelva el número de valores que contiene, y otro método que devuelva el valor en la posición i-ésima.

Solución: Grupo.java.

Ejercicio 6

  1. Definir una clase Rectangulo con cuatro valores (left, top, witdth, height), y un método que calcule su área.
  2. Generalizar la clase Grupo del ejercicio 4 para que pueda agrupar círculos y rectángulos indistintamente. Generalizar aún más para que un Grupo pueda contener otros Grupos.
  3. Afinar el control de acceso (declaraciones public, private, etc.) de las variables, métodos y clases, para reforzar la separación entre interfaz e implementación de las mismas.
  4. En otra línea, no relacionada con lo anterior: ¿los métodos estáticos tienen ligadura dinámica? ¿Por qué?

Solución

1, 2 y 3 - Grupo-v2.java. Nota: respecto a la pregunta 3, las clases deberían ser públicas, para lo cual deberían separarse en un fichero por clase, con el nombre de ésta.

4 - Los métodos estáticos tienen ligadura estática ya que no acceden a un objeto (ni por tanto a su tipo dinámico), a diferencia de los métodos de instancia.

Ejercicio 7

  1. Mejorar la clase Lista del ejercicio 5 para que permita especificar el tipo de valores que contiene. Utilizar esta nueva versión para mejorar la clase Grupo.
  2. Redefinir la clase Grupo utilizando un ArrayList tipado en lugar de la clase Lista.

Solución

  1. Grupo-v3.java.
  2. Grupo-v4.java.

Ejercicio 8

  1. Utilizando el método Collections.sort ( ), añadir un método ordenar a la clase Grupo del ejercicio 6, que ordene sus figuras por área, de menor a mayor.
  2. Redefinir toString en todas las clases, para facilitar su visualización por pantalla.

Solución: Grupo-v5.java

Ejemplo 9

Ejemplos de interfaz de usuario:

Ejemplo 10

Movimiento de un rectángulo dibujado: Dibujo.java

Ejemplo 11

Soluciones (informales) del control intermedio.

Ejemplo 12

Ejemplos de RMI