miércoles, 2 de octubre de 2013

Clase Circulo - II

La sentencia 4 (public static final double pi=3. 14159265358979323846,-) define también una variable static. pero contiene una palabra nueva: final. Una variable final tiene como característica el que su valor 110 puede ser modificado, o lo que es lo mismo, es una constante. Es muy lógico definir el número n como constante, y también es razonable que sea una constante static de la clase Circulo, de forma que sea compartida por todos los métodos y objetos que se creen. La sentencia 5 (public double x, y, r,-) define las variables miembro ele objeto, que son las coordenadas del centro y el radio del círculo.

La sentencia 6-9 define el constructor general de la clase Circulo. E11 este caso tiene una peculiaridad y es que el nombre de los argumentos (x, y, /•) coincide con el nombre de las variables miembro. Esto es un problema, porque como se verá más adelante los argumentos de un método son variables locales que sólo son visibles dentro del bloque {...} del método, que se destruyen al salir del bloque y que ocultan otras variables de ámbito más general que tengan esos mismos nombres. E11 otras palabras, si en el código del constructor se utilizan las variables (x, j. /•) se está haciendo referencia a los argumentos del método y 110 a las variables miembro. La sentencia 7 indica cómo se resuelve este problema. Para cualquier método no static de una clase, la palabra this es una referencia al objeto -el argumento implícito- sobre el que se está aplicando el método. De esta forma, this.x se refiere a la variable miembro, mientras que .v es el argumento del constructor.
Las sentencias 10-12 representan otros tres constructores de la clase (métodos sobrecargados), que se diferencian en el número y tipo de argumentos. Los tres tienen en común el realizar su papel llamando al constructor general previamente definido, al que se liace referencia con la palabra this (en este caso el significado de this no es exactamente el del argumento implícito). Al constructor de la sentencia 10 sólo se le pasa el radio, con lo cual construye un círculo con ese radio centrado en el origen de coordenadas. Al constructor de la sentencia 11 se le pasa otro objeto de la clase Circulo. del cual saca una copia. El constructor de la sentencia 12 es un constructor por defecto, al que no se le pasa ningún argumento, que crea un círculo de radio unidad centrado en el origen. 
Las sentencias 13 y 14 definen los métodos perimetro() y areaQ. declarados como abstract en la clase Geometría, de modo adecuado para los círculos.
Las sentencias 16-18 definen elMayorQ. que es 1111 método de objeto para comparar círculos.
Uno de los círculos le llega como argumento implícito y el otro como argumento explícito. En la sentencia 17 se ve cómo al radio del argumento implícito se accede en la forma this.r (se podría acceder también simplemente con r. pues no hay ninguna variable local que la oculte), y al del argumento explícito como c.r. donde c es el nombre del objeto pasado como argumento. La sentencia return devuelve una referencia al objeto cuyo radio sea mayor. Cuando éste es el argumento implícito se devuelve this.

Las sentencias 20-22 presentan la definición de otro método elMayorf). que en este caso es un método de clase (definido como static). y por tanto 110 tiene argumento implícito. Los dos objetos a comparar se deben pasar como argumentos explícitos, lo que hace el código muy fácil de entender. Es importante considerar que en ambos casos lo que se devuelve como valor de retomo 110 es el objeto que constituye el mayor círculo, sino una referencia (un nombre, por decirlo de otra forma). 

No hay comentarios:

Publicar un comentario