domingo, 6 de octubre de 2013

Clase PanelDibujo - II

Las sentencias 2-4 imponan las clases necesarias para construir la clase PanelDibujo. Se importan todas las clases del package java. awt. La clase ArrayList y la interface Iterator pertenecen al package java.util. y sirven para tratar colecciones o conjuntos, en este caso conjuntos de figuras dibujables.

La sentencia 5 indica que la clase PanelDibujo deriva de la clase Panel, heredando de ésta y de sus super-clases Container y Component todas sus capacidades gráficas. La sentencia 7 (prívate ArrayList v;) crea una variable miembro v que es una referencia a un objeto de la clase ArrayList (nótese que no es un objeto, sino una referencia o un nombre de objeto). Las sentencias 9-12 definen el constructor de la clase, que recibe como argumento una referencia va a un objeto de la clase ArrayList. En esta lista estarán almacenadas las referencias a los objetos -rectángulos y círculos- que van a ser dibujados. En la sentencia 10 (super (new FlowLayout o );) se llama al constructor de la super-clase panel, pasándole como argumento un objeto recién creado de la clase FlowLayout. Como se verá más adelante al hablar de construcción de interfaces gráficas con el AWT. la clase FlowLayout se ocupa de distribuir de una deteiminada forma (de izquierda a derecha y de arriba abajo) los componentes gráficos que se añaden a un "container" tal como la clase Panel. En este caso no tiene mucha importancia, pero conviene utilizarlo.
Hay que introducir ahora un aspecto muy importante de Java y. en general, de la programación orientada a objetos. Tiene que ver con algo que es conocido con el nombre de Polimorfismo. La idea básica es que una referencia a un objeto de una determinada clase es capaz de sen-ir de referencia o de nombre a objetos de cualquiera de sus clases derivadas. Por ejemplo, es posible en Java hacer lo siguiente:
Geometría geoml, geom2;
geoml = new RectanguloGrafico(0, 0, 200, 100, Color.red);
geom2 = new CirculoGrafico(200, 200, 100, Color.blue);

Obsérvese que se han creado dos referencias de la clase Geometría que posteriormente apuntan a objetos de las clases derivadas RectauguloGrafico y CirculoGrafico. Sin embargo, hay una cierta limitación en lo que se puede hacer con las referencias geoml y geom2. Por ser referencias a la clase Geometría sólo se pueden utilizar las capacidades definidas en dicha clase, que se reducen a la utilización de los métodos perimetroQ y areaQ.
De la misma forma que se ha visto con la clase base Geometría, en Java es posible utilizar una referencia del tipo correspondiente a una interface para manejar objetos de clases que implementan dicha interface. Por ejemplo, es posible escribir: 
Dibujable dibl, dib2;
dibl = new RectanguloGrafico(0, 0, 200, 100, Color.red);
dib2 = new CirculoGrafico(200, 200, 100, Color.blue);

No hay comentarios:

Publicar un comentario