lunes, 7 de octubre de 2013

Clase PanelDibujo - III

El poder utilizar nombres de una super-clase o de una interface permite tratar de un modo unificado objetos distintos, aunque pertenecientes a distintas sub-clases o bien a clases que implementan dicha interface. Esta es la idea en la que se basa el polimorfismo.
Ahora ya se está en condiciones de volver al código del método paintQ. definido en las sentencias 14-22 de la clase PanelDibujo. El método paintQ es un método heredado de Container. que a su vez re-define el método heredado de Component. En la clase PanelDibujo se da una nueva definición de este método. Una peculiaridad del método paintQ es que. por lo general, el programador 110 tiene que preocuparse de llamarlo: se encargan de ello Java y el sistema operativo. 
El programador prepara por 1111a parte la ventana y el panel en el que va a dibujar, y por otra programa en el método paintf) las operaciones gráficas que quiere realizar. El sistema operativo y Java llaman a paintQ cada vez que entienden que la ventana debe ser dibujada o re-dibujada. El único argumento de paintQ es un objeto g de la clase Graphics que. como se ha dicho antes, constituye el contexto gráfico (color de las líneas, tipo de letra, etc.) con el que se realizarán las operaciones de dibujo.


La sentencia 15 (Dibujable dib;) crea una referencia de la clase Dibujable. que como se ha dicho anteriormente, podrá apuntar o contener objetos de cualquier clase que iniplemente dicha interface. La sentencia 16 (iterator it;) crea una referencia a un objeto de la interface Iterator definida en el package java.util. La interface Iterator proporciona los métodos hasNextQ. que chequea si la colección de elementos que se está recorriendo tiene más elementos y nextQ. que devuelve el siguiente elemento de la colección. Cualquier colección de elementos (tal como la clase ArrayList de Java, o como cualquier tipo de lista vinculada programada por el usuario) puede implementar esta interface, y ser por tanto utilizada de un modo uniforme. En la sentencia 17 se utiliza el método iteratorf) de la clase ArrayList (it = v. iterator <);). que devuelve una referencia Iterator de los elementos de la lista v. Obsérvese la diferencia entre el método iteratorf) de la clase ArrayList y la interface Iterator. En Java los nombre sde las clases e interfaces siempre empiezan por mayúscula, mientras que los métodos lo hacen con minúscula. Las sentencias 18-21 representan un bucle while cuyas sentencias -encelladas entre llaves {...}- se repetirán mientras haya elementos en la enumeración e (o en el vector v).
Lo que se acaba de explicar puede parecer 1111 poco complicado, pero es típico de Java y de la programación orientada a objetos. La ventaja del método paintf) así programado es que es absolutamente general: en ningún momento se hace referencia a las clases RectauguloGrafico y CirculoGrafico. cuyos objetos son realmente los que se van a dibujar. Esto permite añadir nuevas clases tales como  TrianguloGrafico. PoligonoGrafico. LineaGrafica. etc.. sin tener que modificar para nada el código anterior: tan sólo es necesario que dichas clases implenienten la interface Dibujable. Esta es una ventaja no pequeña cuando se trata de crear programas extensibles (que puedan crecer), flexibles (que se puedan modificar) y reutilizables (que se puedan incorporal' a otras aplicaciones).

No hay comentarios:

Publicar un comentario